3

SLAM从入门到精通(IMU数据的读取)

 11 months ago
source link: https://blog.csdn.net/feixiaoxing/article/details/133310567
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

SLAM从入门到精通(IMU数据的读取)

嵌入式-老费 已于 2023-09-26 19:01:26 修改 89

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        上一篇文章我们说过,对于差速轮来说,旋转的计算很多程度上依赖于theta=tan(theta)这个公式来进行的。但是,我们也知道,如果机器人转弯很快的话,这个公式其实是不成立的。所以,对于旋转这件事情来说,我们能想到的,就是用IMU来对角度来进行补偿和计算的。

c77f4e7dab364424a6789178680ae36d.png

        试想一下,如果在地面上,我们尚可通过电机的编码器数据计算来获取里程计数据信息,那么对于天上的飞机或者其他飞行器来说,就没有这个便利了。这个时候,IMU设备就派上用场了。IMU也称之为陀螺仪,有三轴、六轴、九轴之说。一般三轴IMU包括了三个方向的角度信息;六轴陀螺仪则在三轴的基础上,添加了三个方向的线加速度信息;九轴陀螺仪则在六轴陀螺仪的基础之上,进一步添加了三个方向的磁力计信息。对于速度不是特别高的机器人设备来说,实时获取三个方向的角度信息就可以了,简单处理就是和里程计做一个卡尔曼滤波即可。

1、ros下的imu消息格式

        对于imu来说,我们可以通过index.ros.org网站,借助于关键词sensor_msgs,找到https://github.com/ros/common_msgs这个地址。进一步在sensor_msgs/msg/Imu.msg里面,就可以发现我们想找的信息。

        除了通常的header之外,ros中的imu消息包还有三种数据。orientation是方向信息,不过是用四元数来表示的,orientation_covariance表示方向的协方差。angular_velocity是角速度信息,angular_velocity_covariance是角速度的协方差。linear_acceleration是三个方向的线加速度,linear_acceleration_covariance是线加速度的协方差信息。一般来说,我们用的比较多的是orientation和angular_velocity。

2、编写测试代码imu_node.cpp



newCodeMoreWhite.png

        代码不复杂,主要是订阅/imu/data信息,回调函数是ImuCallback。在ImuCallback函数中,我们获取orientation的四元数信息。如果想要获取yaw信息,则要把quaternion转换成矩阵后,再用getRPY生成。这个时候yaw是弧度信息,如果要直观显示的话,需要进一步转成角度信息。

3、添加CMakeLists.txt内容

4、编译生成imu_node

        编译imu_node的方法很简单,就是直接输入catkin_make即可。

5、开始测试

        测试之前,有几点需要注意。首先,利用roslaunch打开wpb_simple.launch,

roslaunch wpr_simulation wpb_simple.launch

        接着打开imu_node,当然在此之前最好输入./devel/setup.sh,        

rosrun beginner_tutorials imu_node

        这个时候因为机器人还没有旋转,所以imu打印的参数中,都是信息为0。因此,我们可以继续输入rqt命令,让小车转起来,

rosrun rqt_robot_steering rqt_robot_steering

        通过窗口输入旋转的命令,这个时候,就可以看到console的打印命令了,yaw数据也开始发生了变化。这说明我们的imu数据已经被采集到了。

4256de0212fb49fc9c9fbb595d9a6346.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK