现在你有了一个基于 GPS 的新的里程计信息源,是时候将这些数据与来自 IMU 和传统里程计的额外数据合并,以生成 TF map -> odom。
让我们更新我们的 start_navigation_with_gps_ekf.launch 启动文件版本。
start_navigation_with_gps_ekf.launch
现在让我们集中在 ekf_localization节点的启动上:
如你所见,我们正在加载一个新的参数文件,名为 robot_localization_with_gps.yaml
Exercise 3.1
实现所有启动文件和配置文件,以便能够启动整个系统,并使 Summit XL 完全定位并能够自主导航。它应该能够使用 RVIZ 中的 2D Pose 信号移动,就像在上一章中一样。
遵循的步骤:
创建 start_map_server.launch 并检查您创建的空地图是否正常。创建 start_navsat.launch 并检查它是否正常工作并进行转换。移动 Summit XL 机器人以查看值是否相应变化。创建 start_navigation_with_gps_ekf.launch 启动文件的更新版本。创建包含所有必需参数的 robot_localization_with_gps.yaml 文件。启动它并检查 Summit XL 是否可以导航。
尝试到达外面的建筑桶。离开建筑物时要小心。
END Exercise 3.1
你应该在 RVIZ 中获得与此类似的结果:
你成功了吗?好吧,如果你没有,让我们看看配置文件现在应该是什么样子:
robot_localization_with_gps.yaml
#Configuation for robot odometry EKF
#
frequency: 50
two_d_mode: true
publish_tf: true
odom_frame: summit_xl_a_odom
base_link_frame: summit_xl_a_base_footprint
world_frame: map
map_frame: map
odom0: /robotnik_base_control/odom
odom0_config: [false, false, false,
false, false, false,
true, true, false,
false, false, true,
false, false, false]
odom0_differential: true
imu0: /imu/data
imu0_config: [false, false, false,
false, false, true,
false, false, false,
false, false, true,
true, false, false]
imu0_differential: false
odom1: /odometry/gps
odom1_config: [true, true, false,
false, false, false,
false, false, false,
false, false, false,
false, false, false]
odom1_differential: false
process_noise_covariance": [0.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0.06, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0.06, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0.025, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0.025, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0.04, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.02, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.015]
initial_estimate_covariance: [1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1e-9, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1e-9, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1e-9, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1e-9, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1e-9, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1e-9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1e-9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1e-9, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1e-9]
如您所见,此配置文件的主要区别在于现在我们有了 GPS 传感器:
odom1: /odometry/gps
odom1_config: [true, true, false,
false, false, false,
false, false, false,
false, false, false,
false, false, false]
odom1_differential: false
此 /odometry/gps 主题包含 navsat_transform_node 进行的 GPS 到 Odometry 转换的数据。
还请注意,我们将 publish_tf 变量设置为 true。这非常重要,因为现在我们需要发布从 odom 到地图的转换。
您可以检查您拥有的 TF 树。您应该看到您的 ekf_localization_with_gps 节点发布了从 odom 到地图的地图。