robot_localization(2):准备数据

在使用robot_localization中的状态估计节点开始之前,用户必须确保其传感器数据格式正确,这一点很重要。每种类型的传感器数据都有各种注意事项,建议用户在尝试使用robot_localization之前完整阅读本教程。

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

1 遵守ROS标准

要考虑的两个最重要的ROS REP是:

  • REP-103(标准计量单位和坐标约定)
  • REP-105(坐标系约定)

鼓励不熟悉ROS或状态估计的用户阅读两个REP,因为它几乎肯定会帮助您准备传感器数据。robot_localization尝试尽可能遵守这些标准。

此外,它可能会有益于用户查看每种受支持的ROS消息类型的规范:

2 坐标系和转换传感器数据

REP-105指定了四个主要坐标系:base_linkodommapEarthbase_link坐标系牢固地固定在机器人上。mapodom是固定的世界坐标系,其原点通常与机器人的起始位置对齐。Earth坐标系用于为多个map坐标系(例如,分布在较大区域的机器人)提供公共参考坐标系。earth坐标系与本教程无关。

robot_localization的状态估计节点会生成状态估计,其状态在mapodom坐标系中给出,其速度在base_link坐标系中给出。在与状态融合之前,所有传入的数据都将转换为这些坐标系之一。每种消息类型中的数据如下转换:

  • nav_msgs/Odometry:所有位姿数据(位置和方向)都从消息头的frame_id转换为world_frame参数指定的坐标系(通常为mapodom)。在消息本身中,这特别是指pose属性中包含的所有内容。所有twist数据(线速度和角速度)都将从消息的child_frame_id转换为base_link_frame参数(通常为base_link)指定的坐标系。
  • geometry_msgs/PoseWithCovarianceStamped:以与Odometry消息中的pose数据相同的方式处理。
  • geometry_msgs/TwistWithCovarianceStamped:以与Odometry消息中的twist数据相同的方式处理。
  • sensor_msgs/Imu:尽管ROS社区正在解决IMU消息,但目前存在一些歧义。大多数IMU在固定的世界坐标系中报告方向数据,该坐标系的X和Z轴分别由指向磁北和地球中心的向量定义,Y轴朝东(与磁北向量偏移90度)。此坐标系通常称为NED(北,东,下)。但是,REP-103为室外导航指定了ENU(东,北,上)坐标系。在撰写本文时,robot_localization假定所有IMU数据都使用ENU坐标系,并且不适用于NED坐标系数据。将来可能会有所改变,但就目前而言,用户应确保将数据转换为ENU框架后,再将其与robot_localization中的任何节点一起使用。

IMU也可以在机器人的“中性”位置以外的其他位置定向。例如,用户可以将IMU安装在其侧面,或者旋转IMU使其面对机器人正面以外的方向。通常通过从base_link_frame参数到IMU消息的frame_id的静态转换来指定此偏移量。robot_localization中的状态估计节点将自动校正传感器的方向,以使其数据与base_link_frame参数指定的坐标系对齐。

3 处理tf_prefix

随着从ROS Indigo开始向tf2的迁移,robot_localization仍然允许使用tf_prefix参数,但是根据tf2,所有frame_id值的前导”/“都将被去除。

4 每种传感器消息类型的注意事项

4.1 Odometry

许多机器人平台都配备了提供瞬时平移和旋转速度的车轮编码器。许多人还内部整合了这些速度以生成位置估计。如果您对此数据负责或可以对其进行编辑,请记住以下几点:

1.Velocities/Posesrobot_localization可以整合速度或绝对姿态信息。通常,最佳做法是:

  • 如果里程计同时提供位置和线速度,请融合线速度。
  • 如果里程计同时提供方向和角速度,请融合方向。

注意:如果您有两个方向数据来源,则需要特别注意。如果两个方向都具有精确的协方差矩阵,则可以安全地融合方向。但是,如果其中一个或两个都未报告其协方差,则应仅融合来自更精确传感器的方向数据。对于另一个传感器,请使用角速度(如果已提供),或继续融合绝对方向数据,但是要为该传感器打开_differential模式。

2.frame_id:参见上面有关坐标系和变换的部分。

3.协方差:协方差值与robot_localization有关。robot_pose_ekf尝试在Odometry消息中融合所有pose变量。已经编写了一些机器人驱动程序来满足其要求。这意味着,如果给定的传感器没有产生某个变量(例如,没有报告位置Z的机器人),那么使robot_pose_ekf忽略它的唯一方法是将其方差膨胀到一个非常大的值(如1000),以便有效地忽略所讨论的变量。这种做法既不必要,甚至有害于robot_localization的性能。例外情况是您有第二个输入源测量有问题的变量,在这种情况下,协方差将起作用。

注意:有关更多信息,请参见配置robot_localization和从robot_pose_ekf迁移

4.Signs:遵守REP-103意味着您需要确保数据符号正确无误。例如,如果您有一个地面机器人,然后逆时针旋转它,则其偏航角应增加,并且其偏航速度应为正。如果将其向前推动,则其X位置应增加,并且其X速度应为正。

5.Transforms:广播odom->base_link转换。当world_frame参数设置为配置文件中odom_frame参数的值时,robot_localization的状态估计节点既输出nav_msgs/Odometry消息中的位置估计,也输出从其odom_frame参数指定的坐标系到其base_link_frame参数的转换。但是,某些机器人驱动程序也会将此测距信息与里程计信息一起广播。如果用户希望robot_localization负责此转换,则需要禁用其机器人驱动程序对该转换的广播。这通常作为参数公开。

4.2 IMU

除以下内容外,请务必阅读上述有关坐标系和IMU数据转换的部分。

1.遵守规范:与odometry一样,请确保您的数据符合REP-103sensor_msgs/Imu规范。仔细检查数据符号,并确保frame_id值正确。

2.协方差:遵循odometry的建议,请确保您的协方差有意义。不要使用较大的值来使滤波器忽略给定的变量。将您要忽略的变量的配置设置为false

加速度:注意加速度数据。robot_localization中的状态估计节点假定放置在平面上其中立的右侧向上位置的IMU将:

  • Measure +9.81 meters per second squared for the Z axis.
  • If the sensor is rolled +90 degrees (left side up), the acceleration should be +9.81 meters per second squared for the Y axis.
  • If the sensor is pitched +90 degrees (front side down), it should read -9.81 meters per second squared for the X axis.

4.3 PoseWithCovarianceStamped

请参阅Odometry。

4.4 TwistWithCovarianceStamped

请参阅Odometry。

5 常见错误

  • 输入数据不符合REP-103。确保所有值(尤其是方向角度)在正确的方向上增加或减少。
  • 不正确的frame_id值。应当在base_link_frame参数给定的坐标系中报告速度数据,或者应该在速度数据的frame_idbase_link_frame之间进行转换。
  • 协方差夸大。在测量中忽略变量的首选方法是通过odomN_config参数。
  • 缺少协方差。如果已配置给定传感器以将给定变量融合到状态估计节点中,则该值的方差(即位置 ( i , i ) (i,i) (i,i)处的协方差矩阵值,其中 i i i是该变量)不应为0。如果正在融合的变量遇到方差值0,则状态估算节点将为该值添加一个小的epsilon值(1e-6)。更好的解决方案是让用户适当设置协方差。
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: robot_localization是一个ROS软件包,用于多传感器融合定位。它可以将来自多个传感器的数据进行融合,提高机器人的定位精度和鲁棒性。 使用robot_localization需要进行以下步骤: 1. 安装robot_localization软件包。可以通过以下命令进行安装: ``` sudo apt-get install ros-<distro>-robot-localization ``` 其中,`<distro>`是ROS发行版的名称,例如`melodic`。 2. 配置传感器数据。需要将机器人的传感器数据进行配置,包括传感器类型、数据格式、数据频率等。 3. 配置robot_localization节点。需要配置robot_localization节点的参数,包括滤波器类型、传感器数据的话题名称、滤波器参数等。 4. 启动robot_localization节点。可以通过以下命令启动robot_localization节点: ``` roslaunch robot_localization <launch_file> ``` 其中,`<launch_file>`是启动文件的名称,例如`ekf_template.launch`。 5. 查看定位结果。可以通过RViz等工具查看机器人的定位结果。 以上就是robot_localization的使用教程。需要注意的是,使用robot_localization需要对ROS和机器人定位有一定的了解。 ### 回答2: robot_localization是一个用于机器人本地化的软件包,可以帮助机器人确定自己在环境中的位置和姿态。本软件包是基于ROS(机器人操作系统)架构开发的,并且可以与各种传感器和滤波器结合使用。 以下是robot_localization使用教程: 1.安装robot_localization包 通过执行以下命令来安装robot_localization软件包: $ sudo apt-get install ros-kinetic-robot-localization 2.设置传感器并创建参数文件 传感器是用于帮助机器人检测其姿态和位置的关键设备。因此,我们需要在robot_localization中设置传感器并创建对应的参数文件。常用的传感器包括:IMU(惯性测量单元)、GPS(全球定位系统)、里程计等。 3.创建launch文件 launch文件用于启动robot_localization节点和其他需要的节点。您可以根据自己的需要创建自定义launch文件,用于启动您的机器人本地化任务。通常,launch文件中需要指定: -node名称(例如,robot_localization_node) -输入话题(即传感器数据) -输出话题(即本地化结果) 4.修改参数并启动节点 为了使robot_localization能够准确地本地化机器人,您需要修改参数以适应特定的机器人和环境。可以通过修改参数文件或使用ROS参数服务器来实现。完成修改后,启动robot_localization节点并查看输出的本地化数据。 总的来说,robot_localization软件包为机器人本地化提供了一个简单而强大的工具。使用这个软件包,您可以很容易地集成不同类型的传感器,来自动地确定机器人在环境中的位置,从而为实际机器人应用提供更精确和可靠的定位服务。 ### 回答3: robot_localization是一种在ROS系统中使用的机器人本地化软件包,它可用于将机器人的位置和姿态估计准确地转换为地图坐标系中的位置和姿态。它是由ros.org支持的开源软件,使用C++编写,可在基于ROS的机器人系统上实现高精度本地化。 使用robot_localization的教程如下: 1. 安装robot_localization:使用ROS系统管理器或命令行安装robot_localization软件包,确保软件包已在系统中安装。 2. 准备输入源:robot_localization提供了多种输入源,包括IMU、GPS、里程表和惯性测量单元(IMU)。每个传感器都有自己的topic和frame ID。确保输入源已连接,并生成正确的topic和frame ID。在配置中指定每个输入源。 3. 配置文件:使用YAML文件格式为robot_localization提供配置文件。配置文件定义输入传感器、协方差矩阵、变量关系和输出状态的路径。使用的配置文件应根据应用程序进行调整和修改。 4. 运行robot_localization节点:为robot_localization节点创建一个launch文件,该文件指定输入源和配置文件的位置。启动launch文件,开始本地化。 5. 调试和优化:确保本地化系统正确运行并提供高精度的位置和姿态估计。对于不良的传感器数据或本地化漂移等问题进行调试,可能需要调整配置文件或修改系统硬件。 总之,使用robot_localization需要准备好传感器数据,配置文件和启动节点。通过适当的调试和优化,可以实现高精度的本地化估计。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值