Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

Comuníquese con el TurtleBot

En este ejemplo se presenta la plataforma TurtleBot® y las formas en que los usuarios de MATLAB® pueden interactuar con ella. En concreto, el código de este ejemplo muestra cómo publicar mensajes en el TurtleBot (por ejemplo, las velocidades) y cómo suscribirse a los temas que publica el TurtleBot (por ejemplo, odometría).

The TurtleBot must be running for this example to work.

Requisitos previos: oEmpiece con gazebo y un TurtleBot simuladoEmpezar con un real TurtleBot

Paquete de soporte de hardware para TurtleBot

Este ejemplo proporciona una visión general de trabajar con un TurtleBot utilizando su interfaz ROS nativa. El paquete de soporte de Robotics System Toolbox™ para robots basados en® de TurtleBot proporciona una interfaz más optimizada para TurtleBot. Le permite:

  • Adquiera datos de sensores y envíe comandos de control sin llamar explícitamente a los comandos ROS

  • Comunicarse de forma transparente con un robot simulado en gazebo o con un TurtleBot físico

Para instalar el paquete de soporte, ábralo en la pestaña MATLAB y seleccione "robots basados en TurtleBot".Add-Ons > Get Hardware Support PackagesHome Alternativamente, utilice el comando.roboticsAddons

Conéctese a la TurtleBot

Si está utilizando un TurtleBot real y sigue los pasos de configuración de hardware en, el robot se está ejecutando.The TurtleBot must be running.Empezar con un real TurtleBot Si está utilizando un TurtleBot en la simulación y siguió los pasos de configuración en, inicie uno de los mundos de Gazebo® desde el escritorio (por ejemplo).Empiece con gazebo y un TurtleBot simuladoGazebo TurtleBot World

En la instancia de MATLAB en el equipo host, ejecute el siguiente comando. Reemplace con la dirección IP del TurtleBot.ipaddress Esta línea inicializa ROS y se conecta al TurtleBot.

ipaddress = '192.168.203.129'; rosinit(ipaddress)
Initializing global node /matlab_global_node_43053 with NodeURI http://192.168.203.1:55724/ 

Si la red que está utilizando para conectarse a la TurtleBot no es el adaptador de red predeterminado, puede especificar manualmente la dirección IP del adaptador que se utiliza para conectarse al robot. Esto puede suceder si utiliza una red inalámbrica, pero también tiene una conexión Ethernet activa. Reemplace IP_OF_TURTLEBOT con la dirección IP del TurtleBot y el IP_OF_HOST_COMPUTER con la dirección IP del adaptador del host que se utiliza para conectar con el robot:

rosinit('IP_OF_TURTLEBOT','NodeHost','IP_OF_HOST_COMPUTER'); 

Visualice todos los temas de ROS disponibles introduciendo el siguiente comando:

rostopic list 

Si no ve ningún tema, la red no se ha configurado correctamente. Refiera al comienzo de este documento para los pasos de la configuración de la red.

Mueva el robot y reproduzca un sonido

Puede controlar el movimiento del TurtleBot publicando un mensaje en el tema./mobile_base/commands/velocity El mensaje debe ser de tipo y contiene datos que especifican las velocidades lineales y angulares deseadas.geometry_msgs/Twist Los movimientos del TurtleBot se pueden controlar a través de dos valores diferentes: la velocidad lineal a lo largo del eje X controla el movimiento hacia delante y hacia atrás y la velocidad angular alrededor del eje Z controla la velocidad de rotación de la base del robot.

Establezca una variable que se usará para un breve movimiento TurtleBot.velocity

velocity = 0.1;     % meters per second

Cree un publicador para el tema y el mensaje correspondiente que contenga los valores de velocidad./mobile_base/commands/velocity

robot = rospublisher('/mobile_base/commands/velocity') ; velmsg = rosmessage(robot);

Establezca la velocidad de avance (a lo largo del eje X) del robot en función de la variable y publique el comando en el robot.velocity El TurtleBot avanzará una pequeña distancia y luego llegará a una parada.

velmsg.Linear.X = velocity; send(robot,velmsg);

Por razones de seguridad, el TurtleBot sólo se mantendrá en movimiento, si recibe continuamente datos de velocidad sobre el tema./mobile_base/commands/velocity

Para ver el tipo de mensaje publicado por el tema de velocidad, ejecute lo siguiente:

rostopic type /mobile_base/commands/velocity
geometry_msgs/Twist 

El tema espera mensajes de tipo, que es exactamente el tipo de la que creó anteriormente.geometry_msgs/Twistvelmsg

Para ver qué nodos están publicando y suscribiéndose a un tema determinado, utilice el comando:.rostopic info TOPICNAME El siguiente comando enumera los publicadores y suscriptores para el tema de velocidad. MATLAB aparece como uno de los editores.

  rostopic info /mobile_base/commands/velocity
Type: geometry_msgs/Twist   Publishers: * /matlab_global_node_43053 (http://192.168.203.1:55724/) * /mobile_base_nodelet_manager (http://192.168.203.129:45425/)   Subscribers: * /gazebo (http://192.168.203.129:40018/) 

Si está utilizando el TurtleBot real, puede enviarle comandos de sonido.OPTIONAL:

  soundpub = rospublisher('/mobile_base/commands/sound', 'kobuki_msgs/Sound')   soundmsg = rosmessage('kobuki_msgs/Sound');   soundmsg.Value = 6;      % Any number 0-6   send(soundpub,soundmsg); 

Recibir posición y orientación del robot

El TurtleBot utiliza el tema para publicar su posición actual y orientación (colectivamente denotado como pose)./odom Dado que el TurtleBot no está equipado con un sistema GPS, la pose será relativa a la pose que tenía el robot cuando se enciende por primera vez.

Cree un suscriptor para los mensajes de odometría

odom = rossubscriber('/odom');

Espere a que el suscriptor devuelva los datos, luego extraiga los datos y asígnelos a las variables x, y y z:

odomdata = receive(odom,3); pose = odomdata.Pose.Pose; x = pose.Position.X; y = pose.Position.Y; z = pose.Position.Z;

Si ve un error, es probable que el comando haya agotado el tiempo de espera.Note:receive Asegúrese de que se está publicando la odometría y de que la red está configurada correctamente.

Mostrar los valores x, y y z

[x,y,z]
ans = 1×3

    1.8626   -0.0309         0

La orientación del TurtleBot se almacena como un cuaternión en la variable.pose.Orientation Se utiliza para convertir en la representación más conveniente de los ángulos de Euler.quat2eul Para mostrar la orientación actual, del robot en grados, ejecute las siguientes líneas.theta

quat = pose.Orientation; angles = quat2eul([quat.W quat.X quat.Y quat.Z]); theta = rad2deg(angles(1))
theta = 4.4540 

Recibir datos de imagen

Asegúrese de que la cámara de Kinect® está funcionando. Si vuelve a enumerar los temas, puede ver que se enumeran muchos temas que empiezan por.rostopic list/camera Con el hardware real de TurtleBot, puede encontrar el siguiente tema:

/camera/rgb/image_color/compressed 

Suscríbase al tema de la imagen comprimida.

if ismember('/camera/rgb/image_color/compressed', rostopic('list'))     imsub = rossubscriber('/camera/rgb/image_color/compressed'); end

Si está utilizando gazebo, la lista de temas es diferente. En su lugar, utilice el siguiente tema:

/camera/rgb/image_raw 

Suscríbase al tema de imagen RAW.

if ismember('/camera/rgb/image_raw', rostopic('list'))     imsub = rossubscriber('/camera/rgb/image_raw'); end

Después de suscribirse a un tema de imagen, espere los datos y, a continuación, mostrarlos.imshow

img = receive(imsub); figure imshow(readImage(img));

Un ejemplo de una imagen del mundo real de la cámara Kinect se ve así:

Para mostrar una imagen de actualización continua de la cámara Kinect, utilice el siguiente bucle while:

tic; while toc < 20   img = receive(imsub);   imshow(readImage(img)) end

Desconectar del robot

Borre el espacio de trabajo de los editores, suscriptores y otros objetos relacionados con ROS cuando haya terminado con ellos:

clear

Utilice una vez que haya terminado de trabajar con la red de ROS.rosshutdown Apague el nodo global y desconéctese del TurtleBot.

rosshutdown
Shutting down global node /matlab_global_node_43053 with NodeURI http://192.168.203.1:55724/ 

Próximos pasos

Consulte el siguiente ejemplo:Explore el comportamiento básico de la TurtleBot