ros2--urdf--IMU
IMU基础
urdf添加IMU
案例(来自小鱼)
<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>
1,link和IMU传感器绑定
<gazebo reference="imu_link">
<sensor name="imu_sensor" type="imu">
-
<gazebo reference="imu_link">
将传感器绑定到 URDF 中名为imu_link
的连杆上,确保传感器位姿与物理模型同步。 -
<sensor name="imu_sensor" type="imu">
定义一个名为imu_sensor
的 IMU 类型传感器,用于测量角速度和线加速度。
2. ROS 插件配置
<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>
-
<plugin>
加载 Gazebo 的 ROS 接口插件libgazebo_ros_imu_sensor.so
,命名为imu_plugin
。 -
<namespace>/</namespace>
指定 ROS 命名空间为根目录(/
),话题将发布为/imu
。 -
<remapping>~/out:=imu</remapping>
将插件内部话题~/out
重映射到标准 ROS 话题/imu
(类型为sensor_msgs/Imu
)。 -
<initial_orientation_as_reference>false</initial_orientation_as_reference>
-
false
:IMU 数据相对于世界坐标系(默认)。 -
true
:以传感器初始化时的方向为参考坐标系(消除初始倾斜影响)。
-
3. 传感器通用参数
<always_on>true</always_on>
<update_rate>100</update_rate>
<visualize>true</visualize>
-
<always_on>true</always_on>
传感器始终启用,即使没有订阅者。 -
<update_rate>100</update_rate>
数据发布频率为 100 Hz(每秒更新 100 次)。 -
<visualize>true</visualize>
在 Gazebo 的 3D 界面中显示传感器模型(可视化检测方向)。
4. IMU 噪声模型配置
IMU的噪声
urdf中噪声的类型
高斯噪声(Gaussian)
-
type="gaussian"
描述:最常用的噪声模型,符合正态分布(钟形曲线)。
适用场景:模拟传感器随机噪声(如 IMU、激光雷达)。
均匀噪声(Uniform)
-
type="uniform"
描述:噪声值在指定范围内均匀分布。
适用场景:模拟量化误差或简单随机干扰。
自定义噪声(Custom)
-
type="custom"
描述:用户自定义噪声分布(需通过插件实现)。
适用场景:特殊噪声模型(如脉冲噪声、非线性噪声)。
类型 | 分布形状 | 典型应用 | 是否需要<stddev> |
---|---|---|---|
gaussian | 钟形曲线(对称) | IMU、激光雷达噪声 | 是 |
uniform | 矩形(均匀) | 量化误差、简单干扰 | 是 |
custom | 用户定义 | 特殊传感器模型 | 可选 |
none | 无噪声 | 理想环境测试 | 否 |
无噪声(None)
-
type="none"
描述:禁用噪声,输出理想数据。
适用场景:调试或理想环境仿真。
(1) 角速度噪声(陀螺仪)
<angular_velocity>
<x>
<noise type="gaussian">
<mean>0.0</mean> <!-- 噪声均值(通常为0) -->
<stddev>2e-4</stddev> <!-- 随机噪声标准差(rad/s) -->
<bias_mean>0.0000075</bias_mean> <!-- 零偏均值(固定偏移) -->
<bias_stddev>0.0000008</bias_stddev> <!-- 零偏波动标准差 -->
</noise>
</x>
<!-- y/z 轴配置相同 -->
</angular_velocity>
噪声均值:
<mean>0.0</mean>
-
作用:设置噪声的均值(期望值)。
-
典型值:通常为
0.0
,表示噪声围绕真实值对称波动。 -
示例:
-
若
mean=0.0
,噪声会在真实值上下波动。 -
若
mean=0.1
,噪声整体偏向真实值的一侧(如加速度计零偏)。
-
标准差:
-
stddev
:决定噪声的“抖动”幅度,值越大数据越分散。
示例:stddev=2e-4
表示陀螺仪噪声约 ±0.0002 rad/s 波动。
零偏的固定偏移:
什么零偏:
零偏是长期存在的固定偏差。
<bias_mean>0.1</bias_mean>
-
作用:设置零偏(Bias)的固定偏移量,模拟传感器的系统误差。
-
物理意义:
-
零偏是长期存在的固定偏差,无法通过单次校准消除。
-
例如:加速度计的 z 轴理论输出应为
+9.81 m/s²
,但实际可能为9.81 + bias_mean
。
-
-
示例:
-
bias_mean=0.1
表示加速度计存在+0.1 m/s²
的固定偏移。 -
陀螺仪的
bias_mean=0.0000075
表示角速度存在微小固定偏差。
-
零偏的随机波动:
<bias_stddev>0.001</bias_stddev>
-
作用:设置零偏的随机波动范围(零偏本身的变化程度)。
-
物理意义:
-
零偏并非完全固定,可能随时间或温度缓慢漂移。
-
bias_stddev
描述这种漂移的波动幅度。
-
-
示例:
-
bias_stddev=0.001
表示零偏会在bias_mean ± 0.001
范围内随机变化。 -
若
bias_mean=0.1
,实际零偏可能在[0.099, 0.101]
之间波动。
-
(2) 线加速度噪声(加速度计)
<linear_acceleration>
<x>
<noise type="gaussian">
<mean>0.0</mean>
<stddev>1.7e-2</stddev> <!-- 随机噪声标准差(m/s²) -->
<bias_mean>0.1</bias_mean> <!-- 零偏均值(如校准误差) -->
<bias_stddev>0.001</bias_stddev> <!-- 零偏波动 -->
</noise>
</x>
<!-- y/z 轴配置相同 -->
</linear_acceleration>