双目OCC算法
功能介绍
双目OCC算法订阅双目图像,利用BPU进行算法推理,发布占用网格信息。
代码仓库:(https://github.com/D-Robotics/dstereo_occnet)
支持平台
平台 | 运行方式 | 示例功能 |
---|---|---|
RDK X5, RDK X5 Module | Ubuntu 22.04 (Humble) | 启动双目相机,并通过Web展示双目图像,rviz2展示占用网格结果 |
准备工作
RDK平台
-
RDK已烧录好Ubuntu 22.04系统镜像。
-
RDK已成功安装TogetheROS.Bot。
-
如果要实时在线推理,目前只支持搭配ZED-2i相机;如果要离线推理,请准备好双目图像。
-
确认PC机能够通过网络访问RDK。
版本要求
版本要求 | 查询方式 | |
---|---|---|
系统版本 | 3.2.3 | 在RDK X5板端执行:cat /etc/version |
dstereo_occnet功能包版本 | 1.0.0 | 在RDK X5板端执行:apt list | grep tros-humble-dstereo-occnet/ |
hobot_zed_cam功能包版本 | 2.3.3 | 在RDK X5板端执行:apt list | grep tros-humble-hobot-zed-cam/ |
使用介绍
1. 搭配ZED-2i相机
- 需要配合
hobot_zed_cam
功能包一起使用 - 在RDK X5上执行以下命令:
# 配置tros.b humble环境
source /opt/tros/humble/setup.bash
# 启动ZED-2i相机和占用网络推理程序
ros2 launch dstereo_occnet zed2i_occ_node.launch.py
程序启动后可以通过网页查看ZED-2i发布的双目图像、以及通过rviz2查看占用网格
通过web端查看双目图像,在PC端浏览器输入http://ip:8000即可查看双目图像,ip为RDK
X5板端的ip,例子中为192.168.128.10
,并且要保证PC和RDK X5能通过网络通讯
通过rviz2可查看占用网格,需要搭建一个Ubuntu22.04 + ROS2 Humble的上位机,并且上位机和RDK X5板端能够通过ROS2通讯,然后启动rviz2,具体设置如下:
- 如需保存结果请加入以下参数:
# 配置tros.b humble环境
source /opt/tros/humble/setup.bash
# 启动ZED-2i相机和占用网络推理程序
ros2 launch dstereo_occnet zed2i_occ_node.launch.py \
save_occ_flag:=True save_occ_dir:=./occ_result save_freq:=4 save_total:=10
2. 使用自定义数据离线推理
-
需要准备离线数据上传到RDK X5板端,离线数据的格式如下:
- 离线目录需要包含左右图片,程序会进行判断,左图需要包含
left
字段,格式为png或者jpg,右图需要包含right
字段、其它和左图一致 - 图像分辨率为
640*352
,不支持其它分辨率 - 左右图需要进行矫正,达到极线对齐的状态
- 由于目前采用ZED-2i的数据训练模型,所以尽量使离线图像的内参接近ZED-2i,ZED-2i相机参数为:
fx=354.9999, fy=354.9999, cx=322.9469, cy=176.2076, baseline=0.12
- 离线目录需要包含左右图片,程序会进行判断,左图需要包含
-
在RDK X5上执行以下命令:
ros2 launch dstereo_occnet offline_infer_web_visual.launch.py \
local_image_dir:=./offline_images save_occ_flag:=True save_occ_dir:=./offline_result
程序启动后同样可以通过网页查看ZED-2i发布的双目图像以及通过rviz2查看占用网格
功能包说明
参数
名称 | 参数值 | 说明 |
---|---|---|
stereo_msg_topic | 默认 /image_combine_raw | 订阅的双目图像话题名称 |
camera_info_topic | 默认 /image_combine_raw/camera_info | 订阅的相机内参话题名称 |
occ_model_file_path | 默认 X5-OCC-32x64x96x2_constinput_modified.bin | 双目占用网络模型的路径 |
use_local_image | 默认 False | 是否使用离线推理 |
local_image_dir | 默认 config | 离线推理存放图片的目录 |
save_occ_flag | 默认 False | 是否保存推理结果 |
save_occ_dir | 默认 ./occ_results | 保存推理结果的目录 |
save_freq | 默认 1 | 保存频率,例如设置为4代表每隔4帧保存1次,默认每帧推理结果都保存 |
save_total | 默认 -1 | 保存总数,例如设置为10代表总共保存10帧结果,-1代表一直保存 |
voxel_size | 默认 0.02 | 每个占用网格的大小,单位m,0.02代表每个占用网格为2*2*2cm |
log_level | 默认 INFO | 日志等级,默认INFO |
订阅话题
话题名称 | 消息类型 | 说明 |
---|---|---|
/image_combine_raw | sensor_msgs::msg::Image | 订阅双目图像,图像格式为NV12,图像要求上下排列,上面是左图,下面是右图,可以通过stereo_msg_topic参数修改 |
/image_combine_raw/camera_info | sensor_msgs::msg::CameraInfo | 订阅相机内参,可选,不一定要有该话题,有该话题可以在保存结果时把相机参数一起保存 |
发布话题
名称 | 消息类型 | 说明 |
---|---|---|
/dstereo_occnet_node/voxel | sensor_msgs::msg::PointCloud2 | 发布的占用网格数据,可以使用rviz2显示 |