2 minute read

Esta semana enfrentamos varios problemas con la simulación.

Mejora en el formato de los launchers

La semana anterior se hicieron los launchers dejando los nodos en el ‘return’. Para mejorar el formato, se siguió el que tienen en RoboticsInfraestructure. Se declararon varias variables que contenían los nodos o launchers y se llamaron a estas mismas.

Uso de drones

Una vez mejorado el formato con el nodo ‘spawn_entity’ del paquete ‘gazebo_ros’, se usó el dron del repositorio de prueba de ‘aerostack2’ en Gazebo Ignition y su plataforma. Se intentó ajustar para Gazebo 11, lo cual resultó en un intento fallido y una forma ineficaz de abordar el problema.

Después de leer más documentación, encontré otro ejemplo con el PX4. Al principio, ni siquiera se me lanzaba el simulador. El fallo fue bastante básico; faltaban dependencias por instalar. Como el programa se lanzaba con Tmux, me di cuenta al comprobar todas las subterminales que el fallo venía de que un paquete del PX4 faltaba, el cual tenía que instalarse directamente sin utilizar ‘colcon build’.

Fallo en odom

Después de esto, logré que el simulador se lanzara. Utilicé el modelo ‘iris_dual_cam’, ya que es el dron con características más parecidas al Tello en simulación. Sin embargo, me encontré con un fallo en la odometría, ya que el dron no se localizaba en el entorno.

Odom/transform error

En el launcher del estimador de estado, en la ventana izquierda, podemos ver cómo queda bloqueado mientras busca la odometría, el topic tiene un editor y un suscriptor, pero cuando me subscribo desde una terminal, no llega nada.

Odom error

Tras leer los issues en el repositorio de Aerostack2 y revisar los warnings que aparecían al lanzar el controlador, descubrí que me faltaba especificar un parámetro: ‘tf_timeout_threshold’ en el archivo ‘motion_controller.yaml’, al parecer esto podría afectar en la odometría en simulación y en la creación de las tfs, los valores ideales eran 30ms o 50ms.

Fallo en tfs

Además, otro consejo fue basarse en el script ‘drone_wrapper.py’ del paquete jderobot_drones, donde añadí las siguientes modificaciones al main para que realizara una pequeña misión:

def main(args=None):
    rclpy.init(args=args)
    drone = DroneWrapper()

    # Define the desired takeoff height in meters
    takeoff_height = 5.0
    drone.takeoff(takeoff_height)


    forward_velocity = 1.0  
    drone.set_cmd_vel(forward_velocity, 0.0, 0.0, drone.get_yaw())

    forward_duration = 5.0  
    rclpy.spin_until_future_complete(drone, rclpy.duration.Duration(seconds=forward_duration))

    drone.set_cmd_vel(0.0, 0.0, 0.0, drone.get_yaw())

    rclpy.spin(drone)
    rclpy.shutdown()

Se avanza durante 5 segundos con control de velocidad y luego se detiene. El despegue aparentemente tuvo éxito, pero surgió el siguiente problema.

Tfs error

Después de comprobar el monitor de tfs solo salieron las siguientes:

  • drone0/map
  • drone0/odom

Pero efectivamente, no se encontraba la que salía en el error.

Plataforma tello

También se examinó la plataforma del Tello junto con sus parámetros al buscar los fallos en la simulación con Ignition.