Difference between revisions of "Mobile manipulation"

From robotica.unileon.es
Jump to: navigation, search
 
(132 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
* '''Project Name:''' Brazo Bioloid controlado por ROS con interfaz Arduino
 
* '''Project Name:''' Brazo Bioloid controlado por ROS con interfaz Arduino
 +
* '''Author:''' [http://www.fernando.casadogarcia.es Fernando Casado García]
 +
* '''Dates:''' September 2013 -
 +
* '''Degree:''' PhD
 +
* '''Tags:''' MYRAbot, manipulation, arm, Bioloid, webcam, recognition, simulation
 +
* '''Technologies:''' ROS, c++, Dynamixel, Arduino, find_object_2d, gazebo, URDF, moveIt!, actionlib, maxon, epos2, EposManager (wpi-rover)
 +
* '''State:''' Ongoing
  
* '''Authors:''' Fernando Casado
 
  
* '''Web of Authors:''' http://www.fernando.casadogarcia.es
+
----
 +
----
 +
[[File:myrabot_portada.png|100px|thumb|right|MYRABot]]
  
* '''Dates:''' September 2013
 
  
* '''Degree:''' Ph.D.
+
<center style="font-size: 30px;">MYRABot</center>
  
* '''Tags:''' MYRAbot, manipulation, arm, Bioloid
 
  
* '''Technology:''' ROS, c++, Dynamixel, Arduino
+
{| style="border: solid 0px white; width: 100%"
 +
! Español
 +
! English
 +
|-
 +
|  valign="top" width="50%" |Contenido
 +
----
  
* '''State:''' WIP
+
#[[Control brazo MYRAbot (bioloid+arduino)]]
 +
#[[Detección y cálculo de posición de objetos (cámara web)]]
 +
#[[Modelo para simulación brazo MYRAbot (urdf+gazebo)]]
 +
#[[Modelo para simulación MYRAbot (urdf+gazebo)]]
 +
#[[Integración de MYRAbot en moveIt! (gazebo+moveIt!)]]
 +
#[[Órdenes y confirmación mediante voz (sphinx+festival)]]
 +
#[[Teleoperación de MYRAbot con controlador inalámbrico xbox360 (controlador xbox360+joy)]]
  
==Arduino IDE y rosserial==
+
| valign="top" |Content
 +
----
  
Para la comunicación e intercambio de información entre [http://www.arduino.cc arduino] y [http://www.ros.org ROS] es necesario instalar [http://www.arduino.cc arduino] IDE y rosserial (''package'' de [http://www.ros.org ROS] que contiene el ''stack'' rosserial_arduino con las librerias para [http://www.arduino.cc arduino]). Comenzaremos instalando el [http://www.arduino.cc arduino] IDE, para lo que ejecutaremos los siguientes comandos en un terminal:
+
#[[MYRAbot's arm control (bioloid+arduino)]]
      sudo apt-get update
+
#[[Objects recognition and position calculation (webcam)]]
      sudo apt-get install arduino arduino-core
+
#[[MYRAbot's arm model for simulation (urdf+gazebo)]]
      sudo apt-get install arduino
+
#[[MYRAbot model for simulation (urdf+gazebo)]]
 +
#[[Integration of MYRAbot in moveIt! (gazebo+moveIt!)]]
 +
#[[Voice control (sphinx+festival)]]
 +
#[[MYRAbot's Teleoperation with xbox360 wireless controller (xbox360 controller+joy)]]
 +
|}
  
Una vez realizada la instalación del software de [http://www.arduino.cc arduino] se procedera a la instalación del ''package'' de [http://www.ros.org ROS] ejecutando en un terminal el siguiente comando:
+
MYRABot ROS packages:
      sudo apt-get install ros-electric-rosserial
 
Instalados [http://www.arduino.cc arduino] IDE y el ''package'' rosserial debemos copiar las librerial de ''stack'' rosserial_arduino a el sketchbook de [http://www.arduino.cc arduino], carpeta que se encuentra habitualmente en la carpeta personal, para lo que ejecutaremos en un terminal los siguientes comandos:
 
      roscd rosserial_arduino/libraries
 
      cp -r ros_lib home/”nombre_sesion”/sketchbook/libraries/ros_lib
 
  
===Creación de un package para nuestros programas===
+
[https://github.com/Robotica-ule/MYRABot MYRABot's GitHub]
  
Deberemos tener previamente creado un [[Fernando-TFM-ROS02#Creando un espacio de trabajo|espacio de trabajo]] para nuestra versión de [http://www.ros.org ROS]. Para poder compilar y enviar nuestros programas a la placa [http://www.arduino.cc arduino] sin tener que pasar por [http://www.arduino.cc arduino] IDE vamos a crear un ''package'' llamado “arduino_fer” con las dependencias necesarias para nuestros programas, para ello ejecutaremos los siguientes comandos en un terminal:
 
      cd ~/ros_workspace
 
      roscreate-pkg arduino_fer rosserial_arduino std_msgs
 
Deberemos sustituir el contenido del fichero CmakeLists.txt, situado en la carpeta del ''package'' creado, por el siguiente:
 
  
      cmake_minimum_required(VERSION 2.4.6)
+
----
      include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
+
----
 +
[[File:cervantes_portada.png|100px|thumb|right|CeRVaNTeS]]
  
      rosbuild_find_ros_package(rosserial_arduino)
 
      include(${rosserial_arduino_PACKAGE_PATH}/cmake_scripts/rosserial.cmake)
 
  
Para finalizar la cración del ''package'' ejecutaremos los siguientes comandos:
+
<center style="font-size: 30px;">CeRVaNTeS</center>
      roscd arduino_fer
 
      cmake .
 
  
===Primer programa (A toda potencia)===
 
  
El primer programa que vamos a realizar crea un nodo llamado “potencia” que publica un ''topic'' llamado “cifra” y está subscrito a un ''topic'' llamado “resultado”. Cuando se publique un número en el ''topic'' “cifra” lo multiplicará por si mismo y publicará el resultado en el ''topic'' “resultado”. El código del programa es el siguiente:
+
{| style="border: solid 0px white; width: 100%"
<syntaxhighlight lang=c>
+
! Español
#include <ros.h>
+
! English
#include <std_msgs/Int16.h>
+
|-
 +
| valign="top" width="50%" |Contenido
 +
----
  
ros::NodeHandle nh;
+
#[[Control brazo y base CeRVaNTeS (maxon+epos2)]]
int pot;
+
#[[Modelo para simulación brazo CeRVaNTeS (urdf+gazebo)]]
 +
#[[Modelo para simulación CeRVaNTeS (urdf+gazebo)]]
 +
#[[Integración de CeRVaNTeS en moveIt! (gazebo+moveIt!)]]
 +
#[[Teleoperación de CeRVaNTeS con controlador inalámbrico xbox360 (controlador xbox360+joy)]]
  
void potencia( const std_msgs::Int16& cifra){
+
| valign="top" |Content
 +
----
  
::pot = cifra.data*cifra.data;
+
#[[CeRVaNTeS' arm and base control (maxon+epos2)]]
}  
+
#[[CeRVaNTeS' arm model for simulation (urdf+gazebo)]]
 +
#[[CeRVaNTeS model for simulation (urdf+gazebo)]]
 +
#[[Integration of CeRVaNTeS in moveIt! (gazebo+moveIt!)]]
 +
#[[CeRVaNTeS' Teleoperation with xbox360 wireless controller (xbox360 controller+joy)]]
 +
|}
  
ros::Subscriber<std_msgs::Int16> sub("cifra", &potencia );
 
std_msgs::Int16 res;
 
  
ros::Publisher pub("resultado", &res);
+
----
 +
----
 +
[[File:rb1_portada.png|100px|thumb|right|OrBiOne]]
  
void setup()
 
{
 
  nh.initNode();
 
  nh.subscribe(sub); 
 
  nh.advertise(pub);
 
}
 
  
void loop()
+
<center style="font-size: 30px;">OrBiOne</center>
{
 
  res.data = ::pot;
 
  pub.publish( &res );
 
  nh.spinOnce();
 
  delay(1000);
 
}
 
</syntaxhighlight>
 
Para su compilación y envio a la placa [http://www.arduino.cc arduino] es necesario añadir al archivo CmakeLists.txt las siguientes líneas:
 
 
 
    <nowiki>set(FIRMWARE_NAME potencia)
 
 
 
    set(${FIRMWARE_NAME}_BOARD mega2560)        # Modelo placa arduino
 
    set(${FIRMWARE_NAME}_SRCS src/potencia.cpp )
 
    set(${FIRMWARE_NAME}_PORT /dev/ttyACM0)            # Puerto serie de subida
 
    generate_ros_firmware(${FIRMWARE_NAME})</nowiki>
 
Donde se indica el nombre del programa, tipo de placa [http://www.arduino.cc arduino], nombre y ubicación del archivo y puerto serie del PC empleado para la comunicación con la placa. Deberemos ejecutar los siguientes comandos en un terminal:
 
      roscd arduino_fer
 
      make potencia-upload
 
Para le ejecución del programa se debe lanzar en un terminal el núcleo de [http://www.ros.org ROS] ejecutando el siguiente el comando:
 
      roscore
 
En otro terminal se ejecutará el nodo que comunica a [http://www.ros.org ROS] con la placa [http://www.arduino.cc arduino] indicándole el puerto empleado para la comunicación:
 
      rosrun rosserial_python serial_node.py /dev/ttyACM0
 
Para la publicación de un número en el ''topic'' “cifra” se ejecutará en otro terminal el siguiente comando:
 
      rostopic pub cifra std_msgs/Int16 NUMERO_DESEADO --once
 
Para comprobar que realmente el programa calcula el cuadrado del número publicado en el ''topic'' “cifra” podemos ejecutar en otro terminal el siguiente comando para visualizar el ''topic'' “resultado”:
 
      rostopic echo resultado
 
 
 
==Arduino y servomotores Dinamixel==
 
 
 
En [http://savageelectronics.blogspot.com.es/2011/01/arduino-y-dynamixel-ax-12.html Savage Electronics] se encuentran las adaptaciones hardware realizadas a la placa [http://www.arduino.cc arduino] mega2560 para la correcta comunicación con los servomotores AX-12A [http://www.robotis.com/xe/dynamixel_en Dynamixel] de [http://www.robotis.com/xe/ ROBOTICS], así como las librerías empleadas para la programación [http://savageelectronics.blogspot.com.es/2011/08/actualizacion-biblioteca-dynamixel.html DynamixelSerial].
 
 
 
===Segundo programa (Muévete)===
 
 
 
En este programa simplemente se realiza un prueba de la comunicación con un servomotor [http://www.robotis.com/xe/dynamixel_en Dynamixel] AX-12A. El programa publica el ''topic'' “angulo” con la posición del motor (entero entre 0 y 1023) y está suscrito al ''topic'' “giro” del que recibe la posición a la que debe moverse (entero entre 0 y 1023), con una velocidad constante de 128 (valores entre 0 y 1023). El código del programa es el siguiente:
 
<syntaxhighlight lang=c>
 
#include <ros.h>
 
#include <std_msgs/Int16.h>
 
#include <DynamixelSerial1.h>
 
 
 
ros::NodeHandle nh;
 
 
 
 
 
void mover( const std_msgs::Int16& giro){
 
 
 
  Dynamixel.moveSpeed(1,giro.data,128);
 
 
 
}
 
 
 
ros::Subscriber<std_msgs::Int16> sub("giro", &mover );
 
 
 
std_msgs::Int16 ang;
 
ros::Publisher pub("angulo", &ang);
 
 
 
void setup()
 
{
 
  nh.initNode();
 
  nh.subscribe(sub); 
 
  nh.advertise(pub);
 
  Dynamixel.begin(1000000,2);
 
  delay(1000);
 
}
 
 
 
void loop()
 
{
 
  int posicion = Dynamixel.readPosition(1);
 
  ang.data = posicion;
 
  pub.publish( &ang );
 
  nh.spinOnce();
 
  delay(10);
 
}
 
</syntaxhighlight>
 
Para poder compilar el programa y enviarlo a la placa [http://www.arduino.cc arduino] deberemos emplear el software [http://www.arduino.cc arduino] IDE, ya que empleamos una librería externa a el systema [http://www.ros.org ROS].
 

Latest revision as of 08:23, 1 April 2016

  • Project Name: Brazo Bioloid controlado por ROS con interfaz Arduino
  • Author: Fernando Casado García
  • Dates: September 2013 -
  • Degree: PhD
  • Tags: MYRAbot, manipulation, arm, Bioloid, webcam, recognition, simulation
  • Technologies: ROS, c++, Dynamixel, Arduino, find_object_2d, gazebo, URDF, moveIt!, actionlib, maxon, epos2, EposManager (wpi-rover)
  • State: Ongoing




MYRABot


MYRABot


Español English
Contenido
  1. Control brazo MYRAbot (bioloid+arduino)
  2. Detección y cálculo de posición de objetos (cámara web)
  3. Modelo para simulación brazo MYRAbot (urdf+gazebo)
  4. Modelo para simulación MYRAbot (urdf+gazebo)
  5. Integración de MYRAbot en moveIt! (gazebo+moveIt!)
  6. Órdenes y confirmación mediante voz (sphinx+festival)
  7. Teleoperación de MYRAbot con controlador inalámbrico xbox360 (controlador xbox360+joy)
Content
  1. MYRAbot's arm control (bioloid+arduino)
  2. Objects recognition and position calculation (webcam)
  3. MYRAbot's arm model for simulation (urdf+gazebo)
  4. MYRAbot model for simulation (urdf+gazebo)
  5. Integration of MYRAbot in moveIt! (gazebo+moveIt!)
  6. Voice control (sphinx+festival)
  7. MYRAbot's Teleoperation with xbox360 wireless controller (xbox360 controller+joy)

MYRABot ROS packages:

MYRABot's GitHub




CeRVaNTeS


CeRVaNTeS


Español English
Contenido
  1. Control brazo y base CeRVaNTeS (maxon+epos2)
  2. Modelo para simulación brazo CeRVaNTeS (urdf+gazebo)
  3. Modelo para simulación CeRVaNTeS (urdf+gazebo)
  4. Integración de CeRVaNTeS en moveIt! (gazebo+moveIt!)
  5. Teleoperación de CeRVaNTeS con controlador inalámbrico xbox360 (controlador xbox360+joy)
Content
  1. CeRVaNTeS' arm and base control (maxon+epos2)
  2. CeRVaNTeS' arm model for simulation (urdf+gazebo)
  3. CeRVaNTeS model for simulation (urdf+gazebo)
  4. Integration of CeRVaNTeS in moveIt! (gazebo+moveIt!)
  5. CeRVaNTeS' Teleoperation with xbox360 wireless controller (xbox360 controller+joy)




OrBiOne


OrBiOne