Crear una trayectoria para un robot ABB YuMi de manera interactiva
Este ejemplo muestra cómo utilizar el objeto interactiveRigidBodyTree
para mover un robot, diseñar una trayectoria y repetirla.
Cargar la visualización del robot y crear el entorno
Cargue el modelo de robot 'abbYumi'
. Inicialice la figura interactiva con interactiveRigidBodyTree
. Guarde los ejes actuales.
robot = loadrobot('abbYumi', 'Gravity', [0 0 -9.81]); iviz = interactiveRigidBodyTree(robot); ax = gca;
Cree un entorno compuesto de cuadros de colisión que represente un suelo, dos estanterías con objetos y una mesa en el centro.
plane = collisionBox(1.5,1.5,0.05); plane.Pose = trvec2tform([0.25 0 -0.025]); show(plane,'Parent', ax); leftShelf = collisionBox(0.25,0.1,0.2); leftShelf.Pose = trvec2tform([0.3 -.65 0.1]); [~, patchObj] = show(leftShelf,'Parent',ax); patchObj.FaceColor = [0 0 1]; rightShelf = collisionBox(0.25,0.1,0.2); rightShelf.Pose = trvec2tform([0.3 .65 0.1]); [~, patchObj] = show(rightShelf,'Parent',ax); patchObj.FaceColor = [0 0 1]; leftWidget = collisionCylinder(0.01, 0.07); leftWidget.Pose = trvec2tform([0.3 -0.65 0.225]); [~, patchObj] = show(leftWidget,'Parent',ax); patchObj.FaceColor = [1 0 0]; rightWidget = collisionBox(0.03, 0.02, 0.07); rightWidget.Pose = trvec2tform([0.3 0.65 0.225]); [~, patchObj] = show(rightWidget,'Parent',ax); patchObj.FaceColor = [1 0 0]; centerTable = collisionBox(0.5,0.3,0.05); centerTable.Pose = trvec2tform([0.75 0 0.025]); [~, patchObj] = show(centerTable,'Parent',ax); patchObj.FaceColor = [0 1 0];
Generar configuraciones de forma interactiva
Utilice la visualización interactiva para mover el robot y establecer configuraciones. Cuando la figura se inicializa, el robot está en la configuración inicial con los brazos cruzados. Haga zoom para ampliar la figura y haga clic en el efector final para obtener más información.
Para seleccionar el cuerpo como efector final, haga clic en el cuerpo con el botón secundario del ratón.
También se puede asignar el cuerpo marcador desde la línea de comandos:
iviz.MarkerBodyName = "gripper_r_base";
Una vez que haya configurado el cuerpo, utilice los elementos marcadores proporcionados para mover el marcador, y el cuerpo seleccionado lo seguirá. Arrastre el marcador gris central para mover el marcador en el espacio cartesiano. Los ejes rojo, verde y azul mueven el marcador a lo largo de los ejes xyz. El círculo gira el marcador sobre los ejes del color correspondiente.
También puede mover articulaciones individuales. Para ello, haga clic con el botón secundario en la articulación y, después, haga clic en Toggle marker control method (Activar método de control del marcador).
La propiedad MarkerControlMethod
del objeto está configurada en "JointControl"
.
También puede realizar estos pasos cambiando las propiedades del objeto directamente.
iviz.MarkerBodyName = "yumi_link_2_r"; iviz.MarkerControlMethod = "JointControl";
Si cambia al control de articulación, aparecerá un marcador amarillo que permite configurar la posición de la articulación directamente.
Mueva el robot de forma interactiva hasta obtener la configuración deseada. Guarde las configuraciones con addConfiguration
. Cada llamada añade la configuración actual a la propiedad StoredConfigurations
.
addConfiguration(iviz)
Definir waypoints para una trayectoria
Para este ejemplo, se proporciona un conjunto de configuraciones en un archivo .mat
.
Cargue las configuraciones y especifíquelas como el conjunto de configuraciones almacenadas. La primera configuración se añade actualizando la propiedad Configuration
y llamando a addConfiguration
, de forma interactiva, pero el resto se añaden simplemente asignando la propiedad StoredConfigurations
directamente.
load abbYumiSaveTrajectoryWaypts.mat removeConfigurations(iviz) % Clear stored configurations % Start at a valid starting configuration iviz.Configuration = startingConfig;
addConfiguration(iviz) % Specify the entire set of waypoints iviz.StoredConfigurations = [startingConfig, ... graspApproachConfig, ... graspPoseConfig, ... graspDepartConfig, ... placeApproachConfig, ... placeConfig, ... placeDepartConfig, ... startingConfig];
Generar la trayectoria y reproducirla
Una vez que se hayan almacenado todos los waypoints, construya la trayectoria que seguirá el robot. Para este ejemplo, se genera un perfil de velocidad trapezoidal utilizando trapveltraj
. Un perfil de velocidad trapezoidal implica que el robot se detiene suavemente en cada uno de los waypoints, pero alcanza un conjunto de velocidades máximas cuando está en movimiento.
numSamples = 100*size(iviz.StoredConfigurations, 2) + 1;
[q,~,~, tvec] = trapveltraj(iviz.StoredConfigurations,numSamples,'EndTime',2);
Repita la trayectoria que ha creado iterando la matriz q
generada, que representa una serie de configuraciones de articulaciones que se mueven entre los diferentes waypoints. En este caso se usa un objeto de control de velocidad para garantizar que la velocidad de la repetición refleja la velocidad de ejecución real.
iviz.ShowMarker = false; showFigure(iviz) rateCtrlObj = rateControl(numSamples/(max(tvec) + tvec(2))); for i = 1:numSamples iviz.Configuration = q(:,i); waitfor(rateCtrlObj); end
La figura muestra cómo el robot ejecuta la trayectoria entre todos los waypoints definidos sin problemas.