# 附錄3 三維空間剛體運動
## 四元數
$$\quad$$旋轉矩陣用9個量來描述3自由度的旋轉,具有冗余性;歐拉角雖然用3個量來描述3自由度的旋轉,但是具有萬向鎖的問題,因此我們選擇用**四元數,**(ROS當中描述轉向的都是采用的四元數)。一個四元數擁有一個實部和三個虛部組成。
$$\qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad q=w+xi=yj+zk$$
$$\quad$$三個虛部滿足以下關系
$$\qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \begin{cases}
i^2=j^2=k^2=-1 \\
ij=k,ji=-k\\
jk=i,kj=-i\\
ki=j,jk=-j\\
\end{cases} $$
$$\quad$$寫成矩陣的樣子就是$$q=\begin{bmatrix} w,x,y,z\end{bmatrix}^T$$,其中$$\begin{vmatrix} q\end{vmatrix}^2=w^2=x^2+y^2+z^2=1$$,從歐拉角到四元數的公式:
$$\qquad \qquad q=\begin{bmatrix}
w\\x\\y\\z
\end{bmatrix}=\begin{bmatrix}
cos(roll/2)cos(pitch/2)cos(yaw/2)+sin(roll/2)sin(pitch/2)sin(yaw/2)\\sin(roll/2)cos(pitch/2)cos(yaw/2)-cos(roll/2)sin(pitch/2)sin(yaw/2)\\cos(roll/2)sin(pitch/2)cos(yaw/2)+sin(roll/2)cos(pitch/2)sin(yaw/2)\\cos(roll/2)cos(pitch/2)sin(yaw/2)-sin(roll/2)sin(pitch/2)cos(yaw/2)
\end{bmatrix}$$
$$\quad$$從四元數轉化到歐拉角公式
$$\qquad \qquad \qquad \qquad \qquad \qquad \begin{bmatrix}
roll\\pitch\\yaw
\end{bmatrix}=\begin{bmatrix}
atan2(2(wx+yz),1-2(x^2+y^2))\\
arcsin(2(wy-zx))\\atan2(2(wz+xy),1-2(y^2+z^2))
\end{bmatrix}$$
- 前言
- 第一章 ROS簡介
- 機器人時代的到來
- ROS發展歷程
- 什么是ROS
- 安裝ROS
- 安裝ROS-Academy-for-Beginners教學包
- 二進制與源碼包
- 安裝RoboWare Studio
- 單元測試一
- 第二章 ROS文件系統
- Catkin編譯系統
- Catkin工作空間
- Package軟件包
- CMakeLists.txt
- package.xml
- Metapacakge軟件元包
- 其他常見文件類型
- 單元測試二
- 第三章 ROS通信架構(一)
- Node & Master
- Launch文件
- Topic
- Msg
- 常見msg類型
- 單元測試三
- 第四章 ROS通信架構(二)
- Service
- Srv
- Parameter server
- Action
- 常見srv類型
- 常見action類型
- 單元測試四
- 第五章 常用工具
- Gazebo
- RViz
- Rqt
- Rosbag
- Rosbridge
- moveit!
- 單元測試五
- 第六章 roscpp
- Client Library與roscpp
- 節點初始、關閉與NodeHandle
- Topic in roscpp
- Service in roscpp
- Param in roscpp
- 時鐘
- 日志與異常
- 第七章 rospy
- Rospy與主要接口
- Topic in rospy
- Service in rospy
- Param與Time
- 第八章 TF與URDF
- 認識TF
- TF消息
- tf in c++
- tf in python
- 統一機器人描述格式
- 附錄:TF數學基礎
- 三維空間剛體運動---旋轉矩陣
- 三維空間剛體運動---歐拉角
- 三維空間剛體運動---四元數
- 第九章 SLAM
- 地圖
- Gmapping
- Karto
- Hector
- 第十章 Navigation
- Navigation Stack
- move_base
- costmap
- Map_server & Amcl
- 附錄:Navigation工具包說明
- amcl
- local_base_planner
- carrot_planner
- clear_costmap_recovery
- costmap_2d
- dwa_local_planner
- fake_localization
- global_planner
- map_server
- move_base_msg
- move_base
- move_slow_and_clear
- navfn
- nav_core
- robot_pose_ekf
- rotate_recovery