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>