LGSVL仿真总是在地图的一个特定位置生成汽车,不同于原点。在Autoware中使用的NDT定位器。自动堆叠要求对车辆姿态的初步猜测接近于真实情况。根据这一猜测,NDT在交互优化中找到最佳姿态(即定位)。初始化后,NDT使用上一个时间步的信息进行初始化,不需要用户进一步输入。它应该随着汽车的移动而本地化。
预备知识
- 按照 SVL 仿真器 说明进行操作。
- 启动 Autoware.Auto 堆栈,包括 NDT 组件和 RViz 可视化; 例如按照 AVP 演示说明 。
在本地化成功之前,在启动堆栈的终端中预期会出现以下错误消息:
[localization.p2d_ndt_localizer_node]:找不到“map”和“base_link”之间的连接,因为它们不是同一棵树的一部分。Tf 有两个或更多未连接的树。 |
有两种方法可以将车辆姿态的初始猜测发送到系统:
- 在 RViz 中以图形方式选择姿势。
- 在终端中发布姿势。
选项 1. 更灵活,因为可以在模拟中将汽车开到可用地图上的任何位置,然后选择在那里初始化定位。
选项 2. 更容易获得可重复的结果。
最初,RViz 以地图框的原点为中心,但车辆生成到地图中的不同位置,RViz 仍然不知道。 在 RViz 中使用鼠标滚轮放大/缩小并使用鼠标中键平移视图。 在模拟器窗口中按下 F1 以查看相机控件。 下图显示了车辆在其产卵点,RViz 缩小到足以显示地图框的原点和车辆的位置。 地图的原点用一个白色的小网格表示,其中包含假定(但不正确)车辆姿势的白色轮廓。
仿真器和 RViz 的初始视图
使用 RViz 进行初始化
检查在 RViz 中 map 是否选择了固定框架。 确保地图和 TF 可视化已启用,并且您拥有良好的自上而下视图。
在 RViz 中,单击 2D pose estimation 按钮,然后单击/拖动车辆的位置,使箭头指向与汽车相同的方向,然后松开鼠标按钮。 然后将带有姿态估计的消息发送到 NDT。
这是 rviz 设置初始姿势时的样子:
使用 rviz 初始化本地化
可视化 tf (红-蓝-绿轴)应出现在该位置,并且 Could not find a connection 终端中的错误消息应停止。
这是 rviz 成功初始化后的样子,具体取决于启用了哪些可视化; 重要的是彩色 tf 十字架 odom , base_link 其标记比例已增加,以便在 RViz 内更好地看到:
定位初始化后在 RViz 中放大车辆 笔记 在第一次定位时,会有一个跳跃,并且 RViz 显示屏需要重新居中以显示车辆。
如果初始姿态估计接近,您应该能够在模拟器中四处行驶并看到 base_link 框架跟踪汽车的位置
警告 如果汽车以不稳定的方式手动驾驶,或者 CPU 负载过大并且一些激光雷达数据包被丢弃,则可能无法进行定位。 如果本地化卡住了,重新启动堆栈并重新初始化。
请注意,可以通过第二种初始化方法回显和复制姿势以供以后使用:
de$ source /opt/AutowareAuto/setup.bash
ade$ ros2 主题 echo /localization/initialpose |
使用预定义的姿势初始化
为了在 SVL 模拟器 中定义的模拟生成点初始化本地化,请在新终端中输入以下命令:
ade$ source /opt/AutowareAuto/setup.bash
ade$ ros2 topic pub --once /localization/initialpose geometry_msgs /msg /PoseWithCovarianceStamped "
{标题:{
邮票 : {
秒:0,
纳秒:0
},
frame_id:“地图”
},
姿势:{
姿势:{
位置 : {
x:-57.463,
y:-41.644,
z:-2.01,
},
方向 : {
x: 0.0,
y: 0.0,
z:-0.99917,
w: 0.04059,
},
},
协方差:[
0.25, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.25, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.068,
],
}}
" |
|