转自:https://blog.csdn.net/learning_tortosie/article/details/103346902  仅供学习

将传感器数据合并到robot_localization的任何状态估计节点的位置估计中时,重要的是要提取尽可能多的信息。本教程详细介绍了传感器集成的最佳实践。

有关更多信息,建议用户观看ROSCon 2015的演示文稿。

1 传感器配置

即使所讨论的消息类型在配置向量中不包含某些变量(例如,虽然<<MsgLink(geometry_msgs/TwistWithCovarianceStamped)>>缺少任何位姿数据,但是配置向量仍然具有位姿变量的值),所有传感器的配置向量格式也相同。未使用的变量将被忽略。

注意:配置矢量在输入消息的frame_id中给出。例如,考虑一个速度传感器,该传感器会生成一个geometry_msgs/TwistWithCovarianceStamped消息,其frame_idvelocity_sensor_frame。在此示例中,我们假设存在一个从velocity_sensor_frame到机器人的base_link_frame(例如base_link)的转换,并且该转换会将Velocity_sensor_frame中的X速度转换为base_link_frame中的Z速度。为了将来自传感器的X速度数据包括到滤波器中,配置矢量应将X速度值设置为true,而不是Z˙速度值:

<--!
#x     , y     , z,
#roll  , pitch , yaw,
#vx    , vy    , vz,
#vroll , vpitch, vyaw,
#ax    , ay    , az
-->
<rosparam param="twist0_config">[false, false, false,false, false, false,true,  false, false,false, false, false,false, false, false]</rosparam>

注意:布尔值的顺序是:
( X , Y , Z , r o l l , p i t c h , y a w , X ˙ , Y ˙ , Z ˙ , r o l l ˙ , p i t c h ˙ , y a w ˙ , X ¨ , Y ¨ , Z ¨ ) 。 (X,Y,Z,roll,pitch,yaw,X˙,Y˙,Z˙,roll˙,pitch˙,yaw˙,X¨,Y¨,Z¨)。 (X,Y,Z,roll,pitch,yaw,X˙,Y˙,Z˙,roll˙,pitch˙,yaw˙,X¨,Y¨,Z¨)。

2 以2D运行?

配置传感器时,首先要做出的决定是机器人是否在平面环境中运行,并且您可以忽略IMU可能报告的接地平面变化的细微影响。如果是这样,请将two_d_mode参数设置为true。这样可以有效地将每次测量中的3D位姿变量归零,并强制将其融合到状态估计中。

3 融合不可测变量

让我们从一个例子开始。假设您有一个在平面环境中工作的轮式非完整机器人。您的机器人有一些车轮编码器,用于估算瞬时X速度以及绝对姿态信息。此信息在nav_msgs/Odometry消息中报告。此外,您的机器人还有一个IMU,可以测量转速,车辆姿态和线性加速度。其数据在sensor_msgs/Imu消息中报告。当我们在平面环境中操作时,我们将two_d_mode参数设置为true。这将自动将所有3D变量清零,例如Z,roll,pitch,它们各自的速度和Z加速度。我们从以下配置开始:

<--!
#x     , y     , z,
#roll  , pitch , yaw,
#vx    , vy    , vz,
#vroll , vpitch, vyaw,
#ax    , ay    , az
-->
<rosparam param="odom0_config">[true, true, false,false, false, true,true, false, false,false, false, true,false, false, false]</rosparam><rosparam param="imu0_config">[false, false, false,false, false, true,false, false, false,false, false, true,true, false, false]</rosparam>

作为第一步,这是有道理的,因为平面机器人只需要关注:
X , Y , X ˙ , Y ˙ , X ¨ , Y ¨ , y a w , y a w ˙ 。 X , Y, X˙, Y˙, X¨, Y¨, yaw, yaw˙。 X,Y,X˙,Y˙,X¨,Y¨,yaw,yaw˙。但是,这里有一些注意事项。

1.对于odom0,我们包括X和Y(在世界坐标系中报告),yaw,X˙(在本体坐标系中报告)和yaw˙。但是,除非您的机器人在内部使用IMU,否则很可能仅使用车轮编码器数据来生成其测量值。因此,它的速度,航向和位置数据都是从同一源生成的。在这种情况下,我们不想使用所有值,因为您要将重复的信息输入到过滤器中。相反,最好只使用速度:

<--!
#x     , y     , z,
#roll  , pitch , yaw,
#vx    , vy    , vz,
#vroll , vpitch, vyaw,
#ax    , ay    , az
-->
<rosparam param="odom0_config">[false, false, false,false, false, false,true, false, false,false, false, true,false, false, false]</rosparam><rosparam param="imu0_config">[false, false, false,false, false, true,false, false, false,false, false, true,true, false, false]</rosparam>

2.接下来,我们注意到我们没有融合Y˙。乍一看,这是正确的选择,因为我们的机器人无法瞬时向侧面移动。但是,如果nav_msgs/Odometry消息报告Y˙的值为0(并且Y˙的协方差未夸大为大值),则最好将该值提供给滤波器。由于在这种情况下,测量值0表示机器人无法朝该方向移动,因此它可以作为完美的有效测量值:

<--!
#x     , y     , z,
#roll  , pitch , yaw,
#vx    , vy    , vz,
#vroll , vpitch, vyaw,
#ax    , ay    , az
-->
<rosparam param="odom0_config">[false, false, false,false, false, false,true, true, false,false, false, true,false, false, false]</rosparam><rosparam param="imu0_config">[false, false, false,false, false, true,false, false, false,false, false, true,true, false, false]</rosparam>

您可能想知道为什么我们出于同样的原因不融合Z˙速度。答案是我们将two_d_mode设置为false时所做的。如果没有的话,实际上我们可以将Z˙速度的0测量值融合到滤波器中。

3.最后,我们来到IMU。您可能会注意到,我们已将Y¨设置为false。这是由于以下事实:许多系统,包括我们在此讨论的假设系统,都不会经历瞬时Y加速。但是,IMU可能会报告Y加速度的非零,嘈杂值,这可能会导致您的估计快速漂移。

4 微分和相对参数

robot_localization中的状态估计节点允许用户融合任意数量的传感器。这允许用户使用多个源来测量某些状态向量变量,尤其是位姿变量。例如,您的机器人可能会从多个IMU获得绝对方向信息,或者它可能具有多个提供其绝对位置估计值的数据源。在这种情况下,用户有两个选择:

1.照原样融合所有绝对位置/方向数据,例如:

<--!
#x     , y     , z,
#roll  , pitch , yaw,
#vx    , vy    , vz,
#vroll , vpitch, vyaw,
#ax    , ay    , az
-->
<rosparam param="imu0_config">[false, false, false,true,  true,  true,false, false, false,false, false, false,false, false, false]</rosparam><rosparam param="imu1_config">[false, false, false,true,  true,  true,false, false, false,false, false, false,false, false, false]</rosparam>

在这种情况下,用户应该非常小心,并确保正确设置每个测量方向变量的协方差。如果每个IMU公布的偏航方差例如为:math:0.1,但IMU的偏航测量值之间的差异为:math:>0.1,则滤波器的输出将在两者之间来回振荡。每个传感器提供的值。用户应确保每次测量周围的噪声分布重叠。

2.或者,用户可以使用_differential参数。通过将给定传感器的此值设置为true,可以通过计算两个连续时间步长之间的测量值变化,将所有位姿(位置和方向)数据转换为速度。然后将数据融合为速度。再次提醒您,使用者应注意:合并绝对测量值(尤其是IMU)时,如果测量值对于给定变量具有静态或不增加的方差,则估计协方差矩阵中的方差将是有界的。如果将该信息转换为速度,则在每个时间步长处,估计将获得少量误差,并且所讨论变量的方差将无限制地增长。对于位置(X,Y,Z)信息,这不是问题,但是对于方向数据,则是一个问题。例如,一段时间后,机器人绕其环境移动并在X方向上累积1.5米的误差是可以接受的。如果同一个机器人四处走动并在偏航中累积1.5弧度的误差,那么当机器人继续向前行驶时,其位置误差将爆炸。

_differential参数的一般经验法则是,如果给定机器人只有一个方向数据源,则应将_differential参数设置为false。如果有N个源,用户可以将N-1个参数的_differential参数设置为true,或者仅确保协方差值足够大以消除振荡。

转自:https://blog.csdn.net/learning_tortosie/article/details/103346902  仅供学习

robot_localization:配置相关推荐

  1. ROS学习笔记之——robot_localization包

    之前博客已经介绍过robot_pose_ekf功能包以及(extended)kalman滤波的原理< ROS学习笔记之--EKF (Extended Kalman Filter) node 扩展 ...

  2. nginx配置http、https访问,nginx指定ssl证书,阿里云腾讯云华为云设置nginx https安全访问

    nginx配置http.https访问 要设置https访问需要从对应的云厂商申请证书,并下载Nginx证书到服务器. 我这里从阿里云申请了免费的域名证书,然后将证书放置在服务器的/etc/ssl/. ...

  3. 在kotlin companion object中读取spring boot配置文件,静态类使用@Value注解配置

    在kotlin companion object中读取配置文件 静态类使用@Value注解配置 class Config {@Value("\${name}")fun setNam ...

  4. 大数据学习01——配置虚拟机节点相关网络

    1.配置mac地址和ip (1)更改适配器设置 找到这个后开始设置windows中的网络连接 (2)接着对三台虚拟机的mac地址和ip进行设置 1.mac地址设置 进入linux节点中的这个位置进行设 ...

  5. plsql配置多数据源,想换哪个换哪个

    现在的公司内部普遍使用plsql对数据库进行管理.而数据库非常多,从测试到线上环境数据库那么多,我们通常使用同一配置管理,便于切换.那么配置数据库连接就成为了很重要的一步. 1.安装plsql (这里 ...

  6. Linux下docker安装配置oracle,oracle创建用户并远程连接,实测可用!

    最近在给同学弄毕业设计的数据库,因为oracle在个人电脑上极不稳定,所以他的电脑数据库崩溃了,这时候我就在docker上为他拉了一个oracle,解决了问题. docker的安装共有以下几步,实测没 ...

  7. Linux下tomcat的安装与卸载以及配置(超简单)

    无敌简单的几步 1.安装 //首先你需要下载好tomcat包 sudo tar -xvzf apache-tomcat-7.0.85.tar.gz(这里是包名) -C 你要放的位置 2.卸载 rm - ...

  8. Maven安装与配置(最实用!!!)eclipse中配置maven

    Maven安装与配置 一.需要准备的东西 JDK Eclipse(本章主要是在eclipse中进行配置maven) Maven程序包 二.下载与安装 1. 前往maven下载最新版的Maven程序: ...

  9. CentOS Docker安装配置部署Golang web helloworld

    目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker部署Golang web helloworld 四.Docker与虚拟机的区别 五. ...

最新文章

  1. 【JavaScript】JavaScript模拟Class
  2. Spring Boot的第一个入门程序 HelloWorld
  3. UDP千兆以太网FPGA_verilog实现(一、知识搜集)
  4. junit 案例(三)
  5. 2、Docker 常用操作命令
  6. 戏说模式-追MM与设计模式 (转载)
  7. 湖南大学第十四届ACM程序设计新生杯(重现赛)L-The Digits String (矩阵快速幂)
  8. C++ 不懂的地方 记录01
  9. [OSX安装教程] [整理]虚拟机VM安装Mac OS X
  10. JQuery和JavaScript常用方法的一些区别
  11. Vue+Vue Router+Webpack打包网站基础页面
  12. 手把手教你搭建LyncServer2013之部署边缘服务器(七)
  13. 激活Window和office工具
  14. 正定矩阵与半正定矩阵定义与判别
  15. 【VUE】vue安装教程
  16. url 转码 java_URL 转码遇到的坑
  17. CSS3 仿古墓丽影9菜单界面
  18. 动态路由、OSPF多区域、ABR,ASBR
  19. centos7 silk转mp3 wav
  20. 入侵网站的黑客被我抓到了!

热门文章

  1. vscode 调试 js
  2. Photoshop给人像加上个性裂纹肌肤
  3. kaggle竞赛-Stable Diffusion数据分析与baseline
  4. ipad pro_如何关闭iPad Pro
  5. PHP借书网站小项目
  6. 木偶然-2012.12.28
  7. post 请求参数格式
  8. 如何一步一步实现Android的MVP框架
  9. Linux-2.6.38的LCD驱动分析(二)
  10. 若依系统下载固定excel模板并填充数据