五轴机械臂实现视觉抓取--realsense深度相机和五自由度机械臂

前言:要实现视觉抓取,首先需要实现机械臂的驱动,深度相机的目标识别,能够反馈位置。

1、实现机械臂在ROS层的控制

2、基于深度相机目标物体的空间坐标反馈,需要知道摄像头中物体的像素坐标系到大地坐标系的转换。

3、五轴机械臂使用KDL插件不友好,需要适配IKFAST运动学插件,环境是Ubuntu16.04+ROS系统

IKFAST的安装参考如下的链接:

1)安装OpenRAVE 0.9版本

https://roboticslab-uc3m.github.io/installation-guides/install-openrave.html#install-openrave-0540-ubuntu-1804-bionic

MoveIt!运动学插件IKFAST(八) - 白雪儿 - 博客园

ROS进阶——MoveIt!运动学插件IKFAST配置_偷得浮生半日闲-CSDN博客

https://roboticslab-uc3m.github.io/installation-guides/install-aravis.html

https://roboticslab-uc3m.github.io/installation-guides/install-openrave.html

OpenRAVE | Welcome to Open Robotics Automation Virtual Environment | OpenRAVE Documentation

注意:1、安装过程中可能遇到一些错误,可以修改 CMakeLists.txt文件

2、fcl碰撞库是可以不编译进去的

2)安装ikfast插件

Industrial/Tutorials/Create a URDF for an Industrial Robot - ROS Wiki

https://github.com/ros-industrial/fanuc/tree/kinetic-devel

Fanuc的模型文件

Magics21中文破解版,修改slt模型文件,修改它的坐标方向等等

Magics21破解版|Materialise Magics21中文破解版下载 - 多多软件站

 安装生成ikfast的步骤大致可以分为以上的步骤,具体之前的参考链接中包含。生成中出现错误时需要注意你的运动链不能设置错误,不然会出现raghavan roth equations too complex。

可以参考我的运动链设置,这个要修改urdf文件描述,具体可以去官方查找fanuc的模型文件参考,我的ikfast生成插件的配置参考

xcar marm translationdirection5d 5自由度机械臂  两次测试使用正常

export MYROBOT_NAME="marm"  && export IKFAST_PRECISION="5" && export PLANNING_GROUP="manipulator"  && export BASE_LINK="0"  && export EEF_LINK="7"  && export IKFAST_OUTPUT_PATH=/home/zonesion/ikfast61_marm_"$PLANNING_GROUP".cpp

4、使用官方的moveit_simple_grasps功能包,使用这个包中的grasp_filter_test节点完成对目标物体可行抓取的过滤,从而得到可以到达的抓取,然后根据这些可行的抓取进一步选择最优的抓取即可。

这个包中需要调整很多代码,这里需要仔细看懂代码然后才能够很好的适配这个包,这个包中重点是抓取的过滤,就是根据之前生成的ikfast逆向解算器过滤掉无法到达的姿态,五自由度的机械臂到达姿态有效,导致的结果是无法准确的到达我们需要的姿态,这个是5D算法的弊端,因为平移三个参数,旋转也是三个参数,正常旋转为9个参数。

5、最后可以实现的效果如下:

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
抓取过程中,机械臂需要保持稳定并准确地移动到目标位置,PID控制可以帮助机械臂实现这个目标。以下是一个六自由度机械臂视觉抓取的PID控制程序的示例: ```c #include <stdio.h> #include <stdlib.h> #include <math.h> #define KP 0.5 #define KI 0.2 #define KD 0.1 double error = 0, last_error = 0, integral = 0; double PID_control(double target, double current) { error = target - current; integral += error; double derivative = error - last_error; double output = KP * error + KI * integral + KD * derivative; last_error = error; return output; } int main() { //读取目标位置和当前位置 double target_pos[6] = {1, 2, 3, 4, 5, 6}; double current_pos[6] = {0, 0, 0, 0, 0, 0}; //循环控制机械臂运动 while (1) { //读取视觉系统的检测结果,并更新当前位置 //假设检测到的位置为new_pos double new_pos[6] = {1.2, 2.3, 2.8, 4.1, 5.2, 6.1}; for (int i = 0; i < 6; i++) { current_pos[i] = new_pos[i]; } //计算每个关节的控制量 double control[6]; for (int i = 0; i < 6; i++) { control[i] = PID_control(target_pos[i], current_pos[i]); } //控制机械臂执行运动 //假设机械臂控制接口为move_to(double pos[], double control[]) move_to(current_pos, control); } return 0; } ``` 在这个程序中,我们使用了经典的PID控制方法,其中KP、KI和KD分别表示比例、积分和微分系数。在循环中,我们不断读取视觉系统检测到的机械臂当前位置,并计算每个关节的控制量。最后,我们使用控制量控制机械臂执行运动,将机械臂移动到目标位置。 需要注意的是,在实际应用中,PID控制器的参数需要根据实际情况进行调整,以获得最佳的控制效果。同时,机械臂的运动也需要考虑到物理限制,避免机械臂碰撞或超过可行动范围。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值