张春成

V2

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], 进行前端计算。 虽然这类的高性能工具还有很多, 但它们大多使用PythonC等语言, 难以实现前端计算。

基本运动可视化

我们首先建立人体骷髅的模拟结构,

Human Bones
Human Bones

其中,带有箭头的方形控件是可以拖拽的控制点, 可以分别控制头部、双手和双脚的位置;

骷髅结构的关节有两种,

  • 一种是“万向轴”形式的关节,比如肩膀和手肘部位;
  • 另一种是“单向轴”形式的关节,比如膝盖部位。

之后使用一些简单的前端控制方法, 对位置控件进行自动控制, 得到自动运动模式如下

【这是一段棒到不行的视频】

可见,要实现伪人的真实运动, 仅仅控制端点的位置还是不够的, 还需要加入适当的约束, 以及控制端点的角度。 这些当然就是之后的工作内容。

本工程代码可见我的GITHUB仓库[5]

参考资料

[1]

四元数计算: 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

分类:

后端

标签:

后端

作者介绍

张春成
V2