8.6 TROS/ROS 开发
本节主要解答与地瓜机器人操作系统(TogetheROS.Bot, tros.b)以及通用 ROS/ROS2 在 RDK 平台上开发和使用相关的常见疑问。
Q1: TROS 相关的软件包运行发生错误,推荐的预先排查步骤有哪些?
A:
- 确保您的 tros 软件包都是最新的: 许多问题可能在新版本中已被修复。在确保 D-Robotics 官方 APT 源(如
sunrise.horizon.cc或最新的archive.d-robotics.cc)配置正确后,执行以下命令更新所有 tros 相关的包:在提问时,也请使用sudo apt update && sudo apt upgraderdkos_info、apt list --installed | grep tros、apt show <tros_package_name>等命令提供您的系统和软件包版本信息。 - 尝试定位问题出现的 ROS 节点:
- 参考对应功能包的 launch 启动 文件,将其中的日志级别(log level)参数修改为
debug(例如,在 Node 的 arguments 中添加['--ros-args', '--log-level', 'DEBUG'])。 - 重新运行 launch 文件,根据详细的 debug 日志输出来定位具体是哪个节点(node)出现了问题。
- TROS 功能包的 launch 文件通常位于
/opt/tros/<tros_distro>/share/<package_name>/launch/目录下(例如/opt/tros/humble/share/mipi_cam/launch/)。 - ROS2 的日志文件通常存储在
~/.ros/log/或/root/.ros/log/目录下。在排查前,可以先执行rm -rf ~/.ros/log/*(或对应 root 路径) 清空旧日志,然后重新运行功能包以收集最新的、与当前问题相关的日志。
- 参考对应功能包的 launch 启动 文件,将其中的日志级别(log level)参数修改为
- 重新安装相关的 tros 功能包:
- 如果怀疑是某个 tros 功能包的配置文件被改乱或安装不完整,可以尝试重装该软件包。
- 以
hobot_usb_cam为例,重装步骤大致如下:- 查找精确的包名:
apt list --installed | grep hobot-usb-cam(根据实际情况调整搜索词) - 卸载软件包:
sudo apt remove <tros_package_name_found>(例如sudo apt remove tros-hobot-usb-cam) - 确保 APT 源配置正确并更新缓存:
sudo apt update - 重新安装软件包:
sudo apt install <tros_package_name_found>
- 查找精确的包名:
Q2: TROS 和标准的 ROS2 有什么区别?TROS Foxy 版本如何升级到 TROS Humble 版本?
A:
-
TROS 与 ROS2 的关系:
- TROS (TogetheROS.Bot) 是 D-Robotics 基于开源的 ROS2(Robot Operating System 2)针对其 RDK 硬件平台进行优化和适配后发布的机器人操作系统。
- 它通常基于某个 ROS2 的 LTS(长期支持)版本进行构建,例如:
- 在 RDK OS 2.x (基于 Ubuntu 20.04) 上,TROS 通常基于 ROS2 Foxy Fitzroy。
- 在 RDK OS 3.x (基于 Ubuntu 22.04) 上,TROS 通常基于 ROS2 Humble Hawksbill。
- TROS 在标准的 ROS2 基础上,集成了 D-Robotics 硬件(如 BPU、VPU、JPU、Sensor 等)的驱动、硬件加速库、以及针对机器人常用功能的优化方案和示例。
- TROS 与对应版本的标准 ROS2 在核心 API 和通信机制上是完全兼容的,这意味着为标准 ROS2 Foxy/Humble 开发的节点和服务通常可以直接或稍作修改后在对应版本的 TROS 上运行,反之亦然。它们可以相互通信。
-
TROS 版本升级 (例如从 Foxy 到 Humble):
- 由于 TROS 的版本与 RDK OS 的底层 Ubuntu 版本紧密绑定(例如 Foxy 对应 Ubuntu 20.04,Humble 对应 Ubuntu 22.04),通常无法直接通过
apt upgrade等命令将 TROS 从一个大的 LTS 版本(如 Foxy)升级到另一个大的 LTS 版本(如 Humble)。 - 正确的升级方式是: 通过烧录包含了新版本 TROS(如 Humble)的、对应新 Ubuntu 版本(如 22.04)的 RDK OS 完整系统镜像,来完成整个系统和 TROS 的升级。
- 由于 TROS 的版本与 RDK OS 的底层 Ubuntu 版本紧密绑定(例如 Foxy 对应 Ubuntu 20.04,Humble 对应 Ubuntu 22.04),通常无法直接通过
-
板卡上的 ROS2 运行环境:
- RDK 板卡上安装的 TROS 本身就是一个完整的 ROS2 运行环境。
- 您也可以在 TROS 之外,在板卡上自行安装其他标准 ROS2 发行版(如 Foxy, Humble)或 ROS1(如 Noetic),它们可以与 TROS 共存,但如前所述,一个终端会话中只能 source 一个 ROS 环境。
colcon是 ROS2 常用的构建工具,如果您的系统镜像中未预装,可能需要手动安装:sudo apt update
sudo apt install python3-colcon-common-extensions python3-catkin-pkg-modules python3-rosdep
# 或者通过pip安装:
# pip3 install -U colcon-common-extensions empy
-
注意: 任何在 x86 平台直接编译(而非交叉编译)的 ROS 功能包都不能直接在 ARM 架构的 RDK 板卡上运行,反之亦然。需要确保程序是为目标平台的架构编译的。
Q3: TROS 是如何安装在 RDK 板卡上的?是否需要手动安装?
A:
- TROS 通常在您烧录官方提供的 RDK OS 系统镜像时,就已经内置并预装在板卡上了。您不需要在烧录完系统后再手动执行完整的 TROS 安装流程。
- 您可以通过 APT 包管理器来更新或增量安装 TROS 的各个功能包。在确保 D-Robotics 官方 APT 源配置正确的前提下,执行
sudo apt update && sudo apt upgrade会更新已安装的 TROS 包到最新版本。 - 旧版本中可能存在的
hhp工具或手动建立软链接的步骤,在新版的 TROS 中通常已不再需要。
Q4: TROS 相关功能包的源代码在哪里可以找到?
A:
- TROS 手册: D-Robotics 官方的 TROS 用户手册中,在介绍各个核心功能包或示例时,通常会提供对应源码的 GitHub 仓库链接。
- NodeHub: 如果功能包是作为 NodeHub(D-Robotics 应用商店或组件平台)的一部分提供,其相关介绍页面通常也会包含源码链接。
- GitHub D-Robotics 组织: 大部分 TROS 相关的开源功能包都托管在 GitHub 上的 D-Robotics 组织下 (https://github.com/D-Robotics)。您可以在该组织内通过搜索功能包的名称(或部分名称)来查找其源码仓库。
- README 文档: 通常,每个 TROS 功能包的源码仓库 中都会包含一个详细的
README.md文件,其中会说明该功能包的编译方法、使用说明、参数配置、依赖项等重要信息。
Q5: TROS 功能包的源码编译有哪些注意事项?
A:
-
何时需要源码编译:
- 体验功能: 如果您只是想体验 TROS 的已有功能,通常不需要进行源码编译。直接烧录最新的 RDK OS 系统镜像,参考手册运行预编译好的功能包即可。
- 二次开发: 如果您需要在某个官方提供的 TROS 功能包基础上进行修改和二次开发,那么您需要下载该功能包的源码,并在其基础上进行修改和编译。这种情况下,通常建议直接在RDK 板卡端进行编译(如果板卡资源允许且安装了必要的编译工具),或者在配置好的交叉编译 Docker 环境中进行。
- 完整构建 TROS: 如果您需要从零开始构建整个 TROS 发行版(例如,为了深度定制或移植到新的硬件平台),这是一个非常复杂的过程,通常需要使用官方提供的交叉编译 Docker 环境,在性能强劲的 x86 Ubuntu 开发机上进行。
-
交叉编译 Docker 环境:
- 版本对应: 确保您拉取的交叉编译 Docker 镜像版本与您目标 TROS 版本(Foxy 或 Humble)以及目标 RDK OS 版本相对应。
- 源码分支: 从 GitHub 等平台拉取 TROS 功能包源 码时,请确保切换到与您的目标 TROS 版本对应的正确分支(例如,
foxy分支、humble分支或特定的 release tag),避免直接使用main或develop等开发分支,除非您明确知道其兼容性。
-
依赖问题:
- 在源码编译过程中,可能会遇到缺少依赖库(“缺包少库”)的问题。解决这类编译依赖问题是 C/C++开发者应具备的基本技能。
- 仔细阅读报错信息,确定缺少的库或头文件名称。
- 尝试使用
apt search <package_name>查找对应的 Debian 包,并使用sudo apt install <package_name-dev>(通常开发包带有-dev后缀)进行安装。 - 对于 ROS 自身的依赖,可以使用
rosdep工具来安装:sudo apt install python3-rosdep
sudo rosdep init # 只需要执行一次
rosdep update
cd <your_ros_workspace_root>
rosdep install --from-paths src --ignore-src -r -y - 社区通常无法对 индивидуальные 编译环境的依赖问题提供一对一支持。
Q6: 在 RDK 板卡上尝试安装标准 ROS2 时报错,怎么办?
A: 在 RDK 板卡上(可能已经预装了 TROS)自行安装标准的 ROS2 发行版(如 Foxy, Humble)时,如果遇到问题:
- 使用推荐的安装工具:
- 可以尝试使用社区中广受好评的第三方 ROS 安装工具,例如“小鱼的一键安装系列”(FishROS)。这些工具通常会处理好软件源配置、依赖安装等繁琐步骤。
wget http://fishros.com/install -O fishros && bash fishros
- 可以尝试使用社区中广受好评的第三方 ROS 安装工具,例如“小鱼的一键安装系列”(FishROS)。这些工具通常会处理好软件源配置、依赖安装等繁琐步骤。
- 从源码安装(如果工具安装失败):
- 如果一键安装工具也失败,您可以尝试从“小鱼”的 GitHub 仓库克隆其安装脚本的源码,并手动执行 Python 安装脚本。这有时能提供更详细的错误输出或允许您进行一些自定义修改。
git clone https://github.com/fishros/install
cd install
sudo python3 install.py
- 如果一键安装工具也失败,您可以尝试从“小鱼”的 GitHub 仓库克隆其安装脚本的源码,并手动执行 Python 安装脚本。这有时能提供更详细的错误输出或允许您进行一些自定义修改。
- 检查网络和软件源: 确保板卡网络连接正常,并且能够访问 ROS 官方的软件源(
packages.ros.org)以及 Ubuntu 的官方软件源。 - 查看错误日志: 仔细阅读安装过程中出现的任何错误信息,它们通常会指出问题的具体原因(如依赖冲突、下载失败、编译错误等)。
Q7: TROS 中的多媒体方案(如视频流处理、编解码)有哪些推荐的参考资源?
A: D-Robotics 官方 TROS 手册中通常会有专门的章节或示例介绍如何在 ROS2 环境中使用 RDK 的多媒体能力。
- 社区手册 - 机器人开发 - 应用示例 - 视频应用 (video_boxs):
https://developer.d-robotics.cc/rdk_doc/Robot_development/apps/video_boxs
(请确认此链接为最新且有效。)
这个链接指向的页面或其子页面通常会包含:
- 如何使用 MIPI 摄像头或 USB 摄像头发布图像话题。
- 如何使用硬件编解码器(hobot_codec)进行图像/视频的编码(如 H.264, H.265, MJPEG)和解码。
- 如何在 ROS2 节点间高效传输图像数据(可能涉及零拷贝技术)。
- 相关的示例代码和 launch 文件。

Q8: 启动 USB 或 MIPI 摄像头节点后,终端提示“标定数据不存在”(例如 [usb_camera_calibration.yaml] does not exist!),这是正常的吗?
A: 这个提示本身通常是正常的,不一定代表摄像头无法工作。
- 日志级别: 许多 ROS 节点的默认日志级别是
INFO或WARN。当摄像 头节点启动时,它会尝试加载相机的内参标定文件(通常是一个.yaml文件,包含了相机的焦距、畸变系数等参数)。如果找不到这个文件,它会输出一个警告信息,但通常会继续使用一组默认的或无标定的参数来运行。 - 功能验证:
- 即使出现这个警告,摄像头本身可能已经在正常发布图像数据了。
- 您可以在另一个终端中(source 好 TROS 环境后)执行以下命令来验证:
ros2 topic list:查看是否有图像话题(如/image_raw,/image_color,/hbmem_img等)正在发布。ros2 topic hz /your_image_topic_name:查看该图像话题的发布频率。ros2 topic echo /your_image_topic_name:查看是否有图像消息数据正在输出(数据量会很大,很快会刷屏,主要看是否有数据流)。- 使用
rqt_image_view(如果在 PC 端或板卡 Desktop 环境)订阅该图像话题,看是否能显示画面。
- 何时需要标定文件: 如果您的应用需要精确的图像测量、三维重建、或者需要对图像进行去畸变处理,那么提供正确的相机标定文件就非常重要。如果只是简单地显示图像或进行一些不依赖精确像素对应的 AI 推理,缺少标定文件可能影响不大。