<aside> <img src="/icons/condense_yellow.svg" alt="/icons/condense_yellow.svg" width="40px" /> Python | 算法 | 比例 | 微分 | 积分 | 控制 | C# | C++ | MATLAB | 虚拟机器人 | 二连杆 | 机械臂 | 逆向运动学 | 正向运动学 | 几何 | 矩阵 | 三连杆 | 数学 | 近似 | 动力学 | 欧拉-拉格朗日 | 运动方程 | 有效性 | 运动规划 | 摄像头 | 卡尔曼滤波 | 混合动力控制 | 阻抗控制 | 库卡 | 物理

</aside>

🎯要点

🎯正向运动学几何矩阵,Python虚拟机器人模拟动画二连杆平面机械臂 | 🎯 逆向运动学几何矩阵,Python虚拟机器人模拟动画三连杆平面机械臂 | 🎯微分运动学数学形态,Python模拟近似结果 | 🎯欧拉-拉格朗日动力学数学形态,Python模拟机器人操纵器推导的运动方程有效性 | 🎯运动规划算法,Python虚拟机器人和摄像头模拟离线运动规划算法 | 🎯移动导航卡尔曼滤波算法及其它方法,Python虚拟机器人模拟可检测和可磕碰 | 🎯混合动力控制微分数学形态,Python虚拟机器人模拟比例微分积分和逆动态控制 | 🎯阻抗控制,Python模拟二联(三联动)。

🎯 库卡机器人模拟 ,库卡实体机器人对象检测和颜色分割拾取和放置物体 | 🎯 C#远程测试虚拟机器人 | 🎯虚拟机器人从三维文件创建自定义模型。

🎯Cpp(Python)和MATLAB差动驱动ROS Raspberry Pi全功能机器人原型 | 🎯 Python | C++ | MATLAB机器人正逆向运动学动力学求解器及算法

✂️梗概

🍇Python逆动力学算法

逆动力学是指计算运动中的力。给定配置 $q$、广义速度 $\dot{ q }$ 和广义加速度 $\ddot{ q }$,相当于找到关节扭矩 $\tau$ 和接触力 $f ^{\text {ext } }$ 使得运动约束方程得到满足:

$$ \begin{aligned} M ( q ) \ddot{ q }+\dot{ q }^{\top} C ( q ) \dot{ q } & = S ^{\top} \tau + \tau _g( q )+ \tau ^{\text {est }}+ J ( q )^{\top} f ^{\text {ext }} \\ J ( q ) \ddot{ q }+\dot{ q }^{\top} H ( q ) \dot{ q } & = 0 \end{aligned} $$

逆动力学的数学函数如下:

$$ \left(\tau, f ^{e x t}\right)=\operatorname{ID}( q , \dot{ q }, \ddot{ q }) $$

当我们的线性系统完全确定时,该函数定义明确,例如对于具有六个自由度的手臂,但对于在多个接触下的移动机器人,该函数通常是欠确定的。在这种情况下,我们可以将外力的计算转移到例如接触模型,并仅计算关节扭矩:

$$ \tau =\operatorname{RNEA}\left( q , \dot{ q }, \ddot{ q }, f ^{\text {est }}\right) $$

递归牛顿-欧拉算法为我们提供了一种实现此功能的有效方法。该算法分为两步:前向传递,主要是二阶正向运动学,然后是后向传递,计算力和关节扭矩。

此算法第一遍计算主体速度 $v _i$ 和加速度 $a _i$。从运动树的根 $i=0$ 开始,物体 i 的运动 $v _i$, $a _i$ 是根据运动 $v _{\lambda(i)}, a _{\lambda( i)}$ 其父体 $\lambda(i)$ 的分量,加上它们之间的关节的运动 $\dot{ q }_i, \ddot{ q }_i$ 引起的分量。让我们从主体速度开始:

$$ v _i={ }^i X _{\lambda(i)} v _{\lambda(i)}+ S _i \dot{ q }_i $$

在此方程中,${ }^i X _{\lambda(i)}$ 是从 $\lambda(i)$ 到 $i$ 的 Plücker 变换,$S _i$ 是关节的运动子空间矩阵。请注意,$\dot{ q }_i \in R ^k$ 是关节的速度,例如对于浮动底座(又名自由飞行器)关节,$k=6$,对于球形关节,$k=2$,对于旋转关节或棱柱关节,$k=1$。无论如何,$\dot{ q }_i$ 不是广义速度向量 $\dot{ q }$ 的 $i^{\text {th }}$ 分量(这没有意义,因为 $i$ 是关节的索引,而向量 $\dot{ q }$ 按自由度索引)。因此,运动子空间矩阵的维度为 $6 \times k$。

接下来,让我们假设一个“常见”关节(旋转关节、棱柱关节、螺旋关节、圆柱关节、平面关节、球形关节、自由飞行关节),这样运动子空间矩阵的视在时间导数为零。除非你处理的是不同的关节,否则不要介意这句话。 然后,在前向传递过程中从父关节计算出的主体加速度为:

$$ a _i={ }^i X _{\lambda(i)} a _{\lambda(i)}+ S _i \ddot{ q }_i+ v _i \times S _i \dot{ q }_i $$

到目前为止,该正向传递是二阶正向运动学。一路上我们要计算的最后一件事是由主体运动 $v _i$ ,$a _i$产生的主体惯性力: