1. 环境准备:避开新手第一个坑
刚接触ROS的朋友最容易忽略的就是系统环境检查。Ubuntu 20.04虽然官方支持ROS Noetic,但实际安装时往往被conda环境坑得措手不及。上周帮学弟调试时,就遇到因为conda环境变量冲突导致roscore报错的情况——明明所有步骤都正确,就是无法启动核心节点。
关键检查点:
- 执行
conda info --envs查看当前虚拟环境 - 如果存在激活的conda环境,务必先运行
conda deactivate退出 - 建议新手暂时关闭conda自动激活功能:
conda config --set auto_activate_base false
实测发现conda的python路径会覆盖系统路径,导致ROS依赖的python3.8被替换。有次我在实验室折腾到凌晨两点才发现是这个原因。更隐蔽的是,即使退出conda环境,残留的PATH变量也可能引发问题。保险起见,可以在~/.bashrc最下方添加:
# 清除conda残留路径 export PATH=$(echo $PATH | tr ':' '\n' | grep -v 'conda' | paste -sd: -)注意:如果之前安装失败过,建议先执行
sudo apt remove --purge ros-*彻底清理残留文件,避免旧配置干扰新环境。
2. 换源的艺术:突破下载速度瓶颈
官方源的速度就像早高峰的地铁——理论上能走,实际寸步难行。去年在给机器人社团装机时,20台设备同时拉取软件包直接拖垮了校园网。后来改用国内镜像源,平均下载速度从50KB/s飙升到8MB/s。
推荐组合方案:
先更换Ubuntu主源(图形化操作更直观):
- 打开"Software & Updates"
- 在"Download from"选择阿里云(
http://mirrors.aliyun.com/ubuntu)或清华源 - 勾选"Restricted"、"Universe"等所有仓库类型
添加ROS专属国内源(比官方源稳定得多):
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'- 密钥验证经常被墙,可以改用国内服务器:
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654遇到过最奇葩的情况是DNS污染导致密钥服务器无法解析,这时候可以临时改用8.8.8.8 DNS:
sudo systemd-resolve --set-dns=8.8.8.8 --interface=eth03. 核心安装:注意这些隐藏选项
执行sudo apt install ros-noetic-desktop-full时,新手常犯三个错误:
- 没留意到安装的是Python3版本(Noetic仅支持Python3)
- 漏装构建工具导致后续编译失败
- 环境变量配置错位置
完整安装命令应该包含:
# 安装主包+构建工具 sudo apt install ros-noetic-desktop-full python3-rosinstall python3-rosinstall-generator python3-wstool build-essential # 环境变量配置(推荐写入.bashrc) echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc有个容易忽略的细节:不同终端类型配置不同。如果使用zsh,需要改为~/.zshrc。曾有个学生反馈所有命令都无效,最后发现是因为他用的是fish shell却按bash教程配置。
验证安装是否成功,别急着跑roscore,先检查关键路径:
# 检查核心文件是否存在 ls /opt/ros/noetic/setup.bash # 查看ROS版本 rosversion -d4. rosdep初始化:终极避坑方案
这个环节堪称ROS安装的"渡劫"现场。去年参加RoboMaster比赛时,队伍里有台机器死活过不了rosdep update,最后发现是系统时间不同步导致SSL验证失败。
分步解决方案:
4.1 基础配置
sudo apt install python3-rosdep2 sudo rosdep init rosdep update4.2 超时问题终极解决
当出现TimeoutError时,按以下步骤修改源码:
- 首先备份原始文件:
sudo cp /usr/lib/python3/dist-packages/rosdep2/sources_list.py{,.bak}- 修改下载逻辑(使用国内代理):
# 在文件开头添加 import os if 'ROS_DEP_MIRROR' in os.environ: DEFAULT_URLS = [os.environ['ROS_DEP_MIRROR']] else: DEFAULT_URLS = ['https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/']- 设置环境变量临时生效:
export ROS_DEP_MIRROR="https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/" rosdep update4.3 备选方案
如果仍然失败,可以手动下载资源文件:
mkdir -p ~/.ros/rosdep/sources.cache wget -O ~/.ros/rosdep/sources.cache/index https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml最后测试海龟仿真是否正常:
roscore & rosrun turtlesim turtlesim_node & rosrun turtlesim turtle_teleop_key当看到那只经典的小乌龟出现在屏幕上时,恭喜你成功跨过了ROS入门的第一道门槛。记得第一次看到乌龟动起来时,我激动得差点打翻咖啡——这种成就感正是技术人最纯粹的快乐。