Gazebo使用笔记(9) —— 激光、相机、IMU噪声_罗伯特祥的博客-程序员秘密

技术标签: IMU  gazebo  激光   机器人操作系统ROS/ROS2   机器人仿真  相机  

激光噪声

对于射线传感器,我们将高斯噪声添加到每个光束的范围内。您可以设置从中采样噪声值的高斯分布的平均值和标准偏差。对每个光束独立地采样噪声值。添加噪声后,将得到的范围钳位在传感器的最小和最大范围(包括该范围)之间。

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,以上数值都是合理的!


参考文献:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43455581/article/details/106330846

智能推荐

基于Cookie信息的互联网精准广告定向技术研究_push广告根据cookie投放吗_想的昵称都存在了的博客-程序员秘密

在今年的315晚会上,有一个词再次引起了广大网友的关注,那就是Cookie,其实关于个人在网络上的信息安全问题,IT界的几位巨头也曾为此争论了好久,最终也是不了了之。那么Cookie究竟是什么呢?Cookie是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cooki

opencv——python细胞计数实现_microspore的博客-程序员秘密

opencv——python细胞计数实现写程序萌新(不准备干程序员),上周看公司同事在学python,因为公司最近没什么事做(实际因为公司业务萎缩裁员降薪正融资)作为产品我也很无奈,公司程序基本裁完了,想着反正闲着也是闲着,就在周末找个python视频看看,就看了个基础教程,想着用opencv实现个细胞计数功能,周末看了看python基础语法,这两天看了看opencv基本操作,总共入门5天时间,...

ubuntu18.04 修改root登录密码与修改远程登录密码_ubuntu远程桌面密码会变_大黑叶变白的博客-程序员秘密

(个人操作记录,怕以后用的时候又忘了)修改root登录密码:若忘记密码:sudo cat /etc/mysql/debian.cnfmysql -u debian-sys-maint -p原始密码:P0QAQocVLM9fftak用这个登录然后:use mysql;update mysql.user set authentication_string=password('root') where user='root' and Host ='localhost';update use

Node开发项目管理工具 Grunt 对比 Gulp_weixin_34309543的博客-程序员秘密

转自Gulp vs Grunt1. Grunt -&gt; Gulp早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Java项目而出现的Maven。Node催生了一批自动化工具,像Bower,Yeoman,Grunt等。而如今前端提到构建工具会自然想起Grunt。Java世界里的Maven提供了强大的包依赖管理和构建生命周期管理。...

我通过信息系统项目管理师的经验分享_信息系统项目管理师论文erp系统_kingmax54212008的博客-程序员秘密

我通过信息系统项目管理师的经验分享转自: http://www.educity.cn/pm/453762.html7月13日考试分数下来,分别为47,63,46,万幸都过线了,感觉心情非常激动,付出没有白费。  自己的经验:  一、要充分复习。这有两层意思,第一是要尽早制定一个详尽的复习计划并尽量严格执行,个人建议如果没什么基础,复习时间应在90天的样子,当然,这个也不

工作三年Java程序员对于以后的职业生涯规划_weixin_45039616的博客-程序员秘密

欢迎关注专栏:Java架构技术进阶。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。 微信公众号:慕容千语的架构笔记。欢迎关注一起进步。规划工作3年了,感觉自己的技术现在到了一个瓶颈,在做一些重复性的业务性的工作,没有长进,提高太慢;因此停下脚步对自己的职业生涯做了一个规划,并为之努力奋斗:20-27岁:技术积累阶段在这 5 年时间里...

随便推点

idea web项目打war包_要懂得舍弃的博客-程序员秘密

1.新建一个 web的maven项目2.配置springmvc环境,pom.xml,web.xml,springmvc.xml3.添加一个controller类,和一个test.jsp 项目成功跑起,接下来开始打包。1.点击file,再点击Project Structure2.点击Atrifacts--&amp;gt;中间的+号--&amp;gt;Web Application...

swift学习-----字典_weixin_30376453的博客-程序员秘密

// 字典(无序数据集)* Swift 的Dictionary类型被桥接到Foundation的NSDictionary类。* 格式 [:] / Dictionary&lt;Key, Value&gt;()* let 不可变字典* var 可变字典// 注意:* 一个字典的Key类型必须遵循Hashable协议// 声明字典let dict: [Stri...

IDC最新报告:阿里语音AI登顶中国No.1_QbitAl的博客-程序员秘密

乾明发自 凹非寺量子位 报道 | 公众号 QbitAI没错,阿里并非先发的语音AI,现在中国市场份额第一。7月14日(周二),IDC发布《中国AI云服务市场半年度研究报告》显示,阿里语...

Effective Java-第4章_weixin_33690367的博客-程序员秘密

第4章 类和接口类和接口是Java程序设计语言的核心,它们也是Java语言的基本抽象单元。Java语言提供了许多强大的基本元素,供程序员用来设计类和接口。13. 使类和成员的可访问性最小化要区别设计良好的模块与设计不好的模块,最重要的因素在于,这个模块对于外部的其他模块而言,是否隐藏其内部数据和其他实现细节。设计良好的模块会隐藏所有的实现细节,把它的API与它的实现清晰隔离开来。然后,...

理解硬(软)中断的嵌套_东方潮汐的博客-程序员秘密

中断基础关于中断的概念,很多人还停留在书本上,我们结合实际的操作系统来理解。先给出硬中断和软中断的介绍:硬中断:外设处理过程中产生的,通过硬件控制器通知cpu自己的状态变化。软中断:硬中断应该很快完成,才能有快的响应,所以将一部分可以延迟的处理从硬中断里独立出来,当硬中断处理完之后再处理这部分,就是软中断。下面,我们以linux为例,分析一下中断的嵌套情况。

模数非互质的同余方程组(非互质版中国剩余定理)_onestow的博客-程序员秘密

之前介绍到的中国剩余定理只能求解模数两两互质的同余方程组。   那么,模数如果不一定两两互质的情况应该怎么求呢?   下面介绍通过合并方程的方法来解决问题(要用到扩展欧几里德算法)。    顾名思义,合并方程就是把所有的同余方程组合并成一个。   举个例子,合并同余方程组  x%A=a   ①                              x%B=b   ②  

推荐文章

热门文章

相关标签