5.2.1 数据采集
USB图像采集
功能介绍
为实现环境感知能力,机器人产品中通常会搭载摄像头以获取图像信息。USB摄像头易于获取,使用方便,通用性好,TogetheROS.Bot添加了对USB摄像头的支持,支持ROS2标准图像消息。
代码仓库:https://github.com/D-Robotics/hobot_usb_cam.git
支持平台
平台 | 运行方式 |
---|---|
RDK X3, RDK X3 Module, RDK X5 | Ubuntu 20.04 (Foxy), Ubuntu 22.04 (Humble) |
RDK Ultra | Ubuntu 20.04 (Foxy) |
X86 | Ubuntu 20.04 (Foxy) |
准备工作
RDK平台
-
确认手中USB摄像头工作正常,将USB摄像头接入RDK的USB插槽
-
RDK已烧录好Ubuntu 20.04/Ubuntu 22.04系统镜像
-
RDK已成功安装tros.b
-
确认PC机能够通过网络访问RDK
X86平台
-
确认手中USB摄像头工作正常,将USB摄像头接入PC或服务器USB插槽
-
确认X86平台系统为Ubuntu 20.04,且已成功安装tros.b
使用方式(默认usb_pixel_format为mjpeg)
RDK和X86 平台使用方式相同,其中以RDK平台为例:
-
通过SSH登录RDK,确认USB摄像头设备名称,这里以
/dev/video8
为例 -
并通过下述命令启动USB摄像头
- Foxy
- Humble
# 配置tros.b环境
source /opt/tros/setup.bash# 配置tros.b环境
source /opt/tros/humble/setup.bash# launch方式启动:
ros2 launch hobot_usb_cam hobot_usb_cam.launch.py usb_video_device:=/dev/video8 -
如程序输出如下信息,说明节点已成功启动
[INFO] [launch]: All log files can be found below /root/.ros/log/2024-01-18-19-44-39-419588-ubuntu-3951
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [hobot_usb_cam-1]: process started with pid [3953]
[hobot_usb_cam-1] [WARN] [1705578280.808870437] [hobot_usb_cam]: framerate: 30
[hobot_usb_cam-1] [WARN] [1705578280.809851560] [hobot_usb_cam]: pixel_format_name: mjpeg
[hobot_usb_cam-1] [WARN] [1705578280.936697507] [hobot_usb_cam]: This devices supproted formats:
[hobot_usb_cam-1] [WARN] [1705578280.936858791] [hobot_usb_cam]: Motion-JPEG: 640 x 480 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.936912830] [hobot_usb_cam]: Motion-JPEG: 1920 x 1080 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.936960328] [hobot_usb_cam]: Motion-JPEG: 320 x 240 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937007285] [hobot_usb_cam]: Motion-JPEG: 800 x 600 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937053241] [hobot_usb_cam]: Motion-JPEG: 1280 x 720 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937098906] [hobot_usb_cam]: Motion-JPEG: 1024 x 576 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937144528] [hobot_usb_cam]: YUYV 4:2:2: 640 x 480 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937190068] [hobot_usb_cam]: YUYV 4:2:2: 1920 x 1080 (5 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937235858] [hobot_usb_cam]: YUYV 4:2:2: 320 x 240 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937282064] [hobot_usb_cam]: YUYV 4:2:2: 800 x 600 (20 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937328020] [hobot_usb_cam]: YUYV 4:2:2: 1280 x 720 (10 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937373518] [hobot_usb_cam]: YUYV 4:2:2: 1024 x 576 (15 Hz) -
Web端查看USB摄像头图像,另起一个终端:
- Foxy
- Humble
# 配置tros.b环境
source /opt/tros/setup.bash
# 配置tros.b环境
source /opt/tros/humble/setup.bash
# 启动websocket
ros2 launch websocket websocket.launch.py websocket_image_topic:=/image websocket_only_show_image:=true
- PC 打开浏览器
Chrome/Firefox/Edge
,输入IP:8000
(IP 为 RDK 的 IP 地址),点击左上方 Web 端展示即可查看 USB 摄像头实时画面。
使用方式2(usb_pixel_format为yuyv2rgb)
RDK和X86平台使用方式相同,其中以RDK平台为例:
-
通过SSH登录RDK,确认USB摄像头设备名称,这里以
/dev/video8
为例 -
并通过下述命令启动USB摄像头
- Foxy
- Humble
# 配置tros.b环境
source /opt/tros/setup.bash# 配置tros.b环境
source /opt/tros/humble/setup.bash# launch方式启动:
ros2 launch hobot_usb_cam hobot_usb_cam.launch.py usb_video_device:=/dev/video8 usb_pixel_format:=yuyv2rgb usb_image_width:=640 usb_image_height:=480 -
如程序输出如下信息,说明节点已成功启动
[INFO] [launch]: All log files can be found below /root/.ros/log/2024-01-18-19-44-39-419588-ubuntu-3951
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [hobot_usb_cam-1]: process started with pid [3953]
[hobot_usb_cam-1] [WARN] [1705578280.808870437] [hobot_usb_cam]: framerate: 30
[hobot_usb_cam-1] [WARN] [1705578280.809851560] [hobot_usb_cam]: pixel_format_name: yuyv2rgb
[hobot_usb_cam-1] [WARN] [1705578280.936697507] [hobot_usb_cam]: This devices supproted formats:
[hobot_usb_cam-1] [WARN] [1705578280.936858791] [hobot_usb_cam]: Motion-JPEG: 640 x 480 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.936912830] [hobot_usb_cam]: Motion-JPEG: 1920 x 1080 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.936960328] [hobot_usb_cam]: Motion-JPEG: 320 x 240 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937007285] [hobot_usb_cam]: Motion-JPEG: 800 x 600 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937053241] [hobot_usb_cam]: Motion-JPEG: 1280 x 720 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937098906] [hobot_usb_cam]: Motion-JPEG: 1024 x 576 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937144528] [hobot_usb_cam]: YUYV 4:2:2: 640 x 480 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937190068] [hobot_usb_cam]: YUYV 4:2:2: 1920 x 1080 (5 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937235858] [hobot_usb_cam]: YUYV 4:2:2: 320 x 240 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937282064] [hobot_usb_cam]: YUYV 4:2:2: 800 x 600 (20 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937328020] [hobot_usb_cam]: YUYV 4:2:2: 1280 x 720 (10 Hz)
[hobot_usb_cam-1] [WARN] [1705578280.937373518] [hobot_usb_cam]: YUYV 4:2:2: 1024 x 576 (15 Hz) -
通过hobot codec进行编码成mjpeg
- Foxy
- Humble
# 配置tros.b环境
source /opt/tros/setup.bash# 配置tros.b环境
source /opt/tros/humble/setup.bash# launch方式启动:
ros2 launch hobot_codec hobot_codec_encode.launch.py codec_in_mode:=ros codec_in_format:=rgb8 codec_out_mode:=ros codec_sub_topic:=/image codec_pub_topic:=/image_mjpeg -
Web端查看USB摄像头图像,另起一个终端:
- Foxy
- Humble
# 配置tros.b环境
source /opt/tros/setup.bash# 配置tros.b环境
source /opt/tros/humble/setup.bash# 启动websocket
ros2 launch websocket websocket.launch.py websocket_image_topic:=/image_mjpeg websocket_only_show_image:=true -
PC打开浏览器(chrome/firefox/edge)输入
http://IP:8000
(IP为RDK IP地址),点击左上方Web端展示即可查看USB摄像头实时画面
注意事项
-
USB摄像头需要进行标定,并设置相机标定文件的读取路径,否则无法发布相机内参,但不影响其它功能
-
设置相机标定文件读取路径,具体步骤如下:
- Foxy
- Humble
# 配置tros.b环境
source /opt/tros/setup.bash# 配置tros.b环境
source /opt/tros/humble/setup.bash# launch 方式启动
ros2 launch hobot_usb_cam hobot_usb_cam.launch.py usb_camera_calibration_file_path:=(实际标定文件绝对路径) -
对于X86平台,如果Ubuntu 20.04系统运行在虚拟机中,需要在
虚拟机设置
中将USB控制器
的USB兼容性
设置为USB 3.1
。 -
pixel_format配置的更改
hobot_usb_cam支持以下配置集: "mjpeg","mjpeg2rgb","rgb8","yuyv","yuyv2rgb","uyvy","uyvy2rgb","m4202rgb","mono8","mono16","y102mono8"
通过第一种的默认参数启动usb camera查询设备硬件所支持支持的formats,如下log:
[hobot_usb_cam-1] [WARN] [1705548544.174669672] [hobot_usb_cam]: This devices supproted formats:
[hobot_usb_cam-1] [WARN] [1705548544.174844917] [hobot_usb_cam]: Motion-JPEG: 640 x 480 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705548544.174903166] [hobot_usb_cam]: Motion-JPEG: 1920 x 1080 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705548544.174950581] [hobot_usb_cam]: Motion-JPEG: 320 x 240 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705548544.174996788] [hobot_usb_cam]: Motion-JPEG: 800 x 600 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705548544.175043412] [hobot_usb_cam]: Motion-JPEG: 1280 x 720 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705548544.175089161] [hobot_usb_cam]: Motion-JPEG: 1024 x 576 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705548544.175135035] [hobot_usb_cam]: YUYV 4:2:2: 640 x 480 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705548544.175180325] [hobot_usb_cam]: YUYV 4:2:2: 1920 x 1080 (5 Hz)
[hobot_usb_cam-1] [WARN] [1705548544.175226449] [hobot_usb_cam]: YUYV 4:2:2: 320 x 240 (30 Hz)
[hobot_usb_cam-1] [WARN] [1705548544.175272365] [hobot_usb_cam]: YUYV 4:2:2: 800 x 600 (20 Hz)
[hobot_usb_cam-1] [WARN] [1705548544.175318697] [hobot_usb_cam]: YUYV 4:2:2: 1280 x 720 (10 Hz)
[hobot_usb_cam-1] [WARN] [1705548544.175365195] [hobot_usb_cam]: YUYV 4:2:2: 1024 x 576 (15 Hz)a.查询usb camera支持的图像格式,如上述log,log显示支持mjpeg和YUYV;
b.则只能设置"mjpeg","mjpeg2rgb","yuyv","yuyv2rgb";否则hobot_usb_cam程序退出。
MIPI图像采集
功能介绍
为实现环境感知能力,机器人产品中通常会搭载摄像头、ToF等类型的传感器。为降低用户传感器适配和使用成本,TogetheROS.Bot会对多种常用传感器进行封装,并抽象成hobot_sensor模块,支持ROS标准图像消息。当配置的传感器参数与接入的摄像头不符时,程序会自动适应正确的传感器类型。目前已支持的MIPI传感器类型如下所示:
序号 | 名称 | 示意图片 | 参数 | 支持平台 | 参考链接 |
---|---|---|---|---|---|
1 | F37 | 200W像素 | RDK X3, RDK X3 Module | F37 | |
2 | GC4663 | 400W像素 | RDK X3, RDK X3 Module | GC4663 | |
3 | IMX219 | 800W像素 | RDK X3, RDK X3 Module, RDK Ultra, RDK X5 | IMX219 | |
4 | IMX477 | 200W像素 | RDK X3, RDK X3 Module | IMX477 | |
5 | OV5647 | 200W像素 | RDK X3, RDK X3 Module, RDK X5 | OV5647 |
代码仓库:https://github.com/D-Robotics/hobot_mipi_cam.git
准备工作
RDK平台
-
确认摄像头正确接入RDK,例如 F37 摄像头的接入RDK X3方式如下图:
-
RDK已烧录好Ubuntu 20.04/Ubuntu 22.04系统镜像
-
RDK已成功安装tros.b
-
确认PC机能够通过网络访问RDK
使用方式
RDK平台
下面以 F37 为例,介绍摄像头数据获取和预览的方法:
-
通过 SSH 登录RDK,确定摄像头型号,这里以
F37
为例,确定相机标定文件的读取路径,这里以/opt/tros/${TROS_DISTRO}/lib/mipi_cam/config/F37_calibration.yaml
为例