前一篇对Gazebo的传感器噪声模型进行了介绍,本篇文章主要介绍常见传感器的噪音模型,并为你提供好了可以复制粘贴的代码。
介绍Gazebo提供了很多常见传感器的模型,在真实的世界,传感器都会产生噪声,因为现实中的传感器并不能完美的观察这个世界。但是在默认的情况下,Gazebo的传感器可以完美的观察仿真世界,为了让仿真更加的真实,我们会在Gazebo的传感器中添加一些噪声到Gazebo传感器生成的数据中。
Gazebo目前可以给下面几个类型的传感器添加噪声:
- 射线类(Ray) (例如, 雷达)
- 相机(Camera)
- 惯性测量单元(IMU)
接下来小鱼带你一一介绍。
射线类-Ray(雷达)噪声对于射线传感器,我们将高斯噪声加入到每个波束的范围中。你可以设置平均值和标准差正态分布,从中噪声值将被采样。噪声值为每个波束独立采样。在添加噪声后,产生的范围被限制在传感器的最小和最大范围(包括在内)之间。
测试传感器噪声模型:
-
创建模型目录
mkdir -p ~/.gazebo/models/noisy_laser
-
创建模型配置文件
gedit ~/.gazebo/models/noisy_laser/model.config
-
复制粘贴下面的代码到配置文件
Noisy laser 1.0 model.sdf My Name me@my.email My noisy laser.
-
创建一个文件
~/.gazebo/models/noisy_laser/model.sdf
gedit ~/.gazebo/models/noisy_laser/model.sdf
-
粘贴以下内容,这是添加了噪声的标准 Hokuyo 模型的代码:
false 0.1 model://hokuyo/meshes/hokuyo.dae 0.01 0 0.03 0 -0 0 640 1 -2.26889 2.268899 0.08 10 0.01 gaussian 0.0 0.01 1 30 true
-
启动Gazebo:
gazebo
-
插入嘈杂的激光:在左侧窗格中,选择Insert选项卡,然后单击。将您的激光器放在世界某处,并在其前面放置一个盒子。Noisy laser
-
可视化嘈杂的激光:单击窗口->主题可视化(或按 Ctrl-T)以调出主题选择器。
-
找到名称为 like 的主题并单击它,然后单击。您将获得一个显示激光数据的激光视图窗口。
/gazebo/default/hokuyo/link/laser/scan
Okay如您所见,扫描噪声很大。要调整噪声,只需调整其中的平均值和标准偏差值,其中单位是米:
model.sdf
gaussian
0.0
0.01
这些是Hokuyo激光的合理值。
相机噪音对于相机传感器,我们对输出放大器噪声进行建模,它为每个像素独立添加高斯采样干扰。您可以设置从中采样噪声值的高斯分布的均值和标准差。为每个像素独立采样一个噪声值,然后将该噪声值独立添加到该像素的每个颜色通道。添加噪声后,生成的颜色通道值被限制在 0.0 和 1.0 之间;这个浮点颜色值最终会在图像中作为一个无符号整数,通常在 0 到 255 之间(每个通道使用 8 位)。
此噪声模型在GLSL着色器中实现,需要 GPU 才能运行。
测试相机噪声模型:
- 创建模型目录:
mkdir -p ~/.gazebo/models/noisy_camera
- 创建模型配置文件:
gedit ~/.gazebo/models/noisy_camera/model.config
- 粘贴以下内容:
Noisy camera 1.0 model.sdf My Name me@my.email My noisy camera.
- 创建一个文件。
~/.gazebo/models/noisy_camera/model.sdf
gedit ~/.gazebo/models/noisy_camera/model.sdf
- 粘贴以下内容,这是添加了噪点的标准相机模型的副本:
false 0.05 0.05 0.05 0 0 0 0.1 0.1 0.1 0.1 1.047 1024 1024 0.1 100 gaussian 0.0 0.07 1 30 true
- 启动Gazebo:
gazebo
- 插入嘈杂的摄像头:在左侧窗格中,选择
Insert
选项卡,然后单击。把你的相机放在世界的某个地方。Noisy camera
- 可视化嘈杂的摄像机:单击 Window->Topic Visualization(或按 Ctrl-T)以调出 Topic Selector。
- 找到名称为 like 的主题并单击它,然后单击。您将获得一个显示图像数据的图像视图窗口。
/gazebo/default/camera/link/camera/image Okay
如果您仔细观察,您会发现图像有噪点。要调整噪声,只需调整这些是无单位的值;噪声将被添加到 [0.0,1.0] 范围内的每个颜色通道。 model.sdf
上面的例子很高,我们尝试减少这个值:
gaussian
0.0
0.007
这些对于像样的数码相机来说是合理的值。
IMU 噪声对于 IMU 传感器,我们对角速率和线性加速度的两种干扰进行建模:噪声和偏差。分别考虑角速率和线性加速度,导致该模型有 4 组参数:速率噪声、速率偏差、加速度噪声和加速度偏差。没有对 IMU 的方向数据应用噪声,该数据被提取为世界框架中的完美值(这在未来应该会改变)。
噪音是可加性的,从正态分布中取样。你可以设置高斯分布的平均值和标准差(一个用于比率,一个用于加速度) ,从中将采样噪声值。噪声值为每个样本的每个组件(x,y,z)独立采样,并添加到该组件中。
偏差也是附加的,但是只在模拟开始的时候会被取样一次。你可以设置高斯分布的平均值和标准差(一个用于比率,一个用于加速度) ,从中可以采样到偏差值。偏差将根据提供的参数进行取样,然后以等概率否定; 假设所提供的平均值表示偏差的大小,并且在两个方向上都可能存在偏差。此后,偏差是一个固定值,添加到每个样品的每个组分(x,y,z)。
**注意:**根据被模拟的系统和物理引擎的配置,模拟的 IMU 数据可能已经很嘈杂,因为系统没有一直被求解到收敛。因此,根据您的应用程序,可能不需要添加噪声。
测试 IMU 噪声模型:
- 创建模型目录:
mkdir -p ~/.gazebo/models/noisy_imu
- 创建模型配置文件:
gedit ~/.gazebo/models/noisy_imu/model.config
- 粘贴以下内容:
Noisy IMU 1.0 model.sdf My Name me@my.email My noisy IMU.
- 创建
~/.gazebo/models/noisy_imu/model.sdf
文件gedit ~/.gazebo/models/noisy_imu/model.sdf
- 粘贴以下内容:
0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.0 2e-4 0.0000075 0.0000008 0.0 2e-4 0.0000075 0.0000008 0.0 2e-4 0.0000075 0.0000008 0.0 1.7e-2 0.1 0.001 0.0 1.7e-2 0.1 0.001 0.0 1.7e-2 0.1 0.001 1 1000
- 启动Gazebo:
gazebo
- 插入嘈杂的 IMU:在左侧窗格中,选择Insert选项卡,然后单击。将您的 IMU 放在世界的某个地方。
Noisy IMU
- 可视化嘈杂的 IMU:单击
Window->Topic Visualization
(或按 Ctrl-T)调出Topic Selector
。 - 找到名称为
like
的主题并单击它,然后单击。您将获得一个显示 IMU 数据的文本视图窗口。/gazebo/default/imu/link/imu/imu
Okay
在 IMU 等高速传感器上识别噪声可能很困难,尤其是在复杂系统中。您应该能够看到大的非零均值对噪声或偏差参数的影响。 要调整噪声,只需使用. 速率噪声和速率偏差的单位是 rad/s,加速度噪声和加速度偏差的单位是 m/s^2。model.sdf
0.0
2e-4
0.0000075
0.0000008
0.0
2e-4
0.0000075
0.0000008
0.0
2e-4
0.0000075
0.0000008
0.0
1.7e-2
0.1
0.001
0.0
1.7e-2
0.1
0.001
0.0
1.7e-2
0.1
0.001
上面是一个高质量IMU的合理噪声配置值。
总结这篇文章主要对三种常见的仿真传感器模型进行高斯噪声的配置,通过添加高斯噪声基本可以模拟出各种质量传感器的情况,有时测试算法还是挺好用的。上面使用的时sdf
格式的模型,其实可以直接在URDF中配置使用。