Difference between revisions of "Mobile manipulation"

From robotica.unileon.es
Jump to: navigation, search
(Primer programa (A toda potencia))
 
(109 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]
* '''Authors:''' Fernando Casado García
 
 
 
* '''Web of Authors:''' http://www.fernando.casadogarcia.es
 
 
 
 
* '''Dates:''' September 2013 -
 
* '''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
  
* '''Degree:''' Ph.D.
 
 
* '''Tags:''' MYRAbot, manipulation, arm, Bioloid
 
 
* '''Technology:''' ROS, c++, Dynamixel, Arduino
 
 
* '''State:''' WIP
 
 
==Brazo Bioloid==
 
 
El brazo en el que se basa este proyecto es el desarrollado en el proyecto [[Carlos-TFM-MYRABot01 | MYRA Robot: Hardware Update ]], realizado por Carlos Rodríguez Hernández. Los componentes principales de este son:
 
[[file:IMG_4871_b.JPG|thumb|200px|Fotografía del Brazo [http://www.robotis.com/xe/BIOLOID_main_en Bioloid].]]
 
 
* Placa [http://arduino.cc/en/Main/ArduinoBoardMega2560 arduino mega 2560].
 
* Circuito integrado [http://www.futurlec.com/74LS/74LS241.shtml 74LS241] (Bufer tri-estado).
 
* Circuito regulador de tensión.
 
* 5 servomotores serie [http://support.robotis.com/en/product/dynamixel/ax_series/dxl_ax_actuator.htm Dynamixel AX-12A].
 
* Piezas de montaje de kit Bioloid.
 
* Piezas realizadas para pinza y fijación al MYRAbot.
 
 
 
 
 
==Arduino IDE y rosserial==
 
 
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:
 
 
      sudo apt-get update
 
      sudo apt-get install arduino arduino-core
 
      sudo apt-get install arduino
 
 
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:
 
 
      sudo apt-get install ros-NUESTRA_VERSIÓN_ROS-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===
 
 
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:
 
 
      <nowiki>cmake_minimum_required(VERSION 2.4.6)
 
      include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
 
 
      rosbuild_find_ros_package(rosserial_arduino)
 
      include(${rosserial_arduino_PACKAGE_PATH}/cmake_scripts/rosserial.cmake)</nowiki>
 
 
Para finalizar la cración del ''package'' ejecutaremos los siguientes comandos:
 
      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:
 
<syntaxhighlight lang=c>
 
#include <ros.h>
 
#include <std_msgs/Int16.h>
 
 
ros::NodeHandle nh;
 
int pot;
 
  
void potencia( const std_msgs::Int16& cifra){
+
----
 +
----
 +
[[File:myrabot_portada.png|100px|thumb|right|MYRABot]]
  
::pot = cifra.data*cifra.data;
 
}
 
  
ros::Subscriber<std_msgs::Int16> sub("cifra", &potencia );
+
<center style="font-size: 30px;">MYRABot</center>
std_msgs::Int16 res;  
 
  
ros::Publisher pub("resultado", &res);
 
  
void setup()
+
{| style="border: solid 0px white; width: 100%"
{
+
! Español
  nh.initNode();
+
! English
  nh.subscribe(sub);  
+
|-
  nh.advertise(pub);
+
| valign="top" width="50%" |Contenido
}
+
----
  
void loop()  
+
#[[Control brazo MYRAbot (bioloid+arduino)]]
{
+
#[[Detección y cálculo de posición de objetos (cámara web)]]
  res.data = ::pot;
+
#[[Modelo para simulación brazo MYRAbot (urdf+gazebo)]]
  pub.publish( &res );
+
#[[Modelo para simulación MYRAbot (urdf+gazebo)]]
  nh.spinOnce();
+
#[[Integración de MYRAbot en moveIt! (gazebo+moveIt!)]]
  delay(1000);
+
#[[Órdenes y confirmación mediante voz (sphinx+festival)]]
}
+
#[[Teleoperación de MYRAbot con controlador inalámbrico xbox360 (controlador xbox360+joy)]]
</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)
+
| valign="top" |Content
 +
----
  
    set(${FIRMWARE_NAME}_BOARD MODELO_NUESTRA_PLACA)         # Modelo placa arduino
+
#[[MYRAbot's arm control (bioloid+arduino)]]
    set(${FIRMWARE_NAME}_SRCS src/potencia.cpp )
+
#[[Objects recognition and position calculation (webcam)]]
    set(${FIRMWARE_NAME}_PORT /dev/ttyACM0)           # Puerto serie de subida
+
#[[MYRAbot's arm model for simulation (urdf+gazebo)]]
    generate_ros_firmware(${FIRMWARE_NAME})</nowiki>
+
#[[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)]]
 +
|}
  
Donde se indica el nombre del programa, tipo de placa [http://www.arduino.cc arduino] (uno, atmega328 o mega2560), 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:
+
MYRABot ROS packages:
      roscd arduino_fer
 
      make potencia-upload
 
Para la ejecución del programa se debe lanzar en un terminal el núcleo de [http://www.ros.org ROS], si no se encuentra ya en marcha, ejecutando el siguiente 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. Para saber el puerto que se está empleando, con la placa [http://www.arduino.cc arduino] conectada al pc a través de su puerto USB, podemos verlo en el menú "Herramientas">"Puerto serie" del software [http://www.arduino.cc arduino] IDE. En nuestro caso es el "ttyACM0":
 
      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==
+
[https://github.com/Robotica-ule/MYRABot MYRABot's GitHub]
  
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://arduino.cc/en/Main/ArduinoBoardMega2560 arduino mega 2560] para la correcta comunicación con los servomotores [http://support.robotis.com/en/product/dynamixel/ax_series/dxl_ax_actuator.htm Dynamixel AX-12A] de [http://www.robotis.com/xe/ ROBOTICS], así como las librerías utilizadas para la programación ([http://savageelectronics.blogspot.com.es/2011/08/actualizacion-biblioteca-dynamixel.html DynamixelSerial]).
 
  
===Segundo programa (Muévete)===
+
----
 +
----
 +
[[File:cervantes_portada.png|100px|thumb|right|CeRVaNTeS]]
  
En este programa simplemente se realiza un prueba de la comunicación entre la placa [http://arduino.cc/en/Main/ArduinoBoardMega2560 arduino mega 2560] con un servomotor [http://support.robotis.com/en/product/dynamixel/ax_series/dxl_ax_actuator.htm 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>
+
<center style="font-size: 30px;">CeRVaNTeS</center>
#include <ros.h>
 
#include <std_msgs/Int16.h>
 
#include <DynamixelSerial1.h>
 
  
ros::NodeHandle nh;
 
  
 +
{| style="border: solid 0px white; width: 100%"
 +
! Español
 +
! English
 +
|-
 +
| valign="top" width="50%" |Contenido
 +
----
  
void mover( const std_msgs::Int16& giro){
+
#[[Control brazo y base CeRVaNTeS (maxon+epos2)]]
 +
#[[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)]]
  
  Dynamixel.moveSpeed(1,giro.data,128);
+
| valign="top" |Content
 +
----
  
}
+
#[[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("giro", &mover );
 
  
std_msgs::Int16 ang;
+
----
ros::Publisher pub("angulo", &ang);
+
----
 +
[[File:rb1_portada.png|100px|thumb|right|OrBiOne]]
  
void setup()
 
{
 
  nh.initNode();
 
  nh.subscribe(sub); 
 
  nh.advertise(pub);
 
  Dynamixel.begin(1000000,2);
 
  delay(1000);
 
}
 
  
void loop()
+
<center style="font-size: 30px;">OrBiOne</center>
{
 
  int posicion = Dynamixel.readPosition(1);
 
  ang.data = posicion;
 
  pub.publish( &ang );
 
  nh.spinOnce();
 
  delay(10);
 
}
 
</syntaxhighlight>
 
Para poder compilar y enviar el programa 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 al sistema [http://www.ros.org ROS] y no nos permite hacerlo usando [[#Creación de un package para nuestros programas|nuestro ''package'']].
 
Una vez transferido el programa a la placa, para probar el programa debemos ejecutar en un terminal el siguiente comando:
 

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