ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程

文章目录

  • IMU型号及协议
      • 第一步 下载安装 LPsensor library
      • 第二步 设置ROS和carkin工作空间
      • 第三步 下载编译LPMS IMU的ROS驱动
      • 第四步 启动IMU(可能也会遇到问题)
  • 遇到的问题
      • 1.ubuntu14.04LTS下无法运行IMU的问题
      • 2.出现/dev/ttyUSB0 permission denied等问题
  • IMU开发
    • IMU数据显示及类型
    • IMU rviz显示
      • 安装rviz中imu插件
    • IMU 控制turtlesim小乌龟
      • 新建ros包
      • 新建cpp
        • 代码解释:
      • 修改cmakelists.txt
      • 编写launch文件
      • 编译运行

IMU型号及协议

实验室购买的IMU型号为LPMS-CURSLPMS-CURS2
LPMS公司官方没有提供IMU的驱动程序,此驱动程序是由一个实验室做的: Larics laboratory
并且他们写的驱动已经在github上开源!!!

第一步 下载安装 LPsensor library

下载链接:https://lp-research.com/support/

ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程_第1张图片
这里我们选用的是LpSensor-1.3.5 library (Ubuntu Linux 64-bit binary)
下载完成后:
ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程_第2张图片
直接提取到主文件夹

sudo dpkg -i LpSensor-1.3.5-Linux-x86-64/liblpsensor-1.3.5-Linux.deb
dpkg -L liblpsensor

因为买的IMU没有蓝牙链接功能,所以没有安装libbluetooth-dev

第二步 设置ROS和carkin工作空间

如果catkin_ws下有src工作空间,或者之前学过ROS的初级教程,这一步可以跳过
catkin_init_workspace为初始化工作空间命令!

mkdir -p ~/catkin_ws/src    
cd !:2
catkin_init_workspace

第三步 下载编译LPMS IMU的ROS驱动

下载资源来自github
链接为:https://github.com/larics/timesync_ros.git
链接为: https://github.com/larics/lpms_imu.git
下载命令为:

cd ~/catkin_ws/src
git clone https://github.com/larics/timesync_ros.git
git clone https://github.com/larics/lpms_imu.git

编译命令为:

cd ~/catkin_ws
source devel/setup.bash
catkin_make

此时会显示编译成功
若此处有问题,可参考下面遇到的问题或者百度
ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程_第3张图片

第四步 启动IMU(可能也会遇到问题)

采用USB线连接,查看usb端口号,默认条件下为:/dev/ttyUSB0

 ls /dev/ttyUSB*

在这里插入图片描述
首先把将当前工作空间设置在ROS工作环境的最顶层,命令为:

cd ~/catkin_ws/
source devel/setup.bash 

其余命令:
启动ROS

roscore
rosrun rqt_plot rqt_plot
source devel/setup.bash 
rosrun lpms_imu lpms_imu_node

此处可能容易出问题,比如出现/dev/ttyUSB0 permission denied等问题,参考下面
ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程_第4张图片
在rqt_plot的输入框中填入:

/imu/linear_acceleration

ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程_第5张图片

ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程_第6张图片
IMU在ROS可以启用。后续会更新处理数据等问题。

遇到的问题

1.ubuntu14.04LTS下无法运行IMU的问题

ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程_第7张图片
因为CMakelists.txt文件里面的要求C++版本为14。
然而ubuntu14.04支持的GCC版本为4.8.4,不支持C++14,导致编译不通过。ubuntu16.04的GCC版本为5.4.0,支持C++14.
在这里插入图片描述
解决方法:
1.ubuntu14.04升级系统为ubuntu16.04.
2.ubuntu14.04升级GCC版本—5.4.0就可以,不用非要升最高
升级教程:https://blog.csdn.net/answerMack/article/details/88342876

2.出现/dev/ttyUSB0 permission denied等问题

到最后一步了,可是读取不到IMU的数据。
这个问题的参考链接为https://blog.csdn.net/zbrj12345/article/details/79752221

是因为没有权限去读/dev/ttyUSB0的数据。所以可以按照上述的方法。

sudo chmod 777 /dev/ttyUSB0

修改权限为可读可写可执行,但是这种设置电脑重启后,又会出现这种问题,还要重新设置.因此查询资料,可以用下面这条指令:

  sudo usermod -aG dialout username

其中username是用户名,换成自己电脑的用户名即可.
把此用户名加入dialout用户组,然后注销下电脑,即可.这样下次重启也不用修改权限了

IMU开发

IMU数据显示及类型

ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程_第8张图片
在这里插入图片描述
ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程_第9张图片
ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程_第10张图片

IMU rviz显示

安装rviz中imu插件

安装库:https://github.com/ccny-ros-pkg/imu_tools/tree/kinetic
参考教程:http://wiki.ros.org/rviz_imu_plugin
在Global Options里面的Fixed Frame中键入/imu:
按下面设置参数,显示imu:
ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程_第11张图片

IMU 控制turtlesim小乌龟

新建ros包

在/home/ma/catkin_ws1/src下:

catkin_create_pkg imu_turtlesim roscpp std_msgs sensor_msgs tf geometry_msgs

xml文件:
ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程_第12张图片

新建cpp

在/home/ma/catkin_ws1/src/imu_turtlesim/src下:新建imu_turtlesim.cpp:

#include
#include
#include
#include
#include
#include

using namespace std;

class TeleopImu{
public:
  TeleopImu();
private:
  void callBack(const sensor_msgs::Imu::ConstPtr& imu);
  ros::NodeHandle n;
  ros::Publisher pub;
  ros::Subscriber sub;
};



TeleopImu::TeleopImu()
{        
	pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",1);
	sub = n.subscribe<sensor_msgs::Imu>("imu", 10, &TeleopImu::callBack, this);
}



void TeleopImu::callBack(const sensor_msgs::Imu::ConstPtr& imu)
{
	geometry_msgs::Twist vel;
	tf::Quaternion bq(imu->orientation.x,imu->orientation.y,imu->orientation.z,imu->orientation.w);
	double roll,pitch,yaw;
	tf::Matrix3x3(bq).getRPY(roll,pitch,yaw);
	vel.angular.z = roll;
	vel.linear.x = pitch;
	pub.publish(vel);
}

int main(int argc, char** argv)
{
	ros::init(argc, argv, "teleopImu");
	TeleopImu teleop_turtle;
	ros::spin();
}

代码解释:

tf::Quaternion bq(imu->orientation.x,imu->orientation.y,imu->orientation.z,imu->orientation.w);
	double roll,pitch,yaw;
	tf::Matrix3x3(bq).getRPY(roll,pitch,yaw);

命令为四元数转欧拉角

修改cmakelists.txt

添加:

add_executable(imu_turtlesim src/imu_turtlesim.cpp)
target_link_libraries(imu_turtlesim
   ${catkin_LIBRARIES}
 )

编写launch文件

/home/ma/catkin_ws1/src/imu_turtlesim
新建launch文件夹----新建imu_turtlesim.launch

<launch>
	<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
	<node pkg="imu_turtlesim" type="imu_turtlesim" name="imu_turtlesim" />

</launch>

编译运行

roslaunch imu_turtlesim imu_turtlesim.launch

ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程_第13张图片
参考书籍:Learning ROS for Robotics Programming Second Edition

参考教程:
[1]官方链接:https://lp-research.com/ros-and-lp-research-imus-simple/

ubuntu下截图小工具链接教程:https://blog.csdn.net/qq_38880380/article/details/78233687
ctrl+A即可截图,爽歪歪!!!!

你可能感兴趣的:(Ubuntu学习)