news 2026/4/23 14:07:12

机器人运动学1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
机器人运动学1

文章目录

    • @[toc]
    • 一、什么是逆运动学(Inverse Kinematics, IK)?
      • 1️⃣ 先看“正运动学”(FK)好理解一点
      • 2️⃣ 逆运动学(IK)正好反过来
    • 二、先从“最简单的一条腿”开始(二维)
      • 模型(非常重要)
    • 三、逆运动学的几何本质(不是魔法)
      • 1️⃣ 核心思想:**三角形**
      • 2️⃣ 膝关节角(最简单)
      • 3️⃣ 髋关节角(分两步)
        • 步骤 A:脚的方向角
        • 步骤 B:三角形内部补角
        • 髋关节角:
    • 四、用 Python 写一个“最小可运行 IK”
      • 1️⃣ 纯数学 IK(二维单腿)
      • 2️⃣ 试一下(和你站立高度接近)
    • 五、你代码里的 IK 是“进阶版”
    • 六、一句话总结(非常重要)
    • 这一步在做什么:从 (x, y) 到 (r, θ)
      • Step 1:先有一个点 P(x, y)
      • Step 2:把“到原点的距离”画出来,这就是 r
      • Step 3:用投影形成直角三角形,解释 r 为什么是 √(x²+y²)
      • Step 4:θ 是“从 x 轴转到 OP 的角度”,用 atan2 最稳
    • 总结:cartesian_to_polar() 的核心就是这两行

一、什么是逆运动学(Inverse Kinematics, IK)?

1️⃣ 先看“正运动学”(FK)好理解一点

正运动学(FK)
👉已知关节角度 → 算末端在哪里

比如:

  • 髋关节 30°
  • 膝关节 60°

问:脚现在在空间的什么位置 (x, z)?

这就是 FK。


2️⃣ 逆运动学(IK)正好反过来

逆运动学(IK)
👉已知脚的位置 → 算关节角度

比如你在程序里写:

set_site(leg,x=60,y=0,z=-50)

你真正想问的是:

“如果脚要到这个点,
髋关节要转多少度?
膝关节要转多少度?”

这一步,就是逆运动学


二、先从“最简单的一条腿”开始(二维)

我们先不管四足、不管 yaw,只看一条腿在一个平面里动

模型(非常重要)

髋关节 o \ 大腿 L1 \ o 膝关节 \ \ 小腿 L2 \ x 足端
  • 大腿长度:L1
  • 小腿长度:L2
  • 脚目标位置:(x, z)(注意 z 往下是负)

三、逆运动学的几何本质(不是魔法)

1️⃣ 核心思想:三角形

当脚的位置(x, z)已知时:

从髋关节到脚 → 构成一个三角形

边长分别是:

  • 一条边:r = sqrt(x² + z²)
  • 另外两条边:L1L2

于是你得到一个已知三边的三角形
👉可以用余弦定理!


2️⃣ 膝关节角(最简单)

用余弦定理:

[
\cos(\theta_{knee}) = \frac{L1^2 + L2^2 - r^2}{2 L1 L2}
]

注意:

  • 这是“膝关节内角”
  • 舵机角度往往要再转换(你代码里已经做了)

3️⃣ 髋关节角(分两步)

步骤 A:脚的方向角
phi=atan2(z,x)
步骤 B:三角形内部补角

[
\psi = \arccos\left(\frac{L1^2 + r^2 - L2^2}{2 L1 r}\right)
]

髋关节角:
hip = phi + psi

⚠️ 有些机器人用phi - psi,取决于你角度定义
你现在用的代码就是其中一种约定


四、用 Python 写一个“最小可运行 IK”

1️⃣ 纯数学 IK(二维单腿)

importmathdefleg_ik_2d(x,z,L1,L2):""" 二维平面两连杆逆运动学 输入: x, z : 足端坐标 L1 : 大腿长度 L2 : 小腿长度 输出: hip_angle, knee_angle (单位:度) """# 到脚的距离r=math.sqrt(x*x+z*z)# ---- 膝关节角(余弦定理)----cos_knee=(L1*L1+L2*L2-r*r)/(2*L1*L2)cos_knee=max(-1.0,min(1.0,cos_knee))# 防止数值炸掉knee=math.acos(cos_knee)# ---- 髋关节角 ----phi=math.atan2(z,x)cos_psi=(L1*L1+r*r-L2*L2)/(2*L1*r)cos_psi=max(-1.0,min(1.0,cos_psi))psi=math.acos(cos_psi)hip=phi+psi# 转成角度hip_deg=math.degrees(hip)knee_deg=math.degrees(knee)returnhip_deg,knee_deg

2️⃣ 试一下(和你站立高度接近)

L1=55.0L2=77.5x=62z=-50hip,knee=leg_ik_2d(x,z,L1,L2)print("hip =",hip,"knee =",knee)

这一步得到的角度,就是 IK 的核心结果


五、你代码里的 IK 是“进阶版”

你现在用的这个函数:

cartesian_to_polar(x,y,z)

本质上做了三件事:

  1. 把 (x, y) 合成水平距离 w

  2. 减去髋关节横向偏移 length_c

  3. 在 3D 空间里算:

    • α:髋俯仰
    • β:膝关节
    • γ:髋 yaw(左右摆)

也就是说:

你已经在用完整的三维逆运动学了
只是还没“从几何角度彻底看懂它”


六、一句话总结(非常重要)

🔹逆运动学不是“控制舵机”
🔹它只是回答一个问题:

👉 “脚要去这里,关节应该转多少?”

你现在的代码结构已经是工业级四足机器人的典型写法了:

步态规划(set_site) ↓ 插值(servo_service) ↓ 逆运动学(IK) ↓ 舵机映射

cartesian_to_polar(x, y)(把直角坐标转成极坐标)用图形一步步拆开讲清楚。为了直观,用示例点P = (3, 2)来演示(换成任意 x,y 逻辑都一样)。


这一步在做什么:从 (x, y) 到 (r, θ)

Step 1:先有一个点 P(x, y)

  • 直角坐标就是“从原点往右 x、往上 y”的位置。

(图里就是把点 P 标出来)


Step 2:把“到原点的距离”画出来,这就是 r

  • 极坐标的r是从原点 O 到点 P 的距离。
  • 用勾股定理:
    [
    r = \sqrt{x^2 + y^2}
    ]
    示例:
    [
    r = \sqrt{3^2 + 2^2} = \sqrt{13} \approx 3.606
    ]

(图里就是从 O 连到 P 的那条线段)


Step 3:用投影形成直角三角形,解释 r 为什么是 √(x²+y²)

  • 把 P 垂直投影到 x 轴,形成一个直角三角形:

    • 底边长度 = x
    • 高 = y
    • 斜边 = r
  • 所以 r 就是三角形斜边。

(图里有 x、y、r 三条边)


Step 4:θ 是“从 x 轴转到 OP 的角度”,用 atan2 最稳

  • 极坐标的θ是从正 x 轴逆时针转到OP的角。
  • 用:
    [
    \theta = \text{atan2}(y, x)
    ]
    为什么不用atan(y/x)
  • atan2能正确区分象限(比如 x<0 的时候角度不一样),也能处理 x=0 的情况。

示例:
[
\theta = \text{atan2}(2,3) \approx 0.588\text{ rad} \approx 33.69^\circ
]

(图里有一个小弧线表示 θ)


总结:cartesian_to_polar() 的核心就是这两行

[
r=\sqrt{x2+y2},\quad \theta=\text{atan2}(y,x)
]

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 13:02:12

Blender动漫渲染终极指南:Goo Engine完整使用教程

Blender动漫渲染终极指南&#xff1a;Goo Engine完整使用教程 【免费下载链接】goo-engine Custom build of blender with some extra NPR features. 项目地址: https://gitcode.com/gh_mirrors/go/goo-engine 你是否在寻找能够完美呈现动漫风格的Blender渲染解决方案&a…

作者头像 李华
网站建设 2026/4/23 13:09:24

刷题日记day10(单调栈+异或运算)

简介 本篇介绍一道单调栈的模板题&#xff0c;为洛谷黄题目&#xff0c;希望读者阅读完本篇之后可以阅读一下刷题日记day10(单调队列)配合食用效果更佳 前置知识 异或运算的性质 本题的运算中只运用到了这三种性质&#xff0c;剩余的性质我们放在该篇的末尾 题目描述 …

作者头像 李华
网站建设 2026/4/22 7:50:02

突破Cursor试用限制的完整解决方案:从问题诊断到高效使用

突破Cursor试用限制的完整解决方案&#xff1a;从问题诊断到高效使用 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Youve reached your trial request limit. / Too many free trial accounts used on this machine. Please upgrade to pro. …

作者头像 李华
网站建设 2026/4/17 12:10:05

Sabaki围棋软件:开启专业级围棋对弈新体验

Sabaki围棋软件&#xff1a;开启专业级围棋对弈新体验 【免费下载链接】Sabaki An elegant Go board and SGF editor for a more civilized age. 项目地址: https://gitcode.com/gh_mirrors/sa/Sabaki 想象一下&#xff0c;当你面对一个优雅的围棋棋盘&#xff0c;不仅可…

作者头像 李华
网站建设 2026/4/19 13:12:50

无源蜂鸣器硬件设计:手把手搭建基础电路

从零搭建无源蜂鸣器驱动电路&#xff1a;不只是“滴”一声那么简单你有没有遇到过这样的场景&#xff1f;项目快收尾了&#xff0c;想给设备加个提示音——按键按下“滴”一声&#xff0c;报警触发“嘀嘀嘀”。于是顺手在BOM里加了个蜂鸣器&#xff0c;接上MCU的IO口&#xff0…

作者头像 李华
网站建设 2026/4/19 19:03:42

.NET Windows Desktop Runtime终极指南:从零开始构建现代化桌面应用

.NET Windows Desktop Runtime终极指南&#xff1a;从零开始构建现代化桌面应用 【免费下载链接】windowsdesktop 项目地址: https://gitcode.com/gh_mirrors/wi/windowsdesktop 在数字化转型浪潮中&#xff0c;桌面应用依然是企业级解决方案的重要组成部分。.NET Wind…

作者头像 李华