张春成
2022/01/19阅读:62主题:默认主题
运动反解算法
运动反解算法
本文将综合之前的“四元数”计算、“机械臂”运动和“THREE”可视化的代码, 构建了一个仿“人体骨骼”的运动反解工程。
运动反解
想象一个靠关节连接的刚体系统, 如果已知每个关节的角度和位置, 我们就能计算得到这个系统的终点位置, 而在终点位置已知的情况下, 如何求解各个关节的角度和位置, 就称为反解问题。
之前已经分别介绍了一些基础内容,分别以下几期内容中有所提及
-
四元数计算[1] -
机械臂运动的逆解[2] -
运动轨迹重建[3]
本文将上述内容结合,形成面向人体骨骼运动反解的可视化工程。
反解算法
这种已知终点位置,反求各个关节运动状态的方法称为Inverse Kinematics
算法
Inverse kinematics is the use of kinematic equations to determine the motion of a robot to reach a desired position. For example, to perform automated bin picking, a robotic arm used in a manufacturing line needs precise motion from an initial position to a desired position between bins and manufacturing machines.
Reference: www.mathworks.com/discovery/inverse-kinematics.html
这只是一个算法大类, 它并没有唯一解。 随着关节数量和自由度越高, 它的解范围就越大, 也越不可控。
本工程使用fillik工具[4], 进行前端计算。 虽然这类的高性能工具还有很多, 但它们大多使用Python
和C
等语言, 难以实现前端计算。
基本运动可视化
我们首先建立人体骷髅的模拟结构,

其中,带有箭头的方形控件是可以拖拽的控制点, 可以分别控制头部、双手和双脚的位置;
骷髅结构的关节有两种,
-
一种是“万向轴”形式的关节,比如肩膀和手肘部位; -
另一种是“单向轴”形式的关节,比如膝盖部位。
之后使用一些简单的前端控制方法, 对位置控件进行自动控制, 得到自动运动模式如下
【这是一段棒到不行的视频】
可见,要实现伪人的真实运动, 仅仅控制端点的位置还是不够的, 还需要加入适当的约束, 以及控制端点的角度。 这些当然就是之后的工作内容。
本工程代码可见我的GITHUB仓库[5]。
参考资料
四元数计算: https://mp.weixin.qq.com/s?__biz=MzkxNTI1MDc5NA==&mid=2247485009&idx=1&sn=a838b8858cae1788977973be8e157a0e&chksm=c1634d54f614c4423de45690e6d827c9bae8684acce655f3506ec4a6f863f589a088c4dc061a&token=771751451&lang=zh_CN#rd
[2]机械臂运动的逆解: https://mp.weixin.qq.com/s?__biz=MzkxNTI1MDc5NA==&mid=2247484333&idx=1&sn=dc52b21131cc06885027f2ef280c488b&chksm=c16348a8f614c1be91c8487ea5b3eec47dbc599633b4794fae4a2037298eace3ef4034f71cde&token=771751451&lang=zh_CN#rd
[3]运动轨迹重建: https://mp.weixin.qq.com/s?__biz=MzkxNTI1MDc5NA==&mid=2247484790&idx=1&sn=88793f0e1f6981ae2ccca3f9389f35eb&chksm=c1634e73f614c765dbf3cf39218b541ddf13f888c1f11eb6eefa62f9960d47a1870eb61b9e6c&token=771751451&lang=zh_CN#rd
[4]fillik工具: https://github.com/lo-th/fullik
[5]我的GITHUB仓库: https://github.com/listenzcc/plantform-1
作者介绍