ROS读IMU数据

现在买到的imu基本把各种系统的代码都配套齐全了,不管是在Windows开发还是Linux,或者ROS,亦或是单片机,都提供了例程了,直接调用就可以了,这里简单说一下ROS怎么调用他们提供的node,常规操作:

  1. 先装对应的ros serial,sudo apt-get install ros-<distro>-serial,具体看看自己ROS是什么版本的,我的是melodic,就输入:sudo apt-get install ros-melodic-serial
  2. 然后imu接上电脑后,看看是那个串口,ls /dev/tty*,在没有接其他USB串口时,一般就是/dev/ttyUSB0,然后就修改商家提供的例程里面的串口编号就行了
    dev
  3. catkin_make后 ,先别急着rosrun,先要授权这个串口,sudo chmod 777 /dev/ttyUSB0
  4. 然后就可以rosrun了,如果想在rviz里面可视化imu的数据,只需要rviz界面左下角add一个imu的功能就行了
    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数据
imu
添加后,设置如下图所示,在Axes properties中,enable axes,就可以看到一个比较平稳的坐标系了

最后效果如下:
display
after_adding_filter

Reference

  1. 使用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
  2. hipnuc CH110:
    https://hipnuc.com/CH110.html
  3. IMU tools for ROS:
    https://github.com/ccny-ros-pkg/imu_tools
  4. http://wiki.ros.org/imu_tools
  5. hipnuc /products :https://github.com/hipnuc/products
  6. CH110 9轴姿态传感器 机器人陀螺仪模块 加速度计: https://item.taobao.com/item.htm?spm=a230r.1.14.16.2fa547f2Sx3JX0&id=629243494058&ns=1&abbucket=6#detail
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值