有口碑的南通网站建设,企业做定制网站的好处,用阳寿做交易的网站,山西威力网站建设推荐实例9#xff1a;四足机器人正向运动学单腿可视化
实验目的
通过动手实践#xff0c;搭建mini pupper四足机器人的腿部#xff0c;掌握机器人单腿结构。通过理论学习#xff0c;熟悉几何法、旋转矩阵法在运动学正解#xff08;FK#xff09;中的用处。通过编程实践四足机器人正向运动学单腿可视化
实验目的
通过动手实践搭建mini pupper四足机器人的腿部掌握机器人单腿结构。通过理论学习熟悉几何法、旋转矩阵法在运动学正解FK中的用处。通过编程实践熟悉可视化简化机器人单腿的方法。
实验要求
通过Python编程在简化的mini pupper平面二连杆模型内让用户输入关节角根据关节角及关节的基本信息计算出每个关节相对于基坐标系的坐标并将其可视化输出。
实验知识
1.什么是正向运动学 Forward Kinematics
在mini pupper的实际运动操作中需要考虑计算小腿末端相对身体基座标系位置和姿态关系的静态几何问题。简单来说就是给定一组关节角的值计算小腿末端坐标系相对于基坐标系的位姿。 正向运动学探究的问题可以看做由关节空间Joint Space θ1,θ2,⋅⋅⋅⋅,θn\theta_1,\theta_2,····,\theta_nθ1,θ2,⋅⋅⋅⋅,θn描述到 笛卡尔空间Cartesian Space WorldP^{World}PWorldP 描述的位置表示。 探究这种位置的表示关系就是正向运动学对于机器人来说就是以操作臂的关节变量为自变量描述操作臂末端执行器的位姿与基坐标系之间的函数关系。
2.怎么描述机器人的一条腿
既然要考虑计算mini pupper实际运动中小腿末端相对身体基座标系位置和姿态关系的计算就应该有对应的定性和定量的描述及表示来使得计算能够实现。 在机器人学中操作臂由连杆link组成将连杆视作刚体相邻连杆由关节joint连接关节可以相对 转动revolute 或者 移动prismatic转动的轴被称为Axis。 操作臂的这种描述对应到人体上可以看作简化的人类的手臂“大臂”就是一个连杆通过“肘关节”这个关节和另一个连杆“小臂”相连mini pupper也是相同的道理。
关节的转动和移动引出了两个数学量对于转动关节相邻杆件的相对角度变化被称为关节角而对于移动关节相邻杆件之间的相对位移变化被称为关节偏移量。
对于操作臂来说自由度的数量是具有独立的位置变量的数目常见的工业机器人大都是开式的运动链每个关节位置由唯一变量来定义因此关节的数目常常等于自由度的数量。
操作臂的末端被称为末端执行器比如夹具、焊枪等通常用设置在末端执行器上的工具坐标系Frame_Tool与操作臂的固定底座的参考基坐标系Frame_Base的相对关系来描述操作臂的位置与姿态。
3.怎么描述腿间部件的关系
为了描述相邻连杆之间的关系引入了4个变量对连杆的空间关系进行描述。
名称符号含义注释连杆长度ai−1a_{i-1}ai−1两个相邻关节轴之间公垂线的长度连杆长度是沿着X^i−1\hat X_{i-1}X^i−1方向Z^i−1\hat Z_{i-1}Z^i−1和Z^i\hat Z_{i}Z^i之间公垂线的长度。因为ai−1a_{i-1}ai−1是距离所以始终有ai−1≥0a_{i-1}\geq0ai−1≥0。连杆扭转角αi−1\alpha_{i-1}αi−1沿着ai−1a_{i-1}ai−1方向的投影平面中两关节轴线的夹角连杆扭转角是沿着X^i−1\hat X_{i-1}X^i−1方向看去所形成的的二维平面内Z^i−1\hat Z_{i-1}Z^i−1和Z^i\hat Z_{i}Z^i的夹角按照右手法从Z^i−1\hat Z_{i-1}Z^i−1扭向Z^i\hat Z_{i}Z^i取正负。连杆偏距did_{i}di沿两个相邻连杆公共轴线方向的距离。沿着Z^i\hat Z_{i}Z^i方向看去对于X^i−1\hat X_{i-1}X^i−1与Z^i\hat Z_{i}Z^i所在直线的相交点和X^i\hat X_{i}X^i与Z^i\hat Z_{i}Z^i所在直线的相交点这两个相交点的距离。关节角θi\theta_{i}θi两相邻连杆绕公共轴线旋转的角度。沿着Z^i\hat Z_{i}Z^i方向看二维平面内X^i−1\hat X_{i-1}X^i−1和X^i\hat X_{i}X^i的夹角方向为X^i−1\hat X_{i-1}X^i−1扭向X^i\hat X_{i}X^i。
连杆扭转角和连杆长度定义了同一杆件的两个关节轴之间的关系关节角和连杆偏距定义了连杆是如何连接的。 上表注释中提及的X^i\hat X_{i}X^i、Y^i\hat Y_{i}Y^i、Z^i\hat Z_{i}Z^i将在后文中结合连杆坐标系提及可结合理解。
4.Denavit-Hartenberg表达法
简称为DH表达法版本为Craig versionDH法是用四个连杆参数来描述机构运动关系的规则两个参数用于描述连杆本身另外两个参数用于描述连杆之间的连接关系。 这四个参数即是之前所提到的连杆扭转角αi−1\alpha_{i-1}αi−1、连杆长度ai−1a_{i-1}ai−1、关节角θi\theta_{i}θi、连杆偏距did_{i}di。 通常来说对于转动关节关节变量为关节角θi\theta_{i}θi对于移动关节关节变量为连杆偏距did_{i}di。 对于这类关节除了关节变量外的其他的三个连杆参数都是固定不变的硬件属性参数。
5.连杆坐标系
为了描述连杆间的关系坐标系被引入因此需要在每个连杆上建立连杆坐标系对于连杆i−1{i-1}i−1其上有连杆坐标系{i−1}\{i-1\}{i−1}在Craig改良DH法中连杆坐标系的原点通常被规定在在关节轴Axis(i−1)Axis_{(i-1)}Axis(i−1)上。 按照这种坐标系的规定固定连杆坐标系的各正交轴如下
轴或点定义原点公垂线aia_iai与关节轴AxisiAxis_iAxisi的交点Z^i\hat Z_iZ^i与关节轴AxisiAxis_iAxisi重合X^i\hat X_iX^i沿着 公垂线aia_iai由关节jointijoint_ijointi指向关节jointi1joint_{i1}jointi1方向。当公垂线ai0a_i0ai0时X^i\hat X_iX^i垂直于 Z^i\hat Z_iZ^i与 Z^i1\hat Z_{i1}Z^i1形成的平面可以有两个方向根据方便选用Y^i\hat Y_iY^i根据右手定则确定已知拇指为 X^i\hat X_iX^i食指为Y^i\hat Y_iY^i 已知中指为Z^i\hat Z_iZ^i
连杆坐标系中的特殊存在
首端连杆
首端连杆被称为地杆机器人的固定基座上的坐标系{0}\{0\}{0}常被用作参考坐标系。Z^0\hat Z_0Z^0方向和Z^1\hat Z_1Z^1相同并当坐标系{1}\{1\}{1}的关节变量θi\theta_{i}θi或did_{i}di为0时使坐标系{0}\{0\}{0}和坐标系{1}\{1\}{1}重合以简化计算。
转动关节Revolute jointα00a00d10θ1?(当为0时Frame重合)\text {转动关节Revolute joint} \quad \alpha_00 \quad a_00 \quad d_10 \quad\theta_1?(当为0时Frame重合) 转动关节Revolute jointα00a00d10θ1?(当为0时Frame重合) 移动关节Prismatic jointα00a00θ10d1(当为0时Frame重合)\text {移动关节Prismatic joint} \quad \alpha_00 \quad a_00 \quad \theta_10 \quad d_1(当为0时Frame重合) 移动关节Prismatic jointα00a00θ10d1(当为0时Frame重合)
末端连杆
末端杆没有下一根杆件因此要和上一根杆件找关联。 对于转动关节X^n\hat X_nX^n方向和X^n−1\hat X_{n-1}X^n−1相同再选取设置原点使得dn0d_n0dn0 对于移动关节选取设置X^n\hat X_nX^n方向使得θn0\theta_n0θn0当dn0d_n0dn0时原点位于关节轴nnn和X^n−1\hat X_{n-1}X^n−1交点处
学习完连杆坐标系中连杆参数可以更简单地理解:
名称符号含义连杆扭转角αi−1\alpha_{i-1}αi−1连杆扭转角是绕X^i−1\hat X_{i-1}X^i−1轴Z^i−1\hat Z_{i-1}Z^i−1旋转到Z^i\hat Z_{i}Z^i的夹角连杆长度ai−1a_{i-1}ai−1连杆长度是沿着X^i−1\hat X_{i-1}X^i−1轴Z^i−1\hat Z_{i-1}Z^i−1移动到Z^i\hat Z_{i}Z^i的公垂线的长度关节角θi\theta_{i}θi绕Z^i\hat Z_{i}Z^i轴X^i−1\hat X_{i-1}X^i−1旋转到X^i\hat X_{i}X^i的夹角连杆偏距did_{i}di沿着Z^i\hat Z_{i}Z^i轴X^i−1\hat X_{i-1}X^i−1移动到X^i\hat X_{i}X^i的距离
建立连杆坐标系和DH表
找出关节轴 分析运动状态找出关节平移或转动的轴向joint axes找出Z^i\hat Z_{i}Z^i Z^i\hat Z_{i}Z^i的正方向为转动或移动的轴axis方向找出X^i\hat X_{i}X^i X^i\hat X_{i}X^i的正方向是两个关节轴之间公垂线上指向下一个关节轴的方向 ai0a_i0ai0时即当两关节轴相交时XXX和ZiZ_iZi和Zi1Z_{i1}Zi1的方向垂直此时方向怎么方便怎么来确定原点 原点即为Z^i\hat Z_{i}Z^i与X^i\hat X_{i}X^i的交点找出Y^i\hat Y_{i}Y^i 根据右手定则确定拇指为 X^i\hat X_iX^i食指为Y^i\hat Y_iY^i 中指为Z^i\hat Z_iZ^i处理首端连杆 并当Frame1Frame_1Frame1的关节变量θi\theta_{i}θi或did_{i}di为0时使Frame0Frame_0Frame0和Frame1Frame_1Frame1重合以简化计算。处理末端连杆 尽量使得连杆参数为0以简化计算
根据以上几步处理的结果可以获取DH参数表
DH参数表是Frame之间的关系每个i代表一对轴之间的关系 表中的1为基坐标系Frame0Frame_0Frame0与第一个轴坐标系Frame1Frame_1Frame1的关系 表中的3为末端连杆与最后一个可转、平移的轴的关系
iαi−1\alpha_{i-1}αi−1ai−1a_{i-1}ai−1θi\theta_iθidid_idi100θ1\theta_1θ1020L1L_1L1θ2\theta_2θ2030L2L_2L2θ3\theta_3θ30
6.连杆坐标系之间的转化
对于Framei−1Frame_{i-1}Framei−1要从Axisi−1Axis_{i-1}Axisi−1到AxisiAxis_{i}Axisi。 首先完成从Z^i−1\hat Z_{i-1}Z^i−1到Z^i\hat Z_{i}Z^i的旋转αi−1\alpha_{i-1}αi−1和平移ai−1a_{i-1}ai−1距离。
然后将旋转和平移后的Axisi−1Axis_{i-1}Axisi−1旋转θi\theta_{i}θi并沿着Z^i\hat Z_{i}Z^i方向平移did_{i}di距离。 总计进行四次操作最终可得 i−1Pii−1TiP^{i-1}P^{i-1}_iT^{i}P i−1Pii−1TiP ii−1T^{i-1}_iTii−1T中合并了这四次操作得出该变换矩阵 ii−1T[Cosθi−Sinθi0ai−1SinθiCosαi−1CosθiCosαi−1−Sinαi−1−Sinαi−1diSinθiSinαi−1CosθiSinαi−1Cosαi−1Cosαi−1di0001]^{i-1}_iT \left[ \begin{matrix} Cos\theta_i -Sin\theta_i 0 a_{i-1} \\ Sin\theta_iCos\alpha_{i-1} Cos\theta_iCos\alpha_{i-1} -Sin\alpha_{i-1} -Sin\alpha_{i-1}d_i\\ Sin\theta_iSin\alpha_{i-1} Cos\theta_iSin\alpha_{i-1} Cos\alpha_{i-1} Cos\alpha_{i-1}d_i\ \\ 0001 \end{matrix} \right] ii−1TCosθiSinθiCosαi−1SinθiSinαi−10−SinθiCosθiCosαi−1CosθiSinαi−100−Sinαi−1Cosαi−10ai−1−Sinαi−1diCosαi−1di 1 多次使用该变换矩阵可以得出不相邻的关节之间的转化关系
7.mini pupper的简化运动学结构
mini pupper的单条腿部可简化视作典型的三连杆非平面操作臂三自由度的设计使得它理论上能够到达空间限位范围内的任意位置。 当我们进一步简化不考虑横向髋关节运动时mini pupper的腿部可以简化为平面二连杆机构RR模型使用几何解法即可在已知θ1\theta_1θ1和θ2\theta_2θ2的情况下求得0P^0P0P的坐标完成运动学正解。 对于大臂与小臂相交处QQQ xql1Cosθ1x_ql_1Cos\theta_1 xql1Cosθ1 yql1Sinθ1y_ql_1Sin\theta_1 yql1Sinθ1
对于小臂末端点 xpl1Cosθ1l2Cos(θ1θ2)x_pl_1Cos\theta_1l_2Cos(\theta_1\theta_2) xpl1Cosθ1l2Cos(θ1θ2) ypl1Sinθ1l2Sin(θ1θ2)y_pl_1Sin\theta_1l_2Sin(\theta_1\theta_2) ypl1Sinθ1l2Sin(θ1θ2)
图片平面二连杆机构RR模型
实验步骤
1. 编写Python代码 rr_manipulator.py
#!/usr/bin/python
# coding:utf-8
# rr_manipulator.py
# mini pupper的简化单腿可视作同一平面的RR类机械臂可视化该机械臂由给定角度计算末端点位置
import matplotlib.pyplot as plt # 引入matplotlib
import numpy as np # 引入numpy
from math import radians, sin, cos# 几何法关节角转端点坐标
def theta_2_position_rr(l1, l2, theta1, theta2):运动学正解 将输入的关节角转化为对应的端点坐标:param l1: 大臂长:param l2: 小臂长:param theta1: 大臂关节角:param theta2: 小臂关节角:return: 端点1坐标 端点2坐标point_1 [l1*cos(radians(theta1)), l1*sin(radians(theta1))]point_2 [l1*cos(radians(theta1))l2*cos(radians(theta1theta2)),l1*sin(radians(theta1))l2*sin(radians(theta1theta2))]print(point_1)print(point_2)return point_1, point_2def preprocess_drawing_data(points):处理点坐标数据转化为matplotlib适应的绘图格式:param points: 点数据:return: 绘图数据x坐标list和对应的y坐标listxs [0]ys [0]xs.append(points[0][0])xs.append(points[1][0])ys.append(points[0][1])ys.append(points[1][1])return xs, ys# 关节信息
# 大臂长度5 cm 小臂长度6 cm
link_length [5, 6] # in cm# 关节角初始化
joints_angle_origin [30, 30]
joints_angle [0, 0]
print(关节角初始状态 theta1%d° theta2%d° % (joints_angle_origin[0], joints_angle_origin[1]))# 输入连杆参数各关节角
for i in range(1, 3):joints_angle[i-1] int(input(请输入腿部舵机[%d]要转动的的角度 % i))print(腿部舵机[{0}]将转动{1}°.format(i, joints_angle[i-1]))# 计算并预处理绘图数据
points_origin theta_2_position_rr(link_length[0], link_length[1], joints_angle_origin[0], joints_angle_origin[1])
points_after theta_2_position_rr(link_length[0], link_length[1], joints_angle[0], joints_angle[1])
data_origin preprocess_drawing_data(points_origin)
data_after preprocess_drawing_data(points_after)# 绘图
fig, ax plt.subplots() # 建立图像
plt.plot(data_origin[0], data_origin[1], colorblack, labeloriginal)
plt.scatter(data_origin[0], data_origin[1], colorblack)
plt.plot(data_after[0], data_after[1], colorred, labelafter)
plt.scatter(data_after[0], data_after[1], colorblue)
ax.set(xlabelX, ylabelY, titlemini pupper FK RR model)
ax.grid()
plt.legend()
plt.show()2. 运行程序观察效果
在rr_manipulator.py的目录下执行以下命令
sudo python rr_manipulator.py此时应观察到根据关节角计算出的可视化坐标。
实验总结
经过本知识点的学习和实验操作你应该能达到以下水平
知识点内容了解熟悉掌握硬件mini pupper单腿结构的搭建✔运动学平面RR类型机械臂的运动学正解✔运动学非平面RRR类型机械臂✔运动学几何法完成运动学正解✔运动学运动学正解基础知识✔可视化Python可视化运动学✔
版权信息教材尚未完善此处预留版权信息处理方式 mini pupper相关内容可访问https://github.com/mangdangroboticsclub