环境:
硬件环境:
jetson nano/树莓派/地平线X3
北京渡众机器人自动驾驶小车
IMU、odom、UWB模拟GPS信号
软件环境:
ROS2
C++
概述
卡尔曼滤波的意义就是如何利用各传感器的优点,将所有数据结合起来,取长补短,实现更好的定位效果。
今天我们用微缩ros机器人小车来实现模拟自动驾驶真实车辆融合定位算法,室外的RTK信号使用UWB来代替,topic为fix。
robot_localization 是状态估计节点的集合,每个节点都是在 3D 空间中移动的机器人的非线性状态估计器的实现。它包含两个状态估计节点和 ekf_localization_node,ukf_localization_node。此外,还提供 navsat_transform_node。
优点:
- 融合任意数量的传感器。节点不限制输入源的数量。例如,如果您的机器人有多个IMU或多个里程计信息源,则其中
robot_localization的状态估计节点可以支持所有这些IMU。 - 支持多种 ROS 消息类型。所有
robot_localization中的状态估计节点都可以接收 nav_msgs/Odometry、sensor_msgs/Imu、geometry_msgs/PoseWithCovarianceStamped 或 geometry_msgs/TwistWithCovarianceStamped 消息。 - 每个传感器的输入自定义。如果给定的传感器消息包含您不希望包含在状态估计中的数据,则
robot_localization状态估计节点允许您基于每个传感器排除该数据。 - 连续估计。
robot_localization中的每个状态估计节点在收到单个测量值后立即开始估计车辆的状态。如果传感器数据中有一个长时间没有接收到数据时期,过滤器将继续通过内部运动模型估计机器人的状态。 - 可以融合GPS/北斗数据
- ros和ros2都支持
所有状态估计节点都跟踪车辆的 15 维状态: (X,Y,Z,roll,pitch,yaw,X˙,Y˙,Z˙,roll˙,pitch˙,yaw˙,X¨,Y¨,Z¨) 。
按照每3个数据一组,分别代表:
- x-y-z坐标系的坐标(位置)、
- x/y/z轴的角度(姿态)、
- x/y/z轴的速度、
- x/y/z轴的角速度、
- x/y/z轴的加速度。
robot_localization 用途
1,扩展卡尔曼滤波融合IMU和Odom,输出Odom->base_link的tf,使用ekf_localization_node节点。
2,扩展卡尔曼滤波融合IMU和Odom和全局定位(GPS/北斗/UWB/landmark),输出全局定位->base_link的tf,使用ekf_localization_node加navsat_transform_node节点。
具体使用
融合IMU和Odom
直接先上最终使用配置参数:
### ekf config file ###
ekf_filter_node:
ros__parameters:
frequency: 20.0
sensor_timeout: 0.01
two_d_mode: true
transform_time_offset: 0.0
transform_timeout: 0.0
print_diagnostics: true
debug: false
debug_out_file: /path/to/debug/file.txt
permit_corrected_publication: false
publish_acceleration: false
publish_tf: true
map_fra

本文介绍了如何在ROS2环境中使用robot_localization节点实现自动驾驶车辆的融合定位,通过IMU、odom和UWB等传感器数据,进行卡尔曼滤波,支持多传感器输入并提供精确的定位。
1万+

被折叠的 条评论
为什么被折叠?



