ROS2安装Localization模块

1. 准备

  • Map: ply, pcd格式都可以
  • 配置好的雷达程序,这里以Mid360为例子,之前已经配好了,有问题看另一篇blog.
  • TF tree:要有/map, /odom, /baselink等的关系,其中/map -> /odom之间的关系可以通过localization的程序获得,但是/odom -> /baselink -> ... 后续这些link最好提前定义好,暂时没有可以调用ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 world map 构建一下TF的关系

2.部署

2.1 安装 ndt_omp_ros2(必须依赖,加速 NDT)

先进入workspace,根据实际情况调整对应路径
cd ~/ros2_ws/src
git clone https://github.com/rsasaki0109/ndt_omp_ros2.git

2.2 安装 lidar_localization_ros2

git clone https://github.com/rsasaki0109/lidar_localization_ros2.git

2.3 安装其他依赖

sudo apt update
sudo apt install ros-humble-pcl-ros ros-humble-pcl-conversions ros-humble-tf2-ros

cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install --packages-up-to ndt_omp_ros2 lidar_localization_ros2
source install/setup.bash

2.4 编译完成后需要修改一些参数

1)找到文件param/localization.yaml

json 复制代码
/**:
    ros__parameters:
      registration_method: "NDT_OMP"
      score_threshold: 2.0
      ndt_resolution: 1.0
      ndt_step_size: 0.1
      ndt_num_threads: 4
      ndt_max_iterations: 35
      transform_epsilon: 0.01
      voxel_leaf_size: 0.2
      scan_max_range: 100.0
      scan_min_range: 1.0
      scan_period: 0.1
      use_pcd_map: true
      map_path: ""
      set_initial_pose: true
      initial_pose_x: 0.0
      initial_pose_y: 0.0
      initial_pose_z: 0.0
      initial_pose_qx: 0.0
      initial_pose_qy: 0.0
      initial_pose_qz: 0.0
      initial_pose_qw: 0.0
      use_odom: false
      use_imu: false
      enable_debug: true
      enable_map_odom_tf: false
      global_frame_id: map
      odom_frame_id: odom
      base_frame_id: base_link
      enable_timer_publishing: false
      pose_publish_frequency: 30.0

修改:
map_path: "":改成当前地图的路径,pcd格式的map
enable_map_odom_tf: false:true,这里会把map -> odom的关系发布出来
enable_timer_publishing:true

以下这三个frame根据实际情况来调整:

复制代码
      global_frame_id: map
      odom_frame_id: odom
      base_frame_id: base_link

2)找到文件/launch/lidar_localization.launch.py

找到以下这段code,看看要不要修改/base_link和/velodyne,根据实际情况来,我用的是mid360,所以velodyne -> livox_frame

python 复制代码
    lidar_tf = launch_ros.actions.Node(
        name='lidar_tf',
        package='tf2_ros',
        executable='static_transform_publisher',
        arguments=['0','0','0','0','0','0','1','base_link','velodyne']
        )

另一处要改的是以下这段code,关于点云的映射关系,/velodyne_points -> /livox/lidar,改成实际雷达的点云输出即可,数据类型为sensor_msgs/PointCloud2

python 复制代码
    lidar_localization = launch_ros.actions.LifecycleNode(
        name='lidar_localization',
        namespace='',
        package='lidar_localization_ros2',
        executable='lidar_localization_node',
        parameters=[localization_param_dir],
        remappings=[('/cloud','/velodyne_points')],
        output='screen')

3.运行

  • 先启动TF tree相关的节点
  • 启动雷达的节点
  • 确保有以下的input
    /cloud (sensor_msgs/PointCloud2)
    /map (sensor_msgs/PointCloud2)
    /initialpose (geometry_msgs/PoseStamed)这个在启动完localization节点后,点一下rviz的2D pose estimate就行了
  • cd到localization的ws里,启动rvizrviz2 -d src/lidar_localization_ros2/rviz/localization.rviz,也可以不用它们提供的rviz配置文件,自己启动一个rviz然后添加一下对应topic就行了
  • 运行ros2 launch lidar_localization_ros2 lidar_localization.launch.py
  • 这时再到rviz里给个初始位置就行了

效果如下:

Localization Test-1

相关推荐
济6171 天前
ROS开发专栏---基于激光雷达的自动避障---适配Ubuntu 22.04
嵌入式·ros2·机器人开发·机器人方向
济6171 天前
ROS开发专栏---基于 SLAM Toolbox 实现仿真环境 SLAM 建图--适配Ubuntu 22.04
嵌入式·ros2·机器人开发·机器人方向
BestOrNothing_20153 天前
ROS2 xacro 保姆级使用教程!零基础从入门到精通
机器人·ros2·macro·xacro·prefix·引用变量·调用宏
kyle~4 天前
ROS2 --- RMW(ROS Middleware Interface)
linux·c++·机器人·ros2
济6174 天前
ROS开发专栏---IMU 数据读取实验实现---适配Ubuntu 22.04
ubuntu·ros2·机器人开发
济6174 天前
ROS开发专栏---基于 IMU 实现机器人航向锁定实验---适配Ubuntu 22.04
嵌入式·ros2·机器人开发
kyle~5 天前
ROS2---rosbag2记录和回放话题、服务和动作数据
linux·机器人·数据采集·ros2
济6176 天前
ROS开发专栏---激光雷达数据获取仿真实验+ RViz2使用教程--适配Ubuntu 22.04
嵌入式硬件·嵌入式·ros2·机器人方向
学机械的鱼鱼6 天前
PX4与ROS2通信原理与仿真环境搭建教程
笔记·学习·px4·ros2
kyle~7 天前
机器人时间链路---工程流程示例
c++·3d·机器人·ros2