基于OAK相机的6DOF叉车托盘定位检测算法
1. 概述
采用深度学习技术,实现对木制与塑料托盘的实时检测,无需预设尺寸,支持任意角度放置。能够精确输出托盘的六自由度位姿和三维尺寸,适用于多种物流机器人,提高作业灵活性,降低托盘使用限制。
2. 软硬件要求
Factor Perception Lite⽬前⽀持ROS1 Noetic和ROS2 Humble平台,硬件使⽤OAK-D系列相机。
已经过测试的型号:OAK-D Lite,OAK-D S2,OAK-D W,OAK-D Pro,OAK-D Pro W,OAK-D S2 PoE,OAK-D W PoE,OAK-D Pro PoE,OAK-D Pro W PoE
您可以从OAK官方文档获取关于硬件的更多信息。
下载中心 – OAKChinawww.oakchina.cn/download/
3. 安装与配置
3.1 ROS包安装
我们假定您已完成ROS环境安装并且了解ROS功能和使⽤。如果您还不熟悉ROS,可参考ROS官⽅Wiki:
https://wiki.ros.orgwiki.ros.org
Factor Perception Lite以独⽴ROS包的形式提供。我们已将其预编译为Debian软件包。您可以双击安装,或使用dpkg,apt等⼯具安装:
$ cd /path/to/deb/file/
$ sudo dpkg -i ros-<distro>-factor-perception-lite_<version>_<architecture>.deb
安装时会⾃动检查所需的依赖项。FactorPerceptionLite的依赖项均来⾃Ubuntu官⽅仓库或ROS官⽅仓库,不使⽤第三⽅依赖。如您在使⽤dpkg安装后提⽰依赖缺失,可使⽤apt-get⾃动安装所需依赖项:
$ sudo apt-get -f install
3.2 udev
如通过USB连接OAK-D相机,用户需手动添加udev规则,以赋予设备权限:
$ echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="03e7", MODE="0666"' | sudo tee /etc/udev/rules.d/80-movidius.rules $ sudo udevadm control --reload-rules && sudo udevadm trigger
3.3. 功能授权
Factor Perception Lite的每项功能均有单独的key,需在每次启动程序时作为参数提供。您可以将key保存在launch⽂件或其它配置⽂件中。key与硬件绑定,只能在特定相机上使⽤。在⼀台OAK-D相机上只能同时运⾏⼀项功能(及其⼦功能)。如您需要使⽤多项功能,需自行进⾏切换,或使⽤多台OAK-D相机。
3.4 机器人模型配置
Factor Perception Lite提供了OAK-D相机的Xacro及STL模型,⽤于⽣成URDF。用户⼀般应将其整合到自己的机器⼈模型中。当使⽤默认的TF前缀时,TF Tree如下图所⽰,OAK-D相机的基坐标系为oak_base_frame。各种感知数据会基于对应的相机坐标系或光轴坐标系发布。相机的内外参解析⾃硬件出⼚标定值。用户需自行配置机 器人坐标系(如base_link)到相机基坐标系间的变换关系。
4. 功能说明
4.1 3D托盘检测
这是一套基于深度学习的通用托盘检测方案,可实时检测各种常见的木托盘和塑料托盘,输出托盘的6个自由度位姿(3自由度平移+3自由度旋转)及长宽高。该功能无需预先设置托盘的尺寸,更不要求托盘必须水平放置。多种托盘可混用、可叠放。该功能适用于各类物流机器人,可极大减少对使用托盘载具的限制。
启动实例
示例提供了⼀套最小的运⾏配置,可通过一行命令启动,以便系统测试和功能验证。
对于ROS1:
$ roslaunch factor_perception_lite pallet_detection.launch key:=<your pallet_detection key>
对于ROS2:
$ ros2 launch factor_perception_lite pallet_detection_launch.py key:=<your pallet_detection key>
发布的话题
rgb/image_rect_color (sensor_msgs/Image)
校正过的彩⾊图像。
rgb/camera_info (sensor_msgs/CameraInfo)
彩⾊相机内参。
depth/image_rect (sensor_msgs/Image)
校正过的深度图像,已与彩⾊相机对⻬。
depth/camera_info (sensor_msgs/CameraInfo)
深度相机内参。
pallet_array (vision_msgs/Detection3DArray)
托盘检测数据。
参数
~tf_prefix (string, default: "oak")
相机TF前缀。
~mxid_or_name (string, default: “”)
相机的MXID,或IP地址,或USB端⼝名称。默认为空,会使⽤⾃动发现的第⼀台OAK相机。当连接多台OAK相机时可指定硬件。
~key (string, default: “”)
3D托盘检测功能的key。
~blob_path (string, default: “”)
3D托盘检测的深度学习模型,会在程序启动时加载到相机中。应使⽤ROS包blobs目录下的pallet_detection.blob,可参考示例launch⽂件配置。
~confidence (double, default: 0.8)
3D托盘检测的置信度阈值 (>0.5且 <1)。数值越低约容易检测到托盘,也更容易产⽣错误检测。
托盘检测数据说明
相机图像与检测数据的发布频率均为10 Hz。在相机可视范围内可能存在多个托盘,因此检测结果以数组的形式提供。每个元素中的results包含托盘位姿和置信度,bbox为3D边界框。results中的位姿定义在托盘正⽴⾯中点,bbox的位姿定义在托盘中心,如下图所⽰。bbox的size为算法估计的托盘尺⼨。
需要注意的是,⼤多数托盘都可以从两面或四面进叉,因此托盘检测存在对称性歧义。只有当正立面完全可见时,才能输出正确的检测结果。如下图所式,当托盘相对相机呈⼀定夹角时,可能在⼀个托盘上产⽣两个检测结果。因为可见的两面都可以作为正立面。用户需要自行选择使用哪个检测结果及进叉⽅向。实践可见:
4.2 子功能
当移动机器⼈使用OAK-D相机的深度图像进⾏避障时,原始数据容易导致较高的虚警率。即机器⼈可能因错误的深度值检测到并不存在的障碍物。这可能导致机器人行进时卡顿,或以非预期的方式绕⾏。为此我们专门为双目深度相机设计了这种非参数滤波算法,可以有效滤除⼤多数不可靠的深度值。用户无需任何配置,可直接使⽤过滤后的深度数据进行避障,虚警率可降低至⼏乎为0。过滤后的深度数据如下图所示,尽管看起来较为稀疏,但实际能有效检测各种细小的障碍物。
【3rd】【作者:BrianYuan】