Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Nox - Un robot errante de la casa (ROS)

Nox es un Agradable (y lento) robot que utiliza SLAM (ROS) con un Kinect para navegar en su entorno. Nox es un robot de accionamiento diferencial construido con ROS, Raspberry Pi y Arduino. Comencé el proyecto como una base de robot con navegación básica que luego podía usar para otras cosas, como una aspiradora.

Sin embargo, rápidamente decidí convertirlo en un robot independiente con un diseño adecuado, ya que a menudo falta en los robots de bricolaje. En su estado actual, el robot puede usar SLAM (gmapping) para crear un mapa de su entorno (usando la percepción de profundidad de Kinect para detectar paredes y obstáculos) y localizarse dentro del mapa. Puede planificar un camino hacia una meta determinada y conducir hacia ella evitando obstáculos.

Nox funciona con una batería de iones de litio de 11,1v y funciona con dos motores. El panel frontal se puede quitar para cambiar la batería. Un orificio ranurado y un tornillo lo sujetan y permiten colocar baterías de diferentes longitudes. Pongo una alarma de batería con una pantalla para controlar el nivel.


Los motores son dos motores de 12 V CC (107 rpm) de Banggood. Son agradables, pero en realidad no necesito que el robot vaya tan rápido y hubiera estado bien si cambiara parte de la velocidad por codificadores más precisos.

Sobre el diseño, la principal limitación era tener algo que se integrara bien con el Kinect, ya que estaba construyendo el robot a su alrededor. Me inspiré en el aspecto triangular de muchos objetos de estilo moderno (y mucho de Deus Ex, tengo que admitirlo). Tenía muchas ganas de tener un robot agradable y de aspecto profesional, ya que es algo que a menudo falta en los robots de bricolaje (pero no se preocupe, el cableado está tan desordenado como debería ser). Fue necesario dedicar algunas semanas al modelo CAD para ajustar todo.

Las luces laterales son recicladas de un palo brillante de Nochevieja que obtuve gratis y sirven para indicar los estados del robot. Cuando el Arduino no está conectado al maestro ROS (lo que indica que el programa del robot aún no se ha iniciado), las luces parpadean tres veces seguidas muy rápidamente. Al conducir, las luces parpadean con un aspecto más "respiratorio" y la velocidad de parpadeo depende de la velocidad del robot.

Sin conexión parpadeando

Parpadeo inactivo

Estructura

Como se indicó anteriormente, el robot es de accionamiento diferencial, por lo que los motores se colocan en el mismo eje. La base está hecha de madera con dos ruedas giratorias para apoyo. Inicialmente planeé usar una rueda giratoria para evitar la hiperestática, pero no pude encontrar una de buen tamaño. El resto de la estructura está hecho principalmente de soportes de madera y metal, fáciles de encontrar en cualquier tienda de bricolaje. En la parte trasera del robot se pueden apilar placas para colocar las placas electrónicas.


El carter está hecho de una placa de plástico negro, cortada y pegada a mano (definitivamente usará la impresión 3D la próxima vez).


Hardware

En el interior del controlador principal hay una Raspberry Pi 3B con Ubuntu y ROS. Se puede acceder a la Raspberry desde una computadora externa a través de WiFi y ssh para dar orden al robot. El programa ROS lleva a cabo el cálculo de la odometría, la planificación de la navegación y el mapeo utilizando Kinect. La Raspberry Pi envía el comando de velocidad a un Arduino que controla los dos motores con un PID a través de un Adafruit Motor Shield. Lee el valor del codificador, calcula la velocidad de cada motor y envía el valor a la Raspberry para el cálculo de la odometría. Arduino y Raspberry Pi están conectados por USB y el programa Arduino actúa como un nodo ROS (busque rosserial para obtener más información).

Usé diferentes tipos de Arduino antes de establecerme con el bueno. Al principio usé el Arduino Uno básico pero no tenía suficientes pines de interrupción para leer los valores del codificador (el mejor método para hacerlo con Arduino). La velocidad y la precisión eran limitadas ya que tuve que recurrir a otros trucos de programación para que funcionara. Intenté usar un Arduino Leonardo, pero el factor limitante era la memoria y finalmente tuve que cambiarme a un Arduino Mega 2560. Una bendición disfrazada, ya que tengo mucha memoria y pines para agregar nuevas funciones ahora.

Kinect 360 fue parte del proyecto desde el principio, ya que quería hacer SLAM (localización y mapeo simultáneo) pero sin gastar una tonelada de dinero en un lidar. Un kinect es básicamente una cámara 3D de 25 € (por supuesto, no espere la misma precisión que un Hokuyo) y, además del escaneo de profundidad necesario para SLAM, también se puede usar para visión por computadora, tiene un acelerómetro y un micrófono formación. Todo lo cual es útil para los siguientes pasos del proyecto.

Se utilizan dos convertidores de CC para convertir el voltaje. El motor está funcionando directamente con el voltaje de la batería (más o menos 11.1v). La parte de comando (que incluye Raspberry Pi, Arduino y codificadores) funciona con 5V convertidos de la batería. El Kinect necesita un voltaje estabilizado de 12 V y un convertidor también lo proporciona desde la batería.

Software

En la parte del software, utilicé ROS Kinetic. El único nodo que realmente escribí es el "nox_controller" que, como su nombre no implica realmente, se usa para calcular la odometría a partir de los datos de Arduino (velocidad del motor). El modelo utilizado para los cálculos se puede encontrar en el artículo “Sobre la odometría de los robots de accionamiento diferencial con aplicación a la planificación de rutas” (de hecho hice mis propias fórmulas, pero son las mismas, de todos modos vale la pena leer el artículo). Las matrices de covarianza se dan en la odometría, pero no se utilizan actualmente (sin embargo, será útil si estoy integrando una IMU a la odometría).

En el Arduino el control del motor se realiza a través de PWM. Se supone que un PID administra la velocidad de cada motor, pero como la relación PWM / velocidad del motor es muy lineal, obtuve un buen resultado con un comando directo de la velocidad y desactivé el PID por ahora. No se preocupe, aunque la implementación y la calibración de PID correctas están en camino.

Leer más detalles:Nox - Un robot errante de la casa (ROS)


Proceso de manufactura

  1. Cómo hacer una plataforma de robot Arduino + Raspberry Pi
  2. Robot que usa Raspberry Pi y Bridge Shield
  3. Robot de caja de CD Raspberry Pi
  4. ANDY:Un robot “humanoide” multiusos
  5. Robot de alarma rodante
  6. Crea un robot Creeper de Minecraft
  7. Robot autónomo cuadrúpedo JQR
  8. Arquímedes:El búho robot con IA
  9. EMAR Mini - Robot de asistencia de emergencia
  10. Robot controlado por Wifi usando Raspberry Pi
  11. Intellisaurus - Kit de robot dinosaurio