Esquema de sincronización horaria en conducción autónoma

Este artículo se centra en el esquema de sincronización de tiempo de gps+pps+gpsd+chrony+ptpd+gptpd, que se usa ampliamente en la conducción autónoma. Este artículo es solo mi propio registro durante el proceso de depuración. Si hay algún problema, bienvenido a discutir : [email protected]

El esquema detallado es el siguiente: el ubxclient en el lado Tbox (serie IMX8) recibe la hora del GPS y la señal PPS del GPS (como la serie ublox), y el lado Tbox reenvía el mensaje NEMA/UBX recibido del GPS a el gpsd a través de udp, y luego chrony se combina con los gpsd La información de tiempo y la información de pps bajo linux se utilizan para la sincronización y corrección de tiempo El Tbox de seguimiento se utilizará como servidor para sincronizar el tiempo de la computación de conducción automática chip (como nvida orin/xavier) a través de ptpd, y luego el chip informático de conducción automática lo enviará a la MCU a través de gptpd./lidar, etc. para la sincronización de tiempo, el diagrama de bloques detallado es el siguiente:

 Procesamiento de señal 1.PPS

Configure la frecuencia de salida de la señal PPS del chip ublox 1HZ, la señal de entrada del terminal tbox medido pps_in:

 A partir de los resultados de la prueba, el período de 17 señales de pulso es 7.441 s + 9.564 = 17.005 s, la precisión del período es inferior a 0.001 s y la precisión es relativamente alta

Linux abre la configuración de pps:

CONFIG_PPS=s
CONFIG_PPS_DEBUG=n
CONFIG_PPS_CLIENT_KTIMER=n     
CONFIG_PPS_CLIENT_LDISC=n
CONFIG_PPS_CLIENT_GPIO=s

Nota: Si ktimer/ldisc está activado, el nodo del dispositivo puede ser diferente. Puede ver el nodo de dispositivo correspondiente específico en el registro del kernel. Nuestro lado ktimer/ldisc no está activado, y el nodo pps_gpio es /dev/pps2. Para eliminar errores, debe configurar este nodo

configuración de dts:

pps_ubx{         compatible = "pps-gpio";         pinctrl-nombres = "predeterminado";         pinctrl-0 = <&pinctrl_pps>;         gpios = <&gpio4 2 GPIO_ACTIVE_HIGH>;         estado = "bien";     };





código relacionado con el procesamiento de pps en el kernel: drivers/pps/clients/pps-gpio.c

De forma predeterminada, Linux ha agregado procesamiento relacionado con pps al código del kernel, centrándose en activar interrupciones PPS. Mi proyecto usa el flanco ascendente para activar interrupciones (porque ublox por defecto alinea el flanco ascendente con el segundo completo)

Controlador de interrupciones:

estático irqreturn_t pps_gpio_irq_handler(int irq, void *data)
{     const struct pps_gpio_device_data *info;     estructura pps_event_time ts;     int flanco_ascendente;


    /* Obtener la marca de tiempo primero */
    pps_get_ts(&ts); ----Obtener la información de tiempo desencadenada por la interrupción y luego pasarla a la capa de aplicación

    información = datos;

    arista_borde = gpio_get_value(info->gpio_pin);
    if ((rising_edge && !info->assert_falling_edge) ||
        (!rising_edge && info->assert_falling_edge))
        pps_event(info->pps, &ts, PPS_CAPTUREASSERT, NULL);
    else if (info->capture_clear &&
             ((rising_edge && info->assert_falling_edge) ||
              (!rising_edge && !info->assert_falling_edge)))
        pps_event(info->pps, &ts, PPS_CAPTURECLEAR, NULL);

    devolver IRQ_HANDLED;
}

pps_event : registre un evento PPS en el sistema, y ​​la capa de aplicación posterior puede obtener información como la hora y el número de serie del disparador pps

Para obtener detalles sobre pps, consulte: PPS - Pulso por segundo: la documentación del kernel de Linux

pps-tools: http://linuxpps.org  ,  GitHub - redlab-i/pps-tools: herramientas de espacio de usuario para LinuxPPS

Uso de ppstest/ppswatch (resultado después de la sincronización):

 2. GPSD parte

Configuración de inicio GPSD:

/usr/sbin/gpsd -n -P /run/gpsd.pid -F /var/run/gpsd.sock udp://127.0.0.1:50000

-n no esperar a que el cliente se conecte para sondear GPS debe seleccionarse cuando se trabaja con chrony

-F sockfile especifica la ubicación del zócalo de control

udp://127.0.0.1:50000 Reciba datos nema y ubx enviados por ubxclientsocket, y también configure directamente los nodos de dispositivos uart de ublox

Herramientas relacionadas a usar:

cgps:

 Nota: La hora/latitud/longitud y otra información en la figura se pueden usar para determinar si se ha buscado la estrella y se ha obtenido la información de hora y ubicación. Solo después de obtener la información de hora y ubicación, gpsd puede cooperar con chrony para sincronizar la hora para eliminar el error pps

 3. Parte cronica

Chrony es otra implementación de NTP (Network Time Protocol, un protocolo para la sincronización de la hora del servidor). A diferencia de ntpd, puede sincronizar el reloj del sistema de forma más rápida y precisa, minimizando los errores de tiempo y frecuencia. chrony son dos programas que se utilizan para mantener la precisión de el reloj del sistema informático, estos dos programas se denominan chronyd y chronyc

chronyd ejecuta un proceso daemon en segundo plano para sincronizar la hora del sistema

chronyc proporciona una interfaz de usuario para monitorear el rendimiento y la configuración

El principio de la calibración chrony+gpsd:

gpsd lee los datos gnss del puerto serie o la red y los analiza, y genera el resultado del análisis a través del zócalo UNIX o la memoria compartida, y chrony obtiene los datos gnss analizados del zócalo UNIX o la memoria compartida, los combina con la información pps, y corrige la hora del sistema

nota: El principio de la corrección cronológica es lograr el tiempo de corrección controlando la tasa de aumento o disminución del tiempo, y la forma de saltar rara vez se usa. La forma de saltar puede afectar otras aplicaciones, lo que puede conducir a una corrección más lenta, pero si la desviación es demasiado grande o la primera corrección también se puede configurar como un modo de salto condicional

Nota: chrony y ntp están en conflicto y no pueden existir al mismo tiempo. Debe prestar atención cuando systemd inicie la configuración.

archivo de configuración de chronyd /etc/chrony.conf

Una de las actividades principales del programa driftfile chronyd es calcular la proporción del tiempo de aumento o disminución de la computadora en función del tiempo real. Lo más razonable es registrarlo en un archivo. Compensará el reloj del sistema después de reiniciar, e incluso , si es posible, obtenga mejores estimaciones de los servidores de reloj

permitir/denegar Aquí puede especificar un host, subred o red para permitir o denegar conexiones NTP a la máquina que actúa como servidor de reloj.

makestep Normalmente, chronyd hará que el sistema corrija gradualmente cualquier desviación de tiempo ralentizando o acelerando el reloj según sea necesario. En determinadas circunstancias, el reloj del sistema puede desviarse demasiado rápido, lo que hace que el proceso de ajuste tarde mucho tiempo en corregir el reloj del sistema. Esta directiva obliga a chronyd a aumentar el reloj del sistema cuando el período de ajuste es superior a un cierto umbral, pero solo si no hay más actualizaciones de reloj porque el tiempo de inicio de chronyd supera el límite especificado (se puede usar un valor negativo para desactivar el límite) .

rtcsync habilita el modo kernel y la hora del sistema se copia en el reloj en tiempo real (RTC) cada 11 minutos

refclock establece la fuente del reloj

Nota: Para obtener instrucciones detalladas y completas, consulte la documentación oficial de chrony : chrony – chrony.conf(5)

chronyc sources -v comando para ver los resultados de la sincronización:

Se puede ver que la desviación es de unos 125ns.

Instrucciones relacionadas:

M:  Esto indica el modo de la fuente de la señal. ^ significa servidor, = significa par, # significa reloj de referencia de la conexión local

S: Esta columna indica el estado de la fuente

* Indica la fuente con la que chronyd se está sincronizando actualmente

- Indica una fuente aceptable que está excluida por el algoritmo de combinación

+ Indica fuentes aceptables, combinadas con la fuente seleccionada

? Indica una fuente que perdió la conectividad o cuyos paquetes fallaron todas las pruebas. También se muestra al inicio hasta que se hayan recolectado al menos 3 muestras de

x indica un reloj que chronyd considera una cita falsa (es decir, cuya hora no coincide con la mayoría de las otras fuentes)

~ indica una fuente donde el tiempo parece tener demasiada variabilidad

Nombre/dirección IP: muestra el nombre o la dirección IP de la fuente, o el ID de referencia del reloj de referencia

Estrato: Esto muestra el estrato de la fuente, como se informó en sus muestras recibidas más recientemente. El estrato 1 representa una computadora con un reloj de referencia conectado localmente. Las computadoras que se sincronizan con computadoras de nivel 1 están en el nivel 2. Las computadoras sincronizadas con las computadoras de nivel 2 están en el nivel 3, y así sucesivamente.

Sondeo: muestra la velocidad a la que se sondea la fuente, como el logaritmo de base 2 del intervalo de tiempo en segundos. Entonces, un valor de 6 significa que se toma una medición cada 64 segundos. chronyd cambiará automáticamente la tasa de sondeo de acuerdo con la situación actual

Alcance: Esto muestra el registro de accesibilidad de la fuente impreso como un número octal. El registro tiene 8 bits y se actualiza en cada paquete recibido o perdido de la fuente. Un valor de 377 indica que se recibieron respuestas válidas para todos los usuarios de las últimas ocho transmisiones

LastRx: esta columna muestra cuánto tiempo hace que se recibió la última muestra buena de la fuente (que se muestra en la siguiente columna). Las mediciones que fallan en ciertas pruebas se ignoran. Normalmente en segundos. letra m , h , d o y para minutos, horas, días o años

Última muestra: esta columna muestra el desplazamiento entre el reloj local y la fuente cuando se midió por última vez. Los números entre corchetes indican compensaciones medidas reales. Puede tener el sufijo ns (para nanosegundos), us  (para microsegundos), ms (para milisegundos) o s (para segundos). Los números a la izquierda de los corchetes representan medidas brutas, ajustadas para permitir cualquier oscilación impuesta en el reloj local a partir de entonces. Los números que siguen a los indicadores +/- indican el margen de error en la medición. Un desplazamiento positivo indica que el reloj local está adelantado al reloj de origen

Documentos de referencia:

CÓMO del servicio de tiempo GPSD

crony – crony.conf(5)

Supongo que te gusta

Origin blog.csdn.net/kimginginging/article/details/127668926
Recomendado
Clasificación