激光噪聲
對於射線傳感器,我們將高斯噪聲添加到每個光束的範圍內。您可以設置從中採樣噪聲值的高斯分佈的平均值和標準偏差。對每個光束獨立地採樣噪聲值。添加噪聲後,將得到的範圍鉗位在傳感器的最小和最大範圍(包括該範圍)之間。
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,以上數值都是合理的!
參考文獻: