拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

ROS 安装实战:Noetic 与 Humble 避坑配置全流程

ROS 安装实战:Noetic 与 Humble 避坑配置全流程 装 ROS 这件事我前前后后在不同机器上折腾过二十来遍从最早的 Kinetic 一路到现在的 Humble。真正让人记住的从来不是某条安装命令而是每次卡在rosdep update转圈的那十几分钟还有装完之后roscore敲下去提示 command not found 的瞬间。这篇就把我这些年踩过的坑、绕过的弯、以及最终固定下来的一套流程完整摊开讲一遍。内容覆盖 ROS 1 Noetic 和 ROS 2 Humble 两条主线从 Ubuntu 系统侧的准备工作到 apt 源配置、密钥添加、环境变量写入、小海龟与 Gazebo 冒烟测试再到环境变量失效、依赖冲突、主从机通信这类高频报错。不管你是刚接触 Ubuntu 和 ROS 的新手还是想换台机器重装一遍的老手都能照着往下走。1. 装 ROS 之前先定三件事发行版、系统版本、安装方式1.1 Ubuntu 与 ROS 的版本绑定关系选错了后面全白干很多人第一次装 ROS 失败问题根本不在安装命令而在于一开始选的 ROS 版本和 Ubuntu 版本对不上。ROS 的二进制包是针对具体的 Ubuntu 发行版编译出来的底层依赖的 glibc、Boost、Python 版本都写死在包里跨版本安装基本等于自找麻烦。所以第一步必须先把这张对应关系记牢ROS 版本类型官方适配 Ubuntu生命周期状态NoeticROS 120.04 (Focal)ROS 1 的收官版本社区仍在维护MelodicROS 118.04 (Bionic)已停止官方支持HumbleROS 222.04 (Jammy)长期支持版生态最完整IronROS 222.04 (Jammy)已停止官方支持JazzyROS 224.04 (Noble)新一代长期支持版我的建议很直接如果你手上是 Ubuntu 20.04就装 Noetic网上教程最多、机械臂和相机的现成包也最全如果是 22.04就装 Humble这是目前 ROS 2 生态里资料密度最高、第三方驱动适配最广的版本。24.04 上的 Jazzy 虽然新但你会发现不少厂商的驱动包和教程还停留在 Humble 时代遇到问题能搜到的答案会少一半。还有一个容易被忽略的点Noetic 和 Humble 是可以装在同一台机器上的但它们的环境变量不能同时生效这个后面第 4 章会专门讲怎么隔离。1.2 三种装法摆在台面上对比apt 源、一键脚本、源码编译确定版本之后接下来是安装方式的选择。社区里流传着三种主流路径各自的适用场景差别很大我列个表说清楚安装方式耗时可控性适合谁主要风险apt 源安装20-60 分钟高所有想长期用 ROS 的人源和密钥配置出错一键脚本如鱼香ROS5-15 分钟中只想快速跑通、不关心细节遇到报错不知道从哪查源码编译数小时最高要改 ROS 本身、做定制裁剪依赖地狱容易编不过我个人的态度是第一次装一定要走 apt 源安装这条手动路线。理由不是手动更高端而是这条路上的每一步都对应一个可能出错的地方你亲手走一遍后面出了问题才知道该查哪。一键脚本确实省事它内部做的也是换源、加密钥、装包、配 rosdep 这一套但它把中间过程全藏起来了一旦在某台机器上失败你面对的就是一屏看不懂的输出反而更慢。源码编译这条路除非你要给 ROS 本身提补丁或者要做极致的裁剪否则不建议碰。编译一个完整的 desktop 版本在中端机器上跑两三个小时很正常中途一个依赖版本不匹配就得从头重来。1.3 虚拟机、双系统还是物理机不同选择对应不同的坑装在哪台机器上也决定了你后面会遇到什么类型的问题。虚拟机的优势是快照回滚装崩了直接恢复特别适合学习和试错。但它的坑集中在网络和 3D 加速上默认的 NAT 模式会让你在配置主从机通信时怎么都连不上Gazebo 这种依赖 OpenGL 的仿真环境也可能因为没开 3D 加速而直接崩掉或者黑屏。双系统和物理机没有虚拟化开销Gazebo 跑起来流畅得多接真实硬件USB 串口、相机也最省心。代价是要处理分区和引导动手前务必确认硬盘上的重要数据已经备份好。如果你是用虚拟机入门我的配置建议是内存至少给 4GB跑 Gazebo 建议 8GB处理器给 2 核以上磁盘 40GB 起步并且一定要在虚拟机设置里勾选加速 3D 图形显存往 2GB 以上拉。这个开关在第一次启动前就要设好装完系统再改有时候会出问题。2. Ubuntu 侧的准备工作把 80% 的失败提前掐掉2.1 换软件源决定你后面等多久ROS 的安装包体积不小ros-noetic-desktop-full装完会占掉 2GB 左右的磁盘涉及几百个依赖包。系统默认的软件源在国内访问速度很不稳定如果不动它光是apt update之后的下载环节就能耗掉你一个小时还经常中途断掉导致 dpkg 处于半安装状态。换源这一步Ubuntu 20.04 以后的桌面版可以直接在软件和更新图形界面里操作在下载自下拉框里选国内镜像站点就行改完它会自动刷新。命令行方式则是先备份再改sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i s|http://archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list sudo sed -i s|http://security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list sudo apt update这里有个细节值得说sed替换的时候一定要同时处理archive.ubuntu.com和security.ubuntu.com两个域名很多人只改了前者结果安全更新那部分还是走原线路慢得莫名其妙。还有一个更省事的做法是装一个换源工具它内置了多个国内镜像的测速功能会自动挑最快的那个。但对新手来说我反而建议先手动改一次理解一下/etc/apt/sources.list这个文件的结构以后遇到某个包找不到的问题你就知道该去检查哪几行。2.2 网络连通性与 DNS 的排查手法换完源之后先别急着装 ROS花两分钟验证一下网络链路。这一步能帮你区分网络本身不通和ROS 源配置错了这两种完全不同的问题。ping -c 4 mirrors.tuna.tsinghua.edu.cn nslookup packages.ros.org curl -I http://packages.ros.org/ros/ubuntu/第一条确认局域网出口没问题第二条确认 DNS 能解析 ROS 官方源域名第三条确认 HTTP 层能拿到响应。如果第二条卡住不动说明是 DNS 的问题可以在/etc/resolv.conf或者网络设置里把 DNS 换成公共的解析服务再试。如果第三条返回 403 或者超时多半是源地址本身写错了。curl返回的响应头里会带Last-Modified之类的字段能看到就说明链路是通的。这个小检查在后面排查rosdep update超时的时候特别有用因为那个命令本质上也是在下载文件。2.3 必备基础包和字符编码设置ROS 的安装过程会用到一批基础工具不同版本需要的略有差异但下面这几个是通用的sudo apt update sudo apt install -y curl gnupg2 lsb-release ca-certificates build-essential gitcurl下载密钥和索引文件几乎所有安装步骤都要用gnupg2处理 apt 源的签名验证lsb-release给脚本提供当前系统代号focal、jammy 这些源地址里要用ca-certificatesHTTPS 证书缺了它 curl 会报证书错误build-essentialgcc、g、make 一套后面编译工作空间时必须要有git拉取示例代码和第三方包另外Ubuntu 22.04 上装 ROS 2 之前建议顺手把 locale 设成 UTF-8因为 ROS 2 的部分工具对字符编码敏感locale 不对会出现乱码或者警告。这一条在第 4 章会给出具体命令。3. ROS 1 Noetic 在 Ubuntu 20.04 上的手装全过程3.1 添加源与密钥别再用过期的 apt-key 写法网上大量 Noetic 教程还在用apt-key add这个命令它在 Ubuntu 20.04 上勉强能用但会打印一行apt-key is deprecated的警告到了 22.04 就直接失效了。既然要手装一遍干脆用当下推荐的做法把密钥放到独立的 keyring 文件里再用signed-by引用sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \ -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] \ http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main \ | sudo tee /etc/apt/sources.list.d/ros-latest.list /dev/null这两行的关键信息量在于signed-by参数明确指定了用哪个密钥文件来验签比全局导入密钥要干净得多lsb_release -sc会自动展开成focal所以这个命令在 20.04 上是对的换到别的版本上会自动跟着变。写完源之后必须验证签名能不能过sudo apt update如果输出里出现NO_PUBKEY或者The following signatures couldnt be verified说明密钥没装对把密钥文件删掉重新下一遍。如果只是 ROS 源的Release文件报错检查 URL 里的$(lsb_release -sc)有没有被错误地写成了字面量。3.2 apt install 那一步到底装了什么源配好之后就是正餐sudo apt install -y ros-noetic-desktop-full这条命令装的是最完整的桌面版包含 ROS 核心库、rqt 可视化工具、rviz、Gazebo 仿真、以及各种通用算法包。我列一下几个常见版本的区别方便你按需选择包名包含内容体积适用场景ros-noetic-ros-base核心通信库无 GUI约 600MB服务器、嵌入式ros-noetic-desktopbase rviz rqt约 1.5GB纯算法开发不跑仿真ros-noetic-desktop-fulldesktop Gazebo 教程约 2.5GB学习、仿真、机械臂新手直接上desktop-full不要省这一步。缺了 Gazebo 和 2D/3D 可视化工具后面跟着教程做仿真实验时还得回头补装补装的时候又容易遇到依赖解析问题。下载过程中如果卡在某个包上不动可以按 CtrlC 中断再重新执行同一条命令apt 会从断点继续。如果正好断在 dpkg 配置阶段导致别的 apt 命令报资源被锁定按照第 6.2 节的顺序处理。3.3 rosdep init 与 rosdep update 报错现场还原装完主体包接下来是新手最容易卡住的环节——rosdep 的初始化。sudo apt install -y python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential sudo rosdep init rosdep updaterosdep init做的事情是在/etc/ros/rosdep/sources.list.d/下生成一个20-default.list文件里面记录了几个索引文件的下载地址。问题来了这些地址指向的服务器在国内访问非常不稳定所以你会看到两种情况一种是在rosdep init阶段就报ERROR: cannot download default sources list from...。解决办法有两种。第一种是手动把这个文件写出来把里面的地址替换成国内可访问的镜像sudo mkdir -p /etc/ros/rosdep/sources.list.d sudo tee /etc/ros/rosdep/sources.list.d/20-default.list /dev/null EOF # os-specific listings first yaml https://gitee.com/ohhuo/rosdistro/raw/master/rosdep/osx-homebrew.yaml osx # generic yaml https://gitee.com/ohhuo/rosdistro/raw/master/rosdep/base.yaml yaml https://gitee.com/ohhuo/rosdistro/raw/master/rosdep/python.yaml yaml https://gitee.com/ohhuo/rosdistro/raw/master/rosdep/ruby.yaml gbpdistro https://gitee.com/ohhuo/rosdistro/raw/master/releases/fuerte.yaml fuerte EOF第二种是用社区里流传的替代命令它的原理和上面一样就是把这些索引地址整体换到国内镜像上同时把rosdep命令包装一下。这个方案胜在省事缺点是它替换了系统里原有的命令以后排查问题时要记得这一点。另一种情况是init过了但rosdep update一直超时。这时候可以加上超时参数重试rosdep update --rosdistro noetic --include-eol-distros如果你不想改任何系统文件也可以先临时给终端设置一下网络代理环境变量再执行但这属于临时手段装完记得取消。rosdep update成功的标志是最后打印出几行updated cache in /home/xxx/.ros/rosdep/sources.cache。看到这行就说明索引缓存已经落到本地了以后rosdep install就不会再联网拉索引速度会快很多。3.4 环境变量写入 bashrc 与验证最后一步把 ROS 的环境加载脚本写进 shell 的启动文件echo source /opt/ros/noetic/setup.bash ~/.bashrc source ~/.bashrcsetup.bash这个脚本做的事情比看起来多它会设置ROS_DISTRO、ROS_PACKAGE_PATH、PYTHONPATH、LD_LIBRARY_PATH、CMAKE_PREFIX_PATH等一堆变量还会把/opt/ros/noetic/bin加到PATH前面。你现在敲的roscore、rosrun这些命令全都是靠这个脚本才找得到的。验证方式printenv | grep ROS which roscore第一条应该能看到ROS_DISTROnoetic、ROS_VERSION1这几行。第二条应该输出/opt/ros/noetic/bin/roscore。两条都对说明环境变量这关过了。注意不要用sudo source也不要把source写进/etc/profile里。前者无效后者会让所有用户和所有 shell 都被强行加载 ROS 环境多版本共存时会打成一团。4. ROS 2 Humble 在 Ubuntu 22.04 上的手装全过程4.1 locale 与 universe 仓库这两个前置条件ROS 2 的安装流程和 ROS 1 差别不小前置条件也更多。第一个是 locale必须启用 UTF-8sudo apt update sudo apt install -y locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-8这几行的作用是生成 UTF-8 的语言环境并把默认值设为它。ROS 2 的日志、命令行工具在非 UTF-8 环境下会出现字符报错虽然不一定直接导致安装失败但会在后面调试时给你添麻烦。第二个前置条件是启用 universe 仓库ROS 2 有一批依赖来自这里sudo apt install -y software-properties-common sudo add-apt-repository universeadd-apt-repository这个命令就来自software-properties-common所以顺序不能反。4.2 添加 ROS 2 源并安装 desktop 版密钥的处理方式和 ROS 1 完全一致区别只在源地址sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \ -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] \ http://packages.ros.org/ros2/ubuntu $(. /etc/os-release echo $UBUNTU_CODENAME) main \ | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null sudo apt update sudo apt install -y ros-humble-desktop注意这里用. /etc/os-release echo $UBUNTU_CODENAME而不是lsb_release -sc。原因是 ROS 2 的源目录名用的是jammy这种代号两种写法结果一样但os-release是更底层的系统文件不依赖lsb-release包在某些精简系统上更可靠。ros-humble-desktop包含了 ROS 2 的核心、rviz2、示例程序但不含 Gazebo。如果你要做仿真再补一条sudo apt install -y ros-humble-gazebo-ros-pkgs另外还有一个ros-dev-tools包包含 colcon 构建工具、rosdep、以及一批开发辅助脚本做实际开发基本都要装sudo apt install -y ros-dev-tools4.3 talker / listener 验证与 ros2 doctor 自检环境变量同样要写进 bashrcecho source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc验证方式和 ROS 1 不同。ROS 2 没有roscore这个中心节点直接跑两个终端# 终端 1 ros2 run demo_nodes_cpp talker # 终端 2 ros2 run demo_nodes_py listener如果 listener 那边开始持续打印I heard: [Hello World: N]说明 ROS 2 的发布订阅链路完全正常。这一步跑通的意义很大它验证了 DDS 中间件、话题发现、序列化这几层都没问题。再跑一个自检命令ros2 doctor它会检查环境变量、网络配置、DDS 发现机制等一批项目输出里带[WARN]的条目通常不影响基本使用但如果是关于ROS_DOMAIN_ID或者 RMW 实现的警告最好按提示处理一下。4.4 ROS 1 和 ROS 2 共存时的环境隔离Noetic 和 Humble 装在一起是可行的但环境变量绝对不能同时生效。ROS_DISTRO这个变量只可能有一个值两个setup.bash都 source 的话后 source 的那个会覆盖前面的导致你敲rosrun找到的是 ROS 1 的命令敲ros2却因为 ROS 1 的 Python 路径污染而报错。我的做法是不在 bashrc 里硬写任何一条 ROS 的环境加载语句而是定义两个别名alias ros1envsource /opt/ros/noetic/setup.bash alias ros2envsource /opt/ros/humble/setup.bash开终端之后按需要执行ros1env或者ros2env明确了当前用的是哪一套。更进一步的写法是先把环境清干净再加载ros2env() { unset ROS_DISTRO ROS_VERSION ROS_PYTHON_VERSION ROS_PACKAGE_PATH AMENT_PREFIX_PATH CMAKE_PREFIX_PATH source /opt/ros/humble/setup.bash }这个写法看着啰嗦但在我需要频繁在两套环境之间切换的时候省下了大量为什么这个命令找不到的排查时间。工作空间的setup.bash也要注意顺序先 source 系统级的 ROS 环境再 source 自己的工作空间的install/setup.bash反过来会覆盖掉系统包路径。5. 装完必须做的冒烟测试小海龟、Gazebo 和 3D 加速5.1 turtlesim 跑通说明你的核心链路没问题装完 ROS 之后不要急着写自己的代码先用小海龟把最小闭环跑一遍。ROS 1 下需要三个终端# 终端 1启动主节点 roscore # 终端 2启动仿真窗口 rosrun turtlesim turtlesim_node # 终端 3键盘遥控 rosrun turtlesim turtle_teleop_key第三个终端必须是当前获得焦点的窗口方向键才会生效。这一点被很多人忽略敲了半天键没反应其实是焦点跑到别的窗口去了。小海龟动起来之后再开一个终端跑rosrun rqt_graph rqt_graph能看到节点和话题的拓扑图说明 rqt 这套工具也装好了。ROS 2 下对应的是ros2 run turtlesim turtlesim_node ros2 run turtlesim turtle_teleop_key ros2 topic list ros2 node listROS 2 的遥控节点和仿真节点之间通过话题通信ros2 topic list能看到/turtle1/cmd_vel和/turtle1/pose就说明一切正常。5.2 Gazebo 起不来的时候先看这三处Gazebo 是新手最容易翻车的地方我按排查优先级列一下。第一处是模型资源。Gazebo 启动时会联网去下载模型库国内访问这个库经常超时表现是界面卡在加载、或者一堆方框显示不出来。解决方式是把模型缓存目录手动补上或者提前把模型包下载到~/.gazebo/models/下面。第二处是显卡和 OpenGL。虚拟机里没开 3D 加速的话Gazebo 启动会直接报Unable to create OpenGL context之类的错误或者起来之后一片黑。先装个诊断工具确认sudo apt install -y mesa-utils glxinfo -B | grep -E OpenGL renderer|OpenGL version如果OpenGL renderer显示的是llvmpipe说明你在用软件渲染性能会很差但至少能跑如果直接报错就得回虚拟机设置里检查 3D 加速开关。第三处是 ROS 和 Gazebo 的桥接包。ROS 1 下sudo apt install -y ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control roslaunch gazebo_ros empty_world.launchROS 2 下sudo apt install -y ros-humble-gazebo-ros-pkgs ros2 launch gazebo_ros gazebo.launch.py如果这一步报找不到 launch 文件基本就是桥接包没装或者装的版本和当前 ROS 发行版不匹配。5.3 虚拟机 3D 加速开关与显卡驱动检查在虚拟机里跑仿真性能瓶颈几乎全在图形处理上。我整理了几个能明显改善体验的设置虚拟机的显存尽量拉大2GB 以上对简单的机械臂和差速小车仿真够用处理器核心数给到 2 核以上Gazebo 的物理引擎是吃 CPU 的关闭虚拟机的 3D 加速自动降级选项强制使用硬件加速如果宿主机有独立显卡确认虚拟机软件支持并启用了显卡直通物理机上则要确认显卡驱动装好了。跑nvidia-smi能出信息就说明驱动正常跑不出来就去附加驱动里选一个推荐版本装上。注意 22.04 上新版驱动的安装流程和 20.04 略有差异装完一定要重启再验证。6. 高频报错逐个拆环境变量、依赖冲突、主从机通信6.1 命令找不到环境变量的三种失效场景roscore: command not found这个报错我遇到过的原因有三类。第一类是 bashrc 没生效。表现是新开的终端里命令找不到但手动source /opt/ros/noetic/setup.bash之后就正常。原因是写 bashrc 的时候写错了路径或者写成了export source ...这种语法错误导致整个文件在解析时中断后面的行全都没执行。检查方法是bash -x ~/.bashrc看有没有报错。第二类是 sudo 环境下变量丢失。sudo默认不继承当前用户的环境变量所以sudo roscore会报找不到命令。这时候要用sudo -E保留环境或者干脆避免用 sudo 跑 ROS 节点。ROS 本身的设计就不要求 root 权限。第三类是多版本互相覆盖。同时装了 ROS 1 和 ROS 2 的话bashrc 里哪一条在后面哪条生效前面那条等于白写。这就是我在 4.4 节推荐用别名而不是直接 source 的原因。顺便提一个相关的问题如果你改过LD_LIBRARY_PATH或者PYTHONPATH也可能导致 ROS 节点启动时报动态库加载失败或者 Python 模块导入错误。排查方式是回退这两个变量到 ROS 环境加载之后的状态确认是哪个额外的路径引入了冲突。6.2 apt 依赖冲突与 dpkg 锁的清理顺序E: Could not get lock /var/lib/dpkg/lock-frontend这个报错通常是有另一个 apt 进程还在跑。先确认一下ps aux | grep -i apt如果确实有残留进程等它跑完或者按正常信号结束它。只有在进程已经僵死、且你确认没有正在进行的安装任务时才考虑删锁文件。删锁这个操作本身有风险如果此时 dpkg 正处于半配置状态强行删锁再装别的包会让数据库状态更加混乱。更常见的是某个包安装失败dpkg 处于半配置状态这时候按下面的顺序处理sudo dpkg --configure -a sudo apt --fix-broken install sudo apt update sudo apt install -f第一条让 dpkg 把没配完的包继续配完第二条让 apt 自动补齐缺失的依赖第三、四条刷新索引再修一次。这四步走完绝大多数依赖问题都能解决。如果还不行就得具体看是哪个包在冲突用apt-cache policy 包名看它有哪些可用版本必要时降级或者换源。6.3 ROS_MASTER_URI 与主从机通信配置做小车或者机械臂开发的时候经常会用一台性能好的机器跑计算小车上的工控机只负责采集和转发这就是主从机模式。ROS 1 下的配置靠三个环境变量# 从机侧 export ROS_MASTER_URIhttp://192.168.1.100:11311 export ROS_IP192.168.1.101ROS_MASTER_URI指向主机的 roscore 地址ROS_IP告诉别人自己的 IP 是多少。这两个必须配对使用只设 URI 不设 IP 的话主机拿到的会是localhost导致话题数据发不回来。ROS 2 没有 master 的概念节点之间靠 DDS 自动发现靠ROS_DOMAIN_ID做隔离export ROS_DOMAIN_ID42同一网络下只有ROS_DOMAIN_ID相同的节点才能互相发现。如果两台机器都设了相同的 ID 却还是看不到对方多半是网络层的组播被挡住了。虚拟机 NAT 模式下这个问题尤其常见解决办法是把网络模式改成桥接或者用静态对端配置export ROS_STATIC_PEERS192.168.1.100这台机器上跑的命令我建议先ros2 topic list验证发现是否正常再去做真正的数据传输调试。跳过这一步直接上业务代码会把网络问题误判成程序 bug。6.4 中文输入法和终端体验的捎带优化Ubuntu 上的中文输入法这一块20.04 和 22.04 的差异挺明显。20.04 默认是 ibus装第三方输入法的时候需要先切换到 fcitx 框架然后在im-config里把默认输入法框架改掉最后配置环境变量。整套流程里最容易出问题的是框架切换没生效表现是输入法装上了但切换不出来。改完框架和环境变量之后一定要注销重新登录光重启终端不够。22.04 上我倾向于用 fcitx5它在 Wayland 会话下的兼容性比老版本好得多。装的方式sudo apt install -y fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk3 im-config -n fcitx5然后注销重新登录在 fcitx5 的配置界面里添加拼音输入法。如果切换快捷键没反应检查~/.xprofile里有没有设置GTK_IM_MODULE、QT_IM_MODULE、XMODIFIERS这三个变量。终端本身也有几个值得调的地方。ROS 的日志输出量很大把终端的回滚行数调大比如 100000 行出问题时能往前翻到更早的现场。另外建议装个分屏终端工具同时看 roscore、节点输出和话题信息会舒服很多。7. 装好之后的第一个工作空间与后续上手路线7.1 catkin_make 与 colcon两种构建体系的目录结构ROS 1 和 ROS 2 的工作空间结构长得很像但构建命令完全不同。ROS 1 的 catkin 工作空间mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin_make source devel/setup.bashROS 2 的 colcon 工作空间mkdir -p ~/ros2_ws/src cd ~/ros2_ws colcon build --symlink-install source install/setup.bash--symlink-install这个参数很实用它让 install 目录下的文件用软链接指向源码目录。这样你改了 Python 脚本或者 launch 文件之后不用重新colcon build直接跑就生效。C 代码还是要重新编译但至少省掉了复制文件的步骤。一个容易踩的坑是工作空间的setup.bash必须在使用该工作空间的每个终端里重新 source 一遍它不会自动生效。如果你发现自己的包在别的终端里rosrun找不到八成就是忘了这一步。7.2 学习路线上值得优先啃的几块装好环境只是起点接下来怎么学更关键。按照我自己的经验投入产出比最高的顺序是这样的话题、服务、参数这三套通信机制先吃透这是所有 ROS 程序的基础tf 坐标变换做机械臂和移动机器人绕不开建议早点上手URDF 建模 rviz 可视化能把自己的机器人模型在屏幕上转起来成就感很强Gazebo 仿真 导航栈把建图和路径规划跑通基本就能做完整项目了实际硬件对接串口、CAN、相机驱动这部分和具体设备强相关一开始不用急着上复杂的算法先把一个差速小车从建模、仿真到能跑起来这条链路走通比东看一点西看一点要有效得多。7.3 关于一键脚本和长期维护的个人看法社区里那些一键安装脚本我现在的态度是可以拿来应急但不要把它当成唯一手段。它的价值在于把换源、加密钥、处理 rosdep 这些琐碎步骤打包好了在批量部署或者给同学演示的时候效率很高。但它有两个问题一是脚本内部依赖的镜像地址会变某天突然失效很正常二是它对系统状态的假设比较强如果机器上之前装过部分 ROS 组件脚本可能处理不了这种中间状态。我的习惯是每装完一台机器把自己实际执行的完整命令序列整理成一个记录文件放到个人目录里。下次换机器重装直接照着这份记录走比去搜教程快得多也更清楚每一步在做什么。装 ROS 这件事本身技术含量不高但对细节的敏感度要求很高谁的记录做得细谁就少折腾。
返回列表