1. 可行的主题
Robot Pose EKF节点订阅下面的主题:
/odom 2D消息<nav_msgs::Odometry>
/imu_data 3D消息<sensor_msgs::Imu>
/vo 3D消息<nav_msgs::Odometry>
要在自己的传感器中使用EKF,应该将传感器数据发布在这三个主题中,传感器应该发布机器人本体坐标系相对世界坐标系的关系。每个传感器可以基于不同的世界坐标系。注意:每个主题只能接受一个传感器输入,将来的版本可能会增加多个传感器输入,当前最普遍的输入数据是/vo主题的odometry消息。它包含3D姿态、速度及其协方差。所以最适合将自主的传感器增加在其中。
2. Building a GPS sensor message构建GPS传感器数据
GPS传感数据是3D无朝向信息的数据,GPS传感器发布的数据类似下面:
msg.header.stamp = gps_time // time of gps measurement
msg.header.frame_id = base_footprint // the tracked robot frame
msg.pose.pose.position.x = gps_x // x measurement GPS.
msg.pose.pose.position.y = gps_y // y measurement GPS.
msg.pose.pose.position.z = gps_z // z measurement GPS.
msg.pose.pose.orientation.x = 1 // identity quaternion
msg.pose.pose.orientation.y = 0 // identity quaternion
msg.pose.pose.orientation.z = 0 // identity quaternion
msg.pose.pose.orientation.w = 0 // identity quaternion
msg.pose.covariance = {
cox_x, 0, 0, 0, 0, 0, // covariance on gps_x
0, cov_y, 0, 0, 0, 0, // covariance on gps_y
0, 0, cov_z, 0, 0, 0, // covariance on gps_z
0, 0, 0, 99999, 0, 0, // large covariance on rot x
0, 0, 0, 0, 99999, 0, // large covariance on rot y
0, 0, 0, 0, 0, 99999 } // large covariance on rot z
2.1 使用GPS驱动器发布NavSatFix
gps_common软件包中的utm_odometry_node用于将GPS测量值从sensor_msgs/NavSatFix 转换为sensor_msgs/Odometry.
<node name="gps_conv" pkg="gps_common" type="utm_odometry_node">
<remap from="odom" to="vo"/>
<remap from="fix" to="/gps/fix" />
<param name="rot_covariance" value="99999" />
<param name="frame_id" value="base_footprint" />
</node>
3 映射主题名称
GPS传感器发布gps_meas主题,EKF节点希望处理的是 odom主题的odometry消息,为了连接GPS传感器与EKF节点,我们将vo映射到gps_meas上,因此在launch文件中增加下面的数据:
<remap from="vo" to="gps_meas" />
滤波器的输出是在 /robot_pose_ekf/odom_combined主题,节点同样'odom_combined' 与'base_link' 的变换发布到 /tf_message。