ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ROS Noetic 安装配置实战:Ubuntu 20.04 避坑与排错

ROS Noetic 安装配置实战:Ubuntu 20.04 避坑与排错 1. 先把话说明白ROS Noetic 装的到底是什么ROS Noetic 的安装配置这件事说难不难但它确实能把一个刚拿到工控机的新人卡上整整一天。我自己第一次装的时候卡在了密钥导入那一步报错信息只有一行 NO_PUBKEY翻遍教程也没人解释那串十六进制到底是干什么用的。所以这篇东西不打算只给你一段能复制的命令而是把每一步为什么这么做、哪里最容易翻车、翻车之后怎么回来都摊开讲一遍。核心关键词就三个ROS、Noetic、安装配置全文围着它们转。Noetic 是 ROS 1 的最后一个发行版代号 Ninjemys2020 年 5 月发布官方支持窗口到 2025 年 5 月。它绑定 Ubuntu 20.04 Focal Fossa默认 Python 3。这两个绑定关系非常要命因为再往前的 Melodic 是 Ubuntu 18.04 配 Python 2.7很多网上流传的老教程、老驱动、老 pip 依赖放到 Noetic 上会连锁出问题——不是命令敲错而是整条工具链的前提变了。反过来如果你手里的机械臂厂商 SDK、工业相机 ROS 包、导师留下的整包仿真工程全部写死在 catkin 体系里那硬迁到 ROS 2 的成本远远高于老老实实装一台 Noetic。这篇文章适合三类人看第一类是刚接触 ROS 的学生需要一次把环境搭干净第二类是实验室或公司里被派去把机器跑起来的工程师手上有具体硬件要接第三类是已经装过一遍、但环境乱七八糟想重装的人。前两类从第 2 章开始顺着读第三类可以直接跳到第 6 章的报错排查表。1.1 Noetic 在版本谱系里的位置为什么绕不开把 ROS 的版本线理一下你会发现 Noetic 处在一个很特殊的位置上。ROS 1 这条线走到 MelodicUbuntu 18.04Python 2.7之后官方直接推出了 Noetic 作为收尾之后所有新特性都转到了 ROS 2 那边。ROS 2 那条线则是 FoxyUbuntu 20.04、HumbleUbuntu 22.04、JazzyUbuntu 24.04一路走下来。发行版系统要求Python状态MelodicUbuntu 18.042.7已停止支持NoeticUbuntu 20.043ROS 1 终版FoxyUbuntu 20.043ROS 2已停止支持HumbleUbuntu 22.043ROS 2 LTS这张表的意义在于你手上的 Ubuntu 版本几乎决定了你能装什么。20.04 是唯一能同时容纳 Noetic 和 Foxy 的系统这也是很多实验室至今不愿意升级系统的原因。而如果你手上是 22.04 的机器那就别折腾了Noetic 装不上去官方源里根本没有对应 focal 之外的包硬改 lsb_release 输出只会把系统搞乱。1.2 动手前先问自己三个问题很多人装 ROS 的习惯是打开某篇教程从第一条命令开始抄。我更建议先花五分钟回答三个问题因为答案直接决定后面 apt install 那一行你该写什么。第一个问题你的目标硬件是什么普通 x86 主机、笔记本、Jetson 还是树莓派Jetson 和树莓派上的安装路径跟 x86 完全不同通常要走源码编译或者官方预编译镜像apt 那条路走不通。第二个问题你需要完整桌面版还是基础版如果你只跑一个机械臂驱动加一个相机节点基础版加几个功能包就够了如果你要跑 Gazebo 仿真、导航栈、MoveIt那完整桌面版省事得多。第三个问题这台机器需不需要和 ROS 2 共存如果要做 ROS 1 与 ROS 2 的桥接实验就得规划好两个版本的环境变量切换方式不能随手往 .bashrc 里一塞了事。这三个问题想清楚后面的安装会顺很多。2. 环境盘点与安装方案选型装系统之前的准备工作往往比安装本身更影响最终体验。我见过太多人装完 ROS 之后发现 Gazebo 卡成幻灯片最后排查半天才知道是虚拟机没开 3D 加速。这一章把硬件底线、安装路径、镜像源三件事讲透。2.1 硬件和系统的硬性要求Ubuntu 20.04 LTS 是硬性前提版本号要精确到 20.04.x桌面版服务器版都行但如果你要用 rviz 和 Gazebo就必须有图形界面纯服务器版得自己配 X11 转发或者远程桌面。架构上Noetic 官方提供 x86_64 和 arm64 的包但 arm64 的包覆盖不完整树莓派上经常需要源码编译某些包。内存方面官方说法是 2GB 起步但这个数字在实际使用中几乎没有参考价值。roscore 本身很轻几百兆就打住了可 Gazebo 一开仿真场景加上 rviz 同时渲染点云和 tf8GB 是舒适线16GB 才能说完全不慌。磁盘建议留 40GB 以上desktop-full 装完本体大概 2 到 3GB但 Gazebo 第一次启动会去下载模型库那个模型库解压后能吃掉 5GB 以上还没算你自己的工作空间和 rosbag 录包。部署方式上有三个选择双系统、虚拟机、独立机器。双系统性能最好能用到完整显卡加速缺点是切来切去麻烦虚拟机装起来最快但 Gazebo 在默认设置下基本没法用需要手动开 3D 加速并分配足够显存独立工控机是最省心的方案尤其是要接实体硬件的时候串口和 USB 直通在物理机上从来不是问题。2.2 三条安装路径的取舍社区里流行的安装方式大致三类各有各的适用场景我把它整理成表你对着自己的情况选。方式适合谁优点代价官方 apt 源安装想搞清楚每一步的人过程透明可复现问题好定位密钥、网络环节容易卡社区一键脚本赶时间的新手一把梭自动处理镜像和 rosdep过程黑盒出问题难排查Docker 镜像只跑代码不改环境的人环境干净可复制性强串口、相机、GPU 透传要额外配置我个人的建议是第一次装老老实实走官方 apt 路线哪怕多花两小时。因为报错本身就是学习过程的一部分你会因此知道 sources.list 长什么样、密钥存在哪、rosdep 的索引文件在什么位置。等你装过两三遍摸清了每个环节再用一键脚本提速才有意义。上来就用脚本的人遇到问题往往连去哪找日志都不知道。2.3 系统镜像源替换为什么必须做怎么做得干净apt 默认指向的是海外地址装 ROS 完整版要拉几百个包如果每个包的下载速度都在几十 KB 徘徊整个安装过程能拖到一个下午。换成国内镜像站是常规操作但这里有个很多人踩过的坑——Ubuntu 20.04 上出现了两种软件源配置格式老的叫/etc/apt/sources.list新的叫/etc/apt/sources.list.d/ubuntu.sources也就是 deb822 格式。这两种格式不要混着用如果你的系统里已经存在 ubuntu.sources就直接编辑那个文件别再往 sources.list 里加内容否则会出现重复源和签名冲突。动手之前先备份这一步别省sudo cp /etc/apt/sources.list /etc/apt/sources.list.d/ubuntu.sources ~/apt_backup_$(date %F)/ 2/dev/null替换之后务必做两件事一是确认版本代号写的是 focal 而不是 bionic改错代号会导致装上一堆不匹配的包二是跑一次sudo apt update观察有没有 404 或者签名错误。图形界面的软件和更新里改源最直观缺点是慢命令行改更利索。注意镜像源的作用是加速下载它不改变任何包的内容。如果某个包在官方源里不存在换镜像也装不上这时候要回头检查你添加的 ROS 源地址本身写对没有。3. 完整安装流程从裸机到 roscore 跑起来前面讲的是思路这一章是实打实的操作。命令我都标了注释你按顺序执行即可。整个流程跑下来一台配置正常的机器大概 20 到 40 分钟其中大部分时间在等下载。3.1 系统更新与基础依赖先更新系统并装几个后面会用到的基础工具。sudo apt update sudo apt upgrade -y sudo apt install -y curl gnupg2 lsb-release build-essential cmake git这里每个包都有它的用处curl用来下载密钥和脚本gnupg2负责密钥的解析和导入lsb-release提供lsb_release -sc这个命令后面添加 ROS 源时会用它自动填系统代号build-essential、cmake、git是编译工作空间和拉取源码包的必备项。别嫌这一步麻烦缺了 lsb-release 后面那条源地址命令就会直接报错。升级过程中如果弹出来问你要不要保留旧配置文件一般选保留本地版本即可除非你明确知道自己在改什么。3.2 添加 ROS 软件源与密钥的两种写法这一步是新手最容易卡住的地方关键是要理解密钥到底在干什么。apt 在从某个软件源下载包的时候会验证包的签名签名由源方用私钥生成你本地需要对应的公钥才能验证通过。所以你既要告诉 apt包从哪来源地址也要给它验签的钥匙公钥两件事缺一不可。先写源地址$(lsb_release -sc)会自动展开成 focalsudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list然后是密钥。老写法是直接用 apt-keysudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654这个命令在 20.04 上依然能用但会打印一行 deprecated 警告因为 apt-key 已经被官方标记为过期接口。如果你不想看到警告或者想要更规范的写法用下面这套sudo gpg --no-default-keyring \ --keyring /usr/share/keyrings/ros-archive-keyring.gpg \ --keyserver hkp://keyserver.ubuntu.com:80 \ --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654然后把源地址改成带 signed-by 的格式明确指定用哪个密钥文件验签echo deb [signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros/ubuntu focal main | sudo tee /etc/apt/sources.list.d/ros-latest.list那串十六进制是什么它是 ROS 官方发布密钥的指纹全世界的 ROS 用户导入的是同一个公钥。知道这一点很重要因为你在网上看到别人教程里写的是同一串字符时就不用怀疑自己被投毒了。3.3 安装 desktop-full 与版本精简策略源和密钥都就位之后先更新索引再安装。sudo apt update sudo apt install ros-noetic-desktop-full -y这里的版本选择值得多说几句因为很多人是默认无脑上 full最后发现磁盘被吃掉一大半里面一大半包这辈子都用不到。包名内容体积适用场景ros-noetic-ros-base通信库、基础工具、roscore最小嵌入式、只跑节点ros-noetic-desktopbase 加 rviz、rqt、常用可视化中等机械臂、相机调试ros-noetic-desktop-fulldesktop 加仿真、感知、导航、控制全套最大仿真、SLAM、导航如果你手头是一台磁盘只有 64GB 的工控机又要接机械臂跑运动控制装ros-noetic-desktop完全够用。真正需要 full 的是要做 Gazebo 仿真、导航栈实验或者视觉感知的场合。判断方法很简单如果短期内你不会启动 Gazebo 和 rviz那 base 加几个单独功能包是更聪明的做法。3.4 环境变量与初始化装完之后终端里还认不出roscore这个命令因为 ROS 的可执行文件路径没有被加到环境变量里。需要把 setup.bash 引入到当前 shell。echo source /opt/ros/noetic/setup.bash ~/.bashrc source ~/.bashrc验证一下echo $ROS_DISTRO输出noetic就说明环境变量生效了。这里有个顺序问题必须提前讲清楚ROS 的环境变量是叠加式的后 source 的会覆盖先 source 的。所以如果你后面有自己的 catkin 工作空间那行source ~/catkin_ws/devel/setup.bash必须写在/opt/ros/noetic/setup.bash的下面反过来会导致工作空间里的包被系统包压掉。3.5 三步验证roscore、小海龟、rviz环境搭好之后别急着写代码先把这三个验证跑一遍能排除掉九成的基础问题。第一步启动主节点roscore正常会上来一大段日志最后一行是started core service [/rosout]。如果这里就报错先看 11311 端口是否被占用具体排查见第 6 章。第二步新开一个终端跑小海龟rosrun turtlesim turtlesim_node应该会弹出一个蓝色窗口中间一只小乌龟。第三步再开一个终端控制它rosrun turtlesim turtle_teleop_key然后按方向键。这里有个新手百分之百会遇到的坑按了方向键乌龟不动。原因不在 ROS而在于键盘输入焦点在那个新开的终端里你必须先用鼠标点一下 teleop 那个终端窗口再按键才有效。想看可视化工具是否正常再跑一句rosrun rviz rviz能弹出界面就算通过。4. rosdep 与常用工具链的补齐验证通过只说明核心功能正常但真正做项目时你还需要 rosdep 帮你解决依赖问题。这个组件单独拎出来讲因为它出错的概率比安装本身还高。4.1 rosdep 到底解决什么问题答案很直接它负责把 package.xml 里写的依赖名翻译成当前系统上对应的 apt 包名然后自动装好。为什么需要翻译因为一个 ROS 包声明依赖python3-numpy在不同系统上对应的 apt 包名可能不同rosdep 维护了一张映射表帮你兜住这个差异。典型用法是在工作空间里执行rosdep install --from-paths src --ignore-src -r -y它会扫描 src 下所有包的 package.xml把缺的依赖一次性补齐。这一点在拿到别人开源工程时特别有用比你自己一个一个看 readme 装省事得多。4.2 rosdep init 和 update 失败的三种处理思路先安装组件sudo apt install python3-rosdep -y然后初始化sudo rosdep init rosdep update这两条命令出问题的概率相当高因为它们的索引文件默认从海外地址拉取。处理思路有三个层次从轻到重。第一种确认组件装全了。有些系统上/etc/ros/rosdep/sources.list.d/目录不存在是因为 python3-rosdep 没装成功或者被之前的手动操作弄乱了重装一次往往能解决。第二种手动创建配置文件并替换索引地址。这是最常用的办法把配置文件的每一行都指向镜像站sudo mkdir -p /etc/ros/rosdep/sources.list.d sudo tee /etc/ros/rosdep/sources.list.d/20-default.list /dev/null EOF yaml https://mirrors.tuna.tsinghua.edu.cn/rosdistro/rosdep/osx-homebrew.yaml osx yaml https://mirrors.tuna.tsinghua.edu.cn/rosdistro/rosdep/base.yaml yaml https://mirrors.tuna.tsinghua.edu.cn/rosdistro/rosdep/python.yaml yaml https://mirrors.tuna.tsinghua.edu.cn/rosdistro/rosdep/ruby.yaml gbpdistro https://mirrors.tuna.tsinghua.edu.cn/rosdistro/releases/fuerte.yaml fuerte EOF第三种连 python 里的索引地址一起改。因为 rosdep update 除了读上面的配置文件还会去读 rosdistro 这个 python 包里的默认索引地址sudo sed -i s|raw.githubusercontent.com/ros/rosdistro/master|mirrors.tuna.tsinghua.edu.cn/rosdistro|g /usr/lib/python3/dist-packages/rosdistro/__init__.py改完之后再执行rosdep update一般就能走通了。注意第三种方案修改的是 python 包里的源码文件一旦通过 apt 升级了 python3-rosdistro 这个包修改就会被覆盖回去症状是昨天还好好的今天突然又不行了。你只需要记住这个文件的路径重新改一遍即可。另外社区里还有一个叫 rosdepc 的重打包版本本质是把索引地址换到国内并做了一层封装用起来更省心缺点是不在官方源里需要额外信任一个第三方来源。要不要用取决于你对环境的可维护性要求有多高。4.3 构建工具与常用功能包rosdep 之外还有几个工具建议一并装好sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool -y这几个组件在做源码编译、拉取第三方包、生成 rosinstall 文件时会用到。如果你不打算从源码编译 ROS 包暂时不装也行但一旦开始用别人的工程它们迟早会派上用场。另外建议顺手装上一个构建系统升级版sudo apt install python3-catkin-tools -y它提供catkin build命令相较于原始的catkin_make支持并行编译、可以单独编译某个包、不会因为一个包报错就中断整个编译过程。对于有多包依赖的工程体验差别非常明显。5. 装完之后的必做配置工作空间、设备权限、多版本共存到这里 ROS 本体已经能跑了但要真正干活还有三件事必须做。很多人把这三件事拖到后面结果在接硬件的环节被打得措手不及。5.1 catkin 工作空间从零搭建工作空间是你写代码、放功能包的地方标准结构是这样的mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin_make编译完成后目录里会出现build和devel两个文件夹前者放编译中间产物后者放编译好的可执行文件和 setup.bash。然后把它加进环境变量echo source ~/catkin_ws/devel/setup.bash ~/.bashrc source ~/.bashrc用catkin_make有个老毛病如果你在工作空间里切换过包的增删它有时会保留过期的缓存导致编译出奇怪的结果。catkin build就没有这个问题因为它在每个包下面各自维护构建目录。所以现在新建工作空间我更倾向于一开始就用catkin init加catkin build的组合。源码工作空间的包优先级高于/opt/ros/noetic里的安装包这是 ROS 的默认规则。所以你改了一个系统包的源码放在 src 里编译后就会覆盖系统的那个版本不用卸载原包。反过来如果你发现自己的改动没生效八成是忘了 source devel 里的 setup.bash。5.2 串口与 USB 相机权限接硬件的前置条件不接硬件的人可以跳过这一节但凡是要连机械臂或者工业相机这一节必须看。默认情况下普通用户是没有权限访问/dev/ttyUSB0这类串口设备的跑节点会报 permission denied。最省事的做法是把用户加进 dialout 组sudo usermod -aG dialout $USER注意这条命令执行完不会立即生效必须注销重新登录或者重启系统。不少人加完组直接测试发现还是不行以为是命令写错了其实是生效时机的问题。但仅仅加组还不够。USB 串口的设备号是不固定的今天机械臂是 ttyUSB0明天插了别的设备它可能就变成 ttyUSB1 了代码里写死的设备路径就会指向错误的对象。这时候需要写 udev 规则把设备绑定成固定的名字# /etc/udev/rules.d/99-usb-serial.rules KERNELttyUSB*, ATTRS{idVendor}1a86, ATTRS{idProduct}7523, MODE:0666, SYMLINKttyUSB_armidVendor和idProduct用lsusb命令查插拔前后对比一下就能找出来。规则写好后重新加载sudo udevadm control --reload-rules sudo udevadm trigger之后无论插在哪个口上设备名都会是/dev/ttyUSB_arm代码里写这个路径就行。USB 相机是另一套逻辑走的是 video4linux 子系统# /etc/udev/rules.d/99-usb-camera.rules KERNELvideo*, SUBSYSTEMvideo4linux, MODE:0666对于有多个摄像头的场景同样可以用 ATTRS 匹配序列号来绑定固定设备名。工业相机如果需要更高的带宽或触发同步往往要配合厂商自己的 SDK 和 udev 规则这块就得看具体型号的文档了。5.3 Noetic 与 ROS 2 共存时的环境切换前面提过Ubuntu 20.04 上能装的是 Noetic 和 Foxy。两个版本不能同时 source原因是它们的 PYTHONPATH 和一堆环境变量会相互覆盖轻则导入错误的模块重则命令行直接乱掉。正确的做法是写两个别名用哪个切哪个alias ros1source /opt/ros/noetic/setup.bash echo switched to Noetic alias ros2source /opt/ros/foxy/setup.bash echo switched to Foxy把它们加进 .bashrc。注意切换之后最好看一眼echo $ROS_DISTRO确认切成功了。更稳妥的方式是打开新终端时默认不 source 任何版本需要时手动切避免因为默认环境不对导致编译出来的包版本混乱。6. 典型报错排查表与现场实录这一章是全文最实用的部分。下面这些错误我都真实遇到过处理方式也是实际验证过的。6.1 无法定位软件包这类问题现象执行sudo apt install ros-noetic-desktop-full报E: Unable to locate package。这个报错的信息量其实很大它意味着 apt 在已知的所有软件源里都没找到这个包名。按可能性排序大概有这几种原因。第一ROS 源根本没加成功。检查/etc/apt/sources.list.d/ros-latest.list里的路径是否正确特别是$(lsb_release -sc)展开后是不是 focal。如果你在 22.04 上跑这条命令它会展开成 jammy而 ROS 官方源里没有 jammy 的 Noetic 包于是直接定位失败。第二加了源但没执行sudo apt update索引还是旧的。第三密钥没导入导致源被跳过。这种情况下 apt update 时会打印 NO_PUBKEY 警告注意看输出别一路回车到底。第四包名拼写错误。ros-noetic-desktop-full中间是连字符不能写成下划线或者点号这类低级错误其实相当常见。6.2 密钥与签名验证失败现象apt update 时提示The following signatures couldnt be verified because the public key is not available: NO_PUBKEY F42ED6FBAB17C654。后八位就是缺失密钥的短指纹。处理方式有两种把 6.1 里的密钥导入命令再执行一遍或者如果 keyserver 连不上换一个 keyserver 地址试试比如换成hkp://keyserver.ubuntu.com:80之外的其他公共 keyserver。还有一种情况是导入成功了但仍然报签名错误这通常是因为源列表里同时存在新旧两种配置一个用 apt-key 导入的密钥一个用 signed-by 指定的密钥两者指向不一致。解决办法是删掉多余的源文件只保留一种写法。6.3 Gazebo 与 rviz 启动异常现象一Gazebo 启动后黑屏或者只有模型没有界面。九成是显卡驱动或者 3D 加速问题虚拟机里尤其常见。虚拟机的设置里找到 3D 加速选项并打开显存调到 128MB 以上然后重启虚拟机。如果是物理机检查是否装了正确的显卡驱动。现象二Gazebo 卡在启动画面日志停在下载模型那一步。Gazebo 第一次启动会去下载官方模型库网速慢的时候确实能等很久。处理方式是提前把模型库下载好放到~/.gazebo/models目录下或者配置环境变量指向本地的模型路径。现象三rviz 报Could not connect to ROS master。检查一下 roscore 是不是根本没启动或者你运行 rviz 的那个终端里 source 的是不是同一个 ROS 版本。两个终端 source 不同版本是这类问题的经典成因。6.4 端口占用与 roscore 残留进程现象启动 roscore 时报Address already in use或者Unable to contact my own server。roscore 默认占用 11311 端口。如果你上次没正常退出进程可能残留在后台。ss -tlnp | grep 11311 pkill -f roscore pkill -f roslaunchss那条用来确认端口被谁占着pkill用来清进程。清理完等几秒再重启 roscore。还有一种情况是ROS_MASTER_URI被改过。有些多机通信的教程会让你改这个变量改完之后忘了改回来roscore 就会试图在本机找不到的地址上启动。用echo $ROS_MASTER_URI确认一下应该是http://localhost:11311。6.5 常见问题速查表现象大概率原因处理动作Unable to locate package源未加、未 update、版本号不匹配检查源文件与lsb_release -scNO_PUBKEY公钥未导入重新导入官方密钥rosdep init 报错索引地址无法访问替换为镜像地址rosdep update 超时同上或 DNS 问题修改 rosdistro 包内地址小海龟不能动键盘焦点不在 teleop 终端点击该终端后再按键串口 permission denied用户未加入 dialout 组加组并重新登录设备号漂移未绑定 udev 规则写规则并 reloadroscore 端口占用旧进程残留pkill 清理后重启7. 踩坑之后总结的几点真实体会前面是流程和排错最后这部分聊聊经验层面的东西这些内容通常不会写在官方文档里但决定了你后期维护环境时会不会痛苦。7.1 一键安装脚本该怎么用社区里的一键安装脚本确实好用它们会自动帮你换源、处理 rosdep、配置环境变量一条命令下去十几分钟就能跑起来。我不反对用但有两个前提必须满足。第一系统要有快照。虚拟机打个快照物理机至少确认重要数据有备份。因为脚本会修改系统源、apt 配置、环境变量这些底层文件万一你的系统本身有点小问题脚本一跑可能会把问题放大。第二心里要清楚脚本做了什么。它通常做了这么几件事替换 apt 源为国内镜像、导入 ROS 密钥、添加 ROS 源、安装 desktop-full、用国内镜像替换 rosdep 索引、通过一个第三方包处理 rosdep 初始化。知道这些出问题时你才能顺着链条去查而不是对着黑盒干瞪眼。我的习惯是新机器上先手动装一遍摸清每个环节之后给同事、学弟批量装环境时再用一键脚本效率优先。7.2 环境备份与版本锁定装完一个能跑的环境最怕的就是后来手贱升级把它搞崩。有几个习惯建议养成。第一装完之后导出已安装的 ROS 包清单重装的时候能对照dpkg -l | grep ros-noetic | awk {print $2} ~/ros_pkgs_backup.txt第二慎用 pip 全局安装 numpy 这类基础库。Noetic 里的很多包对 numpy 版本有依赖直接用 pip 升级到最新版可能会让某些节点导入失败。需要装 python 包时优先用pip install --user或者干脆用虚拟环境隔离。第三不要随手执行sudo apt upgrade把 ROS 相关的包全升一遍。ROS 的功能包之间存在依赖关系大规模升级偶尔会引入不兼容。如果只是想更新系统安全补丁用sudo apt upgrade时留意一下待升级列表里有没有 ros-noetic 开头的包。7.3 装完之后的学习路线环境装好只是起点接下来的学习顺序我建议这样走先搞懂 roscore、node、topic、service、param 这套通信机制这是 ROS 的地基然后学 tf 坐标变换因为几乎所有涉及多个传感器或机械臂的场景都要用到接着是 urdf 模型描述用 rz 检查模型是否正确再往后是 Gazebo 仿真和 MoveIt 运动规划这两块对应不同的应用方向按需选择。对于要接实体机械臂的人建议在仿真里把控制流程跑通之后再上真机。原因很简单真机上调试一次的成本远高于仿真而且仿真里出错误顶多是程序崩溃真机上可能撞坏设备。最后分享一个我在实际使用中的小体会装环境的时候录个屏或者把每条命令和输出记在文档里。等半年后重装第二台机器时你会发现这份记录比任何教程都管用因为它是为你的硬件和你的使用习惯量身定制的。
返回列表