本文主要是介绍robot_localization包的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
robot_localization包没有限制传感器的数据输入。
支持的状态估计节点数据类型:
• nav_msgs/Odometry
• geometry_msgs/PoseWithCovarianceStamped
• geometry_msgs/TwistWithCovarianceStamped
• sensor_msgs/Imu
状态向量:[x y z α β γ x˙ y˙ z˙ α˙ β˙ γ˙ ˙x˙ ˙y˙ ˙z˙](分别代表线速度,欧拉角,加速度,角加速度)
两种典型使用案例:
- 融合连续的传感器数据(里程计和IMU)创建局部精确的状态估计
- 融合连续的传感器数据及全局位姿估计来提供精确而完整的全局状态估计
状态估计节点
- ekf_localization:扩展卡尔曼滤波
- ukf_localization:无迹卡尔曼滤波
gps传感器预处理节点
navsat_transform_node:允许用户将地理坐标(纬度和经度)转换为机器人的世界框架(通常是map或odom)
TF树
协方差矩阵(包含初估计方差和噪声方差)
kf_localization_node
指明坐标框架
<param name="map_frame" value="map"/>
<param name="odom_frame" value="odom"/>
<param name="base_link_frame" value="base_link"/>
<param name="world_frame" value="odom"/>
传感器输入
<param name="odom0" value="/controller/odom"/>
<param name="odom1" value="/some/other/odom"/>
<param name="pose0" value="/altitude"/>
<param name="pose1" value="/some/other/pose"/>
<param name="pose2" value="/yet/another/pose"/>
<param name="twist0" value="/optical_flow"/>
<param name="imu0" value="/imu/left"/>
<param name="imu1" value="/imu/right"/>
<param name="imu2" value="/imu/front"/>
<param name="imu3" value="/imu/back"/>
协方差矩阵的输入
噪声方差
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]
使用navsat_transform_node
过程
- 将gps数据转换成UTM坐标
- 使用初始的UTM坐标,EKF/UKF输出和IMU生成从UTM网格到机器人世界框架的(静态)变换T
- 使用T变换所有测量的gps数据
- 将数据发给EKF/UKF
需要的输入:
• nav_msgs/Odometry (EKF输出,需要机器人当前的位置)
• sensor_msgs/Imu (必须有陀螺仪,需要确定全局朝向)
• sensor_msgs/NavSatFix (从导航卫星设备输出)
相关设置
<param name="magnetic_declination_radians" value="0"/>
<param name="yaw_offset" value="0"/>
<param name="zero_altitude" value="true"/>
<param name="broadcast_utm_transform" value="true"/>
<param name="publish_filtered_gps" value="true"/>
这篇关于robot_localization包的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!