跳转至

视觉感知

适用配置

AI Perception Pack · 视觉感知功能模块

VISION PERCEPTION PACK

相机、图像与目标结果

参考配置使用 USB / UVC 相机与 RDK S100/S100P。相机型号、安装位置、视角、设备号和可用模型以交付清单为准,本节重点说明视觉外设接入与后续功能关系。

  • 接口类型:USB / UVC 视频输入
  • 默认位置:胸腔前向主视觉
  • 典型用途:图像采集、手势识别、颜色识别、目标跟踪
模块外设图示

首次运行建议保存原始样张,作为后续排查画面质量与识别效果的基线。

相机模块简介

机器人胸腔内部装配有USB超清相机模组:4K 800万像素,90度广角无畸变,实现主视觉全方位防盲区感知。采用1/2.8英寸高性能IMX415传感器,分辨率可达3840*2160,画质清晰细腻,色彩更还原。

图像采集

图像采集功能用于读取摄像头画面,并将摄像头图像作为后续视觉识别功能的输入。系统识别后会生成 /dev/video* 设备节点,当前为/dev/video0。程序采用自动扫描方式寻找摄像头设备,会依次尝试:​/dev/video0~4,只要其中某个设备能够成功打开并读取图像,程序就会自动使用该摄像头。

注:出厂已完成安装,只需在打开终端时,输入Driver对应工作空间的数字,再键入Enter即可直接使用预装好的开发环境。

=================================
请选择要进入的工作空间和虚拟环境:
=================================
1) Driver (~/driver)
2) RDK AI (~/rdk_ai)
3) TROS (~/tros)
4) 不进入任何虚拟环境 (保持默认)
=================================
请输入数字 [1-4] (直接按 Enter 保持默认):1
执行以下命令检查摄像头是否被系统识别:​
ls /dev/video\*
一般为/dev/video0,如果程序无法打开摄像头,可先设置摄像头设备权限:
sudo chmod 666 /dev/video0

手势识别

手势识别功能基于摄像头实时画面,对人手姿态进行识别,并通过网页进行画面推流显示。手势识别功能同样使用独立的uv 虚拟环境进行管理,Python 版本使用 Python 3.12。该环境主要安装 Flask3.0.3、NumPy 1.26.4、opencv-python 4.10.0.84、mediapipe 0.10.14 以及protobuf<5。其中,opencv-python 负责摄像头画面采集和图像处理;MediaPipe 负责手部关键点检测和手势识别;NumPy 用于图像和坐标数据计算;Flask用于网页推流和手势文本接口输出。

SSH连接算力大脑,开启终端输入如下指令:

cd bipedal_robot_proj/src/driver/camera_ws/apps
python3 gesture_detect_stream/gesture_detect_stream.py
启动成功后,终端会显示推流网址,例如:http://192.168.1.152:5000,浏览器登录该网址即可查看当前画面,并可进行手势识别。当前手势识别功能支持常见手势识别:

手势 说明
Rock 握拳
Paper 张开手掌
Scissors 剪刀手
OK OK 手势
Thumbs Up 点赞
Index Up 食指向上
Index Down 食指向下
Index Left 食指向左
Index Right 食指向右

文档图示

手势识别:手掌张开

综合控制/手势控制步态

手势控制功能用于通过摄像头识别用户手势,并控制机器人完成步态动作。系统启动手势控制程序后,用户可在摄像头前做出指定手势,机器人会根据识别结果执行前进、后退、左转、右转、停止等动作。

SSH连接算力大脑成功后,终端输入如下指令:

终端一:识别手势动作并转换为数字指令,通过ZMQ发送给运控接口。

cd bipedal_robot_proj/src/driver/camera_ws/apps
python3 gesture_ctrl/gesture_ctrl.py
终端二:接收指令并发送给运控小脑。

启动控制接口

#激活Drive环境
cd ~/driver
python3 nav_tools/zmq_json_send.py --cmd set_sdk_mode --sdk-mode 1
#启动动作指令发送程序
python3 action_cmd_forward.py
启动成功后,终端会显示推流网址,例如:http://192.168.8.201:5000,浏览器登录该网址即可查看当前画面,并可进行手势识别与控制。当前手势控制功能支持常见手势识别:

手势 功能说明
剪刀手 激活手势控制
手掌张开 停止运动
食指向上 前进
食指向下 后退
食指向左 左转
食指向右 右转
OK 手势 原地转圈

文档图示文档图示

推流显示界面

手势控制程序终端日志可看到当前状态,并通过ZMQ发送对应数字指令:

----------------------------------------------
[识别] Scissors
[状态] READY | Scissors 激活
----------------------------------------------
[识别] Index Up
[发送] 1
[动作] Index Up -> 1
----------------------------------------------
动作指令发送程序收到对应数字指令并发送对应指令给运控小脑。
🎮 机器人简单指令
消息格式: v2 (速度协议)
ZMQ 数字指令接收: tcp://0.0.0.0:7001
ZMQ 指令发送: tcp://192.168.8.202:6061
请输入命令编号:
🤚 收到数字: 1
🚀 已发送: forward
⏱️ 将在 2.0s 后自动停止
请输入命令编号: ⏱️ 定时停止: stop

颜色识别

颜色识别功能基于摄像头画面,对画面中的指定颜色区域进行识别和标记,并通过网页进行实时推流显示。使用独立的 uv 虚拟环境进行管理,Python 版本使用 Ubuntu 22.04 默认的 Python 3.10。该环境与手势识别使用同一套 Flask 、NumPy 、 和 opencv-python 。其中,opencv-python 用于摄像头图像采集、图像格式处理和颜色区域检测;NumPy 用于图像数组计算;Flask 用于搭建网页服务,将识别后的摄像头画面通过指定端口推流到浏览器。

SSH连接算力大脑成功后,开启终端输入如下指令:

cd bipedal_robot_proj/src/driver/camera_ws/apps
python3 color_detect_stream/color_detect_stream.py
启动成功后,终端会显示推流网址,例如:http://192.168.1.152:5000,浏览器登录该网址即可查看当前画面,并可进行颜色识别。当前颜色识别功能支持常见颜色识别:红、绿、蓝、黄。

文档图示

颜色识别跟踪

综合控制/颜色跟踪

颜色识别跟踪功能用于通过摄像头识别指定颜色目标,并根据目标在画面中的位置和距离控制机器人运动。系统启动后,用户可在浏览器推流页面中添加目标色块样本,勾选需要识别的颜色后,机器人会自动识别该目标颜色,并根据目标位置执行前进、后退或停止动作。该功能适用于机器人对特定颜色目标进行跟随或距离保持。

SSH连接算力大脑成功后,终端输入如下指令:

终端一:识别目标颜色的位置并转换为数字指令,通过ZMQ发送给指令接收端。

cd bipedal_robot_proj/src/driver/camera_ws/apps
python3 color_track/color_track.py
终端二:接收数字指令并发送给运控小脑。

启动控制接口

# 激活Drive环境
cd ~/driver
python3 nav_tools/zmq_json_send.py --cmd set_sdk_mode --sdk-mode 1
# 启动动作指令发送程序
python3 action_cmd_forward.py
启动成功后,终端会显示推流网址,例如:http://192.168.8.201:5000,浏览器登录该网址即可查看当前画面,并可进行目标颜色采集及颜色识别跟踪。当前颜色跟踪功能支持:

识别状态 机器人动作
目标距离较远 向前移动
目标距离过近 向后移动
目标距离合适 停止运动
目标丢失或画面异常 停止运动

文档图示

推流显示界面

颜色识别跟踪程序终端日志可看到当前状态,并通过ZMQ发送对应数字指令:

[色块选择] sample_1783675265294_3 已勾选,进入识别控制流。
[控制] 已勾选色块 sample_1783675265294_3,安全运动状态机开始工作。
[候选] STOP -> FORWARD,持续确认 1.5s
----------------------------------------------
[状态] STOP -> FORWARD
[原因] FORWARD 持续确认 1.5s
[发送] 1.
----------------------------------------------
动作指令发送程序收到对应数字指令并发送对应指令给运控小脑。
🎮 机器人简单指令
消息格式: v2 (速度协议)
ZMQ 数字指令接收: tcp://0.0.0.0:7001
ZMQ 指令发送: tcp://192.168.8.202:6061
请输入命令编号:
🤚 收到数字: 1.
🚀 已发送: forward
运控小脑收到指令,执行相应动作。