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

相关推荐
kyle~3 天前
FANUC 机械臂 --- 配置字
网络·c++·机器人·ros2
MIXLLRED3 天前
Ubuntu22.04 + ROS2 Humble + ORB-SLAM3 保存地图格式为.pcd文件
pcl·ros2·pcd·humble·orb_slam3
MIXLLRED6 天前
Ubuntu22.04 + ROS2 Humble + ORB-SLAM3 下从环境配置到深度相机d435实时SLAM
ros2·humble·orb_slam3·ubuntu22.04·d435
YQ_019 天前
Ubuntu 22.04 下让 Gazebo / RViz 使用 NVIDIA GPU 渲染
ros2
小手智联老徐10 天前
ROS2:与 Gazebo 版本对应关系解析
机器人·ros2·gazebo
rqtz11 天前
【机器人】ROS2配置solidworks模型转换的URDF文件
ros2·urdf·solidworks
小手智联老徐11 天前
ROS2:Humble 安装详解(Ubuntu 22.04)
ros2·humble·colcon
rqtz11 天前
【机器人】ROS2 功能包创建与 CMake 编译链路探秘
机器人·cmake·ros2
maxmaxma12 天前
ROS2机器人少年创客营:Python第三课
开发语言·python·机器人·ros2