三位数的IMU长什么样?二位数的呢?不要钱的呢?| 为FishBot配置IMU惯性测量单元

2023-05-16

大家好,我是小鱼,上节课通过配置两轮差速控制器我们已经成功的让fishbot在gazebo中动了起来,本节课我们通过给fishbot的URDF配置IMU传感器插件,让IMU模块工作起来。

1.惯性测量单元IMU介绍

惯性测量单元是测量物体三轴姿态角(或角速率)以及加速度的装置。一般的,一个IMU包含了三个单轴的加速度计和三个单轴的陀螺,加速度计检测物体在载体坐标系统独立三轴的加速度信号,而陀螺检测载体相对于导航坐标系的角速度信号,测量物体在三维空间中的角速度和加速度,并以此解算出物体的姿态。在导航中有着很重要的应用价值。

上面这段话是小鱼从百科中摘抄出来的,你需要知道的一个关键点是IMU可以测量以下三组数据:

  • 三维角度
  • 三维加速度
  • 三维角速度

1.1 IMU长啥样?

便宜的长这样:

图片

贵的长这样:

图片

不要钱的长什么样?

图片

仿真的不要钱哈哈,接着我们来配置一下仿真的IMU。

2.Gazebo-IMU插件介绍

仿真的IMU也是对应一个后缀为.so的动态链接库,使用下面的指令可以查看所有的动态链接库:

ls /opt/ros/foxy/lib/libgazebo_ros*

输出

/opt/ros/foxy/lib/libgazebo_ros2_control.so
/opt/ros/foxy/lib/libgazebo_ros_ackermann_drive.so
/opt/ros/foxy/lib/libgazebo_ros_bumper.so
/opt/ros/foxy/lib/libgazebo_ros_camera.so
/opt/ros/foxy/lib/libgazebo_ros_diff_drive.so
/opt/ros/foxy/lib/libgazebo_ros_elevator.so
/opt/ros/foxy/lib/libgazebo_ros_factory.so
/opt/ros/foxy/lib/libgazebo_ros_force.so
/opt/ros/foxy/lib/libgazebo_ros_force_system.so
/opt/ros/foxy/lib/libgazebo_ros_ft_sensor.so
/opt/ros/foxy/lib/libgazebo_ros_gps_sensor.so
/opt/ros/foxy/lib/libgazebo_ros_hand_of_god.so
/opt/ros/foxy/lib/libgazebo_ros_harness.so
/opt/ros/foxy/lib/libgazebo_ros_imu_sensor.so
/opt/ros/foxy/lib/libgazebo_ros_init.so
/opt/ros/foxy/lib/libgazebo_ros_joint_pose_trajectory.so
/opt/ros/foxy/lib/libgazebo_ros_joint_state_publisher.so
/opt/ros/foxy/lib/libgazebo_ros_node.so
/opt/ros/foxy/lib/libgazebo_ros_p3d.so
/opt/ros/foxy/lib/libgazebo_ros_planar_move.so
/opt/ros/foxy/lib/libgazebo_ros_projector.so
/opt/ros/foxy/lib/libgazebo_ros_properties.so
/opt/ros/foxy/lib/libgazebo_ros_ray_sensor.so
/opt/ros/foxy/lib/libgazebo_ros_state.so
/opt/ros/foxy/lib/libgazebo_ros_template.so
/opt/ros/foxy/lib/libgazebo_ros_tricycle_drive.so
/opt/ros/foxy/lib/libgazebo_ros_utils.so
/opt/ros/foxy/lib/libgazebo_ros_vacuum_gripper.so
/opt/ros/foxy/lib/libgazebo_ros_video.so
/opt/ros/foxy/lib/libgazebo_ros_wheel_slip.so

IMU对应的消息类型为sensor_msgs/msg/Imu

ros2 interface show sensor_msgs/msg/Imu

输出:

# This is a message to hold data from an IMU (Inertial Measurement Unit)

#

# Accelerations should be in m/s^2 (not in g's), and rotational velocity should be in rad/sec

#

# If the covariance of the measurement is known, it should be filled in (if all you know is the

# variance of each measurement, e.g. from the datasheet, just put those along the diagonal)

# A covariance matrix of all zeros will be interpreted as "covariance unknown", and to use the

# data a covariance will have to be assumed or gotten from some other source

#

# If you have no estimate for one of the data elements (e.g. your IMU doesn't produce an

# orientation estimate), please set element 0 of the associated covariance matrix to -1

# If you are interpreting this message, please check for a value of -1 in the first element of each

# covariance matrix, and disregard the associated estimate.

std_msgs/Header header

geometry_msgs/Quaternion orientation
float64[9] orientation_covariance # Row major about x, y, z axes

geometry_msgs/Vector3 angular_velocity
float64[9] angular_velocity_covariance # Row major about x, y, z axes

geometry_msgs/Vector3 linear_acceleration
float64[9] linear_acceleration_covariance # Row major x, y z

可以看到除了每个数据对应的三个协方差之外,每一个还都对应一个3*3的协方差矩阵。

3.给FIshbot配置IMU传感器

有了上节课的经验,我们可以很轻松的添加IMU传感器,但是还有一个需要注意的地方,为了更真实的模拟IMU传感器,我们需要给我们的仿真IMU传感器加点料。

加什么?加点高斯噪声,高斯噪声只需要指定平均值和标准差两个参数即可,不过因为IMU传感器的特殊性,我们还需要给模型添加两个偏差参数,分别是 平均值偏差标准差偏差

有关Gazebo仿真和噪声模型更深入的介绍可以参考小鱼发的两篇推文:

  • Gazebo仿真进阶教程之传感器高斯噪声(一)
  • Gazebo仿真进阶教程之传感器高斯噪声(二)

下面是IMU传感器的URDF配置代码,大家结合文章对应可以理解一下,IMU对应的插件库libgazebo_ros_imu_sensor.so

<gazebo reference="imu_link">
  <sensor name="imu_sensor" type="imu">
  <plugin filename="libgazebo_ros_imu_sensor.so" name="imu_plugin">
      <ros>
        <namespace>/</namespace>
        <remapping>~/out:=imu</remapping>
      </ros>
      <initial_orientation_as_reference>false</initial_orientation_as_reference>
    </plugin>
    <always_on>true</always_on>
    <update_rate>100</update_rate>
    <visualize>true</visualize>
    <imu>
      <angular_velocity>
        <x>
          <noise type="gaussian">
            <mean>0.0</mean>
            <stddev>2e-4</stddev>
            <bias_mean>0.0000075</bias_mean>
            <bias_stddev>0.0000008</bias_stddev>
          </noise>
        </x>
        <y>
          <noise type="gaussian">
            <mean>0.0</mean>
            <stddev>2e-4</stddev>
            <bias_mean>0.0000075</bias_mean>
            <bias_stddev>0.0000008</bias_stddev>
          </noise>
        </y>
        <z>
          <noise type="gaussian">
            <mean>0.0</mean>
            <stddev>2e-4</stddev>
            <bias_mean>0.0000075</bias_mean>
            <bias_stddev>0.0000008</bias_stddev>
          </noise>
        </z>
      </angular_velocity>
      <linear_acceleration>
        <x>
          <noise type="gaussian">
            <mean>0.0</mean>
            <stddev>1.7e-2</stddev>
            <bias_mean>0.1</bias_mean>
            <bias_stddev>0.001</bias_stddev>
          </noise>
        </x>
        <y>
          <noise type="gaussian">
            <mean>0.0</mean>
            <stddev>1.7e-2</stddev>
            <bias_mean>0.1</bias_mean>
            <bias_stddev>0.001</bias_stddev>
          </noise>
        </y>
        <z>
          <noise type="gaussian">
            <mean>0.0</mean>
            <stddev>1.7e-2</stddev>
            <bias_mean>0.1</bias_mean>
            <bias_stddev>0.001</bias_stddev>
          </noise>
        </z>
      </linear_acceleration>
    </imu>
  </sensor>
</gazebo>

将上面的代码加到fishbot_gazebo.urdf中,接着我们就可以进行测试了。

4.编译测试

编译

colcon build

运行

ros2 launch fishbot_description gazebo.launch.py

CLI看话题

ros2 topic list
ros2 topic info /imu

指令

ros2 topic echo /imu

输出:

header:
  stamp:
    sec: 150
    nanosec: 599000000
  frame_id: base_footprint
orientation:
  x: 3.434713830866392e-07
  y: 7.119913105768616e-06
  z: -0.00028312437320413914
  w: 0.9999999598948884
orientation_covariance:
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
angular_velocity:
  x: -0.00013597855247901325
  y: 0.0006306135617081868
  z: -0.00015794894627685146
angular_velocity_covariance:
- 4.0e-08
- 0.0
- 0.0
- 0.0
- 4.0e-08
- 0.0
- 0.0
- 0.0
- 4.0e-08
linear_acceleration:
  x: 0.08679200038530369
  y: 0.07753419258567491
  z: 9.687910969061628
linear_acceleration_covariance:
- 0.00028900000000000003
- 0.0
- 0.0
- 0.0
- 0.00028900000000000003
- 0.0
- 0.0
- 0.0
- 0.00028900000000000003

用rqt可视化:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OWLgyddO-1653598784332)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]

5.总结

本节我们对IMU传感器进行介绍,并通过gazbeo的imu插件完成了fishbot的IMU数据的输出。

最后还有小练习等着你:

  1. 再次启动遥控节点,控制fishbot,观察IMU传感器的数据变化
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

三位数的IMU长什么样?二位数的呢?不要钱的呢?| 为FishBot配置IMU惯性测量单元 的相关文章

  • R3live论文翻译

    摘要 在本文中 xff0c 我们提出了一个新颖的激光惯性视觉传感器融合框架 xff0c 也就是R3live xff1b 它利用了激光雷达 惯性和视觉传感器的测量值 xff0c 可以得到鲁棒和高精度的状态估计 R3live包含了两个子系统 x

随机推荐

  • FAST-LIO2论文翻译

    摘要 本文提出了FAST LIO2 xff1a 一个快速 xff0c 鲁棒和多功能的雷达惯性里程计框架 基于高效的紧耦合的迭代卡尔曼滤波 xff0c FAST LIO2有两个关键的创新点 xff0c 可实现快速 鲁棒和准确的激光导航 xff
  • FAST-LIO论文翻译

    摘要 本文提出了一个计算效率较高和鲁棒的激光 惯性里程计框架 我们使用基于紧耦合的迭代扩展卡尔曼滤波器将LiDAR特征点与IMU数据融合在一起 xff0c 以便在发生退化的快速运动 xff0c 嘈杂或杂乱环境中实现稳健的导航 为了在存在大量
  • Faster-lio论文翻译

    摘要 本文提出了一种基于增量体素的激光惯性里程计 xff08 LIO xff09 方法 xff0c 用于快速跟踪旋转和固态激光雷达 为了实现快速的跟踪速度 xff0c 我们既没有使用复杂的基于树的结构来划分空间点云 xff0c 也没有使用严
  • Cartographer论文翻译(回环)

    摘要 便携式激光测距仪 xff08 也被称为激光雷达 xff09 和同步定位与建图 xff08 SLAM xff09 技术是获取竣工平面图的有效方法 实时生成和可视化平面图有助于操作员评估捕获数据的质量和覆盖范围 构建一个便携式捕获平台需要
  • Ubuntu 还原回默认源

    虽然国内源的速度快很多 xff0c 但是有些软件国内源没有 xff0c 或者版本较旧 xff0c 没有的情况还好 xff0c 会有意识的找原来的源 xff0c 但是如果是版本较旧的 xff0c 安装了以后会导致你陷在版本的坑 xff0c 爬
  • 基于ROS的机械臂手眼标定-Aruco使用与相机标定

    基于ROS的机械臂手眼标定 Aruco使用与相机标定 你好 xff0c 我是小智 折腾了一段时间的机械臂的手眼标定 xff0c 相关资料挺多的 xff0c 但使用起来都比较复杂 xff0c 新手一般比较难搞懂 于是想做一个比较简单易懂易用的
  • 机器人手眼标定原理介绍(含详细推导过程)使用Tsai-Lenz算法

    最近找小鱼问手眼标定的非常多 xff0c 但是小鱼时间有限 xff0c 拉了个小群大家讨论 xff0c 二维码失效可以关注公众号鱼香ROS下方加小鱼好友拉你进群 手眼标定原理及常用算法Tsai Lenz介绍 大家好 xff0c 我是小鱼 上
  • 自制Pixracer自定义IMU传感器飞控

    自制Pixracer自定义IMU传感器四层通孔板飞控 xff0c 板载DC降压 xff1a 飞行演示视频如下链接 xff1a https v youku com v show id XNDgxMjUzODc2MA 61 61 html
  • gazebo又卡又慢?快把你的显卡用起来!点击查看如何使用显卡运行gazebo~

    2021 10 11 更新 经测试发现 xff0c 使用系统自带的显卡驱动安装程序 xff0c 更加方便快捷 步骤如下 xff1a 设置 gt 关于 gt 软件和更新 gt 附加驱动 gt 找到推荐的驱动直接点应用即可 之前的原文 大家好
  • 机器人学习必看系列:如何使用moveit控制真实机械臂?

    大家好 xff0c 我是你们可爱的小鱼 最近关于moveit相关的问题感觉非常多 xff0c 毕竟机械臂 43 视觉的应用的确是非常的火爆 xff0c 小鱼都想直接开课教机械臂运动规划相关的了 有的同学问小鱼 xff0c 怎么使用movei
  • 如何一行代码安装ROS|2022最新版|一行代码安装ROS2|一行代码解决rosdep|一行代码配置多ROS环境

    2022最新版本V3 0 大家好 xff0c 我是小鱼 xff0c 经过一周多的完善 还是熟悉的一行代码 span class token function wget span http fishros com install O fish
  • 小鱼带你一起使用docker来跑ros2小乌龟|docker安装ros2|docker可视化

    各位鱼粉大家好 xff0c 我是爱折腾的小鱼 动手学ROS2开课了 xff0c 晚上买了个大鸡腿奖励了一下自己 xff0c 说起来小鱼最近又胖了不少 xff0c 俨然成了条胖鱼 xff01 昨晚小鱼搭建了一个私人的网盘 xff0c 使用do
  • 鱼香ROS网站上线|一行代码安装ROS/ROS2/解决rosdep问题|小鱼脚本

    大家好 xff0c 我是开心的小鱼 xff0c 经过几个月的努力 xff0c 动手学ROS2课程终于和小伙伴们见面了 xff0c 有很多小伙伴一下午的时间就把前两章给搞定了 xff0c 小鱼要抓紧啦 之前说的鱼香ROS网站已经上线啦 xff
  • ROS2安装Gazebo11并运行两轮差速样例程序

    大家好 xff0c 我是小鱼 告诉大家一个好消息 xff0c 小鱼把吃灰多年的板子卖掉了 xff0c 一共卖了70块钱 xff0c 然后又入手一个逻辑分析仪 xff0c 准备做一个ROS2的小车 xff0c 所以今天我们来使用gazebo来
  • 二维相机能得到三维信息?机器人感知部分之Aruco标定板的使用

    大家好 xff0c 我是小鱼 xff0c 今天来介绍一下Aruco并是结合ROS来进行识别 aruco其实是opencv中的一个库 xff0c 可以将特定的标记物转换成三维的坐标 xff0c 所以它是可以脱离ROS进行使用的 aruco介绍
  • 《动手学ROS2》扩展阅读2:ROS2客户端库RCL介绍

    本系列教程作者 xff1a 小鱼 公众号 xff1a 鱼香ROS QQ交流群 xff1a 139707339 教学视频地址 xff1a 小鱼的B站 完整文档地址 xff1a 鱼香ROS官网 版权声明 xff1a 如非允许禁止转载与商业用途
  • 《动手学ROS2》5.8Action客户端Python实现

    本系列教程作者 xff1a 小鱼 公众号 xff1a 鱼香ROS QQ交流群 xff1a 139707339 教学视频地址 xff1a 小鱼的B站 完整文档地址 xff1a 鱼香ROS官网 版权声明 xff1a 如非允许禁止转载与商业用途
  • 《动手学ROS2》6.5Gazebo介绍

    本系列教程作者 xff1a 小鱼 公众号 xff1a 鱼香ROS QQ交流群 xff1a 139707339 教学视频地址 xff1a 小鱼的B站 完整文档地址 xff1a 鱼香ROS官网 版权声明 xff1a 如非允许禁止转载与商业用途
  • Pixhawk无人机精准降落

    转自 xff1a http blog sina com cn s blog 6266a8840102xa77 html 多标记识别 xff0c 比官方的IR LOCK还要灵活 xff1a
  • 三位数的IMU长什么样?二位数的呢?不要钱的呢?| 为FishBot配置IMU惯性测量单元

    大家好 xff0c 我是小鱼 xff0c 上节课通过配置两轮差速控制器我们已经成功的让fishbot在gazebo中动了起来 xff0c 本节课我们通过给fishbot的URDF配置IMU传感器插件 xff0c 让IMU模块工作起来 1 惯