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

前言

前一篇对Gazebo的传感器噪声模型进行了介绍,本篇文章主要介绍常见传感器的噪音模型,并为你提供好了可以复制粘贴的代码。

介绍

Gazebo提供了很多常见传感器的模型,在真实的世界,传感器都会产生噪声,因为现实中的传感器并不能完美的观察这个世界。但是在默认的情况下,Gazebo的传感器可以完美的观察仿真世界,为了让仿真更加的真实,我们会在Gazebo的传感器中添加一些噪声到Gazebo传感器生成的数据中。

Gazebo目前可以给下面几个类型的传感器添加噪声:

  • 射线类(Ray) (例如, 雷达)
  • 相机(Camera)
  • 惯性测量单元(IMU)

接下来小鱼带你一一介绍。

射线类-Ray(雷达)噪声

对于射线传感器,我们将高斯噪声加入到每个波束的范围中。你可以设置平均值和标准差正态分布,从中噪声值将被采样。噪声值为每个波束独立采样。在添加噪声后,产生的范围被限制在传感器的最小和最大范围(包括在内)之间。

测试传感器噪声模型:

  1. 创建模型目录

    mkdir -p ~/.gazebo/models/noisy_laser
    
  2. 创建模型配置文件

    gedit ~/.gazebo/models/noisy_laser/model.config
    
  3. 复制粘贴下面的代码到配置文件

    <?xml version="1.0"?>
    <model>
      <name>Noisy laser</name>
      <version>1.0</version>
      <sdf version='1.6'>model.sdf</sdf>
    
      <author>
       <name>My Name</name>
       <email>[email protected]</email>
      </author>
    
      <description>
        My noisy laser.
      </description>
    </model>
    
  4. 创建一个文件 ~/.gazebo/models/noisy_laser/model.sdf

    gedit ~/.gazebo/models/noisy_laser/model.sdf
    
  5. 粘贴以下内容,这是添加了噪声的标准 Hokuyo 模型的代码:

    <?xml version="1.0" ?>
    <sdf version="1.6">
      <model name="hokuyo">
        <link name="link">
          <gravity>false</gravity>
          <inertial>
            <mass>0.1</mass>
          </inertial>
          <visual name="visual">
            <geometry>
              <mesh>
                <uri>model://hokuyo/meshes/hokuyo.dae</uri>
              </mesh>
            </geometry>
          </visual>
          <sensor name="laser" type="ray">
            <pose>0.01 0 0.03 0 -0 0</pose>
            <ray>
              <scan>
                <horizontal>
                  <samples>640</samples>
                  <resolution>1</resolution>
                  <min_angle>-2.26889</min_angle>
                  <max_angle>2.268899</max_angle>
                </horizontal>
              </scan>
              <range>
                <min>0.08</min>
                <max>10</max>
                <resolution>0.01</resolution>
              </range>
              <noise>
                <type>gaussian</type>
                <mean>0.0</mean>
                <stddev>0.01</stddev>
              </noise>
            </ray>
            <plugin name="laser" filename="libRayPlugin.so" />
            <always_on>1</always_on>
            <update_rate>30</update_rate>
            <visualize>true</visualize>
          </sensor>
        </link>
      </model>
    </sdf>
    
  6. 启动Gazebo:

    gazebo
    
  7. 插入嘈杂的激光:在左侧窗格中,选择Insert选项卡,然后单击。将您的激光器放在世界某处,并在其前面放置一个盒子。Noisy laser

  8. 可视化嘈杂的激光:单击窗口->主题可视化(或按 Ctrl-T)以调出主题选择器。

  9. 找到名称为 like 的主题并单击它,然后单击。您将获得一个显示激光数据的激光视图窗口。/gazebo/default/hokuyo/link/laser/scan Okay

    如您所见,扫描噪声很大。要调整噪声,只需调整其中的平均值和标准偏差值,其中单位是米:model.sdf

<noise>
  <type>gaussian</type>
  <mean>0.0</mean>
  <stddev>0.01</stddev>
</noise>

这些是Hokuyo激光的合理值。

相机噪音

对于相机传感器,我们对输出放大器噪声进行建模,它为每个像素独立添加高斯采样干扰。您可以设置从中采样噪声值的高斯分布的均值和标准差。为每个像素独立采样一个噪声值,然后将该噪声值独立添加到该像素的每个颜色通道。添加噪声后,生成的颜色通道值被限制在 0.0 和 1.0 之间;这个浮点颜色值最终会在图像中作为一个无符号整数,通常在 0 到 255 之间(每个通道使用 8 位)。

此噪声模型在GLSL着色器中实现,需要 GPU 才能运行。

测试相机噪声模型:

  1. 创建模型目录:
    mkdir -p ~/.gazebo/models/noisy_camera
    
  2. 创建模型配置文件:
    gedit ~/.gazebo/models/noisy_camera/model.config
    
  3. 粘贴以下内容:
    <?xml version="1.0"?>
    <model>
      <name>Noisy camera</name>
      <version>1.0</version>
      <sdf version='1.6'>model.sdf</sdf>
    
      <author>
       <name>My Name</name>
       <email>[email protected]</email>
      </author>
    
      <description>
        My noisy camera.
      </description>
    </model>
    
  4. 创建一个文件。~/.gazebo/models/noisy_camera/model.sdf
    gedit ~/.gazebo/models/noisy_camera/model.sdf
    
  5. 粘贴以下内容,这是添加了噪点的标准相机模型的副本:
    <?xml version="1.0" ?>
    <sdf version="1.6">
      <model name="camera">
        <link name="link">
          <gravity>false</gravity>
          <pose>0.05 0.05 0.05 0 0 0</pose>
          <inertial>
            <mass>0.1</mass>
          </inertial>
          <visual name="visual">
            <geometry>
              <box>
                <size>0.1 0.1 0.1</size>
              </box>
            </geometry>
          </visual>
          <sensor name="camera" type="camera">
            <camera>
              <horizontal_fov>1.047</horizontal_fov>
              <image>
                <width>1024</width>
                <height>1024</height>
              </image>
              <clip>
                <near>0.1</near>
                <far>100</far>
              </clip>
              <noise>
                <type>gaussian</type>
                <mean>0.0</mean>
                <stddev>0.07</stddev>
              </noise>
            </camera>
            <always_on>1</always_on>
            <update_rate>30</update_rate>
            <visualize>true</visualize>
          </sensor>
        </link>
      </model>
    </sdf>
    
  6. 启动Gazebo:
    gazebo
    
  7. 插入嘈杂的摄像头:在左侧窗格中,选择Insert选项卡,然后单击。把你的相机放在世界的某个地方。Noisy camera
  8. 可视化嘈杂的摄像机:单击 Window->Topic Visualization(或按 Ctrl-T)以调出 Topic Selector。
  9. 找到名称为 like 的主题并单击它,然后单击。您将获得一个显示图像数据的图像视图窗口。/gazebo/default/camera/link/camera/image Okay

如果您仔细观察,您会发现图像有噪点。要调整噪声,只需调整这些是无单位的值;噪声将被添加到 [0.0,1.0] 范围内的每个颜色通道。 model.sdf

上面的例子<stddev>很高,我们尝试减少这个值:

<noise>
  <type>gaussian</type>
  <mean>0.0</mean>
  <stddev>0.007</stddev>
</noise>

这些对于像样的数码相机来说是合理的值。

IMU 噪声

对于 IMU 传感器,我们对角速率和线性加速度的两种干扰进行建模:噪声和偏差。分别考虑角速率和线性加速度,导致该模型有 4 组参数:速率噪声、速率偏差、加速度噪声和加速度偏差。没有对 IMU 的方向数据应用噪声,该数据被提取为世界框架中的完美值(这在未来应该会改变)。

噪音是可加性的,从正态分布中取样。你可以设置高斯分布的平均值和标准差(一个用于比率,一个用于加速度) ,从中将采样噪声值。噪声值为每个样本的每个组件(x,y,z)独立采样,并添加到该组件中。

偏差也是附加的,但是只在模拟开始的时候会被取样一次。你可以设置高斯分布的平均值和标准差(一个用于比率,一个用于加速度) ,从中可以采样到偏差值。偏差将根据提供的参数进行取样,然后以等概率否定; 假设所提供的平均值表示偏差的大小,并且在两个方向上都可能存在偏差。此后,偏差是一个固定值,添加到每个样品的每个组分(x,y,z)。

**注意:**根据被模拟的系统和物理引擎的配置,模拟的 IMU 数据可能已经很嘈杂,因为系统没有一直被求解到收敛。因此,根据您的应用程序,可能不需要添加噪声。

测试 IMU 噪声模型:

  1. 创建模型目录:
    mkdir -p ~/.gazebo/models/noisy_imu
    
  2. 创建模型配置文件:
    gedit ~/.gazebo/models/noisy_imu/model.config
    
  3. 粘贴以下内容:
    <?xml version="1.0"?>
    <model>
      <name>Noisy IMU</name>
      <version>1.0</version>
      <sdf version='1.6'>model.sdf</sdf>
    
      <author>
       <name>My Name</name>
       <email>[email protected]</email>
      </author>
    
      <description>
        My noisy IMU.
      </description>
    </model>
    
  4. 创建~/.gazebo/models/noisy_imu/model.sdf文件
    gedit ~/.gazebo/models/noisy_imu/model.sdf
    
  5. 粘贴以下内容:
    <?xml version="1.0" ?>
    <sdf version="1.6">
      <model name="imu">
        <link name="link">
          <inertial>
            <mass>0.1</mass>
          </inertial>
          <visual name="visual">
            <geometry>
              <box>
                <size>0.1 0.1 0.1</size>
              </box>
            </geometry>
          </visual>
          <collision name="collision">
            <geometry>
              <box>
                <size>0.1 0.1 0.1</size>
              </box>
            </geometry>
          </collision>
          <sensor name="imu" type="imu">
            <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>
            <always_on>1</always_on>
            <update_rate>1000</update_rate>
          </sensor>
        </link>
      </model>
    </sdf>
    
  6. 启动Gazebo:
    gazebo
    
  7. 插入嘈杂的 IMU:在左侧窗格中,选择Insert选项卡,然后单击。将您的 IMU 放在世界的某个地方。Noisy IMU
  8. 可视化嘈杂的 IMU:单击 Window->Topic Visualization(或按 Ctrl-T)调出 Topic Selector
  9. 找到名称为 like 的主题并单击它,然后单击。您将获得一个显示 IMU 数据的文本视图窗口。/gazebo/default/imu/link/imu/imu Okay

在 IMU 等高速传感器上识别噪声可能很困难,尤其是在复杂系统中。您应该能够看到大的非零均值对噪声或偏差参数的影响。
要调整噪声,只需使用. 速率噪声和速率偏差的单位是 rad/s,加速度噪声和加速度偏差的单位是 m/s^2。model.sdf

<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的合理噪声配置值。

总结

这篇文章主要对三种常见的仿真传感器模型进行高斯噪声的配置,通过添加高斯噪声基本可以模拟出各种质量传感器的情况,有时测试算法还是挺好用的。上面使用的时sdf格式的模型,其实可以直接在URDF中配置使用。

猜你喜欢

转载自blog.csdn.net/qq_27865227/article/details/124069612