目录

  • 1 智能移动机器人-基础篇
    • 1.1 第一讲 坐标变换(5课时)
    • 1.2 第二讲 ROS基本概念(3课时)
      • 1.2.1 实训
    • 1.3 第三讲-编写简单的订阅者和发布者节点(4课时)
      • 1.3.1 实训
      • 1.3.2 实训2
    • 1.4 第四讲 ROS服务及编程(2课时)
    • 1.5 第五讲 ROS坐标变换工具TF(4课时))
    • 1.6 第六讲 ROS参数及应用(2课时))
    • 1.7 第七讲 运动学模型及航迹推算(4课时)
      • 1.7.1 实训1.7.1
    • 1.8 第八讲 URDF机器人建模及应用(4课时))
      • 1.8.1 实训1.8.1
    • 1.9 第九讲 QT-ROS交互界面应用开发(4课时)
  • 2 智能移动机器人-提高篇
    • 2.1 第一讲 栅格地图及应用(2课时)
    • 2.2 第二讲 局部路径规划及避障(6课时)
    • 2.3 第三讲 运动学模型的概率表示(2课时)
    • 2.4 spark实验5-激光雷达信息处理-标定
    • 2.5 第四讲 激光雷达及其测量模型(4课时)
    • 2.6 第五讲 蒙特卡洛定位(MCL)(4课时)
    • 2.7 第六讲 并发定位与建图(SLAM)(4课时)
    • 2.8 第七讲 自主导航(6课时)
    • 2.9 第八讲 Librviz可视化应用开发(4课时)(4课时)
  • 3 实训篇-SparkT移动机器人(室内)
    • 3.1 SparkT移动机器人介绍
    • 3.2 演示视频
    • 3.3 相关工具及资料下载
    • 3.4 spark实验1-控制spark移动
    • 3.5 spark实验2-编写节点控制spark移动
      • 3.5.1 python版本
    • 3.6 spark实验3-并发定位与建图
    • 3.7 spark实验4-机器人定位与导航
    • 3.8 spark实验6-基于激光雷达的行人检测与跟踪
    • 3.9 spark实验7-机械臂抓取
    • 3.10 2023年夺宝奇兵大赛培训资料
    • 3.11 2024年夺宝奇兵半自动赛培训
      • 3.11.1 半自动赛程序设计方法2024年7月3日
    • 3.12 2024年夺宝奇兵自动任务赛培训
      • 3.12.1 代码框架(noetic版本)
      • 3.12.2 代码框架(kinetic版本)
      • 3.12.3 自动赛讲解视频2024年6月29日
      • 3.12.4 ROS下QT界面开发2024年6月30日
      • 3.12.5 目标识别与机械臂抓取7月1日
      • 3.12.6 自动赛思路讲解(2024,.7.3)结课
      • 3.12.7 基于大模型的辅助开发(python)
        • 3.12.7.1 案例1:激光雷达数据订阅与发布
        • 3.12.7.2 案例2:激光雷达与地图匹配程度计算
        • 3.12.7.3 案例3:基于Web的机器人远程控制
        • 3.12.7.4 案例4:ROS的QT界面应用开发
        • 3.12.7.5 案例5:ROS下语音识别及QT界面
        • 3.12.7.6 案例6:从摄像头获取图像数据并进行二维码识别
        • 3.12.7.7 案例7:Gazebo仿真
        • 3.12.7.8 案例8:基于RGBD的行人识别与跟踪
    • 3.13 spark实验-基于teb-local-planner的导航
    • 3.14 Spark实验-利用rf2o提高定位精度
  • 4 室外自主导航车(AGV)-实训篇
    • 4.1 AGV本体介绍
    • 4.2 实训项目1-AGV建模(URDF)
    • 4.3 实训项目2-AGV运动学模型及航迹推算
    • 4.4 实训项目3-AGV运动控制
    • 4.5 实训项目4-基于GPS的点对点导航
    • 4.6 实训项目5-基于GPS的循迹
    • 4.7 实训项目6-基于三维激光雷达(点云)的障碍物检测与避障
    • 4.8 实训项目7-基于深度相机(RGBD)的目标识别与跟踪
  • 5 智能机器人技术实践上课录屏
    • 5.1 实训项目1-2024年9月3日
第一讲 坐标变换(5课时)

2020-03-10上传

(勘误:P18,页面中的sin(π/3)应该为sin(π/6),感谢陈林同学的指正)

(注:视频中课件文字不够清晰,请结合上面的pdf文件观看)

视频1:平移变换与简单的旋转变换

(视频1已发现的BUG:1、如果手机播放没有声音,请带上耳机;或者请在电脑上观看;2、"tranform"应为“transform”,感谢段韬同学的指正)


视频2:旋转变换、齐次变换(2020-03-08)35分57秒

视频3:方向的其它表示方法


(视频3已发现BUG:1分25秒处,应为gamma弧度(误读成了gamma度))


视频4:基于Eigen3的坐标变换编程

示例程序:transform_tut.cpp

(向量点乘、叉乘、矩阵乘法、转置、逆矩阵、坐标系、坐标表示、变换、齐次变换矩阵求逆)

电子科技大学中山学院2020春季课程

第二周直播(部分对应 第二周答疑.pdf)2020-3-19


1、坐标系

    ROS采用右手坐标系,如图1所示。由于本课程主要基于ROS介绍移动机器人自主导航,所以按照ROS的惯例采用右手坐标系。

    在右手坐标系中,食指指向x轴的正方向,中指指向y轴的正方向,拇指指向z轴的正方向。

    绕某个坐标轴的旋转方向根据如图2所示的右手法则定义:如果让右手的拇指沿某一坐标轴的正方向,那么其它四个手指旋绕的方向为旋转的正方向。

    例如,对于移动机器人而言,x轴正方向指向机器人前进的方向,y轴的正方向指向(前进方向的)左边,z轴的正方向指向上方。围绕z轴的正方向的旋转是逆时针的。


      

                         图1 右手坐标系                                                图2  右手法则


2、坐标与位姿

    坐标给出某一点在坐标系中的位置,位姿包含位置和方向(机器人的朝向)。参照ROS的惯例,位置和长度的单位采用米(m),时间采用秒(s),线速度采用(m/s),角度采用弧度(rad),角速度采用(rad/s)。

    位姿(pose):位姿包含位置(position)和方向(orientation)(如机器人或某个部件的朝向)。
    位置:通过坐标表示。
    方向:通过旋转矩阵、四元数等方式表示(将在后面介绍)

    坐标:在三维空间中,坐标利用一个3x1的列向量表示。坐标总是相对于某个坐标系,当存在多个坐标系时,我们通过在点的左上角书写坐标系的名称来表示,如图3。


                                                         图3 坐标及其表示



3、坐标变换   

平移变换:

平移(Translation):设某点P在坐标系{B}中的坐标表示为BP。坐标系{B}与坐标系{A}具有相同的方向,即{B}相对于{A}只有平移,其平移变换通过向量表示,是{B}的原点在坐标系A中的坐标。

平移变换可以通过向量的加法实现,如图4所示,
=+


                             图4 平移变换


旋转(Rotation):可以通过旋转矩阵ARB来表示坐标系{B}相对于坐标系{A}的方向。
图5显示的坐标系{B}是这样获得的:最初{B}与{A}重合,然后{B}绕{A}的Z轴旋转π/6。
旋转的右手法则:如果让右手的拇指沿某一坐标轴的正方向,那么其它四个手指旋绕的方向为旋转的正方向。

旋转矩阵ARB表示坐标系B相对与坐标系A的旋转。


                                图5   旋转矩阵示例

 

该例显示:旋转矩阵ARB 的列向量是坐标系B的X, Y, Z 坐标轴的单位向量在坐标系A中的表示,这一结论将在后面予以证明。


可以看出,该矩阵的第一个列向量(cos(π/6) sin(π/6) 0)TT正是B坐标系在X方向单位向量在A中的表示。

在获得坐标系B相对于坐标系A的旋转矩阵之后,可以通过以下公式将坐标系B中某一点的坐标变换到坐标系A中。

Ap=ARB *Bp

例如:设Bp=(1  0   0)T

Ap=ARB *Bp=(cos(π/6) sin(π/6) 0)T

设坐标系{B}与坐标系{A}的原点相同,如图6,某点P在坐标系{A}中可以表示为:

P=(XA Y ZA)AP,其中XA,YA ,ZA分别为坐标系{A}的X,Y,Z轴的单位向量

P在坐标系{B}中可以表示为:

P=(XB Y ZB)BP,因此:

(XA Y ZA)AP= (XB Y ZB)BP

(XA Y ZA)T(XA Y ZA)AP=(XA Y ZA)T (XB Y ZB)BP,注意到(XA Y ZA)T(XA Y ZA)为单位矩阵,因而有

Ap=ARB Bp

其中:



                        图6 旋转矩阵

旋转矩阵有以下特点:

旋转矩阵是正交矩阵(Orthogonal Matrix)(就是说:其逆矩阵为其转置矩阵)
其行列式的值为1
每个列向量(及行向量)都是单位向量
三个列向量相互正交
三个行向量相互正交

坐标变换:若坐标系{B}相对与坐标系{A}既有旋转又有平移,可以引入坐标系{B'},{B'}的原点与{B}的原点重合,{B'}的方向与{A}的方向一致。
有:B'P=B'RBBP,        AP=B'P+AOB'
由于OB'=OB,且  B'RB=ARB,所以
坐标变换可以通过以下公式实现:
AP=ARBBP+AOB

注意到APBP是同一个点P在坐标系{A}和{B}的坐标(并不是两个不同的点,只是一个点在不同坐标系下的描述)

齐次变换(homogeneous transform):为了把包含旋转和平移两类变换表示成矩阵形式,通常采用4X4的变换矩阵ATB,同时把3X1坐标扩展为4X1的向量:


这样,变换可以表示为:


变换运算(transformation operators):齐次变换不仅可以用于计算同一个点在不同坐标系中的坐标,还可以作为一个运算,此时,同一坐标系下的点P1经过齐次变换T后,产生一个新的点P2:


总结:齐次变换矩阵有三个作用:(1)可以表示坐标系之间的相对位姿,(2)用于坐标变换,(3)作为一种运算符

齐次变换给出了一种紧凑的书写方法,把旋转和平移变换用统一的矩阵形式表示,可以很好地表示多个坐标系之间的变换关系。但在实际的计算中,还是会采用旋转加平移的方法(以减少多余的乘以0的计算)。



参考:

[1]https://github.com/cse481sp17/cse481c/wiki/Lab-14%3A-Odometry-and-rotations

[2]https://cloud.githubusercontent.com/assets/1175286/25162364/f754fce2-2476-11e7-9b78-8c7699c3a22c.png

[3]《计算机视觉:一种现代方法(中文版)》,Computer Vision: A Modern Approach. David A. Forsyth, Jean Ponce 著. 林学訚,王宏译


[4]《视觉SLAM十四讲》从理论到实践,高翔、张涛著

[5]Introduction to Robotics:Mechanics and control. Third Edition. John J. Craig (Chapter 2 Spatial descriptions and transformations(p41-)

[6]Graphics Gems IV. Edited by Paul S. Heckbert. III.5 Euler Angle Conversion(p222-)

[7]http://eigen.tuxfamily.org/dox/group__TutorialGeometry.html