irpas技术客

ROS2经验:ROS2 Galactic编译运行最新cartographer ROS2代码_Kal-Lai_cartographer ros2

网络投稿 2045

Cartographer是一个可以在多个平台提供实时的 2D 和 3D同步定位和映射 ( SLAM ) 和传感器配置的系统。

Ubuntu上原本就可以使用apt命令安装支持ros2 galactic的cartographer软件包(ros-galactic-cartographer和ros-galactic-cartographer-ros )。

但是在使用中会发现这个版本的功能比较老旧:少了一些最新代码才有的配置参数,地图消息话题发布卡顿延迟,纯定位模式无法设置只保留3张子图。。

当然最重要的是没有源码,不能根据自己的需求去优化部分代码逻辑。

所以我们直接下载源代码来编译。

本教程将描述如何编译最新cartographer代码支持ros2 galactic。

开发环境

操作系统:Ubuntu 20.04

ROS版本:ROS2 Galactic

编译和安装 如果已经安装了Debian包版本的cartographer,需先卸载删除。 sudo apt remove ros-galactic-cartographer ros-galactic-cartographer-ros && sudo apt autoremove 安装cartographer依赖库 sudo apt update sudo apt install -y \ clang \ cmake \ g++ \ git \ google-mock \ libceres-dev \ liblua5.3-dev \ libboost-all-dev \ libprotobuf-dev \ protobuf-compiler \ libeigen3-dev \ libgflags-dev \ libgoogle-glog-dev \ libcairo2-dev \ libpcl-dev \ libsuitesparse-dev \ python3-sphinx \ lsb-release \ ninja-build \ stow 创建cartographer_ros工作空间,并下载cartographer最新源码。

注意,ROS2的cartographer是在ROS2的github仓库中维护的版本才能用,非cartographer官方仓库。

我这里把工作空间命名为cartoros2_ws。

mkdir -p ~/cartoros2_ws/src cd ~/cartoros2_ws/src git clone https://github.com/ros2/cartographer.git git clone https://github.com/ros2/cartographer_ros.git

使用脚本安装abseil-cpp库

cd ~/cartoros2_ws src/cartographer/scripts/install_abseil.sh 4. 构建 source /opt/ros/galactic/setup.bash cd ~/cartoros2_ws colcon build

等待完成后就可以运行使用了

运行

运行前先确保

source /opt/ros/galactic/setup.bash . ~/cartoros2_ws/install/local_setup.bash

可以和Cartographer ROS官网的教程一样运行bag文件(需要用ROS2的bag),只需把命令修改为:

建图:

ros2 launch cartographer_ros demo_backpack_2d.launch.py bag_filename:=<bag文件的路径>

纯定位:

ros2 launch cartographer_ros demo_backpack_2d_localization.launch.py \ load_state_filename:=<pbstream文件的路径> \ bag_filename:=<bag文件的路径>

当然我们主要还是要在自己的实际的机器人上跑cartographer。

已建图为例。

先复制一份lua参数配置文件,之后用于自己的机器人配置,我这里暂时命名为test.lua

cd ~/cartoros2_ws/src/cartographer_ros/cartographer_ros/configuration_files/ cp backpack_2d.lua test.lua

然后修改一份launch文件,我这里暂时命名为test.launch.py

cd ~/cartoros2_ws/src/cartographer_ros/cartographer_ros/launch/ cp backpack_2d.launch.py test.launch.py

以下贴出launch代码作为参考

# Author: Kal Lai from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription from launch.conditions import IfCondition, UnlessCondition from launch.substitutions import LaunchConfiguration from launch_ros.actions import Node, SetRemap from launch_ros.substitutions import FindPackageShare from launch.launch_description_sources import PythonLaunchDescriptionSource import os def generate_launch_description(): use_sim_time = LaunchConfiguration('use_sim_time', default='false') ## ***** Launch arguments ***** use_sim_time_arg = DeclareLaunchArgument('use_sim_time', default_value = use_sim_time) ## ***** File paths ****** pkg_share = FindPackageShare('cartographer_ros').find('cartographer_ros') cartographer_node = Node( package = 'cartographer_ros', executable = 'cartographer_node', parameters = [{'use_sim_time': use_sim_time}], arguments = [ '-configuration_directory', FindPackageShare('cartographer_ros').find('cartographer_ros') + '/configuration_files', '-configuration_basename', 'test.lua'], output = 'screen' ) cartographer_occupancy_grid_node = Node( package = 'cartographer_ros', executable = 'cartographer_occupancy_grid_node', parameters = [ {'use_sim_time': use_sim_time}, {'resolution': 0.05}], ) return LaunchDescription([ use_sim_time_arg, cartographer_node, cartographer_occupancy_grid_node, ])

回到工作空间后编译安装

cd ~/cartoros2_ws colcon build

然后就能运行了

ros2 launch cartographer_ros test.launch.py

贴个在RK3399上使用cartographer建的占地面积5000平左右的地图


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #cartographer #ros2