Cámara de estacionamiento con vista envolvente AAOS 14: configuración EVS
EVS – modo estacionamiento
El sistema operativo automotriz Android (AAOS) 14 introduce avances significativos, incluido un sistema de cámara de estacionamiento con vista envolvente. Esta característica, que forma parte del Sistema de Vista Externa (EVS), proporciona una vista completa de 360 grados alrededor del vehículo, mejorando la seguridad y la facilidad de estacionamiento. Este artículo lo guía a través del proceso de configuración e inicio de EVS en AAOS 14.
Estructura del sistema EVS en Android 14
El Sistema de Vista Externa (EVS) en Android 14 es una integración sofisticada diseñada para mejorar la conciencia y la seguridad del conductor a través de múltiples cámaras externas. Este sistema se compone de tres componentes principales: la aplicación EVS Driver, la aplicación Manager y la aplicación EVS. Cada componente desempeña un papel crucial en la captura, gestión y visualización de las imágenes necesarias para una visión completa del entorno del vehículo.
Solicitud de controlador EVS
La aplicación EVS Driver sirve como base del sistema EVS, responsable de capturar imágenes de las cámaras del vehículo. Estas imágenes se entregan como buffers de imágenes RGBA, que son esenciales para su posterior procesamiento y visualización. Normalmente, la aplicación Driver la proporciona el fabricante del vehículo y está diseñada para garantizar la compatibilidad con el hardware y la configuración de la cámara específicos del vehículo.
Para ayudar a los desarrolladores, Android 14 incluye una implementación de aplicación de controlador de muestra que utiliza el subsistema Linux V4L2 (Video para Linux 2). Este ejemplo muestra cómo capturar imágenes desde cámaras conectadas por USB y ofrece una referencia práctica para crear aplicaciones de controladores compatibles. La implementación de muestra se puede encontrar en el código fuente de Android en paquetes/servicios/Coche/cpp/evs/sampleDriver.
Aplicación de administrador
La aplicación Manager actúa como intermediaria entre la aplicación Conductor y la aplicación EVS. Sus principales responsabilidades incluyen la gestión de las cámaras y las pantallas conectadas dentro del sistema.
Tareas clave:
- Gestión de cámara: Controla y coordina las distintas cámaras conectadas al vehículo.
- Gestión de visualización: Administra las unidades de visualización, asegurando que se muestren las imágenes correctas según la entrada de la aplicación Driver.
- Comunicación: Facilita la comunicación entre la aplicación Driver y la aplicación EVS, asegurando un flujo e integración de datos fluidos.
aplicación SVE
La aplicación EVS es el componente central del sistema EVS, responsable de ensamblar las imágenes de las distintas cámaras y mostrarlas en la pantalla del vehículo. Esta aplicación adapta el contenido mostrado en función de la selección de marcha del vehículo, proporcionando información visual relevante al conductor.
Por ejemplo, cuando el vehículo está en marcha atrás (VehicleGear::GEAR_REVERSE), la aplicación EVS muestra la señal de la cámara trasera para ayudar en las maniobras de marcha atrás. Cuando el vehículo está en marcha de estacionamiento (VehicleGear::GEAR_PARK), la aplicación muestra una vista de 360 grados al unir imágenes de cuatro cámaras, ofreciendo una descripción general completa de los alrededores del vehículo. En otras posiciones de marcha, la App EVS deja de mostrar imágenes y permanece en segundo plano, lista para activarse cuando se vuelve a cambiar de marcha.
La aplicación EVS logra esta funcionalidad dinámica suscribiéndose a señales de VHAL (Capa de abstracción de hardware del vehículo), específicamente la Propiedad del vehículo::GEAR_SELECTION. Esto permite que la aplicación ajuste el contenido mostrado en tiempo real según la marcha actual del vehículo.
Interfaz de comunicación
La comunicación entre la aplicación Driver, la aplicación Manager y la aplicación EVS se facilita a través del IEvsEnumerador Interfaz HAL. Esta interfaz desempeña un papel crucial en el sistema EVS, ya que garantiza que los datos de las imágenes se capturen, gestionen y muestren con precisión. el IEvsEnumerador La interfaz está definida en el código fuente de Android en hardware/interfaces/automotive/evs/1.0/IEvsEnumerator.hal.
Actualización del subsistema EVS
El código fuente de Evs está en: paquetes/servicios/Coche/cpp/evs. Asegúrese de utilizar las fuentes más recientes porque hubo algunos errores en la versión posterior que hicieron que Evs no funcionara.
cd packages/services/Car/cpp/evs
git checkout main
git pull
mm
adb push out/target/product/rpi4/vendor/bin/hw/android.hardware.automotive.evs-default /vendor/bin/hw/
adb push out/target/product/rpi4/system/bin/evs_app /system/bin/
Configuración del controlador EVS
Para comenzar, necesitamos configurar el controlador EVS. El archivo de configuración se encuentra en /proveedor/etc/automotive/evs/evs_configuration_override.xml.
A continuación se muestra un ejemplo de su contenido:
<configuration>
<!-- system configuration -->
<system>
<!-- number of cameras available to EVS -->
<num_cameras value="2"/>
</system>
<!-- camera device information -->
<camera>
<!-- camera device starts -->
<device id='/dev/video0' position='rear'>
<caps>
<!-- list of supported controls -->
<supported_controls>
<control name="BRIGHTNESS" min='0' max='255'/>
<control name="CONTRAST" min='0' max='255'/>
<control name="AUTO_WHITE_BALANCE" min='0' max='1'/>
<control name="WHITE_BALANCE_TEMPERATURE" min='2000' max='7500'/>
<control name="SHARPNESS" min='0' max='255'/>
<control name="AUTO_FOCUS" min='0' max='1'/>
<control name="ABSOLUTE_FOCUS" min='0' max='255' step='5'/>
<control name="ABSOLUTE_ZOOM" min='100' max='400'/>
</supported_controls>
<!-- list of supported stream configurations -->
<!-- below configurations were taken from v4l2-ctrl query on
Logitech Webcam C930e device -->
<stream id='0' width="1280" height="720" format="RGBA_8888" framerate="30"/>
</caps>
<!-- list of parameters -->
<characteristics>
</characteristics>
</device>
<device id='/dev/video2' position='front'>
<caps>
<!-- list of supported controls -->
<supported_controls>
<control name="BRIGHTNESS" min='0' max='255'/>
<control name="CONTRAST" min='0' max='255'/>
<control name="AUTO_WHITE_BALANCE" min='0' max='1'/>
<control name="WHITE_BALANCE_TEMPERATURE" min='2000' max='7500'/>
<control name="SHARPNESS" min='0' max='255'/>
<control name="AUTO_FOCUS" min='0' max='1'/>
<control name="ABSOLUTE_FOCUS" min='0' max='255' step='5'/>
<control name="ABSOLUTE_ZOOM" min='100' max='400'/>
</supported_controls>
<!-- list of supported stream configurations -->
<!-- below configurations were taken from v4l2-ctrl query on
Logitech Webcam C930e device -->
<stream id='0' width="1280" height="720" format="RGBA_8888" framerate="30"/>
</caps>
<!-- list of parameters -->
<characteristics>
</characteristics>
</device>
</camera>
<!-- display device starts -->
<display>
<device id='display0' position='driver'>
<caps>
<!-- list of supported inpu stream configurations -->
<stream id='0' width="1280" height="800" format="RGBA_8888" framerate="30"/>
</caps>
</device>
</display>
</configuration>
En esta configuración se definen dos cámaras: /desarrollador/vídeo0 (después) y /dev/vídeo2 (frente). Ambas cámaras tienen una transmisión definida con una resolución de 1280 x 720, una velocidad de fotogramas de 30 y formato RGBA.
Además, hay una pantalla definida con una resolución de 1280 x 800, una velocidad de fotogramas de 30 y formato RGBA.
Detalles de configuración
El archivo de configuración comienza especificando la cantidad de cámaras disponibles para el sistema EVS. Esto se hace dentro del
Cada dispositivo de cámara se define dentro del
Ambas cámaras también tienen sus configuraciones de transmisión admitidas enumeradas en
El dispositivo de visualización se define en el
Operación del conductor del EVS
Cuando se inicia el controlador EVS, lee este archivo de configuración para comprender las cámaras disponibles y la configuración de pantalla. Luego envía esta información de configuración a la aplicación Manager. El controlador EVS esperará las solicitudes para abrir y leer desde las cámaras, y operará de acuerdo con las configuraciones definidas.
Configuración de la aplicación EVS
Configurar la aplicación EVS es más complejo. Necesitamos determinar cómo se combinarán las imágenes de las cámaras individuales para crear una vista de 360 grados. En el repositorio, el archivo paquetes/servicios/Car/cpp/evs/apps/default/res/config.json.readme contiene una descripción de las secciones de configuración:
{
"car" : { // This section describes the geometry of the car
"width" : 76.7, // The width of the car body
"wheelBase" : 117.9, // The distance between the front and rear axles
"frontExtent" : 44.7, // The extent of the car body ahead of the front axle
"rearExtent" : 40 // The extent of the car body behind the rear axle
},
"displays" : [ // This configures the dimensions of the surround view display
{ // The first display will be used as the default display
"displayPort" : 1, // Display port number, the target display is connected to
"frontRange" : 100, // How far to render the view in front of the front bumper
"rearRange" : 100 // How far the view extends behind the rear bumper
}
],
"graphic" : { // This maps the car texture into the projected view space
"frontPixel" : 23, // The pixel row in CarFromTop.png at which the front bumper appears
"rearPixel" : 223 // The pixel row in CarFromTop.png at which the back bumper ends
},
"cameras" : [ // This describes the cameras potentially available on the car
{
"cameraId" : "/dev/video32", // Camera ID exposed by EVS HAL
"function" : "reverse,park", // Set of modes to which this camera contributes
"x" : 0.0, // Optical center distance right of vehicle center
"y" : -40.0, // Optical center distance forward of rear axle
"z" : 48, // Optical center distance above ground
"yaw" : 180, // Optical axis degrees to the left of straight ahead
"pitch" : -30, // Optical axis degrees above the horizon
"roll" : 0, // Rotation degrees around the optical axis
"hfov" : 125, // Horizontal field of view in degrees
"vfov" : 103, // Vertical field of view in degrees
"hflip" : true, // Flip the view horizontally
"vflip" : true // Flip the view vertically
}
]
}
El archivo de configuración de la aplicación EVS es crucial para configurar el sistema para un automóvil específico. Aunque la inclusión de comentarios invalida este JSON de ejemplo, sirve para mostrar el formato esperado del archivo de configuración. Además, el sistema requiere una imagen llamada CarFromTop.png para representar el automóvil.
En la configuración, las unidades de longitud son arbitrarias pero deben permanecer consistentes en todo el archivo. En este ejemplo, las unidades de longitud están en pulgadas.
El sistema de coordenadas es diestro: X representa la dirección correcta, Y está hacia adelante y Z está hacia arriba, con el origen ubicado en el centro del eje trasero al nivel del suelo. Las unidades de ángulo están en grados, con la guiñada medida desde la parte delantera del automóvil, positiva hacia la izquierda (rotación Z positiva). El cabeceo se mide desde el horizonte, positivo hacia arriba (rotación X positiva), y siempre se supone que el balanceo es cero. Tenga en cuenta que las unidades de los ángulos son grados, pero se convierten a radianes al leer la configuración. Entonces, si desea cambiarlo en el código fuente de la aplicación EVS, use radianes.
Esta configuración permite que la aplicación EVS interprete y represente con precisión las imágenes de la cámara para el sistema de estacionamiento con vista envolvente.
El archivo de configuración de la aplicación EVS se encuentra en /vendor/etc/automotive/evs/config_override.json. A continuación se muestra un ejemplo de una configuración con dos cámaras, delantera y trasera, correspondiente a nuestra configuración de controladores:
{
"car": {
"width": 76.7,
"wheelBase": 117.9,
"frontExtent": 44.7,
"rearExtent": 40
},
"displays": [
{
"_comment": "Display0",
"displayPort": 0,
"frontRange": 100,
"rearRange": 100
}
],
"graphic": {
"frontPixel": -20,
"rearPixel": 260
},
"cameras": [
{
"cameraId": "/dev/video0",
"function": "reverse,park",
"x": 0.0,
"y": 20.0,
"z": 48,
"yaw": 180,
"pitch": -10,
"roll": 0,
"hfov": 115,
"vfov": 80,
"hflip": false,
"vflip": false
},
{
"cameraId": "/dev/video2",
"function": "front,park",
"x": 0.0,
"y": 100.0,
"z": 48,
"yaw": 0,
"pitch": -10,
"roll": 0,
"hfov": 115,
"vfov": 80,
"hflip": false,
"vflip": false
}
]
}
Lidera SVE
Asegúrese de que todas las aplicaciones se estén ejecutando:
ps -A | grep evs
automotive_evs 3722 1 11007600 6716 binder_thread_read 0 S evsmanagerd
graphics 3723 1 11362488 30868 binder_thread_read 0 S android.hardware.automotive.evs-default
automotive_evs 3736 1 11068388 9116 futex_wait 0 S evs_app
Para simular la marcha atrás puedes llamar:
evs_app --test --gear reverse
Y aparcar:
evs_app --test --gear park
La aplicación EVS debería aparecer en la pantalla.
Resolver problemas
Al configurar e iniciar el EVS (Sistema de visión externa) para la cámara de estacionamiento con vista envolvente en Android AAOS 14, puede encontrar varios problemas.
Para depurar esto, puede utilizar registros del sistema EVS:
logcat EvsDriver:D EvsApp:D evsmanagerd:D *:S
Múltiples cámaras USB – Congelación de imágenes
Durante la inicialización del sistema EVS, encontramos un problema con la transmisión de imágenes de dos cámaras USB. Si bien la transmisión de una cámara se mostró sin problemas, la transmisión de la segunda cámara no apareció en absoluto o se congeló después de mostrar algunos fotogramas.
Descubrimos que el problema estaba en la comunicación USB entre la cámara y el controlador uvcvideo V4L2. Durante la negociación de la conexión, la cámara reservó todo el ancho de banda USB disponible. Para evitar esto, el controlador uvcvideo debe configurarse con el parámetro peculiaridades = 128. Esta configuración permite al controlador asignar ancho de banda USB en función de la resolución actual y la velocidad de fotogramas de la cámara.
Para implementar esta solución, el parámetro debe configurarse en el gestor de arranque, en la línea de comando del kernel, por ejemplo:
console=ttyS0,115200 no_console_suspend root=/dev/ram0 rootwait androidboot.hardware=rpi4 androidboot.selinux=permissive uvcvideo.quirks=128
Después de aplicar esta configuración, la imagen de ambas cámaras debería mostrarse sin problemas, resolviendo el problema de congelación.
Un marco verde alrededor de la imagen de la cámara.
En la implementación actual del sistema EVS, la imagen de la cámara está rodeada por un marco verde, como se muestra en la siguiente imagen:
Para eliminar este marco verde, debe modificar la implementación del controlador EVS. Específicamente, debes editar el GlWrapper.cpp archivo ubicado en cpp/evs/sampleDriver/aidl/src/.
en el vacío GlWrapper::renderImageToScreen() función, reemplace las siguientes líneas:
-0.8, 0.8, 0.0f, // left top in window space
0.8, 0.8, 0.0f, // right top
-0.8, -0.8, 0.0f, // left bottom
0.8, -0.8, 0.0f // right bottom
a
-1.0, 1.0, 0.0f, // left top in window space
1.0, 1.0, 0.0f, // right top
-1.0, -1.0, 0.0f, // left bottom
1.0, -1.0, 0.0f // right bottom
Después de realizar este cambio, reconstruya el controlador EVS e impleméntelo en su dispositivo. La imagen de la cámara ahora debería mostrarse en pantalla completa sin el marco verde.
Conclusión
En este artículo, profundizamos en las complejidades de la configuración e implementación del EVS (Sistema de visión externa) para la cámara de estacionamiento con vista envolvente en Android AAOS 14. Exploramos los componentes críticos que componen el sistema EVS: el controlador EVS, el EVS Manager y la aplicación EVS, detallando sus funciones e interacciones.
El controlador EVS es responsable de proporcionar buffers de imágenes de las cámaras del vehículo, utilizando una implementación de muestra que utiliza el subsistema Linux V4L2 para administrar cámaras conectadas por USB. El EVS Manager actúa como intermediario, administra los recursos de cámara y pantalla y facilita la comunicación entre el conductor EVS y la aplicación EVS. Finalmente, la aplicación EVS recopila imágenes de varias cámaras y muestra una vista coherente de 360 grados alrededor del vehículo según la selección de marcha y otras señales del vehículo HAL.
La configuración del sistema EVS implica configurar el controlador EVS a través de un archivo de configuración XML completo, que define los parámetros de la cámara y la pantalla. Además, la configuración de la aplicación EVS, descrita en un archivo JSON, garantiza el mapeo y la unión correctos de las imágenes de la cámara para proporcionar una vista precisa del entorno.
Al comprender e implementar estas configuraciones, los desarrolladores pueden explotar todo el potencial de la plataforma Android AAOS 14 para mejorar la seguridad del vehículo y la asistencia al conductor a través de un eficaz sistema de cámara de estacionamiento con vista envolvente. Esta configuración integral no sólo mejora la experiencia de estacionamiento sino que también sienta las bases para futuros avances en la tecnología automotriz.