现在买到的imu基本把各种系统的代码都配套齐全了,不管是在Windows开发还是Linux,或者ROS,亦或是单片机,都提供了例程了,直接调用就可以了,这里简单说一下ROS怎么调用他们提供的node,常规操作:
- 先装对应的ros serial,
sudo apt-get install ros-<distro>-serial
,具体看看自己ROS是什么版本的,我的是melodic,就输入:sudo apt-get install ros-melodic-serial
- 然后imu接上电脑后,看看是那个串口,
ls /dev/tty*
,在没有接其他USB串口时,一般就是/dev/ttyUSB0
,然后就修改商家提供的例程里面的串口编号就行了
catkin_make
后 ,先别急着rosrun,先要授权这个串口,sudo chmod 777 /dev/ttyUSB0
- 然后就可以rosrun了,如果想在rviz里面可视化imu的数据,只需要rviz界面左下角add一个imu的功能就行了
我这款IMU的代码,有需要的自行下载
2021.06.12 更新
从上述IMU代码中,读取到的是原始未处理的数据,没有方向信息,而且可以看出上面得到的方向信息,抖动很厉害,需要经过滤波和以及合成四元素。
有开源的package,挺好用的,推荐!
package名叫imu_tools
,相关信息可以在参考资料的3和4中查看
1. 安装步骤
① 先git clone 把对应的ROS版本的包下载下来
git clone -b <distro> https://github.com/ccny-ros-pkg/imu_tools.git
把里面的<distro>
换对应的ROS 版本,如melodic或indigo等等
② rosdep install imu_tools
③ rosmake imu_tools
④ sudo apt-get install ros-melodic-imu-tools
这里也是,注意ROS版本
2. 使用imu_tools
① 先打开 ~/imu_tools_ws/src/imu_tools/imu_complementary_filter/src/complementary_filter_ros.cpp
找到里面订阅原始IMU信息的topic,改成我们IMU节点发的topic名
// Register IMU raw data subscriber.
imu_subscriber_.reset(new ImuSubscriber(nh_, ros::names::resolve("imu") + "/data_raw", queue_size));
从上面可以看出,默认使用的名字是/imu/data_raw
,但是我的topic名是IMU_data_raw
所以,把上面这句改成:
imu_subscriber_.reset(new ImuSubscriber(nh_, "/IMU_data_raw", queue_size));
除此之外,还要注意修改fixed_frame,这个看具体情况,修改如下这句即可:
if (!nh_private_.getParam ("fixed_frame", fixed_frame_))
fixed_frame_ = "map";
原始的是odom,我这边是map,就改成了map
② 然后,打开对应的launch文件,在~/imu_tools_ws/src/imu_tools/imu_complementary_filter/launch/complementary_filter.launch
这里要注意,原始的launch文件如下:
<!-- ComplementaryFilter launch file -->
<launch>
#### Nodelet manager ######################################################
<node pkg="nodelet" type="nodelet" name="imu_manager"
args="manager" output="screen" />
#### IMU Driver ###########################################################
<node pkg="nodelet" type="nodelet" name="PhidgetsImuNodelet"
args="load phidgets_imu/PhidgetsImuNodelet imu_manager"
output="screen">
# supported data rates: 4 8 16 24 32 40 ... 1000 (in ms)
<param name="period" value="4"/>
</node>
#### Complementary filter
<node pkg="imu_complementary_filter" type="complementary_filter_node"
name="complementary_filter_gain_node" output="screen">
<param name="do_bias_estimation" value="true"/>
<param name="do_adaptive_gain" value="true"/>
<param name="use_mag" value="false"/>
<param name="gain_acc" value="0.01"/>
<param name="gain_mag" value="0.01"/>
</node>
</launch>
这里如果直接启动这个launch文件会报错的,要把上面没用的去掉,其实,也不是没用,作者的意思就是让我们把IMU的节点加上去,但是很容易搞错,想直接run就改成如下形式就可以了:
<!-- ComplementaryFilter launch file -->
<launch>
#### Complementary filter
<node pkg="imu_complementary_filter" type="complementary_filter_node"
name="complementary_filter_gain_node" output="screen">
<param name="do_bias_estimation" value="true"/>
<param name="do_adaptive_gain" value="true"/>
<param name="use_mag" value="false"/>
<param name="gain_acc" value="0.01"/>
<param name="gain_mag" value="0.01"/>
</node>
</launch>
③ 接着,先启动IMU的代码,如rosrun serial_imu serial_imu
再启动roslaunch imu_complementary_filter complementary_filter.launch
当然,启动前,记得先source devel/setup.bash,声明工作空间。
④ 然后打开rviz
rosrun rviz rviz
⑤ 在rviz里面add这个插件rviz_imu_plugin,会有两个,还有一个角rviz_plugin_tutorials,第一个显示的是经过滤波和合成后的四元数和加速等信息,而第二个用来显示原始imu数据
添加后,设置如下图所示,在Axes properties中,enable axes,就可以看到一个比较平稳的坐标系了
最后效果如下:
Reference
- 使用imu_tools对IMU进行滤波并可视化:
https://blog.csdn.net/qq_43056684/article/details/108812055?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242 - hipnuc CH110:
https://hipnuc.com/CH110.html - IMU tools for ROS:
https://github.com/ccny-ros-pkg/imu_tools - http://wiki.ros.org/imu_tools
- hipnuc /products :https://github.com/hipnuc/products
- CH110 9轴姿态传感器 机器人陀螺仪模块 加速度计: https://item.taobao.com/item.htm?spm=a230r.1.14.16.2fa547f2Sx3JX0&id=629243494058&ns=1&abbucket=6#detail