Auto-conducción Monster Truck GAZ66 1/16

Habr, hola!

Quiero contarles cómo lo hice e hice una máquina autogestionable :)

Podría decir de inmediato cómo hacerlo mediante la conexión en seco de circuitos y comandos bash, pero será muy aburrido. Te ofrezco una historia interesante (espero) sobre cómo fui personalmente por este camino y por dónde vine.

Esos lugares donde había algo para tomar fotos con fotos. ¿Qué pasa con el software? Lo más probable es que no tenga una foto.

Realmente será una historia en formato narrativo, como te diría con una taza de café. No se trata de comandos bash, scripts de python, y eso es todo.

Comencemos con fotos y videos de lo que sucedió, y luego toda la historia debajo del corte.




La historia seguirá este escenario.


  • ¿Por qué lo quería?
  • Cómo funciona una máquina autónoma (vista superior)
  • Edad 1 - Gelendwagen del mundo infantil + cámara Raspberry Pi Zero W +
  • Edad 2 - Cámara GAZ66 + NVIDIA Jetson Nano + para RaspberryPi
  • Edad 3 - Remo Hobby SMAX
  • Edad 4 - Conexión SMAX y GAZ66
  • 5 años: componentes de montaje en un camión monstruo
  • Edad 6: instalación de Donkey Car y sus alrededores
  • Edad 7 - Montaje de vías, viajes
  • 8 años: viajar con el joystick
  • 9 años - Entrenamiento neuronal
  • Edad 10 - ¡Todo funciona, finalmente!
  • ¿Que sigue?
  • Desafío de batalla
  • Comunidad
  • La imagen de la tarjeta SD de mi máquina de escribir

¡Vierte café, nos vamos!

¿Por qué lo quería?


Todo comenzó con el hecho de que estaba frustrado por el hecho de que en una gran empresa de TI en Rusia hacen drones muy geniales, esto es increíblemente genial, pero estoy sin trabajo :)

No, bueno, es realmente genial: autos sin conductor) Una excelente aleación de mecánica y algoritmos :) La

frustración continuó hasta que combiné en mi cabeza diferentes hechos sobre mí, a saber:

  • Puedo escribir en python
  • Entiendo (aproximadamente) cómo funciona el aprendizaje automático
  • Sé trabajar con Linux en la consola.
  • Pasé mi infancia con un soldador
  • Tengo una caja completa con componentes de bricolaje (raspberry pi, arduino, sensores, etc.)

Cuando todo funcionó en mi cabeza, decidí: ¡un auto sin conductor (sdc)!

Para empezar, decidí que vale la pena descubrir cómo funciona sdc, y esta será la siguiente sección.

Cómo funciona una máquina autónoma (vista superior)


Para que el automóvil funcione solo, necesita cuatro componentes: un carrito, sensores, una computadora, un algoritmo.

Vamos a resolverlo


Trolley

Lo que realmente conducirá. Ruedas, motores, la batería que lo alimenta todo.

Hay dos cohortes condicionales de autos que llamé para mí: autos del mundo de los niños y autos para un pasatiempo.

Ni siquiera intente coquetear con los autos del mundo de los niños, lo intenté, esto es un fracaso. Su desventaja es que tienen motores débiles sin retroalimentación. Esto significa que es probable que pueda detener cualquier alfombra doméstica, y que no puede girar con la precisión dada.

Los autos del mundo de los pasatiempos son lo que necesitas. Tienen motores potentes, buenas baterías, servos de ruedas delanteras para giros. Considere esto como un umbral de entrada. Lo más barato y normal que pude encontrar fue Remo Hobby SMAX.



Sensores

Recopila información sobre el mundo que lo rodea y la transfiere a una computadora para la toma de decisiones.

Básicamente, un conjunto caballeroso para SDC es:

  • Cámara. Conceptos básicos de SDC. Mira un espacio frente a él, transfiere la imagen a una computadora que reconoce lo que está sucediendo y decide qué hacer. Parece que no he visto implementaciones SDC sin una cámara.
  • Sensor IMU Una pieza que muestra la aceleración y el ángulo de inclinación a lo largo de los ejes. Ayuda a entender a dónde vamos realmente y cómo ha cambiado nuestra ubicación en relación con el punto de partida. Utilizado en casi todos los helicópteros.
  • . , , , . , SDC, , . , 75$, SDC Velodyne 4K$. , 3D , 2D.
  • GPS. , , , SDC .
  • . — , . 3D .



Computadora

Lo que recibe los valores de los sensores analiza la situación, transferimos los comandos de control al carrito.

En el mundo de las computadoras para dispositivos electrónicos integrados, los procesadores ARM de bajo consumo (como en su teléfono) y las computadoras de una sola placa basadas en ellos, gobiernan la pelota.

Hoy existen dos de las opciones de placa única más populares: RaspberryPi y NVIDIA Jetson.
RaspberryPi tiene un precio más bajo, una amplia variedad de proyectos, una gran comunidad.

NVIDIA tiene un precio más alto, menos proyectos, pero más productividad en las tareas de aprendizaje automático. Tiene 128 núcleos CUDA integrados (como en su gran tarjeta gráfica NVIDIA), que se utilizan para acelerar los algoritmos de aprendizaje automático.

Hay tres piezas de Raspberry Pi (ZeroW, 3, 4) y NVIDIA Jetson Nano en mi colección. Decidí armar la máquina, por supuesto, en Jetson.



Algoritmo

que decide sobre acciones basadas en lecturas de sensores. Por lo general, se utiliza una combinación de visión por computadora y redes neuronales para esto. En la versión más básica, manejas tu máquina de escribir a lo largo de algunas marcas, grabas videos de tales viajes con seguimiento de gas / freno / giro, y luego entrenas en esta red neuronal para que descubras la dependencia de las señales del motor en las imágenes de la cámara. En pocas palabras, esta es la tarea de reconocer el marcado y tratar de permanecer en él.

Si desea actualizar cómo funciona la red neuronal, le sugiero que vea este video:


Aquí describí la opción más simple, donde solo hay una cámara y un paseo de marcado. Pero hay opciones con más sensores y una lógica de trabajo diferente: habrá una publicación separada sobre esto aquí.

Si el nivel es muy alto, entonces eso es todo.

Solo queda:

  • ensamblar carro
  • colgar sensores
  • conectar la computadora
  • dibujar marcado
  • montar en él
  • entrenar una red neuronal
  • ir

Ahora que hemos descubierto de qué se trata un auto sin conductor, pasemos a la era de implementación que tenía específicamente.

Edad 1 - Gelendwagen del mundo infantil + cámara Raspberry Pi Zero W +


Sí, mi primer enfoque fue solo eso. Sucedió porque había un mundo infantil cerca de mi casa en el que entré, en el que me gustaba Gelik, y lo compré.

Bien, pensé, hay una hélice, ahora necesito una computadora y un sensor. Pensamiento hecho. Pedí un RPi Zero W y una cámara para ella. Mientras esperaba la computadora y la cámara, entré y compré un banco de energía para este negocio.
Entonces, todo está en su lugar, es hora de recolectar. Encontré un proyecto así , decidí seguirlo.
Gelik desmontó, sacó sus cerebros nativos, los transfirió al controlador del motor, él, a su vez, los transfirió a RPi, conectó una cámara, alimentó todo con un banco de energía y quedó satisfecho.

Antes de proceder al autogobierno, decidí pasar por la consola por diversión, persiguiendo a un gato, transmitiendo la imagen de la cámara a mi computadora portátil.

Fue entonces cuando un par de fracasos me esperaban.

Primero, el Raspberry Pi Zero W es muy débil en términos de rendimiento.

Segundo: la pasabilidad del gelik del mundo de los niños es casi inexistente, se detuvo por casi cualquier obstáculo mínimo.

Ya se hizo evidente que el proyecto aún no había nacido, pero por interés, traté de ensamblar la visión por computadora (OpenCV) para Raspberry Pi Zero directamente en él. Tomó, sin bromas, más de un día, y fue el último clavo en la tapa del ataúd de esta implementación de SDC.
Quedó claro que necesita cambiar tanto la computadora para un mayor rendimiento, como el carrito, para una mayor capacidad en todo el país.

Resultó bastante divertido:



2 — 66 + NVIDIA Jetson Nano + RaspberryPi


Entonces, en este punto, quedó claro que necesita un automóvil más transitable, y preferiblemente un camión, para colocar todos los componentes en la carrocería. Después de estudiar un servicio para la selección de productos, quedó claro que el modelo de nuestro GAZ66 nativo me conviene, también es un shishiga entre la gente. Bien, lo ordené, espera, es hora de pensar en la computadora. En este momento, NVIDIA estaba preparando el inicio de las ventas de su Jetson Nano, y realicé un pedido el primer día de ventas.

Llegó un camión, seguí esperando a Jetson, monté impacientemente un shishiga por la casa, rodé los gatitos a los que dio a luz el gato mencionado anteriormente. No quiere decir que a los gatitos les haya gustado, tuvieron que parar.

Mientras tanto, Jetson todavía conducía, y pedí un LIDAR de vacío a China; no sabía cómo usarlo específicamente, pero entendí que quería hacerlo.

Un día, un mensajero de negocios apareció en la entrada de la oficina, me entregó una caja bastante grande de NVIDIA de un solo pagador, firmé en la factura y me sentí como un entusiasta de los desarrolladores: wow, me llegó un dispositivo comprado al comienzo de las ventas.

¡Es hora de coleccionar! Pero primero, necesitas besarte, jajaja. Desmontó el shishigu, arrojó sus cerebros nativos, lubricado los mecanismos, comenzó a ensamblar ya sobre la base de una computadora.

Conecté la cámara, el controlador del motor, el motor rotativo, el motor de gas / freno, comencé las secuencias de comandos de Python para la prueba, ¡de nuevo un fastidio!

Esta vez, la historia es esta: un shishigi usa un motor convencional para girar, no un servoaccionamiento. Entonces, no tiene comentarios. Por lo tanto, no puedo controlarlos con seguridad, lo que significa que no es adecuado para SDC.

Bien, de nuevo, necesitas resolver esto de alguna manera, hacer algo. Pasamos a la próxima era.





Edad 3 - Remo Hobby SMAX


Dado que en este momento estaba claro que la máquina no solo necesitaba componentes transitables, sino también mínimamente buenos, la elección recayó en los talleres para aquellos que tienen RC, este es un pasatiempo.
Sin más preámbulos, llegué a una de esas tiendas, y sin esconderme me dijo lo que estaba haciendo y qué tipo de máquina necesitaba. El vendedor, sea amable, me dijo qué máquina se ajusta a mis requisitos mínimos, y era una Remo Hobby SMAX. Yo lo compré.

Llegué a casa, obtuve un shishigu, le quité todo, me senté para conectarme a SMAX. ¿Y, qué piensas? Así es, ¡fracaso otra vez!

Básicamente, los autos RC están diseñados para que el motor se conecte al controlador del motor y, a su vez, se conecte al módulo de radio que se comunica con el control remoto. Y fue SMAX el que se diseñó para que allí se combinaran el controlador del motor y el módulo de radio. Literalmente no tuve la oportunidad de conectarme al controlador del motor en lugar del módulo de radio.

Vale, tienes que hacer algo otra vez. Regreso al sitio de los autos RC, me subo a los componentes. Hurgando por allí y aplaudiendo, encuentro un controlador de motor que tiene un cable separado para el módulo de radio.

Ordeno, traigo, recojo todo de nuevo, funciona, pero solo gira. Pero no hay gas y viceversa! Por qué, maldición, creo, pero sigo escogiendo.

Esta vez no funcionó que, para que el motor SMAX se active, la consola debe enviarle un cierto valor (360) a través del módulo de radio. Pero no lo sabía, e ingresé los valores directamente para el gas de freno. Y el motor no reaccionó, partiendo de la lógica de que nadie le pidió que despertara.

En algún momento, me senté para clasificar literalmente todo en una fila, esperando que reaccionara al menos ante algo.

Al principio pasé más de 100 años. Luego 50 por. Y cuando llegué a la búsqueda de 10, escuché un chillido de bienvenida en 360 - ¡salud! ¡Trabajos!

Probé gas / marcha atrás / izquierda / derecha desde la consola, todo funciona. Esto es fuego, aquí soy un programador =)

Parece que es hora de ensamblar, pero hay un problema: no hay absolutamente ningún lugar para colocar los componentes. Los autos RC están diseñados para que su parte superior sea algo muy condicional. En primer lugar, la parte superior está hecha de plástico muy delgado y, en segundo lugar, es un jeep, y no hay ningún lugar para ponerlo todo.
En este momento decidí buscar y cómo, de hecho, otros lo hacen.

Encontré el proyecto de coche de burro, que tiene todo sobre una base llave en mano para ensamblar su SDC, tanto ejemplos de hardware como marco de software. Parecería genial, tómalo y úsalo, pero hay matices:

  • imprimen la parte superior del automóvil en una impresora 3D, y luego le recuerda al automóvil muy distante. feo, en resumen, no estéticamente agradable
  • sus modelos 3D son compatibles con máquinas que no vendemos.

Ok, recuerda Donkey Car, entonces tomaremos su marco de software, pero por ahora tenemos que pensar en el hardware.

Un día, volviendo la cabeza en mi apartamento, miré el shishigu desmontado, en SMAX sin la parte superior, y pensé: hmmm, y parecen ser de la misma escala (1/16). Tomó un shishiga, tomó un SMAX, simplemente lo puso uno por uno sobre el otro, ¡y realmente lo hace! ¡Y se ve genial! OK, tengo que hacerlo! Pasamos a la próxima era.







Edad 4 - Conexión SMAX y GAZ66


Entonces, al comienzo de esta era, tengo un objetivo interno: conectar la parte superior de una máquina a la parte inferior de otra. Como mis colegas y yo tomamos un chip en una impresora 3D, y soy su copropietario (un inversor serio), se decidió establecer una conexión en un programa CAD, imprimir y así conectarlos.

Con esta idea, caminé durante unos 2 meses, pensando que estaba a punto de sentarme a comprender los sistemas CAD. Jaja, no. Después de admitir que no quiero entender los sistemas CAD, comencé a pensar en otras opciones.

Regresé al mundo de los niños, decidí ver a los diseñadores, de repente me ayudaron de alguna manera. Compré un clásico constructor de metal, que estaba conmigo cuando estaba en la escuela (ceniza de la vieja escuela reunida).

Lo arrastró a su casa, colocó dos partes de la máquina una al lado de la otra y comenzó a aplicarles todo tipo de elementos de diseño. Cuánto tiempo, brevemente, comenzó a aparecer algún tipo de comprensión, cómo, al menos en teoría, esto podría hacerse.

Comenzó a hacer. Pasé más de un día con una llave para bebés, nueces y pensamiento espacial.

Mientras me conectaba, aprendí a perforar plástico con un destornillador, arrancar con cuidado las partes sobrantes para no dañar la carcasa, bloquear las tuercas con otras tuercas (pero de todos modos sin arandelas). En general, mi Trudovik estaría orgulloso de mí.

Después de unas tres modificaciones y tres días, vi este camión monstruo frente a mí: el GAZ66 SMAX Edition de Beslan.

Entonces, parece que la base de hardware está lista, pase a la próxima era.





5 años: componentes de montaje en un camión monstruo


Al final:

  • Tengo un carrito con buenos componentes
  • Tengo una parte superior estética y espaciosa.
  • gas / freno / giros funcionan normalmente en este carro
  • arriba y abajo incluso están conectados entre sí =)

Es hora de montar componentes en esta belleza.

Armado con un destornillador como taladro para plástico y cinta de doble cara como soporte universal para todo, me puse manos a la obra.

Hice un soporte para la cámara en la cabina, que le permite ajustar el ángulo de la cámara. Lanzó un largo tren desde la cámara a Jetson, que, a su vez, se instaló en la parte de atrás.

Además de Jetson, las siguientes personas se instalaron en la parte de atrás:

  • powerbank para alimentar la computadora (donó su principal, genial, con entrega de energía usb para que jetson no falle en el poder)
  • PCA9685 (controlador PWM) para control de motor
  • batería para alimentar el motor de la máquina

Como el proyecto ya se consideraba a largo plazo en ese momento, decidí no meterme con el lidar todavía y hacer MVP al menos en la cámara y el software de Donkey Car.

Por diversión, conecté mis faros nativos de GAZ66 para hacerlo más hermoso y más seguro en la oscuridad.

Bien, mi máquina se enciende, los motores responden a los comandos de la pitón, la cámara da una imagen, las luces están encendidas, todo está bien, es hora de instalar el software.





Edad 6: instalación de Donkey Car y sus alrededores


Afortunadamente, en las últimas etapas encontré el proyecto Donkey Car, y me hizo la vida mucho más fácil, me salvó de escribir todo yo mismo. En pocas palabras, DonkeyCar es un marco que ya tiene todo lo que necesita para SDC. E incluso tienen guías sobre cómo instalar software. Pero, como suele ser el caso con OpenSource, las guías están desactualizadas y se contradicen en unos instantes.

De acuerdo, tengo que resolverlo. Para el funcionamiento normal del marco, se necesitan las siguientes bibliotecas:

  • OpenCV
  • tensorflow-gpu (gpu es para jetson, porque hay un núcleo de cuda. ​​para rpi hay tensorflow-lite)
  • Tensorrt (biblioteca para acelerar la inferencia de neuronas)
  • y todo lo que se establece automáticamente en función de la lista de entorno

Comencemos con OpenCV.

La guía DonkeyCar dice que necesitas construirlo desde la fuente misma, porque para ARM no hay OpenCV en pip. Incluso hice esto, compilé OpenCV, pero antes de instalarlo decidí comprobarlo, de repente el sistema tiene una versión antigua de OpenCV y necesita ser demolido. Llamé a python, importé cv2, pedí una versión, pero es bam y relevante. Rápidamente busqué y descubrí que en las últimas versiones de linux4tegra (que está en jetson), los chicos de NVIDIA comenzaron a instalar OpenCV. Genial, tengo menos que hacer. Bien hecho, que podría compilarme :)

A continuación, tensorflow-gpu.

La guía DonkeyCar indica, en primer lugar, una rama de versión desactualizada (1.xx) y, en segundo lugar, ni siquiera la última versión de versiones desactualizadas. Decidí no escucharlos y puse la última versión actual (2.0).

El siguiente paso es tensorrt.

La guía para instalar tensrort en jetson está escrita en una página wiki separada, y deja en claro que el autor no leyó la guía principal =) Porque la guía tensorrt reasigna variables de entorno y OpenCV deja de funcionar. Lo torcí de un lado a otro, volví todo hacia atrás y decidí criticar el entorno y las variables de entorno, lo rodé directamente al entorno principal.

Satisfecho consigo mismo, abrió la python, a su vez llamada cv2, tensorflow, tensorrt, y luego le preguntó a la python su versión: todos fueron importados, todos mostraron las últimas versiones. ¡Frio!

El proceso de instalación del coche de burro en sí es bastante simple, no lo describiré, sugiero leer su guía. Lo único que notaré ahora es que en la configuración del coche de burro puede aumentar la resolución de la imagen de 86x86 para RPi a 224x224 para Jetson (porque habrá más rendimiento y la precisión será mayor).

Entonces, todo está listo, ¡es hora de correr y probar!

Mi máquina realmente se enciende, inicia el servidor web en esa IP, a la cual el enrutador emitió la máquina. Y realmente puede ir allí, y desde el navegador maneje el joystick, mirando la imagen de la cámara.

También tuve que calibrar los valores suministrados al PWM (PCA9685) para encontrar un giro máximo hacia adelante, hacia atrás y hacia los lados.

Aquí, por cierto, descubrí que mi motor estaba conectado incorrectamente, la máquina retrocedió mucho más enérgicamente que hacia adelante, encontré experimentalmente los cables y los tiré al revés. Estaba tan dispuesto allí que todos los cables del motor son del mismo color, y no puedes recordar cómo era. Pero lo conecté correctamente y puse un termorretráctil en cada cable, para poder distinguirlos más tarde.

¡Genial, es hora de pasar a preparar la pista!

Edad 7 - Montaje de vías, viajes


El algoritmo Donkey Car está tan diseñado que hay una neurona entrenada por un maestro. Y esto significa que la imagen de la cámara está rastreando, y aparece un archivo json junto a cada imagen en la que se escribe el nombre de la imagen, la aceleración, la rotación y la marca de tiempo. Y para entrenar una neurona, tales pares de imagen + json necesitan al menos 5K.

Se decidió montar la pista en casa, dicen que el apartamento es grande, hay dónde dar la vuelta. Pero al comenzar a recolectar, quedó claro que no había un paseo por el apartamento: el piso es de diferentes colores, el contraste será diferente y el modelo no se puede sacar.

Bien, decidí ponerlo en una habitación. Compré 4 rollos de cinta adhesiva y los pegué a la pista en el piso.

Entré en el automóvil, lo encendí, me fui y volví a fallar: resulta que una habitación es demasiado pequeña y mi automóvil es cursi y no está incluido en las curvas. Más precisamente, está incluido, pero a una velocidad tal que será una lástima entonces =)

Bien, tenemos que hacer la segunda iteración, y necesitamos una gran sala. La elección recayó en la oficina: hay muchos lugares, los pisos son monofónicos, abiertos las 24 horas, los 7 días de la semana. El único problema es que los limpiadores trabajan de noche y será necesario quitar la pista. Es decir, debe hacer todo de una vez: conducir con las manos para ser un maestro, entrenar a la modelo, arrojarla de nuevo a la máquina de escribir y pasar sin control manual.

Bien, el día X, después del evento sobre los experimentos A / B, se decidió quedarse en la oficina y seguir la pista.
Se elige el lugar, la cinta está lista, el equipo de constructores de la pista en el juego. Solo una hora, y en el pasillo de la oficina hay una gran pista.

Puse el auto, lo encendí, traté de conducir - hurra, entra en giros, y tuve que limitar la velocidad al 80%.



8 años: viajar con el joystick


Entonces, tengo una pista, tengo un automóvil y necesito 5K pares de imagen + json.

Empíricamente, descubrí que una vuelta de mi pista son 250 pares de fotos + json, lo que significa que necesito dejar al menos 20 vueltas.

Preferiblemente en una fila. Puede, por supuesto, de forma intermitente, pero luego el modelo arroja el gas arrojado, y puede comenzar a disminuir, pero no quiero esto.

Comencé a intentar correr en 20 vueltas sin descanso, y esto, debo decir, no es una tarea fácil.

La primera dificultad surgió porque había una columna considerable en el centro de la ruta, y cuando la máquina conducía después, la conexión con la computadora portátil desde la que se controlaba se retrasó, y este pequeño retraso me dejó fuera de los límites de la ruta.

Bien, entonces debes asegurarte de que la conexión sea del dispositivo con el que yo mismo voy a la máquina de escribir cuando conduzco. Y esto significa que debe conducir desde el navegador del teléfono.

Pero todavía hay un joystick, y lo sostengo con ambas manos, ¿dónde más puedo obtener el teléfono? Llevar una máquina de escribir no es una opción, la ralentizará y luego, sin un teléfono, irá más rápido y puede confundirse en las esquinas debido a una aceleración excesiva.

Hmm, entonces necesitas combinar de alguna manera el teléfono y el joystick. De acuerdo, tengo un lector, es lo suficientemente grande, cabe tanto en un teléfono como en un joystick, funcionará. Tomó la cinta y pegó el teléfono al lector con cinta adhesiva, y justo debajo del joystick. Miré este milagro y pensé: ¿qué eres en general? :-)

Pero funcionó :) Con esto logré dejar 20 vueltas. Pero en realidad, incluso 25, porque probé alrededor de 15 círculos.

Dachshund, listo, tengo un conjunto de datos para entrenar una neurona, ¡es hora de entrenar!

9 años - Entrenamiento neuronal


En este momento tengo un automóvil, una pista, un conjunto de datos, sí, ¡estoy a un paso del resultado!
En casa, la PC giraba al ralentí, con la NVIDIA RTX 2070, en la que planeaba estudiar. Afortunadamente, para un hogar inteligente, tengo una IP externa, y solo tuve que obtener el puerto 22 de Internet a una PC. Es bueno que haya asistentes que hicieron esto por mí mientras estaba en la oficina.

Entonces, voy en ssh a la computadora con ubuntu, monitorizo ​​la carpeta de inicio para sshfs, subo archivos. Parece que solo 40 megabytes, pero duró unos 30 minutos. Sucedió, según tengo entendido, porque había muchos de ellos.

Archivos en su computadora, tensorflow-gpu instalado, software DonkeyCar instalado, es hora de entrenar.
Llamo a un script de DonkeyCar para entrenar una neurona, lo señalo a las carpetas con el conjunto de datos: se ejecutó.
Mientras la neurona se está ejecutando, nvtop (monitor de carga de la tarjeta de video) muestra una utilización del 1406%, htop normal muestra una carga de la CPU del 100% para los 16 núcleos, está encendido).

Después de unos 20 minutos, tengo un modelo entrenado para conducir un automóvil. Parecería, tómalo, úsalo. Pero no :) ¿

Recuerdas que escribí anteriormente sobre Tensorrt, que optimiza la inferencia de neuronas y las ejecuta en núcleos de Cuda? Por supuesto, quiero revisarlo.

Y eso significa lo que necesito:

  • congelar el modelo (necesita empacar todo para el modelo en un archivo)
  • convertir el resultado del friso al formato tensorrt

Estoy tratando de congelar el modelo, llamo al script de DonkeyCar, fallo. Y mientras tanto, es de noche, pronto los limpiadores están desmantelando mi pista, necesito hacerlo rápidamente.

La hipótesis nació de que esto se debe a que tomé el flujo de tensor incorrecto que tenía DonkeyCar. Bien, estoy tirando de tensorflow 2.0, configuro 1.15, lo intento de nuevo: ¡éxito, saludos!

Ahora la conversión, y nuevamente el desglose: no se encontró el equipo. Bien, voy a buscar qué pasa. Resultó que NVIDIA marcó esta característica como obsoleta y le quitó el soporte. Ahora, dicen, necesitas convertir a mano. Afortunadamente, encontré el repositorio de git, donde había una solicitud similar, y el usuario encontró el lugar donde realmente se encuentra el script de python, que convierte los modelos.

Llamo el guión desde ese lugar, y la verdad responde. Pero, dice, no hay terceros pitones para ti, vamos segundo.

Bien, estoy llamando a la segunda pitón. Él me dice: no tengo flujo de tensor. Bueno, le pido que ponga tensorflow-gpu 1.15, y me dice que no existe tal versión, solo hay 1.14. De acuerdo, estoy de acuerdo, arriesgémonos y coloquemos las diferentes versiones en diferentes entornos de Python. Ponga tensorflow en la segunda python, solicitó la conversión: ¡salud, funcionó!

De acuerdo, tengo modelos para tensorrt y para tensorflow-gpu ordinario, lo dejo caer en la máquina.

Arranco la máquina con el modelo para tensorrt, un gran error de trackback, pulsaciones de tiempo - ok, probaré el modelo habitual.

Comienzo el error habitual nuevamente, pero esta vez es bastante claro: el tamaño de su imagen es 224X224, mientras que se espera 86X86. ¿Recuerdas que en algún lugar mucho más alto escribí que las reglas de configuración cambiaron la resolución de la imagen de la cámara?

Entonces, en la máquina de escribir lo corregí, pero no en la computadora host.

Regreso a la computadora host, corrijo las configuraciones allí, vuelvo a entrenar, vuelvo a hacer el friso, vuelvo a convertir, vuelvo a tirar.



Comienzo la máquina con un modelo para tensorrt, y ...

Edad 10 - ¡Todo funciona, finalmente!


¡Hurra! ¡Mi auto se fue! Sí, sin mí. Muy genial. Estoy increíblemente feliz)


Durante casi un año hice todo esto, y ahora)

¿Que sigue?


Hay varios planes para un mayor desarrollo; pasaré de lo simple a lo complejo.

  • Agregue un sensor IMU al modelo para posiblemente aumentar la precisión. Por ejemplo, al conducir cuesta arriba, se necesita más esfuerzo en el motor.
  • Convierta la lógica en viajes que no estén en la carretera, sino que simplemente evite obstáculos
  • Agregue lidar y tome lecturas de él

Desafío de batalla


Si usted, o con una compañía de amigos, siente que quiere competir, escríbame, organicemos las competencias =)

Comunidad


También armé una sala de chat de interés y estoy preparando un canal. No estoy seguro de que, de acuerdo con las reglas de Habr, sea posible, así que lo enviaré al PM a solicitud.

La imagen de la tarjeta SD de mi máquina de escribir


Si lo solicita, también le enviaré una imagen img de mi automóvil, si desea hacerlo de manera similar, y no quiere bañarse con la configuración.

All Articles