8.6 TROS/ROS 开发
本节主要解答与地瓜机器人操作系统(TogetheROS.Bot, tros.b)以及通用ROS/ROS2在RDK平台上开发和使用相关的常见疑问。
Q1: TROS相关的软件包运行发生错误,推荐的预先排查步骤有哪些?
A:
- 确保您的tros软件包都是最新的: 许多问题可能在新版本中已被修复。在确保地平线官方APT源(如
sunrise.horizon.cc
或最新的archive.d-robotics.cc
)配置正确后,执行以下命令更新所有tros相关的包:在提问时,也请使用sudo apt update && sudo apt upgrade
rdkos_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) 是地平线基于开源的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基础上,集成了地平线硬件(如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的各个功能包。在确保地平线官方APT源配置正确的前提下,执行
sudo apt update && sudo apt upgrade
会更新已安装的TROS包到最新版本。 - 旧版本中可能存在的
hhp
工具或手动建立软链接的步骤,在新版的TROS中通常已不再需要。
Q4: TROS相关功能包的源代码在哪里可以找到?
A:
- TROS手册: 地平线官方的TROS用户手册中,在介绍各个核心功能包或示例时,通常会提供对应源码的GitHub仓库链接。
- NodeHub: 如果功能包是作为NodeHub(地平线机器人应用商店或组件平台)的一部分提供,其相关介绍页面通常也会包含源码链接。
- 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: 地平线官方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推理,缺少标定文件可能影响不大。