一、课程导论与环境搭建:机器人导航概述、ROS Noetic安装、TurtleBot3仿真环境搭建

1.1 机器人导航到底在解决什么问题?

先聊点实在的。机器人导航,说白了就是让一台机器人在未知或已知环境中,从A点安全地走到B点。听起来简单?我当年第一次在真实机器人上跑导航,差点把实验室的墙撞出一个洞。

导航的核心就三件事:我在哪?我要去哪?我怎么去?

  • 定位:机器人得知道自己当前的位置和朝向。常用的有里程计、IMU、激光雷达配合AMCL算法。
  • 建图:环境长什么样?用激光雷达或深度相机构建栅格地图(Occupancy Grid Map)。
  • 路径规划:全局规划找大方向,局部规划躲开动态障碍物。

你想想看,如果这三个环节任何一个出问题,机器人要么原地打转,要么直接撞墙。我在项目里见过最离谱的情况——定位漂移了半米,机器人对着空气绕了半天,还以为自己在过迷宫。

核心知识点速览

  • 导航 = 定位 + 建图 + 路径规划
  • 常用传感器:激光雷达(2D/3D)、深度相机、IMU、轮式里程计
  • ROS框架下最成熟的方案:move_base + amcl + gmapping/cartographer

1.2 为什么选择ROS Noetic?

ROS版本很多,我个人习惯用Noetic。为什么?因为它是ROS1的最后一个长期支持版本,稳定、生态成熟、文档齐全。我踩过Melodic的坑,也试过ROS2的早期版本,但说实话,对于导航避障这个方向,Noetic是目前最省心的选择。

嗯,这里要注意:Noetic只支持Ubuntu 20.04。别想着在18.04或者22.04上硬装,我试过,编译到一半就开始报错,心态直接崩了。

1.3 安装ROS Noetic(避坑版)

安装步骤网上很多,我只说关键点和容易翻车的地方。

# 1. 设置sources.list
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

# 2. 添加密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

# 3. 更新并安装完整桌面版
sudo apt update
sudo apt install ros-noetic-desktop-full

# 4. 初始化rosdep
sudo rosdep init
rosdep update

# 5. 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

# 6. 安装依赖工具
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

我曾经踩过的坑:

  • rosdep update失败:大概率是网络问题。我当时的解决办法是挂代理,或者手动下载rosdep的yaml文件放到本地。
  • Python版本冲突:Ubuntu 20.04默认Python3.8,但有些旧包依赖Python2。建议用virtualenv隔离,别直接改系统默认Python。
  • 缺少依赖:编译功能包时提示找不到XXX,先跑一遍rosdep install --from-paths src --ignore-src -r -y。

1.4 TurtleBot3仿真环境搭建

TurtleBot3是ROS社区最经典的入门级机器人平台。仿真环境用Gazebo,配合RViz可视化,效果非常直观。

我个人建议:先跑仿真再上真机。仿真里调参成本低,撞了墙点一下重置就行。真机撞一次,可能就要换轮子了。

1.4.1 安装TurtleBot3依赖

# 安装TurtleBot3相关包
sudo apt install ros-noetic-turtlebot3 ros-noetic-turtlebot3-simulations ros-noetic-turtlebot3-navigation ros-noetic-turtlebot3-bringup

# 创建工作空间
mkdir -p ~/turtlebot3_ws/src
cd ~/turtlebot3_ws
catkin_make
source devel/setup.bash

1.4.2 设置环境变量

TurtleBot3有多个型号:Burger、Waffle、Waffle Pi。我一般用Burger,小巧灵活,适合室内导航测试。

echo "export TURTLEBOT3_MODEL=burger" >> ~/.bashrc
source ~/.bashrc

1.4.3 启动仿真环境

# 启动Gazebo仿真世界
roslaunch turtlebot3_gazebo turtlebot3_world.launch

# 另开终端,启动导航
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml

第一次启动时,Gazebo加载模型会比较慢,耐心等一两分钟。如果卡住不动,检查一下显卡驱动和Gazebo版本。

小技巧:

如果Gazebo启动后一片空白,试试export SVGA_VGPU10=0再启动。我在虚拟机里遇到过这个问题,折腾了半天才找到这个参数。

1.5 本章知识体系总览

下面这张图是我自己整理的导航调参知识体系,你可以把它当作整个课程的地图。每次调参遇到问题,回来看看这张图,思路会清晰很多。

机器人导航避障调参知识体系 定位(AMCL) 建图(SLAM) 路径规划 粒子滤波 KLD采样 / 自适应 Gmapping / Cartographer 栅格地图 / 闭环检测 全局 + 局部规划 A* / DWA / TEB 定位调参 min_particles / max_particles update_min_d / update_min_a resample_interval 建图调参 lsky / lrsm / lrm linearUpdate / angularUpdate map_update_interval 规划调参 max_vel_x / max_vel_theta min_obstacle_dist / pdist_scale sim_time / vx_samples 核心目标:定位精度 < 10cm | 规划成功率 > 95% | 实时性 < 100ms

1.6 验证环境是否搭建成功

装完别急着往下走,先跑一个简单的测试,确认所有环节都通了。

# 测试ROS是否正常
roscore

# 另开终端,测试TurtleBot3键盘控制
roslaunch turtlebot3_gazebo turtlebot3_world.launch
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

如果能用键盘控制机器人移动,Gazebo里能看到轮子转动,说明环境搭建成功了。如果报错,别慌,90%的问题出在环境变量或依赖缺失上。

本章小结

  • 理解了机器人导航的三大核心:定位、建图、路径规划
  • 完成了ROS Noetic的安装,并避开了常见坑点
  • 搭建了TurtleBot3仿真环境,可以开始调参实战了

说实话,环境搭建这一步最枯燥,但也是最重要的。我见过太多人卡在安装阶段就放弃了。别急,慢慢来,后面调参才是真正有意思的部分。

可可精品资料库