Cómo construir un automóvil autónomo a partir de un automóvil normal

Permítanme comenzar con algunas advertencias primero. Los únicos vehículos totalmente autónomos exitosos (en el sentido de que realmente pueden navegar en el mundo real) han sido los de Google. Google simplifica significativamente el problema de percepción al obtener y etiquetar manual / semiautomáticamente modelos 3D detallados de todos los lugares donde conducirán sus automóviles, de antemano. Además, tienen LIDAR Velodyne increíblemente caros junto con una gran cantidad de otros sensores [1] en sus automóviles. Al conducir, esto les permite alinear simplemente las nubes de puntos entrantes con las nubes pregrabadas, y gracias a las ubicaciones pre-etiquetadas de los semáforos, el marcado de carriles, etc., la tarea de percepción se reduce a la sustracción de fondo y al seguimiento (a lo largo del tiempo) de otros usuarios de la carretera, como vehículos y peatones. Por supuesto, estoy simplificando demasiado esto, porque su sistema de percepción todavía hace algunas hazañas increíbles, ¡como detectar señales de mano por parte de ciclistas! Pero quiero contrastar esto con los sistemas de cámara + RADAR que hasta ahora solo han funcionado con éxito en carreteras o en entornos urbanos controlados. Esto se debe a que si no tiene un Velodyne, muchos de los desafíos técnicos involucrados en la construcción de un automóvil totalmente autónomo siguen siendo problemas de investigación abiertos. Pero supondré que no tiene 60,000 $ de sobra, por lo que Velodyne LIDAR está fuera. [Si tienes un Velodyne, entonces Sebastian Thrun, fundador de los esfuerzos de Google y ganador del DARPA Urban Challenge, tiene un curso en línea [0] para ti].

Además, supondré que su automóvil tampoco tiene RADAR, lo que podría haberle permitido rastrear media docena de objetos en las proximidades de su automóvil con mucha precisión. Entonces, el sistema que describo a continuación se basa solo en cámaras pasivas (un par estéreo para ser precisos) y viene con las debilidades de las cámaras pasivas actuales, es decir, no funcionará en la noche, no funcionará en extremo condiciones climáticas como la lluvia o la nieve, probablemente también tendrá problemas en condiciones de iluminación extrañas, como si conduce al lado de un bosque y recibe mucha luz filtrada a través de los árboles, lo que causa mucha variación en la iluminación. Una vez que lo haya eliminado, intentaré señalar la literatura de vanguardia sobre cada uno de los submódulos que necesitará para construir algo que al menos funcione en un curso de prueba.

Ah … y supondré además que tienes una gran capacidad de cálculo disponible a bordo. Idealmente, un escritorio de múltiples núcleos con una GPU Nvidia reciente. Para las cámaras, usted mismo debe construir una línea de base ancha (línea de base ~ 0.5 m) [2]. Incluso encontré una discusión interesante sobre cómo elegir las cámaras [3]. Configuración de la plataforma de la cámara, incluida la elección de la configuración adecuada de la cámara, recoger los lentes y polarizadores correctos (?), Junto con IMU / GPS, sincronizar todo y llevar esos datos a la memoria (sin necesidad de E / S de disco que pueden ralentizar todo significativamente) no es trivial, pero al menos no es un problema de investigación abierto y cualquier persona con habilidades de programación decentes y conocimientos básicos de electrónica / microcontroladores puede hacerlo, por ejemplo, en un mes.

Como puede imaginar, hay dos componentes clave a tener en cuenta al construir un vehículo autónomo. Uno es el componente de percepción, y el otro es el componente de control o planificación. La planificación / control de vehículos autónomos se considera en gran medida un problema resuelto. Si tomaste IA en pregrado, es posible que hayas estudiado el algoritmo A *. Los algoritmos utilizados para la planificación (si conoce la escena) son extensiones del algoritmo A * [4] [5]. Estoy seguro de que las implementaciones genéricas de estos algoritmos también están disponibles en código abierto. Deberá adaptarlo significativamente al escenario de la escena de la carretera: cuáles son las configuraciones “buenas”, cuáles son los diferentes tipos de participantes en la carretera y cómo se mueven típicamente, cuáles son las ubicaciones válidas (espacio libre) donde se le permite moverse. su automóvil, cómo navegar a través de diferentes tipos de intersecciones, etc. Mi profesor de IA nos hizo modificar un Mario Bros de código abierto para hacer que Mario sea autónomo usando la búsqueda de árbol A * de vainilla, y eso podría ser un buen ejercicio para comprender cómo se podría hacer esto. En la práctica, para evitar movimientos bruscos bruscos, también deberá suavizar las decisiones que surgen de A *, pero estoy seguro de que cualquiera puede idear muchas estrategias para eso.

Necesitará comprender cómo interactuar con el bus CAN en su automóvil y poder dar comandos de dirección, frenado y aceleración al automóvil. Una vez más, no creo que sea demasiado difícil si te sientes cómodo con la electrónica y los microcontroladores. También deberá acceder al navegador GPS incorporado o interactuar con un tercero, para poder especificar a dónde desea ir, así como mejorar sus estimaciones visuales, por ejemplo, que se encuentra en una intersección, o límite de velocidad es tal y tal.

Ahora viene la parte realmente desafiante, que es el sistema de percepción. Necesita al menos cuatro componentes clave para que su automóvil comprenda la escena a su alrededor. Señalaré brevemente referencias a documentos o códigos para cada uno de estos módulos a continuación, pero debe descubrir cómo dividirlos entre sus núcleos y GPU, y cómo hacer que se comuniquen entre sí, es decir, cómo la arquitectura de el sistema de software y hardware podría verse así. Lamentablemente, no tengo conocimiento de nada en el dominio público que describa dicha arquitectura de software (excepto [1]), aunque estamos pensando en enviar dicho documento a una conferencia de robótica en el futuro cercano.

Estos componentes clave de percepción son:

(1) un sistema de Odometría Visual (VO o SLAM), que permitirá que el automóvil se localice y comprenda cuánto se ha movido, como una especie de mecanismo de retroalimentación. El mejor canal de código abierto disponible para esto es el sistema ORB-SLAM [6] (tanto monocular como estéreo). El documento relevante también es fácil de entender. Al igual que muchas tuberías de SLAM, ORB-SLAM también realiza cierres de bucle, es decir, identifica ubicaciones que vuelve a visitar durante un viaje para mejorar la estimación de ubicación a lo largo de la trayectoria del vehículo, y esto es algo que probablemente no necesite, ya que normalmente No visite el mismo lugar varias veces cuando vaya a conducir. Por lo tanto, también podría deshabilitarlo. También es posible que no desee construir y mantener un “mapa” de todo su viaje, ya que no ayuda a la precisión de la ubicación si no está volviendo a visitar el mismo lugar una y otra vez, pero desperdicia el cálculo y la memoria. Por lo tanto, es posible que desee comprender el sistema / código y realizar estas modificaciones.

También debe fusionar el GPS con las estimaciones de ubicación obtenidas por visión, ya que las estimaciones basadas en la visión (o las estimaciones basadas en la odometría de la rueda) tienden a desplazarse mucho con el tiempo. Una forma directa de hacerlo es incluir un término basado en GPS en la función objetivo que se utiliza de todos modos para SLAM [7]. ORB-SLAM puede funcionar en una CPU multinúcleo y no necesita una GPU. Es posible que pueda limitarlo a tres núcleos después de quitar los bits irrelevantes para un escenario automotriz.

(2) Detección de carril / bordillo / camino, una forma de hacerlo es mediante algoritmos de segmentación semántica. Estos algoritmos etiquetan cada píxel en una imagen dada, como perteneciente a una determinada categoría, por ejemplo, píxel que no es de carretera frente a píxel de carretera frente a píxel de marcado de carril frente a píxel de acera. Los de mejor rendimiento se basan en redes neuronales totalmente convolucionales [8]. Puede encontrar un punto de referencia para esta tarea, que también enumera los documentos correspondientes a los mejores sistemas de rendimiento [9]. Una implementación reciente que funciona en tiempo real en dispositivos móviles está aquí [9b]. En la edad oscura (antes de la actual revolución de aprendizaje profundo), algunas personas muy inteligentes propusieron una forma de obtener mapas locales (vistas de pájaro) desde una sola vista frontal, que es lo que debería combinar con CNN profundos para obtener si lo desea hacer esto bien [9c].

Desafortunadamente, estas CNN profundas pueden ser muy costosas computacionalmente. En un núcleo de CPU, puede ser tan lento como 1 fps. Entonces definitivamente necesitará explotar la GPU aquí; y, por lo tanto, se vuelve importante distribuir adecuadamente los recursos de GPU / CPU entre estos módulos [¡la detección de objetos también necesita GPU!]. El punto de referencia anterior [9] también menciona la velocidad computacional por cuadro en las CPU y GPU, y vale la pena verlo en detalle.

Debe ser sencillo estimar el carril y la superficie de la carretera en 3D al obtener la profundidad de cada píxel de la imagen [10].

(3) Detección de objetos + seguimiento, es decir, detectar la ubicación de objetos (otros vehículos, peatones, etc.) y rastrearlos a través de cuadros. Los mejores resultados en la detección de objetos son nuevamente métodos basados ​​en redes neuronales convolucionales profundas. Afortunadamente, hay muchos códigos y modelos pre-entrenados disponibles en línea. Faster-RCNN [11] es probablemente el mejor. Desafortunadamente, actualmente no es en tiempo real. Entonces tendrás que trabajar para acelerarlo [12]; así como experimentar para ver cuán infrecuentemente necesita hacer una detección explícita (cada cuadro versus cada tercer cuadro para un sistema que opera a 10 Hz). Una gran cantidad de código de seguimiento también está disponible en línea [13]; los rastreadores identifican el mismo objeto a través de múltiples cuadros (problema de correspondencia) y / o reducen el tiempo de búsqueda requerido para la detección, ya que puede predecir dónde espera ver a un peatón o automóvil en particular en el siguiente cuadro y solo realiza la detección cerca de ese ubicación.

Nuevamente, puede usar la profundidad desde estéreo [10], más algunas suposiciones sobre las dimensiones promedio del automóvil (largo, ancho, alto), para elevar estas detecciones 2D a cuboides 3D.

Alternativamente, puede utilizar una profundidad más elegante desde estéreo [15] [16], para estimar “obstáculos” frente a espacio libre, y no preocuparse por si esos obstáculos son automóviles, peatones o cochecitos de bebé.

(4) Detección de señales de tráfico, es decir, detección de señales de tráfico y señales de tráfico.

Puede volver a usar Faster-RCNN mencionado anteriormente [11] para detectar la ubicación en 2D de las señales de tráfico y las señales de tráfico. Una manera fácil de estimar el estado de la señal de tráfico podría ser analizar (usando un clasificador como SVM) el histograma de color dentro del cuadro delimitador de la señal de tráfico.

Por supuesto, he dejado implícitos muchos detalles importantes, como cómo identificar una intersección de carreteras (semáforos, señales de tráfico, marcas de carriles, GPS + datos de mapas) y cómo comportarse en esos escenarios (modelado a través de su adaptación del algoritmo de planificación RRT *), o incluso cuál de los muchos semáforos que está viendo en una intersección se aplica a su carril. Algunas líneas de percepción casi completas interesantes, que cubren algunos de estos problemas, nuevamente usando solo cámaras se describen en [17] [18] [19], en caso de que esté interesado.

[0] Inteligencia artificial para robótica | Udacity

[1] http://cs.stanford.edu/people/te…
http://isl.ecst.csuchico.edu/DOC…

[2] Construir y calibrar una cámara estéreo con OpenCV (<50 €)

[3] ¿Cómo seleccionar cámaras para un sistema de visión estéreo?

[4] Explorando rápidamente un árbol aleatorio

[5] http://www.cs.cmu.edu/~ggordon/l…

[6] Página de inicio de Raul Mur Artal

[7] http://maxime.lhuillier.free.fr/…

[8] http://www.cs.berkeley.edu/~jonl…

[9] La suite de referencia KITTI Vision

[9b] https://arxiv.org/pdf/1606.02147…

[9c] https://www.inf.ethz.ch/personal…

[10] Mapa de profundidad de imágenes estéreo

[11] http://arxiv.org/pdf/1506.01497v…

[12] https://papers.nips.cc/paper/564…

[13] Andreas Geiger.

[14] Andreas Geiger.

[15] Stixel World – 6D-Vision

[16] http://www.lelaps.de/papers/badi…

[17] https://www.computer.org/csdl/tr…

[18] http://www.cv-foundation.org/ope…

[19] https://www.vision.ee.ethz.ch/pu…

Hay buenas respuestas aquí ya. Para construir un automóvil de este tipo, es necesario hacer muchas modificaciones y personalizaciones en su automóvil para que un automóvil normal literalmente se conduzca solo. Hay varios subsistemas que tienen que funcionar a la perfección para que eso suceda.

Un automóvil autónomo es básicamente un robot con la responsabilidad de conducir a las personas y a sí mismo, una hazaña que es potencialmente peligrosa, por lo tanto, se debe tener cuidado y se deben realizar muchos trabajos de prueba para garantizar la seguridad primero.

El automóvil necesita lo siguiente para poder conducir: sin embargo, esto no pretende ser una lista exhaustiva.

  • Sensores : un automóvil autónomo necesita sensores de alta calidad que tengan que detectar el entorno a un nivel súper humano en casi todos los casos imaginables. La cuestión es que tiene que haber una multitud de sensores en y dentro del automóvil para que brinde datos sensoriales precisos a los sistemas de procesamiento involucrados. Por lo tanto, cuanto mejores sean los sensores, más seguro será todo el sistema. Los sensores deben ser sensores de alta velocidad. Los sensores típicos son el GPS para geolocalización, sistemas de cámaras de alta velocidad y alta resolución en y dentro del automóvil. Acelerómetros y giroscopios para la detección de movimiento y aceleración. También necesita cámaras infrarrojas para que el automóvil pueda ver a través de la oscuridad y la lluvia. Sensores de ultrasonido para ecolocalización como en murciélagos, especialmente para sistemas de seguridad anticolisión. Sistemas láser para mapeo ambiental 3D y determinación de rango. Subsistema de seguimiento ocular para verificar si el conductor está alerta y conduce, de lo contrario, el sistema debería detener el automóvil. Sensores de presión para detectar personas en los asientos y si el conductor sostiene o no el volante. El automóvil debe poder determinar si está sobrecargado o no. Verá todo lo que necesita para asegurarse de que las personas dentro y alrededor del automóvil estén seguras.
  • Sistema de visión: ahora con todos esos datos sensoriales en tiempo real que llegan aproximadamente 60 veces por segundo o más, además de la gran carga que proviene de los sistemas de cámaras de alta velocidad, todos deben procesarse en tiempo real. Algunos de los automóviles de Google en realidad usan granjas de computadoras para ayudar con la carga computacional. Personalmente, creo que estos sistemas deben ser altamente eficientes desde el punto de vista computacional con modelos capaces de ejecutarse en tiempo real en unidades de procesamiento convencionales. No puedo exagerar la necesidad de un sistema de este tipo, significaría autos autónomos más baratos y muchos más beneficios, como ser capaz de obtener más capacidades en los autos, especialmente cuando se encuentra en entornos muy congestionados o durante un crucero de alta velocidad. El sistema debe procesar dichos datos a velocidades fenomenales para que la conducción sea segura, tomando decisiones de alto nivel en segundos cuando sea necesario en una situación peligrosa. Tener granjas de computadoras ubicadas remotamente es en realidad una mala idea aquí porque pueden surgir problemas de comunicación que ponen el automóvil en un estado detenido, demasiado peligroso para las personas dentro y cerca del automóvil. El sistema de visión por computadora necesita ser probado y ser confiable, no confiaría en redes neuronales convencionales como el aprendizaje profundo aquí porque estos sistemas no son fáciles de predecir en situaciones imprevistas, esto puede significar poner en peligro a las personas innecesariamente. Obviamente con el tiempo surgirán sistemas mejores y predecibles. El sistema de procesamiento debe estar totalmente integrado con múltiples núcleos de GPU y CPU alimentados por modelos computacionales altamente eficientes. El sistema también tiene que trabajar con ecolocadores de infrarrojos y ultrasonidos, capaces de aprovechar esa rica información y tomar decisiones adecuadas, es un área abierta de investigación y lo seguirá siendo en los próximos años.
  • Localización: el sistema necesita saber dónde está y dónde están otros objetos que pueden afectar su trayectoria. Esto significa procesar información de giroscopios, acelerómetros y sensores láser para formar un modelo 3D del entorno y detectar el movimiento y la posición con precisión. Los datos de la cámara también se pueden usar en forma de localización y mapeo simultáneos (SLAM), de nuevo aquí está involucrado un sistema de visión. El subsistema de localización también debe ser rápido y computacionalmente barato.
  • Planificación y anticipación de baja latencia : la planificación es importante para la navegación y la prevención de colisiones porque hay mucha incertidumbre en las condiciones de la carretera y del tráfico. ¿Qué pasa si hay un conductor imprudente? el sistema debe evitar conducir a una zona abarrotada a altas velocidades de crucero. ¿Qué pasa si hay una explosión repentina de neumáticos? de nuevo dividir las segundas habilidades para salvar vidas necesarias aquí. El sistema necesita poder anticipar el movimiento de otros objetos y de sí mismo, como sus trayectorias y si en el futuro podría chocar con ellos y necesita tomar decisiones en consecuencia y de manera dinámica. La anticipación es un componente clave de inteligencia de casi cualquier criatura viviente. Las moscas con sus ojos compuestos pueden navegar sin problemas a través de entornos altamente dinámicos y sus cerebros son algo capaces de procesar todos esos datos sensoriales pesados ​​y hacen que los sistemas artificiales parezcan juguetes. Tenemos mucho que aprender de la naturaleza, supongo. Este subsistema tiene que manejar todo, desde procesar señales de respuesta del sistema de visión, señales del subsistema de localización y muchas más. Por lo tanto, se necesitan sistemas de toma de decisiones en una fracción de segundo en tiempo real para procesar datos pesados. Esto es como el subsistema de procesamiento central y, por lo tanto, los cerebros de un automóvil autónomo, se equivocan en esta parte y todos los esfuerzos serían anulados, pero obviamente no en vano, porque los errores son lecciones disfrazadas.
  • Adaptación: nada como un sistema adaptativo. Los automóviles de Google obviamente no pueden funcionar en África y están diseñados para funcionar en ciudades donde tienen acceso a granjas de computadoras cada vez que carecen de recursos computacionales, pero un gran sistema debe funcionar en cualquier lugar en cualquier momento sin preguntas, si traigo un elefante al EE. UU. Todavía navegaría ¿no? La adaptación es clave para construir un sistema exitoso, por lo tanto, esto también se aplica a los autos sin conductor. Necesitan autocontrolarse constantemente su rendimiento e intentar mejorar por sí mismos. Pero espere, esto puede ser potencialmente mortal porque un sistema adaptativo ya no será predecible. Sabes que el poder sin control no es poder en absoluto. La clave es hacer autos autónomos que sean predecibles pero al mismo tiempo adaptables para que, cuando ocurran circunstancias imprevistas, el sistema elija la mejor opción. Nuevamente, el aprendizaje de refuerzo profundo, aunque atractivo para crear sistemas de superación personal, puede ser demasiado impredecible para este propósito, por lo que no se recomienda.

Para que la tecnología de conducción autónoma sea exitosa, es necesario resolver muchos problemas, especialmente en el área de toma de decisiones de baja latencia y planificación en segundos, sistemas de visión computacionalmente amigables en tiempo real con capacidades de reconocimiento altamente precisas, mejores sistemas de detección de movimiento como los que se encuentran en moscas y el uso de ecolocadores de ultrasonido como en los murciélagos que vuelan a alta velocidad en medio de la oscuridad y las condiciones de lluvia. Tenemos mucho que aprender a construir un sistema así, pero sí, para 2020, creo que tales autos estarán disponibles, pero 2025 o 2030 son más realistas.

Los autos autónomos deben conocer las reglas que los humanos cumplen cuando conducen, como ceder, especialmente cuando un automóvil está a punto de adelantar porque estos sistemas obviamente conducirán junto a los conductores humanos durante mucho tiempo. Necesitan aprender las reglas básicas y aprender a reconocer la acción y el comportamiento humano nuevamente en tiempo real.

Construir uno seguramente requiere mucho esfuerzo y dinero y un gran equipo que cree en sí mismo. Diría que intentar hacer esto solo puede ser demasiado difícil, aunque no imposible, porque uso esa palabra raramente, si no es que en absoluto. Sí, Google parece ser líder en esta categoría también por ahora, pero ten cuidado.

Espero que esto ayude.

Aquí hay un método que puedo pensar:

  1. Consigue un coche.
  2. Obtenga una interfaz donde los controles del automóvil se puedan iniciar usando una computadora. (O es posible que desee desarrollar la automatización interna si conoce personas que son buenas en microcontroladores o raspberry pi).
  3. Registre muchos datos de manejo y los controles (cuando se aplican descansos, cuando se presiona la palanca de gas, etc.) usando una cámara y algún dispositivo rastreador.
  4. Obtenga un terreno abierto, sin tráfico / libre de personas, donde pueda enseñarle a un “auto sin conductor” movimientos básicos.
  5. Intente enseñarle movimientos básicos (como seguir adelante, conducir en reversa, acelerar el automóvil, etc.), utilizando un control óptimo y un aprendizaje profundo. Aunque conducir puede ser una acción compleja, se basa en pequeñas acciones simples, que el automóvil necesita dominar antes de salir.
  6. Ahora usa los videos para entrenar para los controles. (Usando CNN y otras cosas). Hay múltiples recursos para esto. Todas las técnicas de conducción se pueden enseñar como combinaciones de movimientos simples aprendidos en 5.

Ahora este es solo un método. Estoy bastante seguro de que ambos entrenamientos (controles simples + percepción se pueden combinar).

NVIDIA está trabajando en la construcción de un automóvil autónomo, entre otros como Google, Tesla y Baidu. Muy recientemente, el equipo publicó un documento sobre arXiv, en el que se describe todo el proceso con gran detalle. Aquí hay un enlace al documento: https://arxiv.org/pdf/1604.07316

Aquí hay un video de la conducción de automóviles:

Lea este viaje 🙂

More Interesting

¿Puedo usar TensorFlow sin tener experiencia con el aprendizaje automático?

Deseo obtener un doctorado en Ciencias de la Computación de la India y no de ninguna universidad de los Estados Unidos. ¿Será esta una buena decisión?

¿Qué es la discretización de características?

¿Cuáles son las diferencias en profundidad, amplitud y rigor entre 6.036 Introducción al aprendizaje automático - MIT, y el curso del Curso de aprendizaje automático de Andrew Ng?

Cómo entrenar clasificador lineal paso a paso con Caffe, utilizando las respuestas de la última capa completamente conectada del modelo AlexNet como características

¿Qué algoritmos de aprendizaje automático utilizan servicios como wit.ai y api.ai?

¿Por qué la máquina de Bolzmann restringida se llama memoria asociativa?

¿Cuál es la diferencia entre estadística y aprendizaje automático?

¿En qué se diferencia una empresa financiera cuantitativa de un fondo de cobertura típico?

¿Por qué usamos k-means clustering? ¿Qué usos tiene en un escenario del mundo real?

¿Por qué el método de Newton solo es apropiado cuando el hessiano es positivo definido?

¿Cómo puede motivar a un estudiante de CS para que aprenda Machine Learning?

¿Es un SVM o un clasificador MaxEnt apropiado para este escenario de clasificación de texto y por qué?

¿Por qué las personas usan Keras en el back-end de TensorFlow y no solo en TensorFlow?

¿Cuáles son los requisitos previos para aprender Oracle Apps Technical?