主要内容

La traducción de esta página aún no se ha actualizado a La versión más reciente。Haga clic aquí para ver la última versión en inglés。

平面弹射椎弓背及关节利用机械手KINOVA Gen3

Este ejemplo muestra cómo一般的相似的trayectorias de articulación插值,para pasar de pose非正式的,una pose deseada del efector最终的。La temporización de las traayectorias se basa en una velocidad deseada近似地de La herramienta al final del brazo robótico (EOAT)。

Cargue el modelo de robot de árbol de cuerpo rígido (RBT) de KINOVA Gen3。

机器人=装载机器人“kinovaGen3”“DataFormat”“行”“重力”,[0 0 -9.81]);

Defina la configuración实际的de la articulación del机器人。

currentRobotJConfig = homeConfiguration(机器人);

Obtenga el número发音和马可的最终效果。

numjoint = numl (currentRobotJConfig);endEffector =“EndEffector_Link”

特别的,团结的,时间的,我们的,我们的,快的,我们的,我们的。

timeStep = 0.1;%秒toolSpeed = 0.1;% m / s

定义,姿态,正式,最终,效果,最终。

jointInit = currentRobotJConfig;taskkinit = getTransform(robot,jointInit, effffector);taskFinal = trvec2tform([0.4,0,0.6])*axang2tform([0 1 0 pi]);

una trayectoria de espacio cartesiano将军

calcalle los waypoints de la trayectoria de espacio cartesiano mediante interpolación。

第一,远方的calcalle, desplazamiento, la herramienta。

距离= norm(tform2trvec(taskInit)-tform2trvec(taskFinal));

一个continuación,一个定义,一个时间的定义,一个远方的人,一个广场的人,一个速度的人,一个爱的人。

initTime = 0;finalTime =(距离/工具速度)- initTime;trajTimes = initTime:timeStep:finalTime;timeInterval = [trajTimes(1);trajTimes(结束)];

间极之间taskInitytaskFinal对计算器的路点,中间的空间笛卡尔亚诺。

[taskWaypoints, taskvelocity] = transformtraj(taskkinit,taskFinal,timeInterval,trajTimes);

我是cartesiano

动作模式,关节空间,关节控制,关节。El objetotaskSpaceMotionModelModela el movimiento de UN modelo de árbol de cuerpo rígido bajo UN控制比例导数del espacio cartesiano。

tsMotionModel = taskSpaceMotionModel(“RigidBodyTree”,机器人,“EndEffectorName”“EndEffector_Link”);

建立在一定程度上的控制比例和衍生程度上的orientación,关于控制的问题的解决方法

tsMotionModel.Kp(1:3,1:3) = 0;tsMotionModel.Kd(1:3,1:3) = 0;

Defina los estados iniciales (posiciones de las articulaciones y velocidades)。

q0 = currentRobotJConfig;Qd0 = 0 (size(q0));

Utiliceode15s模仿机器人的动作。这个问题,这个塞拉多的系统rígido,这个存在的意义有一个不同的escalado en algún这个问题。结果是一样的,积分者有义务实现它pequeños,解算ODE没有rígido数值Tardará很多más时间能解决错误的问题。Para obtener más información,咨询选择一个ODE求解器y解决僵硬的颂歌

有一个现成的,有一个现成的,有一个现成的función包装上有一个现成的,有一个现成的,有一个现成的。Por tanto, se pasa una función助手de ejemplo como identificador de la función al solver ODE。这是我的工作成果stateTask

[tTask,stateTask] = ode15s(@(t,state) exampleHelperTimeBasedTaskInputs(tsMotionModel,timeInterval,taskInit,taskFinal,t,state),timeInterval,[q0;qd0]);

关节侧突关节部

Cree un objeto de cinemática反过来para el robot。

ik = inverseKinematics(“RigidBodyTree”,机器人);ik.SolverParameters.AllowRandomRestart = false;Weights = [1 1 1 1 1 1];

calcalle las configuraciones de articaciones非正式的和deseada使用的cinemática相反。我爱你,我爱你interpolación我爱你,我爱你mínimo。

initialGuess = jointInit;jointFinal = ik(effffector,taskFinal,weights,initialGuess);

形式上的预先决定,solución IK的尊重,límites De las articulaciones。我发誓,我的口齿不断,我的口齿不断,我的口齿不断,我的口齿不断,我的口齿不断(π-π,)最后一个远方的小方块mínima。我想说的是,我们的发音是没有连续性的límites我们的发音是有连续性的,我们的发音是有连续性的π.连续发音asignarán al intervalo(π-π,)Y los otros valores se mantendrán iguales。

wrappedJointFinal = wrapToPi(jointFinal);

极间入口,使用,使用,una función polinómica cúbica对一般的,不一样的,构型的,发音的,不一样的。利用b样条对一般样条积分obstáculos。

ctrlpoints = [jointInit',wrappedJointFinal'];jointConfigArray = cubicpolytraj(ctrlpoints,timeInterval,trajTimes);jointWaypoints = bsplinepolytraj(jointConfigArray,timeInterval,1);

关节侧顶骨控制

动作模式,关节空间,关节控制,关节。El objetojointSpaceMotionModel联合国移动模型árbol cuerpo rígido利用控制的比例导数,使所有的动作和关节都变好。

jsMotionModel = jointSpaceMotionModel(“RigidBodyTree”,机器人,“MotionType”“PDControl”);

建立自己的发音(posiciones de las articulaciones y velocidades)。

q0 = currentRobotJConfig;Qd0 = 0 (size(q0));

Utiliceode15s模仿机器人的动作。美国的新国家función助手,这个国家的身份识别者función这个解决者,这个国家的身份识别者的身份识别者的身份识别者的身份识别者的身份识别者的身份识别者的身份识别者的身份识别者的身份识别者。这是我们的家园stateJoint

[tJoint,stateJoint] = ode15s(@(t,state) exampleHelperTimeBasedJointInputs(jsMotionModel,timeInterval,jointConfigArray,t,state),timeInterval,[q0;qd0]);

机器人的可视化比较

Muestre la configuración官方的机器人。

表演(currentRobotJConfig的机器人“PreservePlot”假的,“帧”“关闭”);持有轴([-1 1 -1 1 -0.1 1.5]);

cartesiano的视觉图。这是través de los estados destateTaskE interpole basándose en el momento actual。

i = 1:长度(trajTimes)%当前时间tNow = trajTimes(我);插值模拟关节位置以获得当前时间的配置configNow = interp1(tTask,stateTask(:,1: numjoins),tNow);poseNow = getTransform(robot,configNow, effffector);表演(configNow的机器人“PreservePlot”假的,“帧”“关闭”);taskspacemark = plot3(poseNow(1,4),poseNow(2,4),poseNow(3,4),“b”。“MarkerSize”, 20);drawnow;结束

关节部顶骨视觉。这是través de los estados dejointTaskE interpole basándose en el momento actual。

返回初始配置表演(currentRobotJConfig的机器人“PreservePlot”假的,“帧”“关闭”);i = 1:长度(trajTimes)%当前时间tNow = trajTimes(我);插值模拟关节位置以获得当前时间的配置configNow = interp1(tJoint,stateJoint(:,1: numjoint),tNow);poseNow = getTransform(robot,configNow, effffector);表演(configNow的机器人“PreservePlot”假的,“帧”“关闭”);jointspacemark = plot3(poseNow(1,4),poseNow(2,4),poseNow(3,4),“r”。“MarkerSize”, 20);drawnow;结束添加一个图例和标题legend([taskSpaceMarker jointSpaceMarker], {“在任务空间中定义”“在关节空间中定义”});标题(“机械手轨迹”

图中包含一个axes对象。标题为“机械手轨迹”的axis对象包含150个类型为line、patch的对象。这些对象代表定义在Task-Space, base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link,手腕1_link,手腕2_link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh,前臂link_mesh,手腕1_link_mesh,手腕2_link_mesh, Bracelet_Link_mesh, base_link_mesh,定义在关节空间。