智能机器人(57):融合调试

robot-pose-ekf的配置参数

freq:
滤波器的输出频率。注意, 高的频率只是把合成odom输出的更频繁,并不会增加姿态评估的精度。

sensor_timeout:
等待某一路传感器消息的最大时间, 超过这个时间如果vo或者imu的传感器还没有新的消息到达,则滤波器不再等待。

ekf滤波器不要去所有sensor一直的同步在线, 缺一些没关系。例如t0时刻滤波器更新输出, t1时刻来一路odom数据, t2时刻来一路imu数据, 则滤波器向内差值产生t0~t1的imu数据, 最终输出姿态评估。
( https://chidambaramsethu.wordpress.com/2013/07/15/a-beginners-guide-to-the-the-ros-robot_pose_ekf-package/)

output_frame:
wiki的示例是有问题的、至少是不清楚的:
示例默认把”output_frame” 设为”odom”容易混淆, 这个坐标系最好命名为”odom_combined”并不会和输出topic: “odom_combined” 混淆。

源代码更清楚:
(http://docs.ros.org/kinetic/api/robot_pose_ekf/html/odom__estimation__node_8cpp_source.html)
76 // paramters
77 nh_private.param(“output_frame”, output_frame_, std::string(“odom_combined”));
78 nh_private.param(“base_footprint_frame”, base_footprint_frame_, std::string(“base_footprint”));
79 nh_private.param(“sensor_timeout”, timeout_, 1.0);
80 nh_private.param(“odom_used”, odom_used_, true);
81 nh_private.param(“imu_used”, imu_used_, true);
82 nh_private.param(“vo_used”, vo_used_, true);
83 nh_private.param(“gps_used”, gps_used_, false);
84 nh_private.param(“debug”, debug_, false);
85 nh_private.param(“self_diagnose”, self_diagnose_, false);
86 double freq;
87 nh_private.param(“freq”, freq, 30.0);

104 pose_pub_ = nh_private.advertise(“odom_combined”, 10);

434 odom_broadcaster_.sendTransform(StampedTransform(tmp, tmp.stamp_, output_frame_, base_footprint_frame_));

注意: obot_pose_ekf 的 “output_frame”对应 amcl的”odom_frame_id”。

0 回复

发表评论

Want to join the discussion?
Feel free to contribute!

发表评论