Difference between revisions of "Integration of MYRAbot in moveIt! (gazebo+moveIt!)"

From robotica.unileon.es
Jump to: navigation, search
Line 906: Line 906:
 
   <node pkg="nodelet" type="nodelet" name="kinect_laser" args="load pointcloud_to_laserscan/CloudToScan openni_manager" respawn="true">
 
   <node pkg="nodelet" type="nodelet" name="kinect_laser" args="load pointcloud_to_laserscan/CloudToScan openni_manager" respawn="true">
 
     <param name="output_frame_id" value="/camera_depth_frame"/>
 
     <param name="output_frame_id" value="/camera_depth_frame"/>
    <!-- heights are in the (optical?) frame of the kinect -->
+
    heights are in the (optical?) frame of the kinect
 
     <param name="min_height" value="-0.15"/>
 
     <param name="min_height" value="-0.15"/>
 
     <param name="max_height" value="0.15"/>
 
     <param name="max_height" value="0.15"/>
Line 914: Line 914:
 
   <node pkg="nodelet" type="nodelet" name="kinect_laser_narrow" args="load pointcloud_to_laserscan/CloudToScan openni_manager" respawn="true">
 
   <node pkg="nodelet" type="nodelet" name="kinect_laser_narrow" args="load pointcloud_to_laserscan/CloudToScan openni_manager" respawn="true">
 
     <param name="output_frame_id" value="/camera_depth_frame"/>
 
     <param name="output_frame_id" value="/camera_depth_frame"/>
    <!-- heights are in the (optical?) frame of the kinect -->
+
    heights are in the (optical?) frame of the kinect  
 
     <param name="min_height" value="-0.025"/>
 
     <param name="min_height" value="-0.025"/>
 
     <param name="max_height" value="0.025"/>
 
     <param name="max_height" value="0.025"/>

Revision as of 19:37, 10 March 2014

< go back to main

Previous steps

Installation of moveIt!

MoveIt! is a package that provides a software tool for all types of manipulation tasks both industrial level and domestic level. It is available for the ROS distributions groovy and hydro, for this reason we must have installed some of these. We will execute the next command in a terminal in order to install moveIt!, where "ROS_DISTRIBUCION" is our installed distribution:

sudo apt-get install ros-ROS_DISTRIBUCION-moveit-full

Modification of MYRAbot model for moveIt!

New URDF of the arm

<arg name="moveit_controller_manager" default="moveit_simple_controller_manager/MoveItSimpleControllerManager" />
<param name="moveit_controller_manager" value="$(arg moveit_controller_manager)"/>

<rosparam file="$(find myrabot_moveit_generated)/config/controllers.yaml"/>

</launch>

</syntaxhighlight>

Integración de sensores de percepción

Dentro de estos sensores tenemos la asus xtion pro live y la kinect, con las cuales puede estar equipado MYRAbot y las cuales se configuran de igual modo. Crearemos un archivo llamado "xtion.yaml" dentro del directorio "config" del package de configuración de moveIt! creado con el siguiente contenido:

sensors:
  - sensor_plugin: occupancy_map_monitor/PointCloudOctomapUpdater
    point_cloud_topic: /xtion/depth/points
    max_range: 5.0
    point_subsample: 1
    padding_offset: 0.1
    padding_scale: 1.0
    filtered_cloud_topic: filtered_cloud

Editaremos el archivo "MYRAbot_moveit_sensor_manager.launch.xml" situado en el directorio "launch" del package de configuración de moveIt! creado para que su contenido sea el siguiente:

<launch>

 <rosparam command="load" file="$(find myrabot_moveit_generated)/config/xtion.yaml" />
 <param name="octomap_frame" type="string" value="odom" />
 <param name="octomap_resolution" type="double" value="0.05" />
 <param name="max_range" type="double" value="5.0" />

</launch>

Tenemos que añadir el valor move_group/MoveGroupGetPlanningSceneService al parámetro "capabilities" en el archivo "move_group.launch" que se encuantra dentro del directorio "launch" del package de configuración de moveIt! creado, quedando como se muestra a continuación:

...

    <!-- MoveGroup capabilities to load -->
    <param name="capabilities" value="move_group/MoveGroupCartesianPathService
				      move_group/MoveGroupExecuteService
				      move_group/MoveGroupKinematicsService
				      move_group/MoveGroupMoveAction
				      move_group/MoveGroupPickPlaceAction
				      move_group/MoveGroupPlanService
				      move_group/MoveGroupQueryPlannersService
				      move_group/MoveGroupStateValidationService
				      move_group/MoveGroupGetPlanningSceneService
				      " />

...

Modificación del archivo .srdf generado

Tenemos que modificar el archivo "MYRAbot.srdf" generado por el asistente para remplazar las comas por puntos en los valores de las posiciones de las articulaciones guardados, como se muestra a continuación:

    <group_state name="home" group="brazo">
        <joint name="arti1" value="1,3836" />
        <joint name="arti2" value="-2,2458" />
        <joint name="arti3" value="-0,7065" />
        <joint name="base" value="0" />
    </group_state>

por

    <group_state name="home" group="brazo">
        <joint name="arti1" value="1.3836" />
        <joint name="arti2" value="-2.2458" />
        <joint name="arti3" value="-0.7065" />
        <joint name="base" value="0" />
    </group_state>

Ejecución

Planificación simple

Para probar que MYRAbot funciona correctamente en moveIt! podemos iniciar el launcher "demo.launch" contenido en el directorio "launch" del package generado, ejecutando en un terminal el siguiente comando:

roslaunch myrabot_moveit_generated demo.launch

Se cargará el modelo de MYRAbot en rviz con el "Motion Planning Interface" de moveIt!, como se muestra en la siguiente imagen:

MYRAbot en rviz con plugin de moveIt!

Podemos ver, si esta seleccionado el modo "interact", unos interactive markers en torno a la pinza mediante los cuales podremos interactuar con la representación de los estados inicial y final del brazo. Si desplegamos la opción Planning Request dentro de MotionPlanning, podemos activa o desactivar la representación del estado inicial Query Start State (representado en verde) o la representación del estado final Query Goal State (representado en naranja). Cuando alguna de las partes del brazo entre en contacto con otra u otro objeto, estas cambiarán a color rojo.

En el siguiente vídeo podemos ver un proceso de planificación simple, sin obstáculos, que desplaza el brazo desde una posición inicio, en este caso la pose guardada "home", hasta una posición de destino, marcada desplazando el brazo usando los interantive markers:

<videoflash>doy6VRjzYZc</videoflash>
Ver vídeo en YouTube

Planificación con escena modelada

Ejecutaremos el siguiente comando en un terminal para iniciar rviz con el modelo del robot y el "MotionPlanning" de moveIt!:

roslaunch myrabot_moveit_generated demo.launch

Se ha creado una escena con figuras geométricas básicas que representan una mesa y una lata sobre esta. No se han empleado mallas 3D, meshes, aunque es una opción disponible, ya que hay problemas de intercambio aleatorio entre las representaciones visuales de los objetos. Crearemos un archivo llamado "mesa_lata.scene" dentro de nuestra carpeta personal con el siguiente contenido:

Mesa_Lata
* mesa_pata_izquierda_delantera
1
cylinder
0.015 0.71
0.20 0.97 0.355
0 0 0 1
0 0 0 1
* mesa_pata_derecha_delantera
1
cylinder
0.015 0.71
0.20 -0.97 0.355
0 0 0 1
0 0 0 1
* mesa_pata_derecha_trasera
1
cylinder
0.015 0.71
0.89 -0.97 0.355
0 0 0 1
0 0 0 1
* mesa_pata_izquierda_trasera
1
cylinder
0.015 0.71
0.89 0.97 0.355
0 0 0 1
0 0 0 1
* mesa_tablero
1
box
0.75 2 0.03
0.545 0 0.725
0 0 0 1
0.71372549 0.494117647 0.301960784 1
* lata
1
cylinder
0.03 0.12
0.28 0 0.8
0 0 0 1
1 0 0 1
.

Este archivo lo cargaremos en el menú Scene Objects de MotionPlanning pinchando en Import From Text. En el siguiente vídeo podemos ver el proceso de carga de la escena y la planificación de la trayectoria para evitar la lata, representada por un cilindro de color rojo, situada sobre la masa, desplazando el brazo desde un punto de partida a otro de destino entre los cuales se encuentra situada la lata:

<videoflash>oWe_jj4keXU</videoflash>
Ver vídeo en YouTube

Planificación con robot en gazebo

Crearemos un archivo llamado "myrabot_gazebo_moveit_mesa+latas.launch" dentro del directorio "launch" del package "myrabot_fer_modelo" con el siguiente contenido, para cargar los modelos de los objetos (mesa y latas):

<launch>
  
  <include file="$(find myrabot_fer_modelo)/launch/myrabot_gazebo_moveit.launch" />

  <!-- Load models table and cans -->
  <node name="spawn_mesa" pkg="gazebo_ros" type="spawn_model" args="-file $(find myrabot_objects_models_b)/urdf/mesa.urdf -urdf -x 0.545 -y 0 -z 0 -Y -1.57 -model mesa" respawn="false" output="screen" />    
  
  <!--node name="spawn_lata_coca_cola" pkg="gazebo_ros" type="spawn_model" args="-file $(find myrabot_objects_models_b)/urdf/lata_coca_cola.urdf -urdf -x 0.32 -y -0.18 -z 0.74 -Y -1.57 -model lata_Coca_Cola" respawn="false" output="screen" /-->  

  <node name="spawn_lata_amstel" pkg="gazebo_ros" type="spawn_model" args="-file $(find myrabot_objects_models_b)/urdf/lata_amstel.urdf -urdf -x 0.32 -y 0.0 -z 0.74 -Y -1.57 -model lata_Amstel" respawn="false" output="screen" /> 

</launch>

Crearemos otro archivo llamado "moveit_planning_execution.launch" dentro del directorio "launch" del package de configuración de moveIt! con el siguiente contenido, para iniciar el interfaz de planificación de movimientos:

<launch>
 # The planning and execution components of MoveIt! configured to 
 # publish the current configuration of the robot (simulated or real)
 # and the current state of the world as seen by the planner
 <include file="$(find myrabot_moveit_generated)/launch/move_group.launch">
  <arg name="publish_monitored_planning_scene" value="true" />
 </include>
 # The visualization component of MoveIt!
 <include file="$(find myrabot_moveit_generated)/launch/moveit_rviz.launch"/>
</launch>

Ejecutaremos el siguiente comando en un terminal para iniciar gazebo con los modelos del robot y los objetos:

roslaunch myrabot_robot_model myrabot_gazebo_moveit_mesa+latas.launch

En otro terminal ejecutaremos el siguiente comando para iniciar rviz con el "Motion Planning Interface" de moveIt!:

roslaunch myrabot_moveit_generated moveit_planning_execution.launch

En el siguiente vídeo podemos ver el proceso de planificación y ejecución de la trayectoria para evitar la lata que se encuentra en medio de la trayectoria de las posiciones de inicio y destino, se planifica dos veces ya que la primera vez se detecta una colisión entre el brazo y la lata. La escena representada corresponde con la captada por el sensor de percepción situado por encima de la pantalla, donde se muestra el espacio ocupado mediante cubos con una tolerancia que permita evitar colisiones.

<videoflash>xf1Jz1L-Xyc</videoflash>
Ver vídeo en YouTube

-->

< go back to main