对于MOVEJ的关节运动来说,我们只关心每个电机的角度(只需要考虑多个电机协同开始运动和结束运动,关键是对每个电机加速度均一化,从而一起跑一起停,这部分内容可以参考机器人学导论以获取更加详细的说明),我们要注意整个的流程是更新关节位置(MOVEJ)=>更新TCP(正解)=>更新关节速度和TCP速度

且由于正解是唯一的,在主程序的每个周期都要执行(当然你也可以不在主程序每个周期都执行,放在MoveUpdate里面也可以,不管执行何种运动都刷新一次正解)

 

对于MOVEL的TCP运动来说,我们只关心末端的位置和姿态(只需要考虑末端能否到目标位置,关键是求逆解,并把每个周期逆解对应的关节位置传递给电机,从而实现末端动,所有轴跟着联动的效果,同样可以参考机器人学导论研究更复杂的情况)。我们要注意整个的流程是更新TCP位置(MOVEL)=>更新关节位置(逆解)=>更新关节速度和TCP速度

且由于逆解不一定要做,只在MOVEL的时候才会执行,并且即便执行也是划归为跟MOVEJ一样的流程(MOVEUpdateDATA),更新数据之前判断关节位置,速度是否超过限制

 

对于两轴的直线模组来说比较简单,只有XY两个自由度,不涉及姿态,但是算法的流程和含义却是一样的。可以添加监控捕捉每个关节的位置和TCP的位置在启停的时候是否平滑(在本例中只有表示设备关节位置的theRadius和表示设备TCP位置的posRPYRadius两个数组是重要的,核心的)。点动的按钮都是会相互影响的,JOG关节会影响TCP位置,JOGTCP会影响关节位置。当然在直线模组中每个自由度是独立的,比如X的自由度只受J1电机控制(电机的角度算上丝杠导轨或者减速机,等比例的映射为多少mm,甚至可以测量得到简单结论)

J0:36CM=>72弧度

-45 弧度=>27    弧度

J1:40CM=>80弧度

-40 弧度=>40    弧度

因此可以简单认为每个模组每个关节1弧度运动量对应了X或者5mm的偏移(用弧度表示比较简洁,更多时候我们不关心电机的具体角度,只关心这个输出部分是多少)

 

要充分理解化归的思想,X和Y的点动本质上都是直线运动的一种,比如X+就是目标的Y不变,X给一个很大的值,然后执行直线运动。不管是JOG,还是回原点,还是弹出面板输入目标位置然后运动,本质都是同样的,只不过执行的目标位置和执行的流程有所区别。

 

虽然是直线插补,但是依然有很多讲究,比如启动过程可以直接按给定的速度,加速度进行孤立点位的计算(实际上就是等分直线段,每个PLC周期要求TCP到达孤立的直线段即可),还有一种方法是启动过程TCP的步子越来越大(想象人百米加速启动,也是越走越快,加速到指定速度之后再保持匀速)。再比如停止的时候还是可以分成多种情况讨论,再次只是简单演示了梯形加速和S形加速两种情况,停止的时候沿用了MOVEJ的关节停止,所以本质上末端TCP停止不再是保持直线,可以继续优化。

 

为了虚拟和真实模式的统一,在停止的时候也只采集虚拟的关节位置和关节速度(这两个虚拟的变量也可能是真实的,如果在真实模式下就从真实的驱动器获取)

 

由于是自定义的算法,我们无法从绝对运动模块中获取是否运动完毕,但是其实也可以自己写这样一个模块(执行的过程中不断判断是否当前位置和目标位置很接近,比如接近到一定范围之后就认为到位了),如果要在几个点来回运动,则必然需要等前面运动结束才能开始下一个运动。

最后虽然定义了MOVEJ和MOVEL运动方法,但是本质上绘制的轨迹却都是直线,因为关节和TCP是一个简单正比例关系(如果是串联纯转动结构的机器人,MOVEJ绘制的是空间不规则弧线,而MOVEL则保持TCP轨迹为直线)。MOVEJ由于不考虑求逆,所以大部分情况下可以获得比MOVEL更加平滑的轨迹和电机启停效果。

 

 

更多教学视频和资料下载,欢迎关注以下信息:

我的优酷空间:

http://i.youku.com/acetaohai123

 

我的在线论坛:

http://csrobot.gz01.bdysite.com/

 

问题交流:

QQ:910358960

邮箱:acetaohai123@163.com

 

 

 

最新文章

  1. IT蓝豹--RecyclerView加载不同view实现效果
  2. QString 和 TCHAR 的相互转换
  3. __int64 与long long 的区别 分类: Brush Mode 2014-08-14 10:22 64人阅读 评论(0) 收藏
  4. POJ3468 A Simple Problem with Integers(线段树延时标记)
  5. UI进阶 FMDB
  6. 使用sui实现的选择控件【性别、日期、省市级联】
  7. MYSQL数据类型和where条件
  8. Android 开发笔记___复选框__checkbox
  9. 【java API基本实现】ArrayList
  10. 完全卸载SQL Server 2008r2
  11. poj 2681 字符串
  12. 网络安全之在Kali Linux上安装Openvas
  13. 2018山东省ACM省赛G题-Game
  14. ssh-login 一键密码加密登录工具
  15. vue 开发微信小程序
  16. HAOI2015 简要题解
  17. linux硬盘挂载-新硬盘挂载和扩容硬盘挂载
  18. 安装MySQL Connector/C++并将其配置到VS2015中
  19. 深入理解kafka设计原理
  20. log4.net 配置 - 自定义过滤器按LoggerName过滤日志

热门文章

  1. [ 总结 ] nginx 编译参数中文详解
  2. Selenium2+python自动化73-定位的坑:class属性有空格【转载】
  3. 第一篇:Hello World
  4. python2和python3中的编码问题
  5. RMQ问题心得
  6. POJ 3168 Barn Expansion (几何基础)
  7. [Contest20180328]同构
  8. 【找规律】Gym - 100923L - Por Costel and the Semipalindromes
  9. python基础-协程函数、递归、模块、包等内容
  10. Java高级架构师(一)第14节:新增和列表页面和分页tag