赞
踩
从节学习开始,我将记录学习一下一门很庞大的学科-机器人运动学,主要有运动学和动学、系统结构、感知传感技术、运动规划技术、决策技术等。我们后期需要对机器人进行建模与仿真,所以再此之前学习一下运动学还是很有必要的。好的,话不多说,马上开始!
前10小节内容可以订阅往期博客。
机器人运动学研究机器人的位姿关系,主要包含正向运动学和逆向运动学两类。
正向运动学即给定机器人各关节变量,计算机器人末端的位置姿态
逆向运动学即已知机器人末端的位置姿态,反求机器人的关节变量;
正运动学:已知每个关节的角度,求末端的位姿
逆运动学:已知末端姿态,求每一个关节的角度
两轮差速模型指机器人底盘由两个驱动轮和若干支撑轮构成的底盘模型,如图所示:
两轮差速模型通过两个驱动轮可以通过不同转速和转向,使得机器人的达到某个特定的角速度和线速度。
正运动学:已知两个轮子的速度,求整车的角速度(弧度/秒)和线速度(米/秒)
逆运动学:已知目标角速度和线速度,求两个轮子的转速
当我们知道了两个轮子之间的相对位置,同时知道了每一时刻机器人的角速度和线速度,那我们就可以获取机器人的当前角度和位置
影响机器人当前角度的因素只有一个,就是角速度。
某一时刻机器人转动的角度 = 这一时刻机器人的角速度*这一时刻时长
假如我们认定初始时刻机器人的角度为0,通过对机器人转动角度角度进行累加,即可获得机器人的当前角度。
上述过程其实就是对角速度进行积分得到角度。
通过对角速度积分,我们得到了角度。
机器人某一时刻自身方向上的前进速度可以分解为里程计坐标系中x轴和y轴方向上的速度。
从图中可以看出:
Vx=V*cos
Vy=V*sin
得到了x和y方向上的速度,乘上该速度对应的某一时刻经过的时间,即可得到这一时刻在x轴和y轴方向上的位移,对位移进行累加即可得到里程计中的x和y。
TF即变换
的英文单词TransForm
的缩写。所以ROS
和ROS2
中的TF
就是指和坐标变换相关的工具。
我们先使用TF2的相关工具,解决上一节的手眼坐标转换问题,直观的感受一下TF2的强大。
要想让TF帮我们完成坐标变换,我们就需要告诉它坐标和坐标之间的关系。
拿上面的手眼系统来说,我们要想获取到相机的基坐标系{B}和工具{P}之间的关系,只需要将机械臂和相机、相机和工具之间的关系告诉TF即可。
可以使用tf的坐标广播工具进行广播坐标关系,广播时需要三个数据:
在终端中输入:
ros2 run tf2_ros static_transform_publisher
按enter
键,可以看到
这里采用的是欧拉形式,绕x轴旋转采用欧拉角中的滚转角roll来描述,注意角度单位采用弧度制。
发布B到C的位姿
比如针对上面的手眼转换,广播机械臂坐标系{B}和相机坐标系{C}之间的关系。
父坐标系的名字就是B,子坐标系的名字是C,父子之间的平移关系是0 0 3
,旋转关系是绕x轴旋转180度。
在ROS2中可以使用下面的指令发布变换,打开终端,输入下面的指令:
发布C到P的位姿
接着我们发布坐标系{C}到坐标系{T}的位姿
再打开一个新的终端,输入下面的命令:
监听/获取TF关系
发布之后,接着我们就把坐标系之间的关系打印出来,只要坐标系之间是有连接的,我们就可以使用TF求出来,使用下面的指令就可以得到机械臂基坐标系{B}和工具坐标系{P}之间的关系。
打开终端,输入命令:
可以看到终端中不断输出B和C之间的平移和旋转,平移采用的是xyz,基本正确,y和z的微小差异是因为我们发布变换时旋转输入的是3.14并不精确。
至于旋转部分采用的是四元数表示
这个工具需要我们手动安装下
但此时我们可能会遇到一个问题,正常安装完成后,再次打开rqt工具,Plugins
->Visualization
->TF Tree,若
其实这个问题在其他ros版本中也有发生,原因是先前启动过rqt,其缓存中是未安装tf-tree的版本。
可进行如下操作删除缓存
rm ~/.config/ros.org/rqt_gui.ini
尔后重启rqt即可
查看所有的发布者和频率。
view_frames.py
可以生成TF的pdf
此时在该路径就会生成pdf
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。