机器人数学基础
欢迎学习机器人数学基础!本模块将系统地讲解机器人学所需的所有数学知识,从基础的线性代数到高级的优化控制理论。
为什么需要数学?
┌─────────────────────────────────────────────────────────────┐
│ 机器人学中的数学应用 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 运动学 │ │ 动力学 │ │ 控制 │ │
│ │ (位置/姿态)│ │ (力/力矩) │ │ (稳定性) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 线性代数 │ │ 微积分 │ │ 优化理论 │ │
│ │ (矩阵运算) │ │ (导数/积分)│ │ (最优控制) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 几何学 │ │ 概率统计 │ │ 数值计算 │ │
│ │ (空间变换) │ │ (不确定性) │ │ (算法实现) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
学习路线图
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 ()
参考资源
教材
Linear Algebra and Its Applications - Gilbert Strang
Introduction to Robotics - John J. Craig
Robotics: Modelling, Planning and Control - Bruno Siciliano
Modern Control Systems - Richard C. Dorf
在线课程
MIT 18.06 Linear Algebra
Stanford CS229 Machine Learning
Coursera Robotics Specialization
工具
NumPy - 数值计算
SciPy - 科学计算
Matplotlib - 可视化
SymPy - 符号计算
下一步
选择一个主题开始学习:
线性代数
微积分
几何学
概率统计
← 返回首页