zoukankan      html  css  js  c++  java
  • ROS2学习日志:ROS2Cartgrapher使用与调试

    1.官源安装与试用

             由apt-get install安装ros-foxy-cartographer-ros、ros-foxy-turtlebot3及ros-foxy-webots-ros2(要求版本≥1.03)。

             于https://github.com/ROBOTIS-GIT/turtlebot3_simulations下载turtlebot3_simulations-foxy-devel编译安装到/root/app/ros2ex/out/install(官源尚未提供安装包)。

             (1)基于WebotsTurtlebot3Burger测试

    source /root/app/ros2ex/out/install/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 && export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/root/app/ros2ex/tb3sim/turtlebot3_gazebo/models
    source /root/app/ros2ex/out/install/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

             (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.9002.zip:https://github.com/ros2/cartographer_ros/archive/1.0.9002.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(" ####################<Valid Modification>#################### ");

             (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.参数配置详细

            

  • 相关阅读:
    虚拟机中对centOS7.4配置静态ip
    mybatis使用中出现的错误!
    http中get和post方法区别
    java中堆和栈的区别
    struts2工作流程
    springmvc工作流程
    JDBC访问数据库流程
    并行程序设计模式-Master-Worker模式-Guarded Suspension模式-不变模式-生产者-消费者模式的理解
    Future模式个人理解
    分布式系统一致性问题和Raft一致性算法
  • 原文地址:https://www.cnblogs.com/dzyBK/p/14249343.html
Copyright © 2011-2022 走看看