手臂机器人:机器人检测物体与运动规划
主要任务
通过机械臂分类不同颜色的立方体:
- 检测物体:立方体和杯子。
- 确定立方体和杯子在三维空间中的位置和颜色。
- 生成机器手臂规划和控制。
解决方案
使用深度信息识别立方体和杯子,并根据高度对其进行区分。然后使用颜色信息将立方体分类到相应颜色的杯子中。
总体算法
- 对点云进行阈值处理,以去除感兴趣区域之外的所有三维点。在这个步骤中,手臂和地板的点被移除。
- 使用聚类算法进行物体分割,聚类是在三维点上进行的,以确定不同的部分。聚类对所有处于感兴趣区域的点进行泛滥填充。
- 根据该段的中心点的高度,检测出立方体和杯子,杯子的中心点距离地面的高度要比立方体高。
- 杯子检测整合:由于杯子在室内会有很多阴影,颜色产生变化,部分点不能被检测出来,造成杯子数据分段,因此需要进行整合。
- 找到每个点云的中心点,并分配给立方体和杯子的中心点。
- 基于立方体和杯子的三维位置,也基于颜色,完成运动规划,并给机器人手臂发出指令。
聚类算法
聚类使用洪水填充算法,根据颜色信息形成聚类。
- 对于修剪后的点中的所有点。检查该点是否已经被访问过,如果没有被访问过,则从该点开始进行洪水填充算法。
- 检查由洪水填充形成的片段中的点的数量是否大于阈值,然后将该片段添加到一个列表中。最后,我们有了具有相似颜色的线段。
洪水填充
- 初始化一个堆栈.
- 将起点标记为已访问。并把它推到一个堆栈中。
- 如果堆栈不为空,则:
- 推出第一个元素,将其颜色与水平和垂直邻居的颜色进行比较。
- 如果邻居在阈值中,则将该邻居点添加到分段中,也添加到栈中。
系统组成
检测物体 Object detection
任务的中心部分和最关键的部分是识别物体并确定其在三维空间的准确位置。使用RGBD相机检索深度和颜色信息,然后根据尺寸检测立方体和杯子。如上所述,物体检测是通过使用聚类算法进行的。
运动规划 Motion Planning
物体检测给出了物体在三维空间中的位置。基于立方体和杯子的位置,要计划运动来捕捉立方体,抓取立方体,将其带到最终位置,并将其放入相应的杯子中。关节的参数是用反运动学inverse kinematics计算的。
在 IK 空间中的运动增量是不稳定的,因为计算出来的关节参数不是线性的,因此姿势的变化要用正向运动学 forward kinematics 转换到关节空间中。姿势变化是在关节空间中,这样可以保证关节的线性变化,并给出了平滑的运动结果。
主要挑战
硬件矫正
校准手臂的精细动作: 在手臂的关节处有一个节点会打滑,很难调整, 由于重力原因,机械手臂的前爪越高,越容易下垂,误差越大。我们通过增加一个调节参数来解决这个问题,这个参数是基于立方体的位置变化的,在Z轴的正方向(朝上)随着高度的增加而减小。
物体检测
图像分割无法正常工作。由于摄像头角度问题,物体的一部分3D 点信息会丢失,导致误差太大,我们使用 3D 聚类算法解决了这个问题。
依赖
- pencv
- librealsense
- qt5-default
- qglviewer
- libqt5serialport5-dev