《动手学机器人学》笔记

目录

0.介绍

原课程来源于b站劉海濤LHT,链接:【《动手学机器人学》开课了】 https://www.bilibili.com/video/BV1CY4y1W7Ry/?share_source=copy_web\&vd_source=338eeada513a018955017f069032f82c

1.概述|空间位置、姿态的描述(3×3)|《动手学机器人学》

1.1正运动学(forward kinematics,简写FK),根据机器人的关节角度,计算末端位姿

1.2逆运动学(inverse kinematics,简写IK),根据末端位姿,反解关节角

1.3

1.4除了空间某点位置还需要确定空间物体方位,用旋转矩阵表示

2.(2)-Robotics Toolbox①(V10.4)

2.1安装教程可以参考这个https://blog.csdn.net/m0_71721954/article/details/145087352。注意:设置路径的时候,到MATLAB\\R2024b\\toolbox这一层,否则容易出现找不到命令。![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1a346eeb91db4f88b6d37c77ad2b666a.png)

2.2 相关命令

matlab 复制代码
% 二维空间姿态
>> SE2(1,2,pi/3)
 

ans = 
    0.5000   -0.8660         1
    0.8660    0.5000         2
         0         0         1
>> trplot(ans)
matlab 复制代码
% 纯平移
>> transl2(1,2)

ans =

     1     0     1
     0     1     2
     0     0     1
% 绕x轴旋转,角度一定要用弧度制
>> rotx(pi/3)

ans =

    1.0000         0         0
         0    0.5000   -0.8660
         0    0.8660    0.5000
% 绕y轴旋转
>> roty(pi/3)

ans =

    0.5000         0    0.8660
         0    1.0000         0
   -0.8660         0    0.5000
% 绕z轴旋转
>> rotz(pi/3)

ans =

    0.5000   -0.8660         0
    0.8660    0.5000         0
         0         0    1.0000
% 齐次
>> trotx(pi/3)

ans =

    1.0000         0         0         0
         0    0.5000   -0.8660         0
         0    0.8660    0.5000         0
         0         0         0    1.0000


>> troty(pi/3)

ans =

    0.5000         0    0.8660         0
         0    1.0000         0         0
   -0.8660         0    0.5000         0
         0         0         0    1.0000

>> trotz(pi/3)

ans =

    0.5000   -0.8660         0         0
    0.8660    0.5000         0         0
         0         0    1.0000         0
         0         0         0    1.0000

>> rotx(pi/3)

ans =

    1.0000         0         0
         0    0.5000   -0.8660
         0    0.8660    0.5000
% 三维轨迹
>> trplot(ans)
% 动画演示(图略)
>> tranimate(ans)

3.齐次坐标与变换矩阵

3.1齐次坐标用 n + 1 n+1 n+1维来代表 n n n维坐标

3.2 引入齐次坐标的目的是,合并矩阵运算中的乘法和加法

3.3 (特别重要)矩阵的左乘和右乘的运动解释是不一样的。对于固定坐标系:变化顺序"从右向左";对于相对坐标系:变化顺序"从左向右"。


说明这个物体在空间里做刚体运动。

4.一般形式的旋转变换矩阵

4.1 通用的旋转变换矩阵:已知旋转轴和旋转角度,得到旋转矩阵

4.2 已知旋转矩阵,得到旋转轴和旋转角度(过程略)

旋转角度 θ = a r c c o s ( . . . ) \theta=arccos(...) θ=arccos(...)

旋转轴

注意:存在多解,等效轴和转角不唯一,一般角度在0度到180度

这题就能解了

4.3 matlab中的函数

matlab 复制代码
% 已知旋转角度和旋转轴,求旋转矩阵
>> angvec2r(pi/3,[1,0,0])

ans =

    1.0000         0         0
         0    0.5000   -0.8660
         0    0.8660    0.5000

>> rotx(pi/3)

ans =

    1.0000         0         0
         0    0.5000   -0.8660
         0    0.8660    0.5000
% 齐次
>> angvec2tr(pi/3,[1,0,0])

ans =

    1.0000         0         0         0
         0    0.5000   -0.8660         0
         0    0.8660    0.5000         0
         0         0         0    1.0000

4.4 练习题

matlab 复制代码
function [f,theta] = resolve_f_theta(T)
    nx = T(1,1); ox = T(1,2); ax = T(1,3);
    ny = T(2,1); oy = T(2,2); ay = T(2,3);
    nz = T(3,1); oz = T(3,2); az = T(3,3);

    theta = acos(0.5*(nx + oy + az - 1));

    if(theta == 0 || theta == 180)
        fprintf("error!");
    else
        fx = (oz - ay)/(2*sin(theta));
        fy = (ax - nz)/(2*sin(theta));
        fz = (ny - ox)/(2*sin(theta));

        f = [fx,fy,fz];
    end
end
matlab 复制代码
>> [f,theta] = resolve_f_theta([0 1 0;0 0 -1;-1 0 0])

f =

    0.5774    0.5774   -0.5774


theta =

    2.0944

>> 2*pi/3

ans =

    2.0944

>> sqrt(3)/3

ans =

    0.5774

5.(轴角法)或(Rodrigues' rotation formula)或(罗德里格旋转公式)或(一般形式的旋转变换矩阵)详细推导证明

5.1 一般形式旋转矩阵公式证明








这个公式的意义,空间中给定任意的向量v,绕着旋转轴和旋转角,得到旋转后的向量v'

matlab 复制代码
>> t=2*pi/3

t =

    2.0944

>> u = [sqrt(3)/3,sqrt(3)/3,-sqrt(3)/3]'

u =

    0.5774
    0.5774
   -0.5774

>> v = [1 2 3]'

v =

     1
     2
     3

>> result = cos(t)*v + (1-cos(t))*dot(u,v)*u+sin(t)*cross(u,v)

result =

    2.0000
   -3.0000
   -1.0000

进一步化简成矩阵形式




5.2 齐次坐标变换

6.空间位姿表示方法-----RPY角

6.1 RPY角

matlab 复制代码
syms alpha beta gamma T1 T2 T3 RPY

T1 = [cos(alpha) -sin(alpha) 0;sin(alpha) cos(alpha) 0; 0 0 1];

T2 = [cos(beta) 0 sin(beta);0 1 0;-sin(beta) 0 cos(beta)];

T3 = [1 0 0;0 cos(gamma) -sin(gamma); 0 sin(gamma) cos(gamma)];

RPY = T1*T2*T3;

display(RPY);


matlab 复制代码
% 给RPY角输出旋转矩阵
>> rpy2r(pi/6,pi/3,pi/4)

ans =

    0.3536   -0.3062    0.8839
    0.3536    0.9186    0.1768
   -0.8660    0.2500    0.4330
% RPY角分别对应绕x,y,z轴旋转
>> rotz(pi/4)*roty(pi/3)*rotx(pi/6)

ans =

    0.3536   -0.3062    0.8839
    0.3536    0.9186    0.1768
   -0.8660    0.2500    0.4330
 
 >> rpy2tr(pi/6,pi/3,pi/4)

ans =

    0.3536   -0.3062    0.8839         0
    0.3536    0.9186    0.1768         0
   -0.8660    0.2500    0.4330         0
         0         0         0    1.0000
% 已知旋转矩阵得到RPY角
>> tr2rpy(ans)

ans =

    0.5236    1.0472    0.7854

>> pi/6

ans =

    0.5236

>> pi/3

ans =

    1.0472

>> pi/4

ans =

    0.7854
    
>> atan2(1,2)

ans =

    0.4636
% 转化为角度
>> atan2d(1,2)

ans =

   26.5651

6.2

matlab 复制代码
>> T =[0.527 -0.574 0.628 3;0.369 0.819 0.439 2;-0.766 0 0.643 -4;0 0 0 1]

T =

    0.5270   -0.5740    0.6280    3.0000
    0.3690    0.8190    0.4390    2.0000
   -0.7660         0    0.6430   -4.0000
         0         0         0    1.0000

>> rpy=tr2rpy(T);
>> display(rpy)

rpy =

         0    0.8725    0.6109

>> rpy2r(rpy)

ans =

    0.5267   -0.5736    0.6274
    0.3688    0.8192    0.4393
   -0.7659         0    0.6429

7.欧拉角 | 空间位姿表示方法 |《动手学机器人学》

7.1 欧拉角





matlab 复制代码
>> [alpha, beta, gamma] = resolve_zyz_theta([0.527 -0.574 0.628;0.369 0.819 0.439;-0.766 0 0.643])

alpha =

    0.6101


beta =

    0.8725


gamma =

     0
% 欧拉角变旋转矩阵
>> eul2r([alpha, beta, gamma])

ans =

    0.5269   -0.5729    0.6277
    0.3684    0.8196    0.4388
   -0.7659         0    0.6429

7.2 matlab常用函数

matlab 复制代码
>> eul2r([pi/6 pi/4 pi/3])

ans =

   -0.1268   -0.7803    0.6124
    0.9268    0.1268    0.3536
   -0.3536    0.6124    0.7071

>> eul2tr([pi/6 pi/4 pi/3])

ans =

   -0.1268   -0.7803    0.6124         0
    0.9268    0.1268    0.3536         0
   -0.3536    0.6124    0.7071         0
         0         0         0    1.0000
% tr2eul(ans,'deg')能直接输出角度
>> tr2eul(ans)

ans =

    0.5236    0.7854    1.0472

>> ans*180/pi

ans =

   30.0000   45.0000   60.0000

8.标准DH参数详解+案例分析【1】

8.1 DH参数法描述串联式连杆和关节的系统方法

DH参数法式描述串联式连杆和关节的系统方法。

8.2 有两种DH参数法:标准DH和改进的DH参数

改进的DH参数法坐标系{i}建立在{i}关节的轴线上,而不是标准DH方法将坐标系{i}建立在{i+1}关节的轴线上







因为matlab工具箱theta默认是0度

PQArt软件也可以进行机器人仿真

相关推荐
qqqweiweiqq3 小时前
Resource not found: roslaunchROS path [0]=/opt/ros/noetic/share/ros
机器人
编程之力15 小时前
宇树机器人G1 SDK实战和交付
机器人·宇树科技
【云轩】17 小时前
【零基础实战】用STM32玩转DRV8313电机驱动:从原理到无人机/机器人控制
stm32·机器人·无人机
shichaog19 小时前
腿足机器人之十- SLAM地图如何用于运动控制
机器人
深圳市青牛科技实业有限公司 小芋圆20 小时前
芯谷D2761:为扬声器保护而生的音频限幅器
人工智能·科技·单片机·嵌入式硬件·机器人·音视频
【云轩】1 天前
从硬件工程师视角解析宇树机器人:四足机器人的核心设计与技术挑战
机器人
Perishell1 天前
无人机避障——感知篇(采用Livox-Mid360激光雷达获取点云数据显示)
linux·机器人·动态规划·无人机·slam
zy2152151 天前
钉钉机器人开发实战:快速实现消息通知自动化
机器人·自动化·钉钉
yoloGina2 天前
AI 机器人外呼 —— 开启智能外呼新纪元
人工智能·机器人