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 推理,缺少标定文件可能影响不大。
Q9: 使用 TROS 的 WebSocket 可视化功能时,浏览器页面上不显示图像或 AI 结果,可能是什么原因?
A: WebSocket 可视化不显示内容,可能的原因有很多,需要逐步排查:
-
确保相关 ROS 节点正常运行:
- 图像发布节点: 必须有一个节点(如
mipi_cam,usb_cam, 或图像回放节点)正在发布图像话题。 - AI 推理节点(如果需要显示 AI 结果): 必须有一个节点正在进行 AI 推理并发布 AI 结果话题。
- WebSocket 节点本身 (
hobot_websocket或类似): 该节点负责将 ROS 话题数据转换为 WebSocket 消息发送给浏览器。 - 使用
ros2 node list和ros2 topic list检查这些节点和话题是否都处于活动状态。
- 图像发布节点: 必须有一个节点(如
-
网络连接与 IP 地址:
- 确保您的电脑(运行浏览器)和 RDK 板卡(运行 WebSocket 服务)在同一个局域网内。
- 在浏览器中访问的 IP 地址必须是 RDK 板卡的正确 IP 地址。
- 检查是否存在 IP 地址冲突或路由问题。
-
代理服务器设置:
- 如果您电脑的网络连接配置了代理服务器,请检查代理设置是否可能阻止了对局域网内 IP 地址(RDK 板卡)的直接访问。尝试临时禁用代理或配置代理例外规则。
-
WebSocket 节点参数与 AI 消息同步 (针对 AI 结果不显示):
hobot_websocket节点在启动时,如果其参数only_show_image设置为False(即期望同时显示图像和 AI 结果),它可能需要接收到第一个 AI 结果消息 (ai_msg) 后,才能开始同步图像和 AI 数据并进行渲染。- 检查: 确保您的 AI 推理节点确实检测到了目标并发布了至少一帧 AI 结果。如果 AI 节点一直没有输出,WebSocket 端可能因为等待第一帧 AI 数据而表现为不显示任何叠加结果。
-
网络带宽与质量:
- 传输未压缩的图像数据(尤其是高分辨率、高帧率)对网络带宽要求较高。如果您的 RDK 板卡与电脑之间的网络连接质量不佳(例如,Wi-Fi 信号弱、网络拥堵、使用手机热点带宽不足),可能导致 WebSocket 数据传输卡顿、延迟过高或失败。
- 尝试降低图像分辨率或帧率,或者使用压缩图像格式进行传输。
-
RDK 板卡端 CPU 负载过高:
- 如果在 RDK 板卡自身的图形桌面环境(通过 VNC 或直连显示器)中打开浏览器来查看 WebSocket 的渲染结果,板卡的 CPU 可能会同时承担 ROS 节点运行、WebSocket 服务、图形桌面渲染以及浏览器渲染等多重负载,导致性能瓶颈,进程无法正常运行。
- 建议: 通常建议在另一台 PC 上打开浏览器来访问 RDK 上的 WebSocket 服务。
-
浏览器兼容性或缓存:
- 尝试清除浏览器缓存,或使用不同的浏览器(如 Chrome, Firefox, Edge 的最新版本)进行测试。
- 查看浏览器开发者工具的控制台(Console)和网络(Network)标签页,看是否有 JavaScript 错误、WebSocket 连接错误或资源加载失败等问题。
-
刷新页面: 有时,简单的刷新网页(Ctrl+R 或 Cmd+R)可能会解决临时的卡顿或连接问题。
Q10: 使用 TROS 的智能语音功能时报错,或者想 使用自己的 USB 麦克风,应该如何配置?
A:
-
检查声卡设备:
- 首先,确认您的麦克风设备(无论是板载的还是 USB 外接的)已被系统正确识别。使用以下命令查看已识别的声卡:
cat /proc/asound/cards
ls /dev/snd/cat /proc/asound/cards会列出声卡及其序号(如 card 0, card 1)。ls /dev/snd/会显示 PCM 设备节点(如pcmC0D0c表示 card 0, device 0, capture)。
- 首先,确认您的麦克风设备(无论是板载的还是 USB 外接的)已被系统正确识别。使用以下命令查看已识别的声卡:
-
配置 TROS 语音节点的麦克风设备号:
- TROS 的智能语音相关节点(例如,负责录音或语音识别的节点)通常会有一个参数(例如在 launch 文件或参数配置文件中)用于指定使用哪个麦克风设备。这个参数的名称可能是
micphone_name、device_name、alsa_device或类似。 - 该参数的值通常是 ALSA 设备名,格式为
hw:X,Y,其中X是声卡序号 (Card Number),Y是该声卡上的 PCM 设备序号 (Device Number)。 - 默认值: 可能默认为
"hw:0,0",表示使用声卡0上的设备0。 - 修改: 如果您的目标麦克风(例如 USB 麦克风)被识别为声卡1上的设备0的录音端点(capture, 通常设备节点名以
c结尾,如pcmC1D0c),那么您需要将该参数值修改为"hw:1,0"。 - 示例: 如果
cat /proc/asound/cards显示您的 USB 麦克风是card 1,并且arecord -l(列出录音设备) 显示其对应的 PCM 设备是device 0,则参数应设为hw:1,0。
- TROS 的智能语音相关节点(例如,负责录音或语音识别的节点)通常会有一个参数(例如在 launch 文件或参数配置文件中)用于指定使用哪个麦克风设备。这个参数的名称可能是
-
检查 ALSA 音量和静音设置:
- 使用
alsamixer命令(在终端中运行),按F6选择正确的声卡,然后按F4查看并调整录音(Capture)相关的音量控制(如 'Mic', 'Capture', 'ADC PGA Gain' 等),确保它们没有被静音(Muted,通常显示为 MM,按 M 键切换)并且音量设置在合适范围。
- 使用
-
权限问题: 确保运行语音节点的进程有权限访问音频设备。