Ubuntu 24.04 环境实战:ROS 2 Kilted 实现 SLAM 建图与 Nav2 导航
一、构建地图1、安装依赖安装slam_toolbox算法库sudoaptinstallros-kilted-slam-toolbox安装TurtleBot3 全套支持包sudoaptinstallros-kilted-turtlebot3*2、使用清华源如果apt安装很慢请先配置清华源sudoaptinstallcurlgnupg2sudocurl-sSLhttps://raw.githubusercontent.com/ros/rosdistro/master/ros.key-o/usr/share/keyrings/ros-archive-keyring.gpgechodeb [arch$(dpkg --print-architecture)signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu noble main|sudotee/etc/apt/sources.list.d/ros2.list/dev/nullsudoaptupdate3、环境变量必须sudovim~/.bashrcexportTURTLEBOT3_MODELburgerexportGAZEBO_MODEL_PATH/opt/ros/kilted/share/turtlebot3_gazebo/models# 可选硬件加速exportLIBGL_ALWAYS_SOFTWARE0source~/.bashrc4、更新防火墙可选打开一个终端ros2 multicast receive打开另一个终端ros2 multicast send如果没有receive Hello World消息则需要更新防火墙sudoufw allowinproto udp to224.0.0.0/4sudoufw allowinproto udp from224.0.0.0/45、启动仿真查看可用的launch文件ls/opt/ros/kilted/share/turtlebot3_gazebo/launch/empty_world.launch.py spawn_turtlebot3.launch.py turtlebot3_dqn_stage2.launch.py turtlebot3_dqn_stage4.launch.py turtlebot3_world.launch.py robot_state_publisher.launch.py turtlebot3_dqn_stage1.launch.py turtlebot3_dqn_stage3.launch.py turtlebot3_house.launch.pysource/opt/ros/kilted/setup.bash# 空场景ros2 launch turtlebot3_gazebo empty_world.launch.py# world 场景ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py# house 场景ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py注意需要配置小车模型环境变量才会有小车# burgerexportTURTLEBOT3_MODELburger# waffle_pi本文使用的小车exportTURTLEBOT3_MODELwaffle_pi仿真启动后创建了以下节点/robot_state_publisher /ros_gz_bridge仿真启动后创建了以下话题/clock /cmd_vel /imu /joint_states /odom /parameter_events /robot_description /rosout /scan /tf /tf_static6、运行建图ros2 launch slam_toolbox online_async_launch.py use_sim_time:True7、RViz可视化ros2 run rviz2 rviz2在RViz中进行设置Fixed Frame设置为map添加Map话题/map、LaserScan话题/scan、TF注意需要在仿真启动时添加小车才能扫描到地图8、控制机器人移动# 键盘控制ros2 run turtlebot3_teleop teleop_keyboard手动控制机器人走完一圈地图9、地图保存ros2 run nav2_map_server map_saver_cliimage: map_1774097735.pgm mode: trinary resolution: 0.050 origin: [-0.938, -2.073, 0] negate: 0 occupied_thresh: 0.65 free_thresh: 0.196二、自主导航使用Nav2导航sudoaptinstallros-kilted-navigation2sudoaptinstallros-kilted-nav2-bringup1、启动仿真ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py2、启动导航ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:True map:/home/sam/map_1774097735.yaml4、设定机器人位置在 RViz 工具栏选择2D Pose Estimate工具在地图上点击机器人所在位置拖动鼠标设定朝向。4、设定目标位置在 RViz 工具栏选择Nav2 Goal工具在地图上点击机器人所在位置拖动鼠标设定朝向。5、导航结果只需要设置好机器人位置与目标位置机器人就会自主导航到目标位置三、补充SALM 介绍SLAM建图是机器人学和计算机视觉中的核心问题。SLAM是同步定位与地图构建的缩写。简单来说SLAM要解决的是当一个移动机器人或设备进入一个完全未知的环境时它如何一边确定自己“在哪里”定位一边绘制出周围环境的“地图”建图。这两个问题相互依赖形成一个闭环要精确建图需要准确的定位而要准确定位又需要一个精确的地图。SLAM算法就是为了同时解开这个“先有鸡还是先有蛋”的难题。1、SLAM的核心流程一个典型的SLAM系统通常包含以下几个步骤传感器数据读取从相机、激光雷达、惯性测量单元等传感器获取原始数据。前端里程计通过对比相邻时刻的传感器数据如图像特征点、激光点云估算机器人的相对运动位姿变化。这一步也叫前端容易产生累积误差。后端优化接收前端估算的位姿和回环检测信息通过图优化或滤波等方法对全局的轨迹和地图进行修正消除累积误差。这一步也叫后端。回环检测判断机器人是否回到了之前到过的位置。一旦检测成功就能建立一个强约束大幅修正累积误差保证地图的全局一致性。建图根据优化后的位姿将传感器数据融合成不同用途的地图如栅格地图、点云地图、拓扑地图等。2、SLAM的主要分类根据使用的核心传感器不同SLAM主要分为两大类2.1、激光SLAM这是早期最成熟、应用最广泛的SLAM技术主要使用2D或3D激光雷达。原理利用激光雷达测距精度高、角度分辨率高的特点通过匹配不同时刻的激光点云数据如ICP算法来估计运动。优点精度高、速度快、稳定性好计算量相对较小地图栅格地图直观且便于导航规划。在室内服务机器人、扫地机器人、工业AGV等领域应用广泛。缺点缺乏语义信息在长直走廊或环境特征稀疏的场景下容易“走丢”退化场景。3D激光雷达成本较高。代表性算法Gmapping、Hector-SLAM、Karto-SLAM、Cartographer谷歌开源支持2D和3D。2.2、视觉SLAM视觉SLAM主要使用单目、双目或深度相机RGB-D作为传感器。原理模拟人类视觉从图像中提取特征点如ORB特征通过特征点的匹配和三角测量来估算运动。单目相机存在尺度不确定性双目和RGB-D可直接获取深度信息。优点传感器成本低、体积小能获取丰富的纹理、颜色和语义信息能识别出“这是一把椅子”而非一个障碍物便于物体识别和场景理解。缺点对环境光照敏感过暗或过亮会失效计算量大依赖纹理特征纯白墙壁容易失败深度信息精度通常不如激光雷达。代表性算法ORB-SLAM系列功能全面支持单目、双目、RGB-D、MonoSLAM早期经典、LSD-SLAM半稠密、SVO半直接法。2.3、多传感器融合SLAM近年来单一的传感器难以应对所有复杂场景多传感器融合成为主流趋势。常见组合激光雷达 惯性测量单元LIO-SAM、视觉 惯性测量单元VINS-Fusion视觉惯性系统、激光雷达 视觉 惯性测量单元。惯性测量单元能提供高频的运动先验在传感器数据短暂失效时起重要作用显著提升系统的鲁棒性。3、SLAM地图的类型SLAM构建的“地图”并非单一的图片根据用途不同有多种表现形式栅格地图将环境离散成网格每个网格标明是“空闲”、“占用”还是“未知”。最常用于导航如扫地机器人。点云地图由海量的三维点构成直观但体积大不能直接用于导航常用于展示、后期处理或路径规划。拓扑地图将环境抽象为“节点”如房间、路口和“边”连接路径强调连通性常用于高层次路径规划。语义地图在几何地图的基础上增加“标签”如门、桌子、行人让机器理解环境是迈向高级智能的关键。4、技术挑战与发展趋势尽管SLAM技术已经非常成熟但在实际应用中仍面临一些挑战动态环境场景中存在大量移动物体人、车传统算法假设环境静态动态物体会导致建图出现“鬼影”或定位漂移。长期运行随时间推移环境变化光照、季节、物体摆放如何实现长期稳定的重定位和地图更新是一个难题。大尺度场景在超大范围如整个城市运行时地图存储、计算效率和回环检测的实时性面临巨大挑战。与深度学习的结合利用深度学习提取更鲁棒的特征点、进行动态物体剔除、直接生成语义地图是当前研究和应用的热点方向。5、SALM 总结特性激光SLAM视觉SLAM传感器激光雷达单目/双目/RGB-D相机优点精度高、稳定、速度快、地图直观成本低、信息丰富、可识别语义缺点成本较高、缺乏语义、有退化场景易受光照影响、依赖纹理、计算量大地图形式栅格地图、点云稀疏/半稠密/稠密点云、网格典型应用扫地机器人、AGV、自动驾驶AR/VR、无人机、室内服务机器人总的来说SLAM是机器人实现自主移动的基石技术。在实际落地项目中多传感器融合已成为主流通过取长补短让机器人在各种复杂环境下都能稳定地“知道自己在哪并知道周围长什么样”。如果你有具体的应用场景如想做扫地机器人、自动驾驶、AR设备我可以为你推荐更合适的技术路线和开源方案。四、补充Turtlebot3TurtleBot3是韩国ROBOTIS公司开发的新一代开源移动机器人平台也是ROS机器人操作系统官方指定的教育科研平台。它继承了前代产品TurtleBot1和2的核心功能但在体积、成本和模块化方面做了重大改进是目前全球最受欢迎的ROS入门机器人之一。1、定位与特点TurtleBot3被设计为一款小巧、低价、完全可定制的ROS机器人平台主要用于机器人教育、学术研究和产品原型开发。它的核心特点包括特点说明体积超小Burger型号尺寸仅为138mm×178mm×192mm约是前代产品的1/4大小可轻松放入背包携带低成本相比前代产品大幅降低价格是市面上最经济的、配备360°激光雷达的SLAM移动机器人之一完全开源硬件电路图、PCB、3D CAD、固件和软件全部开源用户可自由下载、修改和分享模块化设计采用DYNAMIXEL智能舵机作为驱动轮易于组装、维护和更换结构可按需扩展ROS官方支持由Open Robotics管理品牌与ROS生态系统无缝集成软件资源丰富2、两个主要型号TurtleBot3目前提供两个核心型号分别面向不同应用需求规格项目Burger汉堡Waffle Pi华夫派定位入门级、紧凑型高性能、扩展型最大平移速度0.22 m/s0.26 m/s最大旋转速度2.84 rad/s (162.72 deg/s)1.82 rad/s (104.27 deg/s)最大负载15kg30kg尺寸长×宽×高138×178×192 mm281×306×141 mm重量约1kg约1.8kg续航时间约2小时30分约2小时主控单板机(SBC)Raspberry Pi 4兼容Jetson NanoRaspberry Pi 4兼容Jetson Nano微控制器(MCU)OpenCR1.032-bit ARM Cortex-M7OpenCR1.032-bit ARM Cortex-M7驱动舵机DYNAMIXEL XL430-W250-TDYNAMIXEL XM430-W210-T传感器360°激光雷达(LDS-02) 9轴IMU360°激光雷达(LDS-02) 9轴IMU 树莓派相机遥控器无RC-100B蓝牙遥控器选配简单来说Burger是性价比极高的入门选择适合学习SLAM、导航等基础ROS功能Waffle Pi增加了相机和更强的舵机适合开展视觉处理、物体识别、自动驾驶等更复杂的研究。3、核心硬件组成TurtleBot3的硬件体系结构清晰主要包含以下几个核心部分主控单板机SBC通常为Raspberry Pi 4也可换成Jetson Nano运行完整的ROS系统负责高层计算SLAM、导航、视觉处理等。微控制器MCU名为OpenCR1.0的开源控制板负责底层实时控制如读取传感器、驱动舵机、处理电机编码器等。板载9轴IMU惯性测量单元提供姿态信息。执行器两个DYNAMIXEL智能舵机直接驱动左右轮实现差速转向。这种舵机可反馈位置、速度、电流等信息控制精度高。核心传感器360°激光雷达LDS-02测距范围120mm~3500mm角度分辨率1°是SLAM建图和导航的核心传感器。9轴IMU包含三轴陀螺仪、三轴加速度计、三轴磁力计辅助定位和姿态估计。相机仅Waffle Pi800万像素树莓派Camera Module v2.1用于视觉感知任务。能源11.1V 1800mAh锂电池续航约2~2.5小时。4、软件与生态系统TurtleBot3的强大不仅在于硬件更在于其背后完整的软件生态ROS支持同时支持ROS1Melodic、Noetic和ROS2Foxy、Galactic、Humble、Jazzy等官方提供完整的驱动包和示例程序。核心功能开箱即用地支持SLAM建图Gmapping、Cartographer、自主导航Navigation Stack / Nav2、自动泊车、视觉跟随等功能。仿真支持提供完整的Gazebo仿真模型可在纯软件环境中开发和测试算法。应用扩展社区和官方提供了丰富的应用案例如多机器人编队、YOLO物体检测、ArUco标记追踪、家庭监控等。教学资源配套有《ROS机器人编程》等官方教材适合课程教学。5、适用场景基于其特点TurtleBot3主要应用于ROS教学与入门作为官方指定平台拥有最丰富的教程和社区支持是学习ROS的最佳硬件。SLAM与导航算法研究低成本验证激光/视觉SLAM、路径规划、自主避障等算法。机器人视觉应用Waffle Pi型号可用于物体识别、目标跟踪、自动驾驶AutoRace等研究。多机器人协作多个TurtleBot3可组成编队进行协同控制、队形保持等实验。快速原型验证在投入昂贵的定制机器人之前用TurtleBot3快速验证算法或系统方案的可行性。6、与其他版本的对比TurtleBot系列目前有多个版本版本特点TurtleBot12010年发布基于iRobot Roomba底盘历史意义重大TurtleBot22012年发布基于Yujin Robot的Kobuki底盘功能更完善TurtleBot32017年发布模块化、小型化、低成本是当前主流TurtleBot4由ClearPath Robotics开发基于iRobot Create3底盘功能更强但模块化程度不如TB3目前TurtleBot3凭借其极佳的性价比、强大的开源生态和灵活的扩展性仍是ROS学习和轻量级机器人研究的最佳选择之一。五、补充Nav2 导航Nav2是 ROS 2 社区官方推出的专业级移动机器人自主导航框架全称 Navigation2。作为 ROS 1 中经典导航栈 (Navigation Stack) 的继任者Nav2 继承了其 15 年的技术积累并针对 ROS 2 的架构特性进行了全新设计旨在帮助移动机器人在复杂环境中安全、可靠地从 A 点移动到 B 点。Nav2 的核心流程与 SLAM 紧密配合如下图所示精确位姿初始全局路径里程计数据路径执行状态反馈异常/完成传感器数据激光雷达/相机/IMU定位模块 AMCL估计机器人在已知地图中的位置地图服务器 Map Server提供先验地图或SLAM实时构建的地图全局规划器 Global Planner规划器服务器 Planner Server基于静态地图规划全局路径局部规划器 Local Planner控制器服务器 Controller Server结合动态障碍物生成实时控制指令速度指令cmd_vel机器人底盘执行运动行为树 BT Navigator编排与监控导航任务恢复行为 Recovery Server处理卡困、避障失败等异常简单来说SLAM 是帮助机器人在陌生环境中回答“我在哪里周围长什么样”并建立地图的过程而Nav2 则是在已知地图SLAM 建好的地图的基础上负责回答“我该如何到达那里路上遇到障碍怎么办”的问题两者相辅相成。1、Nav2 的核心架构与组件Nav2 采用了一种高度模块化的服务器架构。它将导航任务拆分成多个独立的功能服务器这些服务器通过行为树 (Behavior Tree, BT) 进行灵活编排与调度。这种设计的核心优势在于我们可以像“搭乐高”一样根据具体的机器人类型和应用场景轻松替换或定制其中的算法。其核心组件包括规划器服务器 (Planner Server)负责全局路径规划。它使用预先构建好的静态地图通常来自SLAM在宏观层面规划出一条从起点到目标点、能避开已知固定障碍物的最优路径。常用的算法有A* 和Dijkstra。控制器服务器 (Controller Server)负责局部路径规划与运动控制。它接收全局路径并实时结合传感器如激光雷达探测到的动态障碍物信息计算出机器人每一步的速度和角速度指令 (cmd_vel)确保机器人既能跟随全局路径又能安全避障。常用算法包括DWA (动态窗口法)和TEB (时间弹性带)。定位模块 (AMCL)负责机器人定位。在已知地图中AMCL (自适应蒙特卡洛定位) 通过结合传感器数据和里程计数据不断推算并修正机器人在当前地图中的精确位置。一个精确的定位是导航能够成功执行的前提。行为树导航器 (BT Navigator)这是 Nav2 的**“总指挥”**。它使用行为树来定义复杂的机器人行为例如一个标准的“到点导航”行为树就包含了“规划路径 - 执行路径 - 成功/失败 - 若失败则尝试恢复行为 - 再次规划”等多个节点。行为树让导航逻辑更加清晰、可控且易于调试。恢复服务器 (Recovery Server)负责异常处理。当导航遇到问题如规划失败、长时间无法到达目标点时恢复服务器会启动一系列恢复行为例如原地旋转 (Spin)、后退 (Backup)、清除代价地图 (Clear Costmap) 等以帮助机器人摆脱困境。代价地图 (Costmap 2D)Nav2 感知世界的核心。它将传感器数据激光点云、深度图转化为一张栅格地图每个格子都赋予一个“代价”值代表该位置被占据的风险。Nav2 维护着两张代价地图全局代价地图 (Global Costmap)基于静态地图生成用于全局规划。局部代价地图 (Local Costmap)以机器人为中心实时更新用于局部避障。2、核心优势与技术特点生产级质量与高度可扩展Nav2 被全球超过 100 家公司用于实际产品中拥有高自动化测试覆盖率代码稳定可靠。其插件化架构允许开发者轻松集成自己定制的规划、控制或感知算法。支持广泛的机器人类型不仅支持传统的差速驱动和全向驱动机器人也支持阿克曼底盘如汽车和腿足式机器人。高级应用功能除了基础导航Nav2 还内置了自动充电对接 (Auto-Docking)、循迹 (Waypoint Following)、碰撞监控等高级功能满足实际产品需求。行为树编排相比 ROS 1 导航栈僵化的状态机Nav2 的行为树模型让开发者可以像编写流程图一样设计机器人复杂的任务逻辑例如“送餐到指定点 - 播放语音 - 等待用户取餐 - 返回充电桩”。3、与 TurtleBot3 的结合回到之前的TurtleBot3它正是学习和运行 Nav2 的最佳入门平台。官方提供了完整的 Nav2 演示包我们可以非常轻松地在 TurtleBot3 上体验完整的导航功能。流程通常如下建图使用 SLAM 工具如 Cartographer控制 TurtleBot3 在未知环境中移动构建出环境的地图。保存地图将建好的地图保存下来。启动 Nav2运行 Nav2 的启动文件加载刚才保存的地图并启动定位、规划和控制等所有服务器。设置目标点在 RViz 可视化工具中用 2D Nav Goal 工具在地图上点击一个目标点。Nav2 便会接管机器人自动规划路径并驱动机器人前往指定地点同时实时避障。总的来说Nav2 是一个功能强大、架构先进且高度灵活的导航系统它几乎成为了 ROS 2 机器人导航的事实标准。参考资料https://docs.ros.org/en/kilted/Tutorials/Advanced/Simulators/Gazebo/Gazebo.htmlhttps://www.cnblogs.com/arnoldlu/p/18648901https://www.cnblogs.com/ppqppl/articles/17956192https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/https://mirrors.tuna.tsinghua.edu.cn/help/ros2/ROS2 建图与导航Slam_toolbox、Nav2实践
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2452396.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!