赞
踩
1、前记:
此篇说说利用如何在Matlab中进行机器人轨迹规划(Trajectory Planning)。先利用机器人工具箱(Robotics Toolbox)函数jtraj和ctraj作演示,来初步认识机器人轨迹规划如何在任务空间(Task Space)和关节空间(Joint Space)实现的,并再之前的系列中更新GUI的演示功能。
2、问题描述
轨迹规划是整个导航或运动规划问题的子集。典型的运动规划层次结构如下:
对于机器人的任务规划可以是自主的,也可以是在线人机交互的,也可以是预先定义的。路径规划也由上层的任务规划决定,要求机器人在运动过程不不能碰到障碍物。本文假定任务规划器中已经有一组路径点,我们的目的是生成一个轨迹,以实现随时间的推移在规定的约束(最大速度、加速度、动力学约束等)下来跟随这些路径点【路径的空间属性,轨迹的时间属性】。轨迹的跟踪需要实际的电机作为驱动源,通过底层的伺服控制来满足轨迹跟踪所需要的位置命令、力矩命令。
【针对如何从起点到目标点的路径规划问题,在古月居中已经有部分介绍https://www.guyuehome.com/tag/98,基本上属于路径规划系统的形式。对于工业机器人来讲,用于确定任务路径的一种常用方式是使用示教器或者物理性的引导(拖动示教)机器人达到所期望的运动,在工作任务中将示教的运动进行重新播放,即示教和运动重现。在某些情况下,如静态环境中多次执行相同的路径,使用示教的方式可能比一个路径规划系统更加有效。但在一些变结构复杂动态环境下,仅仅使用示教又会出现很多问题。例如,在需要人机协同工作的情况下,示教重现的方式会大大减低人机共融的协调性;在一些机器人分拣工作中不可能对每个物体进行抓取点的示教。所以不管是使用示教的方式完成任务还是使用路径规划系统完成任务,需依实际应用场景而定】
3、笛卡尔任务空间vs关节空间轨迹规划
机械臂的轨迹规划一般在机器人任务空间展开或者在关节空间展开。其中任务空间轨迹规划是指路径点和插补位于机械手特定位置的笛卡尔位姿(位置和方向)上,通常为末端执行器。这表明每个路径点和插补点都需要进行一次逆运动学计算,因此容易出现奇异位姿问题。关节空间轨迹规划是指路径点和插补点直接位于关节位置上(角度或位移,取决于关节类型)。也就是关节空间轨迹规划只需要在路径点上进行一次逆运动学求解,然后在关节空间中进行空间插值,因此易于实现对关节运动的约束,可以避免奇异位姿的问题。下图简单说明两者的优缺点。
现在我们以之前的GUI为例子,一方面来完善GUI的功能。另一方面来看看使用机器人工具箱中的关节空间轨迹规划函数jtraj与笛卡尔任务空间轨迹规划函数ctraj的进行轨迹规划的表现。【轨迹规划面板】
(1)关节空间规划jtraj函数
如上GUI所示,在这里主要是通过正运动学控制面板获得机器人的起始构型,并通过正运动计算获得末端位姿,在关节空间面板上设置输入机器人的终点位置(姿态与起始姿态一致)。【关节控件面板上的静态文本控件和可编辑文本设置就不多说了,静态文本作为输入位置的标识,用户在可编辑文本中输入终点位置和时间步】点击下面的Go按钮(Tag为JointMove),回调JointMove函数。
JointMove回调函数:
function JointMove_Callback(hObject, eventdata, handles)
Robot= evalin('base','Robot');%从基本工作空间导入机器人模型到GUI空间中
theta1=get(handles.Joint1,'value');
theta2=get(handles.Joint2,'value');
theta3=get(handles.Joint3,'value');
theta4=get(handles.Joint4,'value');
theta5=get(handles.Joint5,'value');
theta6=get(handles.Joint6,'value');
q0=[theta1 theta2 theta3 theta4 theta5 theta6];
T0=Robot.fkine(q0*pi/180); %通过正运动学控制面板获得初始位姿T0
R=[T0.n T0.o T0.a];%提取T0相同的姿态,se3--->3by3,下面操作构成齐次矩阵
numMats = size(R,3);H = ze
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。