基于高通 Dragonwing IQ-9075 的 ROS 2 远程巡检机器人实战:Gazebo + Nav2 + YOLOv8 + QNN

本文基于 Qualcomm
qrb_ros_samples中的simulation_remote_assistant项目进行完整工程实战。我们将在 PC 端运行 Gazebo 办公室仿真环境,在 Qualcomm Dragonwing IQ-9075 EVK 上完成 SLAM、重定位、Nav2 自主导航、YOLOv8 目标检测以及任务编排,最终实现:
go to office to check person输入任务后,机器人自动前往办公室,在目标位置调用高通端侧 AI 推理能力检测
person,并返回任务结果。
1.1 硬件环境
本次采用:
| 项目 | 配置 |
|---|---|
| AI 计算平台 | Qualcomm Dragonwing IQ-9075 EVK |
| 仿真主机 | x86 PC |
| Host 系统 | Ubuntu 24.04 |
| ROS | ROS 2 Jazzy |
| 仿真环境 | Gazebo |
| AI 模型 | YOLOv8 Detection |
| AI Runtime | Qualcomm QNN |
| AI 后端 | HTP |
| 通信 | ROS 2 DDS |
| 推荐网络 | 千兆有线 Ethernet |
这里有一个需要提前理解的架构设计:
Gazebo 不跑在 IQ-9075 上。
系统拆成:

也就是说,这是一个非常典型的:
Simulator + Edge AI Computer架构。
1.2 BOM 清单
由于本次属于 Simulation Demo,因此不需要真实激光雷达、摄像头和机器人底盘。
| 类别 | 设备 | 是否必须 | 说明 |
|---|---|---|---|
| 边缘计算 | IQ-9075 EVK | 是 | 运行机器人算法 |
| 仿真电脑 | Ubuntu PC | 是 | Gazebo |
| Ethernet | 千兆网线 | 强烈建议 | PC 与开发板通信 |
| 摄像头 | Gazebo Camera | 是 | 虚拟设备 |
| LiDAR | Gazebo 2D LiDAR | 是 | 虚拟设备 |
| IMU | Gazebo IMU | 可选 | 虚拟设备 |
| Robot Base | Gazebo Robot Base Mini | 是 | 虚拟机器人 |
| 显示器 | 普通显示器 | 建议 | 观察 Gazebo/RViz |
真正迁移到实体机器人以后,只需要将:
Gazebo Camera
Gazebo LiDAR
Gazebo Odometry
Gazebo Robot Base
分别替换成:
真实 Camera
真实 LiDAR
真实里程计/IMU
真实底盘 Driver
上层 ROS 接口原则上仍然可以保持不变。
2. 先理解系统,而不是马上敲命令
这个 Demo 可以拆成 5 个层级:
对应职责如下:
| 层级 | 负责什么 |
|---|---|
| Task Manager | 解析用户任务、导航、启动检测 |
| Nav2 | 路径规划、避障、运动控制 |
| SLAM | 地图构建、定位 |
| YOLO + QNN | 视觉目标检测 |
| Gazebo | 模拟机器人和传感器 |
2.1 整个任务实际上分成两个阶段
不要把它理解为只是输入一句话以后机器人运行,真正发生的是:
阶段 A:系统准备
Gazebo 启动
↓
Sensor Topic 发布
↓
SLAM 建图
↓
保存地图
↓
重新加载地图
↓
机器人重定位
↓
Nav2 启动
↓
YOLO Pipeline 启动
阶段 B:执行任务
用户输入任务
↓
解析地点
↓
解析目标物
↓
NavigateToPose
↓
到达目标地点
↓
允许目标检测
↓
等待 person
↓
任务结束
这是后面调试整个项目最重要的认知。
3. 环境调研与软件版本矩阵
正式搭建前,建议先建立环境矩阵,不要因为ROS 能运行,就认为整个 Demo 一定能运行。
机器人项目最常见的问题其实是:系统版本+ROS Distribution+BSP+QNN Runtime+ROS Package+模型格式之间不匹配。
本次实验统一如下:
| 项目 | 本文环境 |
|---|---|
| Hardware | Dragonwing IQ-9075 EVK |
| Device OS | Qualcomm Ubuntu |
| Host OS | Ubuntu 24.04 |
| ROS | Jazzy |
| Simulation | qrb_ros_simulation |
| Sample | simulation_remote_assistant |
| Detection | YOLOv8 |
| Runtime | QNN |
| Backend | HTP |
| Model | QNN Context Binary .bin |
建议实验开始前记录:
uname -a
lsb_release -a
ros2 --version
以及:
printenv ROS_DISTRO
正常应该能够看到:
jazzy
4. 系统数据流:这几个 ROS Topic 必须先搞清楚
整个 Demo 最核心的 Topic 可以整理成:
| Topic | 数据类型 | 作用 |
|---|---|---|
/scan | LaserScan | LiDAR |
/odom | Odometry | 机器人里程计 |
/tf | TFMessage | 坐标变换 |
/map | OccupancyGrid | 地图 |
/cmd_vel | Twist | 底盘控制 |
/camera/color/image_raw | Image | RGB 图像 |
/qrb_inference_input_tensor | TensorList | YOLO 输入 Tensor |
/yolo_detect_tensor_output | TensorList | 推理输出 |
/yolo_detect_result | Detection2DArray | YOLO 检测结果 |
/yolo_detect_overlay | Image | 带检测框的图像 |
整个数据链:
以后遇到问题,基本都可以按照这张图向上逐层排查。
5. 第一阶段:搭建 PC 端 Gazebo 仿真环境
这一阶段目标只有一个:
让 PC 能稳定发布 Camera、LiDAR、Odom、TF。
先不要碰 YOLO,也不要碰 Task Manager。
5.1 创建 Workspace
mkdir -p ~/qrb_sim_ws/src
cd ~/qrb_sim_ws/src
拉取 QRB Simulation:
git clone https://github.com/qualcomm-qrb-ros/qrb_ros_simulation.git
进入项目:
cd qrb_ros_simulation
如果仓库提供模型资源下载脚本:
chmod +x scripts/meshes_download.sh
./scripts/meshes_download.sh
返回 Workspace:
cd ~/qrb_sim_ws
安装依赖:
source /opt/ros/jazzy/setup.bash
rosdep install \
--from-paths src \
--ignore-src \
-r \
-y
编译:
colcon build --symlink-install
加载环境:
source install/setup.bash
5.2 设置 ROS Domain
本文统一:
export ROS_DOMAIN_ID=78
注意:
PC 和 IQ-9075 必须完全一致。
检查:
echo $ROS_DOMAIN_ID
5.3 启动 Office World
执行:
ros2 launch qrb_ros_sim_gazebo \
gazebo_robot_base_mini.launch.py \
world_model:=office \
initial_x:=1.0 \
initial_y:=6.0 \
enable_depth_camera:=false
启动之后先什么都不要做。
重新打开一个 Terminal:
source /opt/ros/jazzy/setup.bash
source ~/qrb_sim_ws/install/setup.bash
export ROS_DOMAIN_ID=78
检查:
ros2 topic list
重点应该能找到:
/scan
/odom
/tf
/camera/color/image_raw
/cmd_vel
5.4 第一阶段验收
LiDAR
ros2 topic hz /scan
应该持续收到数据。
Odometry
ros2 topic echo /odom --once
应该能得到:
pose:
pose:
position:
x: ...
y: ...
Camera
ros2 topic hz /camera/color/image_raw
也可以检查带宽:
ros2 topic bw /camera/color/image_raw
如果这一阶段就不正常:
不要继续安装 AI。
先把 Gazebo Sensor Pipeline 修好。
6. 第二阶段:打通 PC 与 IQ-9075 的 DDS 通信
现在开始让两个计算节点真正通信。
假设:
Host:
192.168.50.10
IQ-9075:
192.168.50.20
先执行:
ping 192.168.50.20
反方向:
ping 192.168.50.10
但要注意:
Ping 通 ≠ ROS 2 DDS 一定正常。
6.1 两边设置相同 Domain
PC:
export ROS_DOMAIN_ID=78
IQ-9075:
export ROS_DOMAIN_ID=78
同时建议检查:
printenv | grep ROS
如果看到类似:
ROS_LOCALHOST_ONLY=1
需要取消:
unset ROS_LOCALHOST_ONLY
6.2 在 IQ-9075 上观察 PC Topic
板端:
ros2 topic list
应该能够看到 PC Gazebo 发布的:
/scan
/odom
/tf
/camera/color/image_raw
进一步:
ros2 topic echo /odom --once
然后:
ros2 topic hz /scan
再检查:
ros2 topic hz /camera/color/image_raw
到这里,才可以认为:
Gazebo
↓
Ethernet
↓
DDS
↓
IQ-9075
链路真正打通。
6.3 为什么推荐有线网
机器人 ROS 系统并不是普通 Web API。
这里持续存在:
Camera
LiDAR
Odometry
TF
多个实时 Topic。
如果 Wi-Fi 出现:
延迟
抖动
丢包
影响的不只是画面。
还有:
SLAM
Localization
Navigation
Control Loop
因此基线测试阶段建议:
PC 与开发板直接走 Ethernet。
7. 第三阶段:IQ-9075 安装 Remote Assistant
板端执行:
source /opt/ros/jazzy/setup.bash
添加软件源:
sudo add-apt-repository ppa:ubuntu-qcom-iot/qcom-ppa
sudo add-apt-repository ppa:ubuntu-qcom-iot/qirp
sudo apt update
安装 Sample:
sudo apt install \
ros-jazzy-simulation-remote-assistant
完成后检查:
ros2 pkg prefix simulation_remote_assistant
再查看可执行程序:
ros2 pkg executables simulation_remote_assistant
重点会涉及:
build_map_node
nav_preparation_node
task_manager_node
8. 第四阶段:建图、保存地图、重定位、启动 Nav2
这一阶段实际上承担了:
SLAM
+
自动运动
+
保存地图
+
重新定位
+
Nav2 Bringup
启动:
source /opt/ros/jazzy/setup.bash
export ROS_DOMAIN_ID=78
执行:
ros2 launch simulation_remote_assistant \
map_nav_setup.launch.py
这时候你会看到 Gazebo 中的机器人开始自己移动。
8.1 它不是自主探索
这一点非常重要。
build_map_node 本质上实现了一套固定运动脚本:
FORWARD
TURN
FORWARD
TURN
...
思想可以简化成:
steps = [
("FORWARD", distance_a),
("TURN", angle_a),
("FORWARD", distance_b),
("TURN", angle_b),
]
然后通过:
/odom
判断:
已经走了多少米
已经转了多少度
再向:
/cmd_vel
发送速度。
8.2 一个简化版自动建图控制器
我们自己写一个容易理解的版本:
class MotionStep:
def __init__(self, action, value):
self.action = action
self.value = value
route = [
MotionStep("forward", 4.0),
MotionStep("turn", -90),
MotionStep("forward", 7.0),
MotionStep("turn", -90),
]
控制逻辑:
if current_step.action == "forward":
if moved_distance < current_step.value:
cmd.linear.x = linear_speed
else:
stop_robot()
next_step()
elif current_step.action == "turn":
if rotated_angle < target_angle:
cmd.angular.z = angular_speed
else:
stop_robot()
next_step()
对应工程数据流:
8.3 为什么有时候机器人转弯撞墙
默认控制循环周期可以理解为:
0.2 s
如果某些机器上出现:
目标:90°
实际:明显超过 90°
机器人可能直接撞墙。
可以缩短:
ros2 launch simulation_remote_assistant \
map_nav_setup.launch.py \
control_period:=0.05
这比上来就修改 SLAM 参数更加合理。
8.4 建图后的状态转换
地图构建完成以后,不是直接进入 Nav2。
完整状态是:
8.5 重定位实际上做了什么
nav_preparation_node 的逻辑非常典型:
LOAD_MAP
↓
START_RELOCALIZE
↓
机器人原地旋转
↓
不断检查重定位状态
↓
成功
↓
停止旋转
↓
启动 Nav2
简化代码如下:
if state == "LOAD_MAP":
slam_command("load_map")
elif state == "START_RELOCALIZE":
slam_command("start_localization")
elif state == "WAIT_RELOCALIZE":
cmd.angular.z = 0.3
cmd_vel_pub.publish(cmd)
success = check_relocalization()
if success:
stop_robot()
start_nav2()
机器人原地旋转的原因也很好理解。
LiDAR 需要获得足够环境特征:
当前扫描
↓
与已有地图匹配
↓
估计机器人所在位置
8.6 第二个验收门
执行:
ros2 action list
如果系统完成重定位并启动 Nav2,应该找到:
/navigate_to_pose
如果找不到:
不要运行 Task Manager。
先查:
地图是否加载
↓
重定位是否成功
↓
Nav2 是否真正启动
9. 第五阶段:搭建 YOLOv8 + QNN + HTP 推理链
这一部分是高通端侧 AI 的核心。
数据链路:
9.1 默认图像预处理
当前 Pipeline 采用的核心输入规格包括:
640 × 640
NHWC
Normalize
float32
也就是:
Camera Image
↓
Resize 640×640
↓
Normalize
↓
NHWC Tensor
↓
QNN
9.2 准备模型目录
创建:
sudo mkdir -p /opt/model
准备:
/opt/model/
├── yolov8_det_qcs9075.bin
└── coco8.yaml
确认:
ls -lh /opt/model
这里:
.bin
代表为对应 Qualcomm 平台准备的 QNN 模型。
9.3 启动 YOLO Pipeline
板端打开一个新的 Terminal:
source /opt/ros/jazzy/setup.bash
export ROS_DOMAIN_ID=78
启动:
ros2 launch simulation_remote_assistant \
yolo_detectcion.launch.py \
model:=/opt/model/yolov8_det_qcs9075.bin \
backend_option:=libQnnHtp.so \
label_file:=/opt/model/coco8.yaml
注意:
yolo_detectcion.launch.py
当前项目文件名确实采用:
detectcion
不要自行改成:
detection
否则 Launch 文件可能找不到。
9.4 Launch 内部到底启动了什么
为了把它真正理解透,可以将 Launch 简化为:
ComposableNodeContainer
│
├── yolo_preprocess_node
│
├── nn_inference_node
│
├── yolo_detection_postprocess_node
│
└── yolo_detection_overlay_node
其中:
Preprocess
/camera/color/image_raw
↓
Resize
Normalize
Tensor Conversion
↓
/qrb_inference_input_tensor
Inference
/qrb_inference_input_tensor
↓
QNN
↓
HTP
↓
/yolo_detect_tensor_output
Postprocess
Output Tensor
↓
Decode
↓
Confidence Filter
↓
NMS
↓
Detection2DArray
10. 第六阶段:Task Manager 如何把导航和视觉串起来
现在终于进入真正的 Remote Assistant。
运行:
ros2 run simulation_remote_assistant \
task_manager_node
Terminal 会等待输入任务。
输入:
go to office to check person
10.1 这里并没有使用 LLM
这是非常值得说明的地方。
当前命令解析方式并不是:
Natural Language
↓
LLM
↓
Planning
而是:
字符串
↓
转小写
↓
在 locations 中寻找关键字
↓
在 objects 中寻找关键字
例如:
go to office to check person
得到:
location = office
object = person
所以更准确地说,它现在是:
自然语言形式的关键词任务接口。
10.2 我们实现一个更清晰的解析器
import re
def find_keyword(text, candidates):
text = text.lower()
for item in candidates:
pattern = rf"\b{re.escape(item.lower())}\b"
if re.search(pattern, text):
return item
return None
def parse_command(text):
locations = [
"office",
"meeting_room",
"reception",
]
objects = [
"person",
"chair",
"laptop",
]
location = find_keyword(
text,
locations,
)
target = find_keyword(
text,
objects,
)
if location is None:
raise ValueError(
"Location not found"
)
if target is None:
raise ValueError(
"Object not found"
)
return {
"location": location,
"object": target,
}
测试:
task = parse_command(
"Please go to office and check person"
)
print(task)
得到:
{
"location": "office",
"object": "person"
}
11. 任务执行核心:NavigateToPose + YOLO
整个 Task Manager 可以拆成:
Parse
↓
Navigate
↓
Wait Navigation
↓
Enable Detection
↓
Wait Detection
↓
Finish
11.1 Navigation Goal
地点实际保存在:
locations.yaml
例如:
office:
position:
x: 3.087
y: 0.108
z: 0.101
orientation:
x: 0.0
y: 0.0
z: 0.33
w: 0.944
Task Manager 再构造:
NavigateToPose.Goal
一个简化实现:
goal = NavigateToPose.Goal()
goal.pose.header.frame_id = "map"
goal.pose.pose.position.x = location["position"]["x"]
goal.pose.pose.position.y = location["position"]["y"]
goal.pose.pose.position.z = location["position"]["z"]
goal.pose.pose.orientation.x = location["orientation"]["x"]
goal.pose.pose.orientation.y = location["orientation"]["y"]
goal.pose.pose.orientation.z = location["orientation"]["z"]
goal.pose.pose.orientation.w = location["orientation"]["w"]
然后:
nav_client.send_goal_async(goal)
11.2 为什么 Orientation 不能省
很多开发者只记录:
x
y
这是错误的。
考虑以下场景:
机器人已经到办公室
↓
Camera 朝向墙
↓
YOLO 看不到 person
↓
检测失败
所以目标 Pose 应该是:
Position
+
Orientation
也就是完整:
x
y
z
qx
qy
qz
qw
11.3 导航成功以后才开启检测
这是项目中一个不错的设计。
不要一开始就让 Task Manager 处理 YOLO Result。
而是:
self.detection_enabled = False
导航成功:
if navigation_success:
self.detection_enabled = True
Detection Callback:
def detection_callback(msg):
if not self.detection_enabled:
return
for detection in msg.detections:
for result in detection.results:
class_id = (
result
.hypothesis
.class_id
)
if class_id == self.target_class:
self.result_event.set()
self.detection_enabled = False
return
这样可以避免:
机器人还没到办公室
↓
路上 Camera 看见一个 person
↓
任务被提前判定成功
12. 最终泳道图:从一句指令到任务结束
到这里,整个工程闭环才真正建立起来:
自然语言形式任务
↓
任务解析
↓
空间导航
↓
视觉感知
↓
目标确认
↓
任务结果
13. 工程踩坑与定位方法
下面比单纯列 ERROR 更重要。
13.1 ROS_DOMAIN_ID 不一致
PC:
echo $ROS_DOMAIN_ID
Board:
echo $ROS_DOMAIN_ID
必须一样。
否则最常见现象:
Gazebo 正常
ROS 正常
Board 正常
但是:
ros2 topic list
看不到对方
13.2 Ping 通,但 ROS Topic 看不到
检查:
printenv | grep ROS
重点排除:
ROS_LOCALHOST_ONLY=1
然后检查:
Firewall
DDS Discovery
网卡
ROS_DOMAIN_ID
13.3 机器人建图时撞墙
优先试:
ros2 launch simulation_remote_assistant \
map_nav_setup.launch.py \
control_period:=0.05
然后再考虑:
linear_speed
angular_speed
不要上来就改 SLAM。
13.4 换 World 后自动建图失效
因为当前:
build_map_node
不是:
Exploration Algorithm
而是一条固定运动路线。
所以:
Office World
可以工作
Warehouse World
未必能工作
如果要做通用方案,建议替换为:
Teleop 建图
或者:
Frontier Exploration
13.5 Camera 正常,但检测没有结果
一定要逐层检查。
第一层
ros2 topic hz \
/camera/color/image_raw
第二层
ros2 topic hz \
/qrb_inference_input_tensor
第三层
ros2 topic hz \
/yolo_detect_tensor_output
第四层
ros2 topic echo \
/yolo_detect_result
逻辑:
Camera 有
↓
Tensor 没有
=
Preprocess 问题
Input Tensor 有
↓
Output Tensor 没有
=
Model/QNN/Backend 问题
Output Tensor 有
↓
Detection 没有
=
YOLO Postprocess/Threshold/Label 问题
13.6 YOLO 能检测,但任务还是失败
执行:
ros2 topic echo \
/yolo_detect_result
重点看:
class_id
Task Manager 是拿:
检测 class_id
与:
objects.yaml
配置进行匹配。
例如:
objects:
- person
那么 YOLO 输出必须能够对应:
person
13.7 导航 Action 不存在
检查:
ros2 action list
没有:
/navigate_to_pose
就先不要研究 Task Manager。
排查:
Map 是否保存
↓
Map 是否加载
↓
Localization 是否启动
↓
Relocalization 是否成功
↓
Nav2 是否启动
14. 一套更加体系化的故障决策树
整个排查原则只有一句:
从数据源开始,沿数据流逐层确认数据在哪一层消失。
不要跨层猜问题。
15. 验证:工程上不能只以“机器人动了”为成功
建议至少做 6 层验收。
| Level | 验证内容 | 验证方法 |
|---|---|---|
| L1 | 网络 | Ping |
| L2 | DDS | Topic Discovery |
| L3 | Sensor | Camera/LiDAR/Odom |
| L4 | Localization | Map/TF |
| L5 | Navigation | NavigateToPose |
| L6 | AI | YOLO Result |
| L7 | E2E | Command → Navigation → Detection |
15.1 快速检查脚本
可以写一个:
#!/usr/bin/env bash
echo "==========================="
echo " QRB Remote Assistant Test "
echo "==========================="
echo
echo "[ROS DOMAIN]"
echo "${ROS_DOMAIN_ID:-NOT_SET}"
echo
echo "[TOPICS]"
TOPICS=$(ros2 topic list)
check_topic () {
if echo "$TOPICS" | grep -qx "$1"; then
echo "[OK] $1"
else
echo "[MISS] $1"
fi
}
check_topic "/scan"
check_topic "/odom"
check_topic "/tf"
check_topic "/camera/color/image_raw"
check_topic "/qrb_inference_input_tensor"
check_topic "/yolo_detect_tensor_output"
check_topic "/yolo_detect_result"
echo
echo "[NAVIGATION]"
if ros2 action list \
| grep -q "/navigate_to_pose"; then
echo "[OK] NavigateToPose"
else
echo "[MISS] NavigateToPose"
fi
保存:
chmod +x check_remote_assistant.sh
运行:
./check_remote_assistant.sh
如果输出类似:
[OK] /scan
[OK] /odom
[OK] /tf
[OK] /camera/color/image_raw
[OK] /qrb_inference_input_tensor
[OK] /yolo_detect_tensor_output
[OK] /yolo_detect_result
[OK] NavigateToPose
再做最终任务测试。
16. 常见问题 FAQ
Q1:为什么一定推荐 PC + IQ-9075 两台设备?
因为本项目本身就很适合这种架构:
PC
→ Gazebo Simulation
IQ-9075
→ Robot Computing
这样更接近真实机器人:
真实世界
→ Sensor
Edge Computer
→ SLAM/Nav2/AI
未来迁移真机时更自然。
Q2:为什么 YOLO 不直接跑 PC?
当然可以。
但那样会丢失这个项目最重要的一部分:
验证机器人视觉 AI 在 Qualcomm Edge Platform 上的实际运行链。
本项目真正值得学习的是:
ROS 2
+
Robotics
+
Edge AI
的组合。
Q3:为什么已经检测到人,还需要机器人导航?
因为真正机器人任务不是:
Camera Detection
而是:
找到一个地点
↓
到达这个地点
↓
获取该地点信息
↓
完成任务
这就是具身任务和普通 CV Demo 最大的区别之一。
Q4:可以增加 meeting room 吗?
可以。
增加:
meeting_room:
position:
x: ...
y: ...
z: ...
orientation:
x: ...
y: ...
z: ...
w: ...
即可。
但是坐标必须来自实际 Map。
不要随便填写。
Q5:可以检测 laptop、chair 吗?
只要:
模型支持
+
Label 支持
+
objects.yaml 配置
即可。
例如:
objects:
- person
- chair
- laptop
Q6:能不能升级成真正的 LLM Agent?
可以。
当前:
用户输入
↓
关键词查找
↓
Task Manager
可以升级为:
用户自然语言
↓
LLM
↓
Structured Output
↓
Task Validator
↓
Robot Skill
例如 LLM 输出:
{
"action": "inspect",
"location": "meeting_room",
"target": "person"
}
注意:
不建议让 LLM 直接发布
/cmd_vel。
更合理的架构是:
LLM
↓
任务级决策
↓
ROS Action / Service
↓
确定性机器人模块
17. 从这个 Demo 到真正具身智能 Agent
跑通当前项目后,它已经拥有:
空间感知
+
地图
+
定位
+
路径规划
+
运动
+
视觉检测
+
任务管理
接下来可以增加:
ASR
+
LLM
+
VLM
+
Memory
+
Task Planning
最终架构:
那么机器人面对的任务就可以从:
go to office to check person
进一步扩展成:
去会议室看看有没有人。
甚至:
去会议室看看投影仪是不是还开着,
如果没人就告诉我。
此时整个任务已经从:
Navigation + Detection
进入:
Navigation
+
Visual Understanding
+
Reasoning
+
Planning
+
Robot Action
18. 结论
这个 Sample 最值得学习的并不是:
机器人在 Gazebo 里走到了办公室。
真正值得研究的是它串起了一个完整机器人闭环:
Gazebo
↓
Camera / LiDAR / Odom
↓
ROS 2 DDS
↓
SLAM
↓
Localization
↓
Nav2
↓
YOLOv8
↓
QNN
↓
HTP
↓
Task Manager
如果把它按照工程层次进一步抽象,就是:
环境层
Simulation / Real World
↓
设备层
Camera / LiDAR / Base
↓
感知层
SLAM / YOLO
↓
能力层
Localization / Navigation
↓
任务层
Task Manager
↓
Agent 层
LLM / VLM / Planner
因此对于希望学习 高通机器人平台、ROS 2、端侧 AI、Nav2 和具身智能 Agent 的开发者来说,这个项目非常适合作为一个中间起点:
它不是只有一个目标检测模型的 AI Demo,也不是只会在 Gazebo 中运动的 ROS Demo,而是已经具备了一个完整机器人任务:
接收任务 → 理解目标 → 自主移动 → 环境感知 → 返回结果。
在此基础上继续接真实底盘、真实 Camera/LiDAR,再加入 VLM 和 Agent Planner,就可以逐步从 Simulation Remote Assistant 演进成真正的端侧具身智能机器人系统。
参考项目
- Qualcomm QRB ROS Samples
robotics/simulation_remote_assistant- Qualcomm QRB ROS Simulation
- Qualcomm QRB ROS NN Inference
- Qualcomm QRB ROS Tensor Process
- ROS 2 Jazzy
- Navigation2
- Qualcomm QNN
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)