Skip to content

机器人数学基础

欢迎学习机器人数学基础!本模块将系统地讲解机器人学所需的所有数学知识,从基础的线性代数到高级的优化控制理论。

为什么需要数学?

┌─────────────────────────────────────────────────────────────┐
│                机器人学中的数学应用                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐     │
│  │  运动学     │    │  动力学     │    │  控制       │     │
│  │  (位置/姿态)│    │  (力/力矩)  │    │  (稳定性)   │     │
│  └──────┬──────┘    └──────┬──────┘    └──────┬──────┘     │
│         │                  │                  │             │
│         ▼                  ▼                  ▼             │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐     │
│  │  线性代数   │    │  微积分     │    │  优化理论   │     │
│  │  (矩阵运算) │    │  (导数/积分)│    │  (最优控制) │     │
│  └─────────────┘    └─────────────┘    └─────────────┘     │
│                                                             │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐     │
│  │  几何学     │    │  概率统计   │    │  数值计算   │     │
│  │  (空间变换) │    │  (不确定性) │    │  (算法实现) │     │
│  └─────────────┘    └─────────────┘    └─────────────┘     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

学习路线图

flowchart TB
    A([开始学习]) --> B[线性代数基础]
    B --> C[微积分基础]
    C --> D[几何与空间变换]
    D --> E[运动学]
    E --> F[动力学]
    F --> G[控制理论]
    G --> H[概率与统计]
    H --> I[优化理论]
    I --> J[数值计算]
    J --> K[机器人应用]

    B -.-> B1[向量与矩阵]
    B -.-> B2[特征值与特征向量]
    B -.-> B3[矩阵分解]

    C -.-> C1[导数与微分]
    C -.-> C2[积分]
    C -.-> C3[微分方程]

    D -.-> D1[坐标系变换]
    D -.-> D2[旋转表示]
    D -.-> D3[齐次变换]

    E -.-> E1[正运动学]
    E -.-> E2[逆运动学]
    E -.-> E3[微分运动学]

    F -.-> F1[拉格朗日力学]
    F -.-> F2[牛顿-欧拉方法]
    F -.-> F3[动力学建模]

    G -.-> G1[经典控制]
    G -.-> G2[现代控制]
    G -.-> G3[非线性控制]

    H -.-> H1[概率论]
    H -.-> H2[统计推断]
    H -.-> H3[贝叶斯方法]

    I -.-> I1[无约束优化]
    I -.-> I2[有约束优化]
    I -.-> I3[最优控制]

    J -.-> J1[数值线性代数]
    J -.-> J2[数值积分]
    J -.-> J3[迭代方法]

课程结构

第一阶段:数学基础(4周)

周次 主题 内容 链接
第1周 线性代数 向量、矩阵、特征值、矩阵分解 线性代数
第2周 微积分 导数、积分、微分方程 [微culus/calculus.md)
第3周 几何学 坐标变换、旋转、齐次变换 几何学
第4周 概率统计 概率论、统计推断、贝叶斯方法 概率统计

第二阶段:机器人运动学(3周)

周次 主题 内容 链接
第5周 正运动学 DH 参数、变换矩阵链 运动学
第6周 逆运动学 解析解、数值解 运动学
第7周 微分运动学 雅可比矩阵、速度映射 运动学

第三阶段:机器人动力学与控制(3周)

周次 主题 内容 链接
第8周 动力学建模 拉格朗日方法、牛顿-欧拉方法 动力学
第9周 控制理论 PID 控制、状态空间方法 控制理论
第10周 高级控制 自适应控制、鲁棒控制 控制理论

第四阶段:高级主题(2周)

周次 主题 内容 链接
第11周 优化理论 无约束/有约束优化、最优控制 优化理论
第12周 数值计算 数值线性代数、迭代方法 数值计算

核心概念速览

1. 线性代数

# 向量运算
import numpy as np

v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])

# 点积
dot_product = np.dot(v1, v2)  # 32

# 叉积
cross_product = np.cross(v1, v2)  # [-3, 6, -3]

# 矩阵运算
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# 矩阵乘法
C = np.matmul(A, B)

# 特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)

2. 旋转表示

# 旋转矩阵
def rotation_matrix_z(theta):
    """绕 Z 轴旋转"""
    return np.array([
        [np.cos(theta), -np.sin(theta), 0],
        [np.sin(theta),  np.cos(theta), 0],
        [0,              0,             1]
    ])

# 四元数
from scipy.spatial.transform import Rotation

# 创建旋转
r = Rotation.from_euler('z', 45, degrees=True)

# 转换为四元数
quat = r.as_quat()  # [x, y, z, w]

# 转换为旋转矩阵
rot_matrix = r.as_matrix()

3. 齐次变换

def homogeneous_transform(R, p):
    """创建齐次变换矩阵"""
    T = np.eye(4)
    T[:3, :3] = R  # 旋转部分
    T[:3, 3] = p   # 平移部分
    return T

# 示例
R = rotation_matrix_z(np.pi/4)  # 45度旋转
p = np.array([1, 2, 3])         # 平移向量

T = homogeneous_transform(R, p)

4. 运动学

def forward_kinematics_2link(theta1, theta2, l1, l2):
    """2连杆正运动学"""
    x = l1 * np.cos(theta1) + l2 * np.cos(theta1 + theta2)
    y = l1 * np.sin(theta1) + l2 * np.sin(theta1 + theta2)
    return x, y

# 示例
theta1 = np.pi/4  # 45度
theta2 = np.pi/6  # 30度
l1 = 1.0
l2 = 0.8

x, y = forward_kinematics_2link(theta1, theta2, l1, l2)

5. 雅可比矩阵

def jacobian_2link(theta1, theta2, l1, l2):
    """2连杆雅可比矩阵"""
    J = np.array([
        [-l1*np.sin(theta1) - l2*np.sin(theta1+theta2), 
         -l2*np.sin(theta1+theta2)],
        [l1*np.cos(theta1) + l2*np.cos(theta1+theta2),  
         l2*np.cos(theta1+theta2)]
    ])
    return J

# 计算雅可比矩阵
J = jacobian_2link(theta1, theta2, l1, l2)

# 计算末端速度
joint_velocities = np.array([0.1, 0.2])  # 关节速度
end_effector_vel = J @ joint_velocities   # 末端速度

6. 动力学

def lagrangian_kinetic_energy(m, v):
    """动能"""
    return 0.5 * m * np.dot(v, v)

def lagrangian_potential_energy(m, g, h):
    """势能"""
    return m * g * h

def lagrangian(T, V):
    """拉格朗日量"""
    return T - V

7. 控制理论

class PIDController:
    def __init__(self, Kp, Ki, Kd):
        self.Kp = Kp
        self.Ki = Ki
        self.Kd = Kd
        self.integral = 0
        self.prev_error = 0

    def update(self, error, dt):
        """PID 控制更新"""
        # 比例项
        P = self.Kp * error

        # 积分项
        self.integral += error * dt
        I = self.Ki * self.integral

        # 微分项
        derivative = (error - self.prev_error) / dt
        D = self.Kd * derivative

        # 更新误差
        self.prev_error = error

        # 返回控制输出
        return P + I + D

8. 概率与统计

import numpy as np
from scipy import stats

# 高斯分布
mu = 0      # 均值
sigma = 1   # 标准差

# 概率密度函数
x = np.linspace(-3, 3, 100)
pdf = stats.norm.pdf(x, mu, sigma)

# 采样
samples = np.random.normal(mu, sigma, 1000)

# 贝叶斯更新
def bayesian_update(prior, likelihood, evidence):
    """贝叶斯更新"""
    return (likelihood * prior) / evidence

学习建议

1. 循序渐进

基础 → 进阶 → 应用
  │       │       │
  ▼       ▼       ▼
线性代数 → 运动学 → 控制
微积分 → 动力学 → 优化
几何学 → SLAM → 导航

2. 理论与实践结合

# 理论学习
# 1. 理解数学公式
# 2. 推导证明
# 3. 理解物理意义

# 实践应用
# 1. Python 实现
# 2. ROS 集成
# 3. 仿真验证

3. 可视化理解

import matplotlib.pyplot as plt

# 绘制旋转
theta = np.linspace(0, 2*np.pi, 100)
x = np.cos(theta)
y = np.sin(theta)

plt.figure(figsize=(8, 8))
plt.plot(x, y, 'b-', linewidth=2)
plt.plot([0, 1], [0, 0], 'r-', linewidth=2, label='Original')
plt.plot([0, np.cos(np.pi/4)], [0, np.sin(np.pi/4)], 'g-', 
         linewidth=2, label='Rotated 45°')
plt.axis('equal')
plt.legend()
plt.grid(True)
plt.title('Rotation Visualization')
plt.show()

参考资源

教材

  1. Linear Algebra and Its Applications - Gilbert Strang
  2. Introduction to Robotics - John J. Craig
  3. Robotics: Modelling, Planning and Control - Bruno Siciliano
  4. Modern Control Systems - Richard C. Dorf

在线课程

  1. MIT 18.06 Linear Algebra
  2. Stanford CS229 Machine Learning
  3. Coursera Robotics Specialization

工具

  1. NumPy - 数值计算
  2. SciPy - 科学计算
  3. Matplotlib - 可视化
  4. SymPy - 符号计算

下一步

选择一个主题开始学习:

线性代数 微积分 几何学 概率统计


← 返回首页