1. Ubuntu 20.04 装 ROS1 Noetic 前先把 apt 源和依赖理顺ROS1 Noetic 是 ROS1 系列的最后一个长期支持版本官方只对 Ubuntu 20.04Focal Fossa做完整适配能做什么一句话它把机器人开发里最烦的通信、坐标变换、仿真、可视化全部打包成可复用的节点你写业务逻辑就行。适合谁刚接触机器人操作系统、手里有一台 Ubuntu 20.04 云主机或本地机器、想一次把环境跑通的人。我试过在一台 4 核 32GiB 的云主机上从裸系统开始装最大的坑不是命令本身而是源选错、rosdep 初始化卡住、以及装完不知道环境到底有没有生效。所以这篇不堆概念直接按“能复制、能验证、能排错”的顺序走一遍中间穿插用 TaoToken 统一管理 Key 和 API 通道的做法方便你后面接各种工具调用时不用到处翻配置。先说清楚整体链路apt 源配置 → 安装 ros-noetic-desktop-full → rosdep 初始化 → 环境变量写入 → 工作空间创建 → catkin 编译 → 节点运行验证。每一步都有明确的“成功信号”看到信号再往下走比一口气全敲完再回头找错要省时间。Ubuntu 20.04 的发行版代号是 focal这个代号会出现在 ROS 源地址里用$(lsb_release -sc)自动取避免手写错。云主机和本地机器在这一步没区别唯一要注意的是云主机默认可能没装lsb-release先补上。sudo apt update sudo apt install -y lsb-release curl gnupg2 lsb_release -sc # 应输出 focal如果这条输出不是 focal说明系统不是 20.04后面的 ROS 源会对不上先确认系统版本再继续。这一步看着简单但很多人跳过结果源地址里代号错了apt update报 404 还找不到原因。接着处理 ROS 的 GPG 密钥。密钥的作用是让 apt 验证软件包来源可信不导入的话apt update会提示 NO_PUBKEY。官方推荐用apt-key但新版本 apt 对apt-key有弃用提示更稳的做法是把密钥放到/usr/share/keyrings并在源里用signed-by指定。两种写法我都给出来你选一种即可。# 方式一传统 apt-key简单但有弃用警告 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 \ --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 # 方式二signed-by推荐无弃用警告 curl -sSL http://keyserver.ubuntu.com/pks/lookup?opgetsearch0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 \ | sudo gpg --dearmor -o /usr/share/keyrings/ros-archive-keyring.gpg密钥导入后写源列表。国内环境建议直接用清华镜像下载速度差别很明显。注意源地址里的focal由lsb_release -sc动态生成别写死。# 清华镜像源推荐国内使用 sudo sh -c echo deb [signed-by/usr/share/keyrings/ros-archive-keyring.gpg] \ http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu $(lsb_release -sc) main \ /etc/apt/sources.list.d/ros-latest.list sudo apt updateapt update没有报错、能看到mirrors.tuna.tsinghua.edu.cn/ros/ubuntu focal InRelease这一行就说明源配好了。这一步是整个安装的地基源不对后面全白搭。2. TaoToken 统一 Key 与 API 通道给 ROS 工具链留好接口装 ROS 本身不需要联网调大模型但你在开发过程中大概率会用到代码补全、节点逻辑生成、报错解释这类工具这时候如果每个工具都单独配 Key、单独记 Base URL配置会散得到处都是。TaoToken 在这里的角色是统一入口一个 Key、一个 API 地址兼容 OpenAI 风格的调用方式工具侧只要改 Base URL 和 Model ID 就能接上。它的官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。注意 API 地址不带查询参数配置时直接填这个。为什么在 ROS 环境搭建里要提这个因为 Noetic 开发经常要写 launch 文件、CMakeLists、Python 节点这些重复性高的代码用工具生成能省不少时间。而工具调用的前提是有一个稳定的 API 通道。TaoToken 把模型对话、Coding Plan、控制台、API Keys 这些入口分开你可以按用途选用途入口适合场景临时问模型模型对话解释报错、生成小段代码长期编码Coding Plan持续写节点、重构包结构管理密钥API Keys生成/轮换 Key查看用量控制台排查调用异常具体入口地址都带归因参数方便你直接点模型对话https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentCoding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI Keyshttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content拿到 Key 之后工具侧一般需要三样东西Base URL、API Key、Model ID。以常见的 OpenAI 兼容客户端为例配置长这样{ base_url: https://taotoken.net/api, api_key: sk-你的Key, model: 你选择的模型ID }如果你用的是 Claude Code 这类工具配置项名称可能不同但核心三件套不变Base URL 填https://taotoken.net/apiKey 填你生成的Model ID 按文档里列出的填。接入文档里有各工具的详细字段说明遇到字段对不上就去文档里核对别猜。这里要强调一点TaoToken 是 API 通道不是编辑器替代品也不是 ROS 的依赖。它和 ROS 环境是两条线ROS 装好之后工具调用是额外增益。别把两者混在一起排错否则出问题时分不清是 ROS 没配好还是 Key 没填对。3. 可复制的源列表、环境变量与工作空间配置这一节给的是能直接粘贴的配置片段路径和原文保持一致。先装 ROS 桌面完整版这个包体积不小网络好的话几分钟慢的话十几分钟耐心等。sudo apt install -y ros-noetic-desktop-full装完先别急着写环境变量先确认核心命令在不在ls /opt/ros/noetic/setup.bash rosversion -d # 应输出 noeticrosversion -d输出 noetic 就说明主包装好了。如果提示 command not found说明环境变量还没载入下一步就处理这个。环境变量写入~/.bashrc这样每次开终端自动生效。注意用追加别用覆盖否则会把原有配置冲掉。echo source /opt/ros/noetic/setup.bash ~/.bashrc source ~/.bashrc printenv | grep ROSprintenv | grep ROS应该能看到ROS_DISTROnoetic、ROS_ROOT、ROS_PACKAGE_PATH这几项。看到就说明环境变量生效了。接下来装 rosdep它是 ROS 的依赖管理工具负责在你编译包时自动装缺失的系统依赖。初始化这一步在国内经常卡住因为默认要从 GitHub 拉配置文件。如果卡住可以换用国内镜像的 rosdistro 源。sudo apt install -y python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential sudo rosdep init rosdep updatesudo rosdep init如果报 “already exists”说明之前初始化过可以跳过。rosdep update如果超时编辑/etc/ros/rosdep/sources.list.d/20-default.list把里面的 raw.githubusercontent.com 换成国内镜像地址再执行rosdep update。然后是工作空间。用 catkin_tools 比传统 catkin_make 更灵活支持并行编译和独立包构建。sudo apt install -y python3-catkin-tools python3-osrf-pycommon mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin init catkin buildcatkin init会在当前目录生成.catkin_tools配置目录catkin build编译空工作空间成功后会生成devel和build两个目录。看到devel/setup.bash出现就说明工作空间初始化完成。把工作空间的环境变量也写进~/.bashrc注意顺序先 source ROS 主环境再 source 工作空间的否则工作空间里的包可能被覆盖。echo source ~/catkin_ws/devel/setup.bash ~/.bashrc source ~/.bashrc到这里源列表、环境变量、工作空间三块配置就齐了。下面进入验证环节。4. 验证请求与成功结果从 roscore 到自定义节点验证分三层ROS 核心能不能起、工作空间能不能编译、自定义节点能不能跑。每层都有明确的成功信号。第一层启动 ROS 核心roscore正常输出会包含started core service [/rosout]并且终端会挂住等待。按 CtrlC 停止。如果报roscore: command not found回到上一节检查环境变量。第二层创建一个测试包并编译。用catkin_create_pkg生成包结构cd ~/catkin_ws/src catkin_create_pkg example_1 roscpp rospy std_msgs cd ~/catkin_ws catkin buildcatkin build输出里如果每个包都显示[build] Finished没有 error就说明编译通过。这一步常见的是找不到 roscpp通常是 rosdep 没跑或者依赖没装回头补rosdep install。第三层写一个最小 C 节点验证运行。在example_1/src下建hello.cpp#include ros/ros.h int main(int argc, char **argv) { ros::init(argc, argv, hello); ros::NodeHandle nh; ROS_INFO(Hello World from ROS1 Noetic!); ros::spinOnce(); return 0; }改CMakeLists.txt在catkin_package()后面加add_executable(hello src/hello.cpp) target_link_libraries(hello ${catkin_LIBRARIES})重新编译并运行cd ~/catkin_ws catkin build source devel/setup.bash开两个终端一个跑roscore另一个跑rosrun example_1 hello看到[ INFO] [时间戳]: Hello World from ROS1 Noetic!就成功了。再用rosnode list应该能看到/hello和/rosout。如果你还想验证 Python 节点在包下建scripts/testpy.py加执行权限内容#!/usr/bin/env python3 import rospy rospy.init_node(testpy) rospy.loginfo(Python node is running) rospy.spin()chmod x scripts/testpy.py后rosrun example_1 testpy.py即可。Python 节点最容易踩的坑是忘了加执行权限报 permission denied加chmod x就好。5. 本篇常见错排查401、找不到包、rosdep 超时排错这块按真实报错来遇到对号入座。报错一ERROR: cannot download default sources list from ...rosdep init 失败这是sudo rosdep init拉不到默认源。先确认网络能访问外网如果还是不行手动创建配置文件sudo mkdir -p /etc/ros/rosdep/sources.list.d sudo nano /etc/ros/rosdep/sources.list.d/20-default.list内容指向可访问的 rosdistro 镜像保存后再rosdep update。报错二[rospack] Error: package example_1 not found这是最典型的“找不到包”。原因几乎都是当前终端没载入工作空间环境。解决三步cd ~/catkin_ws source devel/setup.bash catkin buildsource devel/setup.bash是关键它把工作空间里的包路径加进ROS_PACKAGE_PATH。如果你在~/.bashrc里已经写了这行新开终端会自动生效但当前终端如果是在写之前开的就得手动 source 一次。报错三401 Unauthorized工具调用时这个和 ROS 无关是 API Key 的问题。检查三处Key 有没有复制完整前后别带空格、Base URL 是不是https://taotoken.net/api、Model ID 是不是文档里列出的有效值。三者任一不对都会 401。如果确认都对还报 401去 API Keys 页面重新生成一个再试。报错四local proxy failed或连接超时工具侧如果配了本地代理而代理没起或者端口不对就会报这个。检查工具的网络配置把代理项清空或指向正确端口。注意这里说的是工具自身的网络设置不是系统层面的。报错五reading choices相关解析错误这类报错通常是返回体格式和客户端预期不一致多半是 Base URL 填成了带路径的地址。确认填的是https://taotoken.net/api不要在后面加/v1或其他后缀具体以接入文档为准。报错六OAuth相关提示如果工具走的是 OAuth 流程而不是 API Key报 OAuth 错误说明认证方式选错了。改用 API Key 方式填 Base URL Key Model ID 三件套。排错的核心思路先分清是 ROS 层的问题还是工具层的问题。ROS 层的报错关键词是 package、node、roscore、catkin工具层的报错关键词是 401、proxy、choices、OAuth。分清了再动手别混着改。6. 环境跑通之后把 Key 和通道固定下来环境自检通过后建议把这次用到的配置固化避免下次重装或换机器时重新踩一遍。ROS 侧把源列表、环境变量、工作空间初始化写成一个脚本放在~/setup_ros.sh新机器上跑一遍就行。核心内容就是本文第 3 节的命令按顺序排列加set -e让出错即停。工具侧把 Base URL、Key、Model ID 记在安全的地方。Key 不要硬编码进脚本提交到仓库用环境变量或者本地配置文件。TaoToken 的控制台可以查看调用情况如果发现异常调用去 API Keys 页面轮换 Key。长期做机器人开发的话Coding Plan 比按次调用更划算适合持续写节点、调 launch 文件的场景。入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 具体额度以页面说明为准。最后给一个实用技巧ROS 开发里catkin build报错信息经常很长把报错贴给模型对话入口让它帮你定位是 CMakeLists 写错还是依赖缺失比自己在几百行输出里翻要快。但前提是 API 通道稳定这就是前面把 Key 和 Base URL 固定下来的意义。环境这东西装一次跑通不算完能在换机器、重装、团队协作时快速复现才算真的稳。把本文的命令按顺序存成脚本下次直接执行省下的时间够你多写两个节点。
阅读完成 · 觉得有帮助?