Simulación de la navegación
Simulación de la navegación
Simulación con rviz
Leer el manual de usuario, afortunadamente es corto.
De la lista completa de tutoriales de rviz, comenzar con:
- 1 y 2.
Y revisar los marcadores disponibles.
Finalmente simular a la kobuki instalando softkobuki. Seguir las instrucciones en:
- Simulated Kobuki Navigation Demo. El navigation demo no funciona, pero programaremos el nuestro, así que no hay problema. El código de este paquete puede ser una buena fuente información.
- Los comandos básicos para iniciar el simulador (una vez instalado) son:
> roslaunch kobuki_softnode full.launch
> rosrun rviz rviz
> roslaunch kobuki_keyop keyop.launch
- Para visualizar en rviz, seleccionar el cuadro '\odom' y agregar un 'RobotModel'.
Creación del mapa:
- Crear una variable tipo
- Llenar la información sobre el mapa:
- Crear un arreglo de char para agregar los valores iniciales
- Inicializar data usando vector: (Previamente en el encabezado usar #include <vector>)
- Para visualizar en rviz, publicar el mensaje con el mapa
Posición inicial
Se puede informar a rviz sobre la posición inicial de la kobuki enviando un mensaje al tópico /initialpose, de tipo /geometry_msgs/PoseWithCovarianceStamped. NOTA: Ojo con los espacios después de los :, sin ellos no funciona.
> rostopic pub -1 /initialpose geometry_msgs/PoseWithCovarianceStamped -- '{seq: 0, stamp: [0,0], frame_id: "/odom"}' '{pose: {position: {x: 3.0, y: 3.0}, orientation: {w: 1.0}}}'
Otra altertativa:
> rostopic pub -1 /initialpose geometry_msgs/PoseWithCovarianceStamped -- '[0, [0,0], /odom]' '{pose: {position: {x: 3.0, y: 3.0}, orientation: {w: 1.0}}}'
Formato YAML
Aunque esto no basta para cambiar la posición inicial del modelo del robot en la visualización.
Meta de la navegación
Para indicar al simulador a dónde queremos mover a la Kobuki, podemos usar la interfaz de rviz. Haciendo click en "2D Nav Goal" el indicador del ratón cambiará por una flechita, cuando se haga click en el mapa, rviz publicará en el tópico "/move_base_simple/goal" un mensaje de tipo geometry_msgs/PoseStamped, por lo que bastará con agregar un suscriptor al nodo que necesite conocer las coordenadas destino.
Intersección con los obstáculos a partir de la posición del robot.
Simulación en Gazebo
roslaunch
- Para utilzar al simulador se lanzarán y configurarán varios nodos y paquetes, por lo que es necesario revisar primero el funcionamiento de roslaunch.
Gazebo
- Tutorial de gazeebo para lanzar simulaciones con mundos personalizados: Tutorial: Using roslaunch to start Gazebo, world files and URDF models.
Kobuki
Aunque ya habíamos visto esto, incluyo de nuevo el punto de partida con los demos para la Kobuki:
SDF
SDF es un formato para describir robots y sus ambientes, utilizado por Gazebo.
Con Python Tkinter
- Crear un paquete de ROS, donde se pondrá el código para que navegue el robot simulado.
- Programar un script que dibuje el mapa en 2D donde se moverá el robot.
- Usar uno o varios canvas de tkinter.
- Para ubicar componentes de la interfaz puede ser necesario usar un manejador: Layout.
- Para que el código quede más ordenado, se recomienda poner todo lo referente a Tkinter dentro de una clase, ver el tutorial Hello, Again.
- Probar que el nodo corra con rosrun, que se pueda cerrar la ventana o apagar el nodo con Ctrl-C. Para ello puede ser necesario utlizar la función after de Tk.