1.官源安装与试用
由apt-get install安装ros-foxy-cartographer-ros、ros-foxy-turtlebot3、ros-foxy-turtlebot3-simulations及ros-foxy-webots-ros2(要求版本≥1.1.1)。
(1)基于WebotsTurtlebot3Burger测试
source /opt/ros/foxy/setup.bash
ros2 launch webots_ros2_turtlebot robot_launch.py
ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=true
ros2 run teleop_twist_keyboard teleop_twist_keyboard
(2)基于GazeboTurtlebot3Burger测试
export TURTLEBOT3_MODEL=burger
source /opt/ros/foxy/setup.bash && source /usr/share/gazebo/setup.sh
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=true
ros2 run turtlebot3_teleop teleop_keyboard
ros2 run nav2_map_server map_saver_cli -f /root/app/map
(3)基于官方离线数据集测试:
(4)官方使用手册说明:官方使用手册仍是基于ROS1的,但核心部分其实与ROS1或ROS2无关,如果读者还熟悉ROS1和ROS2,那可以无缝切换。使用手册中以下两部分是核心:
ROS服务:https://google-cartographer-ros.readthedocs.io/en/latest/ros_api.html#
参数配置:https://google-cartographer-ros.readthedocs.io/en/latest/configuration.html#
2.文件分析与精简
于https://github.com/ros2/cartographer_ros下载cartographer_ros-1.0.9003.zip:https://github.com/ros2/cartographer_ros/archive/1.0.9003.zip。
(1)删除~/cartographer_ros_msgs:该包是消息包,无需编译之而直接使用官源安装的,减少编译负担。
(2)可选删除~/cartographer_rviz:该包仍是基于ROS1的,ROS2编译系统无法识别,编译时会直接跳过该包。
(3)可选删除~/cartographer_ros外的所有文件和目录:这些文件和目录要么不是关注的重点要么仍是基于ROS1的,删除后,眼不见心不乱。
(4)可选删除~/cartographer_ros/launch:该目录中的文件仍是基于ROS1的,但可以作为撰写ROS2Launch脚本的参考。
(5)核心配置:~/cartographer_ros/CMakeLists.txt和~/cartographer_ros/cartographer_ros/CMakeLists,前者包含后者。
(6)核心源码:~/cartographer_ros/*.h和~/cartographer_ros/*.cc
(7)主函数文件:共12个文件含main函数
node_main.cc:生成为结点cartographer_node
offline_node_main.cc:
occupancy_grid_node_main.cc:生成为结点ccupancy_grid_node
assets_writer_main.cc:
pbstream_to_ros_map_main.cc:
pbstream_map_publisher_main.cc:
rosbag_validate_main.cc:
rosbag_publisher_main.cc:
start_trajectory_main.cc:
trajectory_comparison_main.cc:
node_grpc_main.cc:
offline_node_grpc_main.cc:
3.源码修改与编译
(1)解压核心源码到/root/app/ros2ex/ros2cart使之包含:cartographer_ros, configuration_files, ..., CMakeLists.txt, package.xml
(2)根据需求修改相应的源码如对node_main.cc->Run添加:for(int k = 0; k < 10; ++k) printf("\n####################<Valid Modification>####################\n");
(3)终端进入/root/app/ros2ex/out执行:colcon build --merge-install --base-path ..
(4)测试修改的有效性:测试命令同前,启动后输出上面代码中的字符即表示成功。
(5)根据需求修改其它的源文件或在搭建Qtcreator调试环境后再进行。
4.配置精简与编译
(1)备份/root/app/ros2ex/ros2cart/CMakeLists.txt为CMakeLists.bak,用于后续精简的参照。
(2)修改CMakeLists.txt和package.xml中包名由cartographer_ros为ros2cart,以免与已有的包冲突。
(3)精简CMakeLists.txt(主要是移除非必要的依赖和融合ros2cart/cartographer_ros/CMakeLists.txt中的两个结点),并使能用Qtcreator打开编译。
注意:先执行source /opt/ros/foxy/setup.bash后再打开Qtcreator,以使Qtcreator获得相应的环境设置,否则无法编译通过。
精简后的配置说明:
(1)精简后的包(ros2cart)与已有的包(cartographer_ros)不冲突(即两者可以并存),这有利于交叉验证,确保后续对算法的优化朝正确的方向发展。
(2)精简后的包(ros2cart)与已有的包(cartographer_ros)的除包名不同外,再者就是核心库名不同(前者为libros2cart.a后者为libcartographer_ros),尽管可以用相同的库名,但基于以下原因没有这么做。
原因1:采用了ROS2的--merge-install编译选项(ROS2官方包也是如此),这使得两个库必须位于同一目录(~/install/lib)内,若采用相同的库名,则只能存在其中一个。
原因2:库名不会被ros2run或ros2launch直接调用,所以不会影响使用端,使用端只会调用可执行程序,而可执行程序位于单独目录(目录名为包名),所以可以不修改可执行程序名。
原因3:原包中的CMakeLists.txt直接使用包名作为库名,由于只生成一个库且CMakeLists.txt中多处使用此库,所以使用包名作为库名的是一种好的方式,于是精简包也使用了包名作为库名。
(3)CMakeLists.txt指定了编译输出路径和结果安装路径且都为/root/app/ros2ex/out,但安装路径仅对ROS2生效,所以Qtcreator只在/root/app/ros2ex/out中有输出而ROS2在/root/app/ros2ex/out和/root/app/ros2ex/out/install下都有输出。
(4)当前版本(cartographer_ros2-1.0.9002)只生成三个结果:libcartographer_ros.a或libros2cart.a、cartographer_node、occupancy_grid_node。
(5)基于ros2run或ros2launch启动任意编译工具编译的包:假设有手动编译包名为XXX,编译安装在/root/app/ros2ex/out/install,复制libcartographer_ros.a或libros2cart.a到/root/app/ros2ex/out/install/lib,复制cartographer_node和occupancy_grid_node到/root/app/ros2ex/out/install/lib/XXX。如此操作之后,ros2run或run2launch就可以通过包XXX来启动以上复制到XXX包的结点,已验证此操作具有通用性。于是,Qtcreator的编译结果可以映射为ROS2的编译结果或复制替换ROS2的编译结果,然后通过ROS2来启动。
(6)精简包测试:修改opt/ros/foxy/share/turtlebot3_cartographer/launch中cartographer.launch.py和occupancy_grid.launch.py中的cartographer_ros为ros2cart,然后使用与前面相同的命令即可启动精简包。
5.Qtcreator调试说明
于
6.ROS服务详细
于
7.参数配置详细
于
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步