目录

写在前面

运动学逆解原理

运动学逆解PA_IK代码实现

VMC算法原理

VMC代码实现

引用文献:


写在前面

本篇文章介绍的是,运动控制线程padog.py的逻辑顺序这篇文章中如红框所示的部分

运动学逆解原理

推荐预习视频:运动学逆解,观看2:00~9:13即可。

运动学正解,运动学逆解这些名词想必大家都不会太陌生,

运动学正解:已经知道关节角度计算出足端坐标

运动学逆解:已经知道足端坐标计算出关节角度

看完视频想必大家对这个的推导已经非常清晰,如果去网上搜这部分的知识,会有很多教程,你可能会觉得这和我们看的不太一样,但我想说的是,由于我们使用的机器人只是一个 8 自由度的机器人,因此还不需要用到网上 12 自由度的推导方法(旋转矩阵)。

对于推到过程,我只是觉得有几点需要提醒的,计算时,需要注意象限问题。

将单腿模型简化成坐标形式,则任何时刻都存在下式

即可得,当足端坐标处于右半平面(即小于90°)时,由三角形的关系可得;当足端坐标处于左半平面(即大于90°)时,由三角形的关系可得

运动学逆解PA_IK代码实现

明白了原理之后,我们就可以明确输入的物理量需要什么?首先是 4 条腿的足端坐标,和大小腿的长度,这份程序是可以兼容串联腿和并联腿的,因此有个选择case的变量。

按照我们的物理公式转换成代码,先计算关节,接着计算关节,计算时,需要注意我上面说的,判断象限的问题。算出一条腿后,以此类推算出其余四条即可。


#函数功能:运动学逆解运算库,运算完成后返回每个舵机的转动角度
#变量作用:
# case:0代表串联腿,1代表并连腿。
# l1,l2:机器人大小腿长度,用于运动学计算,
# x1-x4:逆解的足端x坐标
# y1-y4:逆解的足端y坐标
#返回值:8个舵机所需要到达的角度
def ik(case,l1,l2,x1,x2,x3,x4,y1,y2,y3,y4):if case==0:#腿2 x2=-x2shank2=pi-acos((x2*x2+y2*y2-l1*l1-l2*l2)/(-2*l1*l2))fai2=acos((l1*l1+x2*x2+y2*y2-l2*l2)/(2*l1*sqrt(x2*x2+y2*y2)))if x2>0:ham2=abs(atan(y2/x2))-fai2elif x2<0:ham2=pi-abs(atan(y2/x2))-fai2else:ham2=pi-1.5707-fai2shank2=180*shank2/piham2=180*ham2/pi#并联模式和其余腿省略

VMC算法原理

推荐视频:
逆运动学在二维平面上,通过建立坐标位置的点解出关节的角度,实现了机器人从位置对机器人的控制,被称为“位控”。
而接下来介绍的VMC算法,是从力矩的角度实现对机器人的控制,被称为“力控”,但是因为我们的舵机没有反馈信号,输出信号也不是力矩,只是“假装”建立了角度和力矩的关系,所以更进一步讲,这叫做“伪力矩”。
VMC又名为虚拟模型的控制方法,该方法首先在控制对象上假设存在虚拟元件如弹簧和阻尼器等,然后分析控制对象所受的虚拟力,并通过雅可比矩阵建立虚拟力和关节力的映射关系。
首先,我们应该明白一个弹簧倒立摆能在垂直方向保持在一个高度(暂且不讨论其他方向),需要一个向上的力去保维持。

这个力的大小由下面式子给出
前面的一项  和我们初中所学的弹簧弹力相同,弹力 (弹簧系数*伸长量)。但是我们之前所学的弹力是一个静态的平衡,而现在所说的弹簧倒立摆是一个动态的平衡,因此我们必须加上加速度所带来的力。
但为何我们的公式中,显示的的是一个为速度的值呢?我们都知道 ,由于每次的间隔时间是相同的,故可以看成一个常数,而这个常数就藏在了当中,我们通过调参实际获得的,实际上是时间常数与理论上的乘积。
由于我们是8自由度的机器人,故不需要考虑机器人y方向的受力,我们只要保证z方向的力能让机器人维持在一定高度,x方向的力能提供向前的力即可,其中每条腿都有x和z两个方向的力,每个方向的力计算的理论方法相同,只要按照上式建立即可。
综上,我们已经从力的理论角度,构造出一个能符合我们预期方向前进的理论模型。

当算出的这个力是末端输出的力,我们知道末端输出的力和关节放入雅可比矩阵便可以算出每个关节它所需要的力矩,其中雅可比矩阵算是比较基础的难点,我就不展开介绍,缺这块知识的可以从这里跳转到后面这视频观看第10讲与第11讲,雅可比矩阵教程。
算出我们输出的力矩之后,按照理想模型,本应该可以输出了。但由于我们的舵机控制量,并不能是力矩,故需建立"一座桥梁“增加一个P环,将算出的力矩与舵机只能输出的角度连接起来。

VMC代码实现

(鸽了太久,实在是对不住灯哥了)

在主循环文件中,可以通过对模式的选择进入到VMC代码模块,并将由步态计算出的四个腿的x,y坐标传入到此代码模块中,即P_[0]+ges_x_1等。

VMC代码模块中主要可以分为三部分,即变量的声明,传参进入VMC计算器计算和对VMC计算器计算出的数值进行处理,这里重点要介绍的是传参进入VMC计算器计算这一个部分,重点需要搞明白在这一个部分中,VMC计算器如何将期望足端坐标转化为舵机的输入角度。

VMC计算器计算是对单腿起作用,即输入单腿的坐标得到该腿的角度,故我们对其中一个腿进行讲解即可。VMC计算器的输入量主要有:

def cal_vmc_single_leg(l1,l2,ham1_origin,shank1_origin,Xe,Ze,X,Z,Xl,Zl):

分别代表的意义为,大小腿的长度,长小腿的关节角度,Xe,Ze是期望角度,X,Z是当前角度,Xl,Zl是上次角度。值得注意的是,这与逆运动学相比多了上次角度,这个参数的引入是为了达到计算PID中的D项而做的铺垫。对VMC计算器模块进行分解,其又可以分为6大部分,分别为

1.计算x,y上的力,此项在上文VMC原理中有详细阐述。

2.对变量进行弧度的转换,储存当前位置值为下次循环做准备。

3.利用雅可比矩阵求力矩,此项在上文VMC原理中有详细阐述。

4.建立伪反馈,通过力矩求出角度,此项在上文VMC原理中有详细阐述。此步中的参数整定,由于本人才疏学浅没整明白,懂得大神可以在评论区讲一下,我对于此参数的整定倾向于是通过实际调试所获得的。

5.由正解求足端坐标,属于常规步骤。

6.输出。

至此,VMC计算器模块已经完成任务,返回大小腿关节角度,需要输出的足端坐标和上次的足端坐标。这些值返回到VMC代码模块中,代码模块对所有值进行累加或者更新,得到最新状态下的数据值,并为下次循环做准备!

最后,主循环对VMC计算的值进行输入,就完成了一次完美的VMC循环。

引用文献

李田法. 电机驱动四足机器人能耗优化与高速运动步态规划研究 [D]; 山东大学, 2020.

谢惠祥. 四足机器人对角小跑步态虚拟模型直觉控制方法研究 [D]; 国防科学技术大学, 2015.

运动学逆解,VMC算法,计算舵机角度输出文件PA_IK和PA_VMC讲解——[灯哥开源—四足机器人]程序算法讲解与STM32移植相关推荐

  1. [灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划

    关键词:trot步态,walk步态,步态规划 目录 步态基础概念介绍 TROT步态原理 TROT代码实现 WALK步态原理 WALK代码实现 引用文献: 写在前面 这篇文章介绍的是,这篇文章https ...

  2. 【灯哥开源四足机器人】推荐一个开源四足机器狗项目,8自有度,两个舵机控制一个腿,apache开源协议的,已经迭代了好多个版本了,设计的非常好。有官方淘宝店,没有3D打印机的可以购买散装零件自己组装

    目录 前言 1,关于[灯哥开源四足机器人] 2,使用py-apple 3,总结 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/detail ...

  3. Arduino白泽四足机器人——matlab逆运动学求解

    基于"白泽"四足机器人足端轨迹的插值方法 目录 1 应用背景 2 模型建立 3 MATLAB对足端轨迹进行拟合插值 4 结果与分析 5 matlab逆运动学程序 1 应用背景 近年 ...

  4. 8及12自由度四足机器人VMC(虚拟模型)控制代码

    代码算法参考知乎:华北舵狗王--华北舵狗王带你一起做四足机器人3(Moco-8四足机器人导航算法简介) 参考论文:四足机器人对角小跑步态虚拟模型直觉控制方法研究 代码结构参考知乎 :xyYu 效果视频 ...

  5. 实例10:四足机器人运动学逆解可视化与实践

    实例10: 四足机器人运动学逆解单腿可视化 实验目的 了解逆运动学的有无解.有无多解情况. 了解运动学逆解的求解. 熟悉逆运动学中求解的几何法和代数法. 熟悉单腿舵机的简单校准. 掌握可视化逆向运动学 ...

  6. 仿斯坦福四足机器人的运动学逆解

    1 引言   仿斯坦福四足机器人的软件流程如下图所示.其中运动学逆解直接输出给舵机,控制机器人的运动,因此运动学逆解很重要. 2 基本概念 2.1机械结构模型   对于8自由度机器人,其机械结构模型如 ...

  7. 斯坦福四足机器人运动学逆解

    为什么要运动学逆解 运动学逆解即根据工具坐标系相对于基坐标系的目标位姿,求解机器人各关节角. 逆运动学在机器人学中占有非常重要的地位,是机器人轨迹规划和运动控制的基础,直接影响着控制的快速性与准确性. ...

  8. 为什么机器人运动学逆解最好采用双变量反正切函数atan2而不用反正/余弦函数?

    文章目录 一.采用atan2(y,x)atan2(y,x)atan2(y,x)的三点优势 二.采用atan2(y,x)atan2(y,x)atan2(y,x)的两个坑 三.参考文献/资料 一.采用at ...

  9. 四足机器人(二)---运动学逆解和步态规划

    四足机器人(二)---运动学逆解和步态规划 运动学逆解 步态规划 MATLAB仿真 运动学逆解 其实运动学分为运动学正解和运动学逆解,二者有什么区别呢?因为在四足机器人中用的是12个舵机,所以运动学正 ...

最新文章

  1. Linux安装git和maven的详细过程
  2. 六条“黑客伦理”(hacker ethic)
  3. Windows 7下的Excel 2010同时打开多个独立的窗口
  4. (3)Deep Learning之神经网络和反向传播算法
  5. 【AAAI会议】三位教父上演神仙打架,Hinton吐槽CNN就是个“垃圾”
  6. css float属性 与 clear属性 的深入了解
  7. C++中algorithm头文件中一些函数使用记录
  8. 如何在Adobe Illustrator中绘制花园里的小矮人
  9. win10的ios镜像
  10. 使用Gps获取经纬度
  11. paraview:python脚本
  12. 万恶淫为首,此言不虚。举要言之,邪淫者有如下十大不如意果报:
  13. 测开之路三十三:Flask实现扎金花游戏
  14. python 阮一峰_阮一峰关于 Javascript 中闭包的解读是否正确?
  15. php 正则获取邮箱后缀名,php中邮箱地址正则表达式实现与详解
  16. 数学建模-层次分析法
  17. 矩阵分析与应用-1.7-逆矩阵
  18. 如何优雅的使用C语言绘制一只小猪佩奇
  19. 用友GRP-U8Cloud V11.0 V11.21 行政业务高校 G C版
  20. 最好的IDEA debug长文?看完我佛了

热门文章

  1. 关于网络配置和zmp以及json
  2. 刷手机为什么让人上瘾
  3. [附源码]计算机毕业设计JAVA万科电子商城
  4. 《酒店项目》技术架构
  5. 数据库——活锁与死锁
  6. 道格拉斯·普克算法 JAVA实现
  7. 2022-11-15 vue笔记-路由vue-router(四) 路由守卫(又称路由拦截,导航守卫)的定义以及示例
  8. POJ 3278 / hdu 2717 Catch That Cow (广搜)
  9. Java窗体常用的布局
  10. JS通过IE8获取屏幕分辨率不正确的解决方法