赞
踩
本文主要用于记录学习slam建图与navigation2导航的过程,区别于之前学习的在已知地图中导航,此文记录的是在未知地图中导航。
学习资源主要是小鱼的ros2教程和navigation2教程,为避免复制粘贴影响认知,部分代码中变量名称等做了改动。
小鱼ros2
navigation2
Ubuntu22(虚拟机)
ros2 humble
navigation2
slam-toolbox
过程中缺少的服务大都可以以该命令安装
sudo apt install ros-humble-xxx
humble是ros2版本
xxx是缺少的软件服务
colcon工作空间
botmine_description目录
该目录主要存放自己的机器人urdf,gazebo和rviz启动文件等
botmine_description/launch/gazebo.launch.py
import os from launch import LaunchDescription from launch.actions import ExecuteProcess from launch_ros.actions import Node from launch_ros.substitutions import FindPackageShare from ament_index_python.packages import get_package_share_directory def generate_launch_description(): robot_name_in_model = 'minebot' package_name = 'botmine_description' urdf_name = "minebot_gazebo.urdf" ld = LaunchDescription() pkg_share = FindPackageShare(package=package_name).find(package_name) urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}') gazebo_world_path = os.path.join(pkg_share, 'world/box.world') # Start Gazebo server start_gazebo_cmd = ExecuteProcess( cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so', gazebo_world_path], output='screen') # Launch the robot spawn_entity_cmd = Node( package='gazebo_ros', executable='spawn_entity.py', arguments=['-entity', robot_name_in_model, '-file', urdf_model_path ], output='screen') # Start Robot State publisher start_robot_state_publisher_cmd = Node( package='robot_state_publisher', executable='robot_state_publisher', arguments=[urdf_model_path] ) # Launch RViz nav2_bringup_dir = get_package_share_directory('nav2_bringup') default_rviz_config_path = os.path.join(nav2_bringup_dir,'rviz','nav2_default_view.rviz') start_rviz_cmd = Node( package='rviz2', executable='rviz2', name='rviz2', output='screen', arguments=['-d', default_rviz_config_path] ) ld.add_action(start_gazebo_cmd) ld.add_action(spawn_entity_cmd) ld.add_action(start_robot_state_publisher_cmd) ld.add_action(start_rviz_cmd) return ld
该目录是 navigation2官方源码 下的启动文件目录,可以理解为官方给的使用示例
启动之前的colcon build编译步骤不再赘述,注意修改启动文件也要重新编译
第一个启动项
ros2 launch botmine_description gazebo.launch.py
第一个启动项启动了gazebo和rviz,可能会遇到一些报错
仔细观察其实只有gazebo报错,而且这个报错不影响我们的实验,至于rviz的info日志只要不影响使用不必管它。gazebo启动较慢稍等一会儿就好,rviz刚启动是空的很正常。
第二个启动项
ros2 launch nav2_bringup navigation_launch.py
可能也会大量刷一些日志,但只要不是error就不必管它。
第三个启动项
ros2 launch slam_toolbox online_async_launch.py
三个启动项都起来后再看rviz就有东西出现了,(在已知地图中导航时需要给机器人一个初始位置,但在未知地图中导航过程中给机器人初始位置好像并没有很大必要)直接点击Nav2 Goal
按钮,在图中选择目标点和目标姿态即可,机器人就会一边扫描建图一边移动到目标点
左下角给出的是导航的状态,通过feedback可以判断导航是否完成,active是正在导航中,reached是导航完成。至于Loaclization为什么是未激活状态,我也不清楚…知道的小伙伴可以说下。
ros2 run nav2_map_server map_saver_cli -f ~/map
-f后面的内容可以自定义,即保存路径和文件名称,这里保存到用户目录下,文件名map,到用户目录下查看可以看到生成了两个新的文件map.pgm
和map.yaml
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。