💫你好,我是辰chen,本文旨在准备考研复试或就业
💫本文内容是我为复试准备的第二个项目
💫欢迎大家的关注,我的博客主要关注于考研408以及AIoT的内容
🌟 预置知识:基本Python语法,基本linux命令行使用
以下的几个专栏是本人比较满意的专栏(大部分专栏仍在持续更新),欢迎大家的关注:
💥ACM-ICPC算法汇总【基础篇】
💥ACM-ICPC算法汇总【提高篇】
💥AIoT(人工智能+物联网)
💥考研
💥CSP认证考试历年题解
把坐标在坐标系之间转换(把变换应用到一个坐标)
x
′
=
x
c
o
s
θ
?
y
s
i
n
θ
x'=xcos\theta-ysin\theta
x′=xcosθ?ysinθ
y
′
=
x
s
i
n
θ
+
y
c
o
s
θ
y'=xsin\theta+ycos\theta
y′=xsinθ+ycosθ
将上述表达式写成矩阵乘积的形式:
[ x ′ y ′ ] = [ c o s θ ? s i n θ s i n θ c o s θ ] [ x y ] \left[ \begin{matrix} x' \\ y' \\ \end{matrix} \right] = \left[ \begin{matrix} cos\theta & -sin\theta \\ sin\theta &cos\theta \\ \end{matrix} \right] \left[ \begin{matrix} x \\ y \\ \end{matrix} \right] [x′y′?]=[cosθsinθ??sinθcosθ?][xy?]
上图中,点逆时针旋转 θ \theta θ,等价于坐标系顺时针旋转 θ \theta θ,假设原坐标系为 A,坐标系顺时针旋转 θ \theta θ 后得到坐标系 B
定义符号:
只考虑旋转,则有 P m B = R A B × P m A P_m^B=R_A^B×P_m^A PmB?=RAB?×PmA?
[
x
′
y
′
]
=
[
x
y
]
+
[
t
x
t
y
]
\left[ \begin{matrix} x' \\ y' \\ \end{matrix} \right] = \left[ \begin{matrix} x \\ y \\ \end{matrix} \right] + \left[ \begin{matrix} t_x \\ t_y \\ \end{matrix} \right]
[x′y′?]=[xy?]+[tx?ty??]
定义符号:
只考虑平移,则有 P m B = P m A + P A o r g B P_m^B=P_m^A+P_{Aorg}^B PmB?=PmA?+PAorgB?
[ x A y A z A ] = [ cos ? ? i B , i A ? cos ? ? j B , i A ? cos ? ? k B , i A ? cos ? ? i B , j A ? cos ? ? j B , j A ? cos ? ? k B , j A ? cos ? ? i B , k A ? cos ? ? j B , k A ? cos ? ? k B , k A ? ] [ x B y B z B ] = R [ x B y B z B ] \begin{bmatrix} x_A \\ y_A \\ z_A \end{bmatrix}= \begin{bmatrix} \cos \langle i_B, i_A \rangle & \cos \langle j_B, i_A \rangle & \cos \langle k_B, i_A \rangle \\ \cos \langle i_B, j_A \rangle & \cos \langle j_B, j_A \rangle & \cos \langle k_B, j_A \rangle \\ \cos \langle i_B, k_A \rangle & \cos \langle j_B, k_A \rangle & \cos \langle k_B, k_A \rangle \end{bmatrix} \begin{bmatrix} x_B \\ y_B \\ z_B \end{bmatrix} = R \begin{bmatrix} x_B \\ y_B \\ z_B \end{bmatrix} ?xA?yA?zA?? ?= ?cos?iB?,iA??cos?iB?,jA??cos?iB?,kA???cos?jB?,iA??cos?jB?,jA??cos?jB?,kA???cos?kB?,iA??cos?kB?,jA??cos?kB?,kA??? ? ?xB?yB?zB?? ?=R ?xB?yB?zB?? ?
推导过程无需掌握,推导过程可见博客:3. 机器人正运动学—坐标系及其变换
平移矩阵与二维类似。
一个完整的变换包括平移和旋转: P m B = R A B × P m A + P A o r g B P_m^B=R_A^B×P_m^A+P_{Aorg}^B PmB?=RAB?×PmA?+PAorgB?
但这种描述不够紧凑,面对多重连续变换时,会变得很臃肿:
P
m
C
=
R
B
C
×
(
R
A
B
×
P
m
A
+
P
A
o
r
g
B
)
+
P
B
o
r
g
C
P_m^C=R_B^C×(R_A^B×P_m^A+P_{Aorg}^B)+P_{Borg}^C
PmC?=RBC?×(RAB?×PmA?+PAorgB?)+PBorgC?
Q:有没有方法仅使用一次矩阵乘法,就同时完成平移和旋转?
A:有,使用齐次坐标
用 n+1 维向量来表示 n 维空间的点
[
x
y
]
→
[
x
y
1
]
\left[ \begin{matrix} x \\ y \\ \end{matrix} \right] \rightarrow \left[ \begin{matrix} x \\ y \\ 1 \\ \end{matrix} \right]
[xy?]→
?xy1?
?
在原有旋转矩阵的基础上扩展一维用于容纳平移关系
[ a ′ 1 ] = [ R t 0 T 1 ] [ a 1 ] ? T [ a 1 ] \begin{bmatrix} a' \\ 1 \end{bmatrix}= \begin{bmatrix} R & t \\ 0^T & 1 \end{bmatrix} \begin{bmatrix} a \\ 1 \end{bmatrix} \triangleq T \begin{bmatrix} a \\ 1 \end{bmatrix} [a′1?]=[R0T?t1?][a1?]?T[a1?]
[ P M A 1 ] = T B A ? [ P M B 1 ] \begin{bmatrix} P^A_M \\ 1 \end{bmatrix}= T_B^{A} \cdot \begin{bmatrix} P^B_M \\ 1 \end{bmatrix} [PMA?1?]=TBA??[PMB?1?]
T B A = [ R B A P B o r g A 0 1 ] T_B^{A} = \begin{bmatrix} R_B^A & P_{Borg}^A \\ 0 & 1 \end{bmatrix} TBA?=[RBA?0?PBorgA?1?]
定义符号
使用变换矩阵同时进行旋转和平移
P
m
B
=
T
A
B
×
P
m
A
P_m^B=T_A^B×P_m^A
PmB?=TAB?×PmA?
可以连续变换:
P
m
C
=
T
B
C
×
T
A
B
×
P
m
A
P_m^C=T_B^C×T_A^B×P_m^A
PmC?=TBC?×TAB?×PmA?
参考视频辅助理解(视频中的缩放矩阵用不到,无需理解):无所不能的矩阵 - 三维图形变换
* 扩展内容,了解其存在和作用即可
[Roll, Pitch, Yaw]
[x, y, z, w]
旋转矩阵、欧拉角、四元数之间可以进行转换,转换过程涉及到大量数学细节,不需要掌握。编程中,有现成的数学库实现了转换功能,直接使用即可。
上述所有内容出处如下,博主在此基础上仅为添加个人理解:
本项目为北大团队出品【项目三:深度学习&仿真机器人 - 丘丘老师】原创(部分代码为开源代码)。课程团队:B站ID【M学长的考研top帮】UID【3546580235848566】复试项目班QQ大群:885884619,负责人QQ:674799