Gazebo使用筆記(9) —— 激光、相機、IMU噪聲

激光噪聲

對於射線傳感器,我們將高斯噪聲添加到每個光束的範圍內。您可以設置從中採樣噪聲值的高斯分佈的平均值和標準偏差。對每個光束獨立地採樣噪聲值。添加噪聲後,將得到的範圍鉗位在傳感器的最小和最大範圍(包括該範圍)之間。

mkdir -p ~/.gazebo/models/noisy_laser
gedit ~/.gazebo/models/noisy_laser/model.config
  • 模型配置

    <?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>
    
  • 模型sdf描述

    gedit ~/.gazebo/models/noisy_laser/model.sdf
    
    <?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>
    

查看話題/gazebo/default/hokuyo/link/laser/scan觀察現象

Hokuyo雷達噪聲參數如下:

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

相機噪聲

對於相機傳感器,我們對輸出放大器噪聲建模,該噪聲會給每個像素獨立增加一個高斯採樣干擾。您可以設置從中採樣噪聲值的高斯分佈的平均值和標準偏差。爲每個像素獨立採樣一個噪聲值,然後將該噪聲值獨立添加到該像素的每個顏色通道。在添加噪聲之後,所得的顏色通道值將被鉗位在0.0到1.0之間;否則,顏色通道值將被限制在0.0到1.0之間。該浮點顏色值將最終以無符號整數形式出現在圖像中,通常在0到255之間(每個通道使用8位)。此噪聲模型在GLSL着色器中實現,並且需要GPU運行。

  • 模型配置

    mkdir -p ~/.gazebo/models/noisy_camera
    gedit ~/.gazebo/models/noisy_camera/model.config
    
    <?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>
    
  • 模型sdf描述

    gedit ~/.gazebo/models/noisy_camera/model.sdf
    
    <?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>
        <!--####### 無單位值,雜波將添加到[0.0,1.0]範圍內每個顏色通道 #######-->
              <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>
    

觀察話題/gazebo/default/camera/link/camera/image

對於高質量的相機,以下值是合理的:

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

IMU噪聲

對於IMU傳感器,我們對角速度和線性加速度的兩種干擾進行建模:噪聲和偏置。分別考慮角速度和線性加速度,從而爲該模型提供4組參數:速度噪聲,速率偏差,加速度噪聲和加速度偏差IMU的方向數據不會受到任何干擾,IMU的方向數據會在世界範圍內提取爲理想值(將來會有所變化)。

噪聲是可加的,是從高斯分佈中採樣的。您可以設置高斯分佈的平均值和標準偏差(一個用於比率,一個用於加速度),並從中取樣噪聲值。對每個樣本的每個分量(X,Y,Z)獨立採樣噪聲值,並將其添加到該分量。

偏置也是可加的,但在仿真開始時會被採樣一次。您可以設置高斯分佈的平均值和標準偏差(一個用於比率,一個用於加速度),從中將採樣偏差值。將根據提供的參數對偏差進行採樣,然後以相等的概率取反;假設提供的均值表示偏差的大小,並且在兩個方向上均可能存在偏差。此後,偏差是固定值,添加到每個樣本的每個分量(X,Y,Z)。

注意:根據模擬的系統和物理引擎的配置,可能會發生模擬的IMU數據已經非常嘈雜的情況,因爲系統並沒有完全解決該問題。因此,根據您的應用,可能沒有必要添加噪音

  • 模型配置文件:

    mkdir -p ~/.gazebo/models/noisy_imu
    gedit ~/.gazebo/models/noisy_imu/model.config
    
    <?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>
    
  • 模型sdf描述:

    gedit ~/.gazebo/models/noisy_imu/model.sdf
    
    <?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>
    

要調整噪音,只需在中使用平均值和標準偏差值即可。速率噪聲和速率偏差的單位爲rad/s,加速度噪聲和加速度偏差的單位爲m/ s^2。

對於質量高IMU,以上數值都是合理的!


參考文獻:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章