工作日志:MATLAB+ROS控制真实机械臂的思路

工作日志:MATLAB和gazebo联合仿真思路类似。首先完成MATALB和ROS的连接,然后有如下思路:

 

一、MATLAB向真实机械臂发送数据

真实机械臂和gazebo当中的仿真环境的机械臂一样,都是通过控制器订阅话题和发布关节数据来实现,不同的是厂商封装了很多相关的库,将某些功能隐藏了起来,,不一定可以直接向机械臂发布话题。而且很多话题名是厂商自定义的,和gazebo里不一样。

目前有以下思路:

(一)ROS订阅中转

厂商提供了SendTranjectory函数来驱动真实机械臂运动(详见RobotPlanning_test.cpp文件),可以在Simulink里算好数据并作为话题发布,在ROS当中创建一个订阅者来订阅该话题,并在回调函数中使用该消息作为关节空间的角度目标位置,先用PlanPose函数规划,再使用SendTranjectory来驱动真实机械臂。

但以上方法可能存在的问题:

(1)回调函数好像只能传参订阅的数据,无法将实例化的机械臂进行传参。如果在回调函数中使用SendTranjectory,不可能回调一次就实例化一次,这一运行速度太慢。需要查找回调函数如何传参实例化的机械臂。

(2)每一个数据都先规划再运动,速度上可能根本做不到实时,而且后发布的数据可能因为处理不及时而丢失,即使能用,结果可能也是机械臂卡顿运行,因为默认的规划函数默认初始和末尾的速度为0,也就是每发布一个数据机械臂运动到该点时就会停顿一下再运行到下一个数据点。

(二)直接发布

和在gazebo里仿真的过程一样,直接发布话题。首先要找出真实机械臂的控制器所订阅的话题,因为SendTranjectory函数理论上是向某个话题发布消息,可以直接问厂商或者是连接真实机械臂后查看话题看能不能找到。直接在MATLAB里面发布该话题应该也能驱动机械臂运动。

但存在的问题可能和(一)中的(2)一样,实质上关键的问题就是机械臂能不能实现实时的调节从而达到连续的运动。由于发布给机械臂的话题里的消息应该是一条连续的轨迹,包括位置、速度、加速度、时间戳,在控制真实机械臂的时候不可能只发送位置数据,相应的速度、加速度、时间戳信息都应该考虑。目前的思路是

(1)位置信息可以直接由现算法得到

(2)起始位置点的速度和加速度设为0

(3)加速度要连续变化,考虑用线性插值的思路,已知第i个点的位置xi、速度vi、加速度ai,第i+1个点的位置xi+1已知,时间戳间隔自定义为T,则

还有一个问题是SendTranjectory是将一组数据打包好之后同时向控制器的话题发布,像(二)一样发送单个数据给该话题不一定能行。

 

二、机械臂向MATLAB发送数据

参考JointState.cpp文件,直接订阅Joint_state话题即可。

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值