地平线程序员奶爸教你玩转机器人人体跟随开发平台第二期
基于地平线TogetherROS与旭日X3派搭建人体跟随机器人,实现约30ms低延迟、30fps满帧与超8米有效跟随。通过安装系统、配置网络、测试F37摄像头及人体检测算法,最终使机器人自动跟随人前进、后退、转向。
# 人体跟随机器人搭建教程:让机器人像狗狗一样跟着你跑
在本教程中,我们将基于地平线机器人开发平台 **TogetherROS** 和 **旭日®️X3派**(以下简称 X3派),打造一个能够自动跟随人移动的智能机器人。无论是想给孩子一个酷炫的AI玩具,还是探索机器人自主跟随技术,这份教程都能帮你零基础快速上手。
---
## 一、功能介绍
先来看一下最终实现的效果:当人移动时,机器人会迅速跟随人前进、后退、左转、右转,就像一只听话的狗狗。这种低延迟、高帧率的跟随能力得益于 X3派上 **5Tops算力的BPU**,它可以实现:
- **低延迟**:约 30ms 的推理延迟
- **高帧率**:满帧 30fps
- **远距离**:有效跟随距离 > 8米
- **低系统负载**:4核CPU仅占用单核 <40%
在开始编写代码之前,我们先简单分析一下人体跟随机器人需要具备哪些基本模块。
### 1. 传感
需要视觉传感器(如摄像头)来捕捉图像数据。
### 2. 感知
获取图像后,通过视觉算法进行推理,检测到人体位置和关键点。
### 3. 交互
根据人体检测结果(例如人在机器人右侧),生成对应的控制指令(如向右转动)。
### 4. 控制
将控制指令转化为机械运动,驱动机器人电机。
### 5. 机器人本体
具备运动能力的机器人,接收控制指令并执行。
地平线发布的 **TogetherROS** 软件栈内置了丰富的机器人开发组件,完全开源免费,并允许二次开发。接下来我们就一步步搭建这个人体跟随机器人。
> **小提示**:如果你已经看过第一期的“手势控制机器人”教程,会发现很多模块是通用的,可以复用。
---
## 二、准备工作
### 2.1 硬件清单
| 硬件 | 说明 |
|------|------|
| ① X3派 | 地平线旭日®️X3派开发板 |
| ② F37 MIPI摄像头 | 用于采集图像 |
| ③ 机器人 | 本末双足机器人或小R科技麦轮小车(也可用其他移动机器人) |
| ④ 其他配件 | USB Type-C电源线(至少5V@2A)、串口线、TF存储卡(≥8GB,C10以上)、读卡器 |
**硬件实物图:**
-
-
-
> **小提示**:为获得最佳体验,推荐使用本末双足机器人。如果你没有机器人,后面会介绍用仿真环境或自己搭建的方法。
**串口线连接方式:**
### 2.2 安装系统
参考旭日X3派用户手册中的“安装系统”章节,完成系统安装(或更新至最新版本)。
### 2.3 系统配置
1. 配置X3派的无线网络(参考用户手册“无线网络”章节)。
2. 连接成功后,查询IP地址:
示例中IP为 `192.168.1.147`,后续通过SSH远程连接(用户名 `root`,密码 `root`)。
### 2.4 安装 TogetherROS
通过 `apt` 命令安装 `hhp` 软件包(TogetherROS的DEB包):
```
ssh root@192.168.1.147
sudo apt install hhp
```
安装过程输出如下(部分):
```
root@ubuntu:~# sudo apt install hhp
Reading package lists... Done
...
Setting up hhp (1.0.1) ...
Generation complete.
```
查看 `/opt` 目录确认安装成功:
```
root@ubuntu:/userdata# ls /opt/
tros
```
至此准备工作完成,下面开始搭建人体跟随App。
> **常见问题**:**安装时提示“无法找到包 hhp”怎么办?**
> 请确保X3派已连接互联网,并且已执行 `apt update`。如果仍失败,可手动从地平线开发者社区下载DEB包安装。
---
## 三、使用介绍
接下来我们逐个搭建并测试功能模块,最后组装成完整的人体跟随机器人。
### 3.1 安装和测试 F37 摄像头
将F37摄像头通过MIPI线连接到X3派,连接方式如下:
使用TogetherROS中的ROS包测试摄像头。通过脚本启动摄像头采集、图像编码和web展示功能,可在PC浏览器上实时查看图像。
在SSH终端中执行:
```
source /opt/tros/local_setup.bash
ros2 launch websocket hobot_websocket.launch.py
```
启动成功后终端状态如下:
在PC浏览器(Chrome/Firefox/Edge)中输入X3派的IP地址(例如 `192.168.1.147`),即可看到摄像头实时画面。
> **小提示**:如果浏览器无法显示,检查X3派防火墙是否开放了端口,或尝试使用 `http://:8080`。
### 3.2 测试人体检测算法和交互功能
再打开一个SSH终端(保持上一个终端运行),执行:
```
source /opt/tros/setup.bash
cp -r /opt/tros/lib/mono2d_body_detection/config/ .
ros2 launch body_tracking hobot_body_tracking_without_gesture.launch.py
```
当有人体出现在摄像头前时,终端会输出类似下面的日志:
```
[body_tracking-5] [INFO] [1657615485.941625685] [TrackingManager]: track_id: 1, frame_ts: 485910, tracking_sta(0:INITING, 1:TRACKING, 2:LOST): 1, gesture: 0, y pixel to robot: 2, present_rect: 540 6 954 542
[body_tracking-5] [INFO] [1657615485.941724902] [TrackingManager]: UpdateTrackAngle: frame_ts: 485910, track_id: 1, angel_with_robot: 45
[body_tracking-5] [INFO] [1657615485.942362166] [TrackingManager]: rotate direction: 0, step: 0.500000
[body_tracking-5] [WARN] [1657615485.942528139] [RobotCmdVelNode]: RobotCtl, angular: 0 0 -0.5, linear: 0 0 0, pub twist ts: 1657615485942515
```
日志说明:
- `tracking_sta: 1` 表示已找到跟随目标
- `angel_with_robot: 45` 表示人体与机器人角度为45度
- `rotate direction: 0, step: 0.500000` 表示机器人将以0.5r/s的速度转动
同时,PC浏览器上会渲染显示人体检测框和骨骼关键点:
浏览器下方显示AI推理帧率 `fps` 和延迟 `ai_delay`(约28ms),与摄像头满帧30fps一致。
使用 `top` 命令查看系统资源占用:
```
mono2d_body_detection 进程CPU占用率 38.9%
```
**测试人体跟随控制指令**:再开一个终端,查询话题列表:
```
source /opt/tros/setup.bash
ros2 topic list
```
输出中可见 `/cmd_vel` 话题。执行以下命令查看控制消息:
```
ros2 topic echo /cmd_vel
```
当人体偏离正前方时,会看到类似 `angular.z: -0.5` 的输出,表示以0.5r/s的速度转动。
> **常见问题**:**为什么检测不到人体?**
> 请确保摄像头画面清晰,人体在画面中央且不要距离过远(>8米可能失效)。可尝试调整光线或重启摄像头节点。
### 3.3 将 X3派安装到机器人上
将X3派固定在机器人上,把F37摄像头连接好,并将机器人的USB控制接口插到X3派的USB口上。
安装效果:
对于支持ROS开发的机器人,通常有一个运动控制Node订阅 `/cmd_vel` 话题,并通过USB发送控制指令。我们以本末双足机器人为例:
在X3派上启动运动控制Node:
```
source /opt/tros/setup.bash
ros2 run diablo_sdk ros_bridge_example
```
启动成功后终端输出:
测试控制指令:另开一个终端,发布速度指令让机器人以0.3r/s转动:
```
source /opt/tros/setup.bash
ros2 topic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.3}}'
```
终端输出:
机器人开始转动,说明控制链路正常。
### 3.4 对于其他机器人应该怎么安装?
如果手里是其他移动机器人(例如原来使用树莓派或Jetson Nano),可以这样安装:
1. **编译运动控制Node**
- X3派上安装ROS2编译工具:
```
apt update
apt-get install python3-catkin-pkg
pip3 install empy
pip3 install -U colcon-common-extensions
```
- 将原先的运动控制ROS2 package源码拷贝到X3派上。
- 在package路径下执行编译:
```
source /opt/tros/setup.bash
colcon build
```
- 若原是ROS1 package,需适配ROS2(只需处理 `/cmd_vel` 话题)。
2. **安装**
- 将X3派固定在机器人上(可拆除原上位机)。
- 使用USB Type-C供电(或移动电源,至少5V@2A)。
- 将机器人USB控制接口插到X3派上。
3. **测试**
- 启动新编译的运动控制Node。
- 发布转动指令验证(参考上文)。
> **小提示**:如果不确定机器人原有控制协议,可先查看其ROS驱动文档,确保 `cmd_vel` 消息类型匹配。
---
## 四、完整的机器人人体跟随效果
### 4.1 启动人体检测和控制脚本
在X3派终端1中执行:
```
source /opt/tros/setup.bash
cp -r /opt/tros/lib/mono2d_body_detection/config/ .
ros2 launch body_tracking hobot_body_tracking_without_gesture.launch.py
```
### 4.2 启动机器人运动控制Node
在X3派终端2中执行:
```
source /opt/tros/setup.bash
ros2 run diablo_sdk ros_bridge_example
```
### 4.3 机器人跟随人移动
现在,当人站在机器人面前并移动时,机器人会自动跟随。你可以体验以下情景:
- 人向左走 → 机器人左转
- 人向右走 → 机器人右转
- 人向前走 → 机器人前进
- 人向后走 → 机器人后退
> **小提示**:首次使用时,建议让机器人处于空旷区域,避免碰撞。
---
## 五、原理分析
### 5.1 App运行时的Node和Topic信息
使用 `ros2` 命令行工具查看当前运行的所有Node和Topic:
```
source /opt/tros/setup.bash
ros2 node list
ros2 topic list
```
输出示例:
```
Node列表:
/ai_msg_sub_node
/hobot_codec1658324595406906403
/horizon_tracking_RobotCmdVel
/mipi_cam
/mono2d_body_det
/ros_bridge_example
/tracking_strategy_parameter_node
/transform_listener_impl_5594bf54a0
/websocket
Topic列表:
/cmd_vel
/hbmem_img080a1309022201080401012021072312
/hobot_mono2d_body_detection
/image_jpeg
/image_raw
...
```
在PC上安装ROS2 Foxy和rqt后,可以用Node Graph可视化Node关系(PC需与X3派同网段):
图中椭圆形为Node,矩形为Topic。整个pipeline以 `mipi_cam` 为起点(图像采集),以 `websocket`(可视化)和 `ros_bridge_example`(控制)为终点。
> **注意**:图中 `/ai_msg_sub_node` 订阅的 `/hobot_mono2d_body_detection` 实际由 `/horizon_tracking_RobotCmdVel` 处理,Graph显示不连续,属于设计待完善点。
### 5.2 App的Node介绍
启动脚本 `hobot_body_tracking_without_gesture.launch.py` 批量启动了多个Node。下面按功能模块分析。
#### 5.2.1 传感(mipi_cam Node)
- **package**: `mipi_cam`
- **功能**:采集F37摄像头图像,以 `nv12` 格式通过共享内存发布(topic: `/hbmem_img`)
- **关键参数**:
- `out_format`: "nv12"
- `image_width`: 960
- `image_height`: 544
- `io_method`: "shared_mem"(共享内存降低负载)
- `video_device`: "F37"
#### 5.2.2 感知(mono2d_body_detection Node)
- **package**: `mono2d_body_detection`
- **功能**:使用BPU进行人体检测和跟踪,发布包含人体框、人头、人脸、人手和骨骼关键点的AI消息(topic: `/hobot_mono2d_body_detection`)
- **关键参数**:
- `ai_msg_pub_topic_name`: "/hobot_mono2d_body_detection"
Node内部流程:
1. **初始化和启动**:加载模型,创建发布/订阅,启动目标跟踪引擎。
2. **订阅消息和推理**:在图像回调中触发AI推理(不等待结果)。
3. **推理结果处理**:通过回调 `PostProcess` 输出结果,排序后经多目标跟踪(MOT)发布最终消息。
流程图:
#### 5.2.3 交互(body_tracking Node)
- **package**: `body_tracking`
- **功能**:订阅AI检测结果,根据人体位置计算控制指令,发布 `/cmd_vel` 话题(类型 `geometry_msgs/msg/Twist`)
- **关键参数**:
- `activate_wakeup_gesture`: 0(不启用唤醒手势)
- `move_step`: 0.5(平移速度 m/s)
- `rotate_step`: 0.5(旋转速度 r/s)
- `track_serial_lost_num_thr`: 30(人体连续消失30帧后重新选择)
- `activate_robot_move_thr`: 5(像素阈值,人体框y值小于此值时激活移动)
跟踪策略:
- 选择第一次出现的人体,若多人则选择最大宽度框。
- 已有跟随目标时忽略其他人。
- 跟踪状态:
- `tracking_sta: 0` — 未找到目标
- `tracking_sta: 1` — 跟踪中
- `tracking_sta: 2` — 目标丢失(超过阈值帧数)
> **小提示**:如果环境中人多,可启用唤醒手势(将 `activate_wakeup_gesture` 改为1)防止误触发。
#### 5.2.4 控制(ros_bridge_example Node)
- **package**: `diablo_sdk`
- **功能**:订阅 `/cmd_vel`,通过USB向机器人下位机发送控制指令。
- 本文使用本末双足机器人,其他机器人需适配对应的运动控制Node。
### 5.3 App的系统设计
整个系统分为两部分:**机器人端** 和 **PC端**(可选用于调试)。
**机器人端**又分为:
- **上位机(X3派)**:运行所有ROS2 Node,包括传感、感知、交互、控制、图像编码和web展示。
- **下位机(机器人本体MCU)**:接收控制指令,驱动机电。
系统组成图:
从中可以看出,X3派结合TogetherROS,利用BPU算力和丰富组件,能够快速开发出智能机器人跟随应用。
---
## 六、FAQ
### 6.1 如何复现App效果?
需要两部分:
1. **机器人人体跟随App**
按第2章准备,在X3派上安装TogetherROS。
2. **机器人本体和运动控制package**
- 本末双足机器人:获取方法见地平线开发者社区(链接:https://developer.horizon.ai/forumDetail/94246984227025410)
- 也可以使用小R科技麦轮小车,同样适配。
### 6.2 没有机器人的情况下可以体验App效果吗?
**可以**。您可以使用gazebo仿真环境,控制虚拟机器人运动,体验完整的跟随算法流程。
### 6.3 如何将App适配到自己的机器人上?
App本身不依赖特定机器人,只发布标准ROS2 `cmd_vel` 消息。适配分为两步:
- **红色虚线框部分**(不依赖机器人):将X3派安装在机器人上,安装摄像头和TogetherROS。
- **蓝色虚线框部分**(依赖机器人):根据机器人情况适配:
- **已有上位机(如树莓派)**:在X3派上重新编译运动控制Node。
- **只有下位机**:需要自行开发运动控制Node(参考地平线开源代码:https://gitlab.horizon.ai/HHP/app/xr_robot)。
### 6.4 App支持哪些摄像头?
地平线机器人平台支持 **MIPI** 和 **USB** 两类摄像头。MIPI摄像头支持F37和GC4663两种型号。
### 6.5 如何调整机器人的运动速度?
修改启动脚本 `hobot_body_tracking_without_gesture.launch.py` 中 `body_tracking` Node的 `move_step` 和 `rotate_step` 参数:
```python
Node(
package='body_tracking',
executable='body_tracking',
output='screen',
parameters=[
{"move_step": 0.5}, # 平移速度,数值越大越快
{"rotate_step": 0.5}, # 旋转速度,数值越大越快
...
],
)
```
### 6.6 可以开发一个Python的Node扩展App功能吗?
**可以**。TogetherROS完全兼容ROS2 Foxy,支持跨语言开发。
例如,想根据人体骨骼关键点控制人形机器人模仿动作,只需订阅 `/hobot_mono2d_body_detection` 话题(消息类型 `ai_msgs/msg/PerceptionTargets`)。Python示例代码:
```python
import rclpy
from rclpy.node import Node
from ai_msgs.msg import PerceptionTargets
class MinimalSubscriber(Node):
def __init__(self):
super().__init__('minimal_subscriber')
self.subscription = self.create_subscription(
PerceptionTargets,
'/hobot_mono2d_body_detection',
self.listener_callback,
10)
self.subscription
def listener_callback(self, msg):
self.get_logger().info('I heard: "%s"' % msg)
def main(args=None):
rclpy.init(args=args)
minimal_subscriber = MinimalSubscriber()
rclpy.spin(minimal_subscriber)
minimal_subscriber.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
```
将代码保存为 `subscriber.py`,在X3派上编译运行即可订阅到人体检测数据。
### 6.7 如何开发一个自己的算法Node扩展App功能?
TogetherROS提供了 **Hobot DNN** 工具,简化模型推理与部署,内置常用检测、分类、分割算法的后处理。可快速将自定义算法集成到X3派上。
---
> **本文转自地平线开发者社区**
> **原作者:zhuk**
> **原链接:https://developer.horizon.ai/forumDetail/106482197149630465**
来源:https://m.elecfans.com/article/2128934.html
-
-
> **小提示**:为获得最佳体验,推荐使用本末双足机器人。如果你没有机器人,后面会介绍用仿真环境或自己搭建的方法。
**串口线连接方式:**
### 2.2 安装系统
参考旭日X3派用户手册中的“安装系统”章节,完成系统安装(或更新至最新版本)。
### 2.3 系统配置
1. 配置X3派的无线网络(参考用户手册“无线网络”章节)。
2. 连接成功后,查询IP地址:
示例中IP为 `192.168.1.147`,后续通过SSH远程连接(用户名 `root`,密码 `root`)。
### 2.4 安装 TogetherROS
通过 `apt` 命令安装 `hhp` 软件包(TogetherROS的DEB包):
```
ssh root@192.168.1.147
sudo apt install hhp
```
安装过程输出如下(部分):
```
root@ubuntu:~# sudo apt install hhp
Reading package lists... Done
...
Setting up hhp (1.0.1) ...
Generation complete.
```
查看 `/opt` 目录确认安装成功:
```
root@ubuntu:/userdata# ls /opt/
tros
```
至此准备工作完成,下面开始搭建人体跟随App。
> **常见问题**:**安装时提示“无法找到包 hhp”怎么办?**
> 请确保X3派已连接互联网,并且已执行 `apt update`。如果仍失败,可手动从地平线开发者社区下载DEB包安装。
---
## 三、使用介绍
接下来我们逐个搭建并测试功能模块,最后组装成完整的人体跟随机器人。
### 3.1 安装和测试 F37 摄像头
将F37摄像头通过MIPI线连接到X3派,连接方式如下:
使用TogetherROS中的ROS包测试摄像头。通过脚本启动摄像头采集、图像编码和web展示功能,可在PC浏览器上实时查看图像。
在SSH终端中执行:
```
source /opt/tros/local_setup.bash
ros2 launch websocket hobot_websocket.launch.py
```
启动成功后终端状态如下:
在PC浏览器(Chrome/Firefox/Edge)中输入X3派的IP地址(例如 `192.168.1.147`),即可看到摄像头实时画面。
> **小提示**:如果浏览器无法显示,检查X3派防火墙是否开放了端口,或尝试使用 `http://
浏览器下方显示AI推理帧率 `fps` 和延迟 `ai_delay`(约28ms),与摄像头满帧30fps一致。
使用 `top` 命令查看系统资源占用:
```
mono2d_body_detection 进程CPU占用率 38.9%
```
**测试人体跟随控制指令**:再开一个终端,查询话题列表:
```
source /opt/tros/setup.bash
ros2 topic list
```
输出中可见 `/cmd_vel` 话题。执行以下命令查看控制消息:
```
ros2 topic echo /cmd_vel
```
当人体偏离正前方时,会看到类似 `angular.z: -0.5` 的输出,表示以0.5r/s的速度转动。
> **常见问题**:**为什么检测不到人体?**
> 请确保摄像头画面清晰,人体在画面中央且不要距离过远(>8米可能失效)。可尝试调整光线或重启摄像头节点。
### 3.3 将 X3派安装到机器人上
将X3派固定在机器人上,把F37摄像头连接好,并将机器人的USB控制接口插到X3派的USB口上。
安装效果:
对于支持ROS开发的机器人,通常有一个运动控制Node订阅 `/cmd_vel` 话题,并通过USB发送控制指令。我们以本末双足机器人为例:
在X3派上启动运动控制Node:
```
source /opt/tros/setup.bash
ros2 run diablo_sdk ros_bridge_example
```
启动成功后终端输出:
测试控制指令:另开一个终端,发布速度指令让机器人以0.3r/s转动:
```
source /opt/tros/setup.bash
ros2 topic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.3}}'
```
终端输出:
机器人开始转动,说明控制链路正常。
### 3.4 对于其他机器人应该怎么安装?
如果手里是其他移动机器人(例如原来使用树莓派或Jetson Nano),可以这样安装:
1. **编译运动控制Node**
- X3派上安装ROS2编译工具:
```
apt update
apt-get install python3-catkin-pkg
pip3 install empy
pip3 install -U colcon-common-extensions
```
- 将原先的运动控制ROS2 package源码拷贝到X3派上。
- 在package路径下执行编译:
```
source /opt/tros/setup.bash
colcon build
```
- 若原是ROS1 package,需适配ROS2(只需处理 `/cmd_vel` 话题)。
2. **安装**
- 将X3派固定在机器人上(可拆除原上位机)。
- 使用USB Type-C供电(或移动电源,至少5V@2A)。
- 将机器人USB控制接口插到X3派上。
3. **测试**
- 启动新编译的运动控制Node。
- 发布转动指令验证(参考上文)。
> **小提示**:如果不确定机器人原有控制协议,可先查看其ROS驱动文档,确保 `cmd_vel` 消息类型匹配。
---
## 四、完整的机器人人体跟随效果
### 4.1 启动人体检测和控制脚本
在X3派终端1中执行:
```
source /opt/tros/setup.bash
cp -r /opt/tros/lib/mono2d_body_detection/config/ .
ros2 launch body_tracking hobot_body_tracking_without_gesture.launch.py
```
### 4.2 启动机器人运动控制Node
在X3派终端2中执行:
```
source /opt/tros/setup.bash
ros2 run diablo_sdk ros_bridge_example
```
### 4.3 机器人跟随人移动
现在,当人站在机器人面前并移动时,机器人会自动跟随。你可以体验以下情景:
- 人向左走 → 机器人左转
- 人向右走 → 机器人右转
- 人向前走 → 机器人前进
- 人向后走 → 机器人后退
> **小提示**:首次使用时,建议让机器人处于空旷区域,避免碰撞。
---
## 五、原理分析
### 5.1 App运行时的Node和Topic信息
使用 `ros2` 命令行工具查看当前运行的所有Node和Topic:
```
source /opt/tros/setup.bash
ros2 node list
ros2 topic list
```
输出示例:
```
Node列表:
/ai_msg_sub_node
/hobot_codec1658324595406906403
/horizon_tracking_RobotCmdVel
/mipi_cam
/mono2d_body_det
/ros_bridge_example
/tracking_strategy_parameter_node
/transform_listener_impl_5594bf54a0
/websocket
Topic列表:
/cmd_vel
/hbmem_img080a1309022201080401012021072312
/hobot_mono2d_body_detection
/image_jpeg
/image_raw
...
```
在PC上安装ROS2 Foxy和rqt后,可以用Node Graph可视化Node关系(PC需与X3派同网段):
图中椭圆形为Node,矩形为Topic。整个pipeline以 `mipi_cam` 为起点(图像采集),以 `websocket`(可视化)和 `ros_bridge_example`(控制)为终点。
> **注意**:图中 `/ai_msg_sub_node` 订阅的 `/hobot_mono2d_body_detection` 实际由 `/horizon_tracking_RobotCmdVel` 处理,Graph显示不连续,属于设计待完善点。
### 5.2 App的Node介绍
启动脚本 `hobot_body_tracking_without_gesture.launch.py` 批量启动了多个Node。下面按功能模块分析。
#### 5.2.1 传感(mipi_cam Node)
- **package**: `mipi_cam`
- **功能**:采集F37摄像头图像,以 `nv12` 格式通过共享内存发布(topic: `/hbmem_img`)
- **关键参数**:
- `out_format`: "nv12"
- `image_width`: 960
- `image_height`: 544
- `io_method`: "shared_mem"(共享内存降低负载)
- `video_device`: "F37"
#### 5.2.2 感知(mono2d_body_detection Node)
- **package**: `mono2d_body_detection`
- **功能**:使用BPU进行人体检测和跟踪,发布包含人体框、人头、人脸、人手和骨骼关键点的AI消息(topic: `/hobot_mono2d_body_detection`)
- **关键参数**:
- `ai_msg_pub_topic_name`: "/hobot_mono2d_body_detection"
Node内部流程:
1. **初始化和启动**:加载模型,创建发布/订阅,启动目标跟踪引擎。
2. **订阅消息和推理**:在图像回调中触发AI推理(不等待结果)。
3. **推理结果处理**:通过回调 `PostProcess` 输出结果,排序后经多目标跟踪(MOT)发布最终消息。
流程图:
#### 5.2.3 交互(body_tracking Node)
- **package**: `body_tracking`
- **功能**:订阅AI检测结果,根据人体位置计算控制指令,发布 `/cmd_vel` 话题(类型 `geometry_msgs/msg/Twist`)
- **关键参数**:
- `activate_wakeup_gesture`: 0(不启用唤醒手势)
- `move_step`: 0.5(平移速度 m/s)
- `rotate_step`: 0.5(旋转速度 r/s)
- `track_serial_lost_num_thr`: 30(人体连续消失30帧后重新选择)
- `activate_robot_move_thr`: 5(像素阈值,人体框y值小于此值时激活移动)
跟踪策略:
- 选择第一次出现的人体,若多人则选择最大宽度框。
- 已有跟随目标时忽略其他人。
- 跟踪状态:
- `tracking_sta: 0` — 未找到目标
- `tracking_sta: 1` — 跟踪中
- `tracking_sta: 2` — 目标丢失(超过阈值帧数)
> **小提示**:如果环境中人多,可启用唤醒手势(将 `activate_wakeup_gesture` 改为1)防止误触发。
#### 5.2.4 控制(ros_bridge_example Node)
- **package**: `diablo_sdk`
- **功能**:订阅 `/cmd_vel`,通过USB向机器人下位机发送控制指令。
- 本文使用本末双足机器人,其他机器人需适配对应的运动控制Node。
### 5.3 App的系统设计
整个系统分为两部分:**机器人端** 和 **PC端**(可选用于调试)。
**机器人端**又分为:
- **上位机(X3派)**:运行所有ROS2 Node,包括传感、感知、交互、控制、图像编码和web展示。
- **下位机(机器人本体MCU)**:接收控制指令,驱动机电。
系统组成图:
从中可以看出,X3派结合TogetherROS,利用BPU算力和丰富组件,能够快速开发出智能机器人跟随应用。
---
## 六、FAQ
### 6.1 如何复现App效果?
需要两部分:
1. **机器人人体跟随App**
按第2章准备,在X3派上安装TogetherROS。
2. **机器人本体和运动控制package**
- 本末双足机器人:获取方法见地平线开发者社区(链接:https://developer.horizon.ai/forumDetail/94246984227025410)
- 也可以使用小R科技麦轮小车,同样适配。
### 6.2 没有机器人的情况下可以体验App效果吗?
**可以**。您可以使用gazebo仿真环境,控制虚拟机器人运动,体验完整的跟随算法流程。
### 6.3 如何将App适配到自己的机器人上?
App本身不依赖特定机器人,只发布标准ROS2 `cmd_vel` 消息。适配分为两步:
- **红色虚线框部分**(不依赖机器人):将X3派安装在机器人上,安装摄像头和TogetherROS。
- **蓝色虚线框部分**(依赖机器人):根据机器人情况适配:
- **已有上位机(如树莓派)**:在X3派上重新编译运动控制Node。
- **只有下位机**:需要自行开发运动控制Node(参考地平线开源代码:https://gitlab.horizon.ai/HHP/app/xr_robot)。
### 6.4 App支持哪些摄像头?
地平线机器人平台支持 **MIPI** 和 **USB** 两类摄像头。MIPI摄像头支持F37和GC4663两种型号。
### 6.5 如何调整机器人的运动速度?
修改启动脚本 `hobot_body_tracking_without_gesture.launch.py` 中 `body_tracking` Node的 `move_step` 和 `rotate_step` 参数:
```python
Node(
package='body_tracking',
executable='body_tracking',
output='screen',
parameters=[
{"move_step": 0.5}, # 平移速度,数值越大越快
{"rotate_step": 0.5}, # 旋转速度,数值越大越快
...
],
)
```
### 6.6 可以开发一个Python的Node扩展App功能吗?
**可以**。TogetherROS完全兼容ROS2 Foxy,支持跨语言开发。
例如,想根据人体骨骼关键点控制人形机器人模仿动作,只需订阅 `/hobot_mono2d_body_detection` 话题(消息类型 `ai_msgs/msg/PerceptionTargets`)。Python示例代码:
```python
import rclpy
from rclpy.node import Node
from ai_msgs.msg import PerceptionTargets
class MinimalSubscriber(Node):
def __init__(self):
super().__init__('minimal_subscriber')
self.subscription = self.create_subscription(
PerceptionTargets,
'/hobot_mono2d_body_detection',
self.listener_callback,
10)
self.subscription
def listener_callback(self, msg):
self.get_logger().info('I heard: "%s"' % msg)
def main(args=None):
rclpy.init(args=args)
minimal_subscriber = MinimalSubscriber()
rclpy.spin(minimal_subscriber)
minimal_subscriber.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
```
将代码保存为 `subscriber.py`,在X3派上编译运行即可订阅到人体检测数据。
### 6.7 如何开发一个自己的算法Node扩展App功能?
TogetherROS提供了 **Hobot DNN** 工具,简化模型推理与部署,内置常用检测、分类、分割算法的后处理。可快速将自定义算法集成到X3派上。
---
> **本文转自地平线开发者社区**
> **原作者:zhuk**
> **原链接:https://developer.horizon.ai/forumDetail/106482197149630465**
热点追踪提示词
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:地平线程序员奶爸教你玩转机器人人体跟随开发平台第二期要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点AI热点2026-07-13 19:27
自由职业者AI个性化求职信写作工具
AICoverWriter可针对Freelancer和Upwork平台自由职业者,根据项目要求、技能标签及历史作品自动生成个性化求职信,覆盖编程、设计、写作等场景,提升申请效率与中标率,并支持关键词优化与灵活编辑。
AI热点2026-07-13 19:26
Hug AI免费AI工具2024年最新版使用教程大全推荐指南
HugAI是一款免费在线工具,只需上传两张人物照片,AI即可自动生成自然逼真的拥抱动态视频。操作极其简单,无需任何技术背景,基础计划完全免费,大幅降低了视频创作门槛,让每个人都能轻松制作温馨互动视频。
AI热点2026-07-13 19:26
免费AI接吻视频生成器工具
利用AI技术将两张静态照片自动生成亲吻动画,支持定制亲吻风格、时长及场景氛围。操作简单,上传照片即可获得高清视频,适用于婚礼、纪念日等场景。注重用户隐私保护,提供安全加密的照片处理机制。
AI热点2026-07-13 19:26
WebCheck AI智能辅助浏览插件
WebCheckAI是一款AI智能浏览助手,支持选中网页陌生术语或专业词汇,瞬间提供精准定义、背景摘要及最新动态,有效减少标签页切换,提升信息获取效率与浏览流畅性。
- 日榜
- 周榜
- 月榜
热点快看
