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

Explore el comportamiento básico de la TurtleBot

Este ejemplo le ayuda a explorar la autonomía básica con el TurtleBot®. El comportamiento descrito impulsa al robot hacia adelante y cambia su dirección cuando hay un obstáculo. Se suscribirá al tema de escaneo láser y publicará el tema de velocidad para controlar el TurtleBot.

Requisitos previos:Comuníquese con el 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

Asegúrese de que tiene un TurtleBot ejecutándose ya sea en la simulación a través de Gazebo® o en hardware real. Consulte o para el procedimiento de inicio.Empiece con gazebo y un TurtleBot simuladoEmpezar con un real TurtleBot Cualquier mundo gazebo funciona mientras se ejecuta en la simulación, sin embargo, es el más interesante para los propósitos de este ejemplo.Gazebo TurtleBot World

Inicializar ROS. Conéctese al TurtleBot reemplazando con la dirección IP del TurtleBot.ipaddress

ipaddress = '192.168.203.129'
ipaddress =  '192.168.203.129' 
rosinit(ipaddress)
Initializing global node /matlab_global_node_60181 with NodeURI http://192.168.203.1:50771/ 

Cree un publicador para la velocidad del robot y cree un mensaje para ese tema.

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

Recibir datos de escaneo

Asegúrese de iniciar la cámara de Kinect® si está trabajando con hardware real de TurtleBot. Ese comando es:roslaunch turtlebot_bringup 3dsensor.launch

Debe ejecutar el comando en un terminal en el TurtleBot. El TurtleBot usa los datos de Kinect para simular un escaneo láser que se publica en el tema./scan Para el resto de este ejemplo, el término "escaneo láser" se refiere a los datos publicados en este tema.

Suscríbase al tema./scan

laser = rossubscriber('/scan');

Espere a que llegue un mensaje de escaneo láser y luego mostrarlo.

scan = receive(laser,3)
scan =    ROS LaserScan message with properties:         MessageType: 'sensor_msgs/LaserScan'             Header: [1×1 Header]           AngleMin: -0.5216           AngleMax: 0.5243     AngleIncrement: 0.0016      TimeIncrement: 0           ScanTime: 0.0330           RangeMin: 0.4500           RangeMax: 10             Ranges: [640×1 single]        Intensities: [0×1 single]    Use showdetails to show the contents of the message  
figure plot(scan);

Si ve un error, es posible que el tema de la exploración láser no esté recibiendo ningún dato. Si está ejecutando en la simulación, intente reiniciar gazebo. Si usa hardware, asegúrese de que ha iniciado la cámara de Kinect correctamente.

Ejecute las siguientes líneas de código, que trazan una alimentación de escaneo láser en vivo durante diez segundos. Mueva un objeto delante de la TurtleBot y tráirelo lo suficientemente cerca hasta que ya no aparezca en la ventana de trazado. El escaneo láser tiene un rango limitado debido a las limitaciones de hardware de la cámara Kinect. El Kinect tiene un rango de detección mínimo de 0,8 metros y un rango máximo de 4 metros. Los objetos fuera de estos límites no serán detectados por el sensor.

tic; while toc < 10   scan = receive(laser,3);   plot(scan); end

Evasión de obstáculos simple

En función de las lecturas de distancia del escaneo láser, puede implementar un algoritmo simple de evasión de obstáculos. Puede usar un bucle simple para implementar este comportamiento.while

Establezca algunos parámetros que se usarán en el bucle de procesamiento. Puede modificar estos valores para un comportamiento diferente.

spinVelocity = 0.6;       % Angular velocity (rad/s) forwardVelocity = 0.1;    % Linear velocity (m/s) backwardVelocity = -0.02; % Linear velocity (reverse) (m/s) distanceThreshold = 0.6;  % Distance threshold (m) for turning

Ejecutar un bucle para mover el robot hacia adelante y calcular los obstáculos más cercanos al robot. Cuando un obstáculo está dentro de los límites del, el robot gira.distanceThreshold Este bucle se detiene después de 20 segundos de tiempo de ejecución. CTRL + C (o control + C en el Mac) también detiene este bucle.

  tic;   while toc < 20       % Collect information from laser scan       scan = receive(laser);       plot(scan);       data = readCartesian(scan);       x = data(:,1);       y = data(:,2);       % Compute distance of the closest obstacle       dist = sqrt(x.^2 + y.^2);       minDist = min(dist);            % Command robot action       if minDist < distanceThreshold           % If close to obstacle, back up slightly and spin           velmsg.Angular.Z = spinVelocity;           velmsg.Linear.X = backwardVelocity;       else           % Continue on forward path           velmsg.Linear.X = forwardVelocity;           velmsg.Angular.Z = 0;       end          send(robot,velmsg);   end

Desconectar del robot

Es una buena práctica borrar el espacio de trabajo de 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_60181 with NodeURI http://192.168.203.1:50771/ 

Más información

El escaneo láser tiene un rango mínimo en el que ya no ve los objetos en su camino. Ese mínimo está en algún lugar alrededor de 0,5 metros de la cámara Kinect.

El escaneo láser no puede detectar paredes de vidrio. A continuación se muestra una imagen de la cámara Kinect:

Aquí está el escaneo láser correspondiente:

La papelera es visible, pero no se puede ver la pared de cristal. Cuando utilice el TurtleBot en áreas con ventanas o muros que el TurtleBot podría no ser capaz de detectar, tenga en cuenta las limitaciones del escaneo láser.

Próximos pasos

Consulte el siguiente ejemplo:Controle el TurtleBot con teleoperación