Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

Simule los efectos de trayectorias múltiples de GNSS en un entorno de cañón urbano

Este ejemplo muestra cómo simular los ruidos del receptor del Sistema Global de Navegación por Satélite (GNSS) o del Sistema de Posicionamiento Global (GPS) debido a obstrucciones locales en el entorno del receptor.

Un receptor GNSS estima la posición actual a partir de la información obtenida de los satélites a la vista. Cuando un receptor se encuentra en una ubicación con muchas obstrucciones locales, puede sufrir trayectorias múltiples. Multitrayecto es cuando las señales del satélite llegan a la antena del receptor desde dos o más rutas. Una o ninguna de estas rutas es una línea de visión directa (LOS) desde el satélite al receptor. El resto de las rutas contienen reflejos de las obstrucciones locales. Cada señal de satélite contiene una marca de tiempo de transmisión que puede utilizar además del reloj del receptor para calcular un pseudodistancia entre el satélite y el receptor. Una señal de satélite que llega por una ruta no directa da como resultado un pseudodistancia incorrecto que es mayor que el pseudodistancia de una ruta directa. Las pseudodistancias incorrectas degradan la precisión de la posición estimada del receptor.

Esta imagen muestra un automóvil circulando por una calle en un escenario de conducción en el centro de Boston, MA, con edificios altos a ambos lados de la calle. Mientras el automóvil avanza, puede ver un skyplot a la derecha que muestra los satélites a la vista del receptor.

Overhead view of driving scenario with sky plot of satellites in view

Escenario de conducción de carga

Cargue un archivo MAT que contenga un objeto drivingScenario creado a partir de un archivo OSM del centro de Boston, MA. El archivo OSM se descargó de https://www.openstreetmap.org, que proporciona acceso a datos de mapas de colaboración colectiva en todo el mundo. Los datos están bajo la licencia Open Data Commons Open Database License (ODbL), https://opendatacommons.org/licenses/odbl/.

El escenario contiene un entorno urbano similar a un cañón, con edificios altos a ambos lados del vehículo.

load("downtownBostonDrivingScenario.mat","scenario","egoVehicle")
fig = figure;
ax = axes(fig);
chasePlot(egoVehicle,Meshes="on",Parent=ax)

Crear modelo de sensor receptor GNSS

Configure la semilla RNG para producir los mismos resultados al ejecutar el ejemplo varias veces. Cree un objeto gnssMeasurementGenerator y establezca la frecuencia de muestreo y la ubicación de referencia especificando las propiedades SampleTime y GeoReference del drivingScenario objeto, respectivamente. Establezca la hora inicial del objeto gnssMeasurementGenerator al 12 de agosto de 2022 a las 10 a.m.

rng default
t0 = datetime(2022,12,8,10,0,0);
gnss = gnssMeasurementGenerator(SampleRate=1/scenario.SampleTime, ...
                                ReferenceLocation=scenario.GeoReference, ...
                                InitialTime=t0);

Conecte el objeto gnssMeasurementGenerator al ego Vehicle del scenario con la ubicación de montaje configurada en 1.5 metros. a lo largo del eje z desde el origen del coche.

mountingLocation = [0 0 1.5];
addSensors(scenario,{gnss},egoVehicle.ActorID,mountingLocation);

Ejecutar escenario y visualizar rutas múltiples

Configure un diagrama de persecución y un diagrama de cielo para visualizar el escenario usando chaseplot y skyplot, respectivamente. El gráfico de persecución muestra el automóvil, egoVehicle, desde arriba para mostrar las obstrucciones locales que interfieren con las señales del satélite GPS. El gráfico del cielo muestra todos los satélites GPS actualmente a la vista del vehículo ego mientras éste se mueve. Dependiendo de la visibilidad, cada satélite se encuentra en una de estas categorías:

  • Bloqueado: el receptor GPS no detecta ninguna señal del satélite.

  • Ruta múltiple: el receptor GPS detecta señales del satélite, pero con uno o más reflejos.

  • Visible: el receptor GPS detecta una señal y tiene línea de visión directa (LOS) con el satélite.

Tenga en cuenta que se pueden encontrar múltiples señales del mismo satélite.

Cambie el tamaño de la figura para que se ajuste a ambos gráficos.

clf(fig,"reset")
set(fig,Position=[400 458 1120 420])

Cree un panel de interfaz de usuario en el lado izquierdo de la figura y cree ejes para un diagrama de persecución. Agregue el diagrama de persecución con la parte superior del diagrama como norte y configure el diagrama de persecución para que siga al automóvil visto desde arriba.

hChasePlot = uipanel(fig,Position=[0 0 0.5 1]);
ax = axes(hChasePlot);
viewYawAngle = 90-egoVehicle.Yaw; % Make the top of the plot point north.
chasePlot(egoVehicle,Parent=ax,Meshes="on",ViewHeight=75, ...
          ViewPitch=80,ViewYaw=viewYawAngle,ViewLocation=[0 -2.5*egoVehicle.Length]);

Cree un panel de interfaz de usuario en el lado derecho de la figura y cree ejes para un gráfico del cielo para mostrar la visibilidad del satélite. Agregue un diagrama de cielo vacío al panel. Establezca el orden de los colores en gris, rojo y verde, que representan los estados de los satélites bloqueados, de rutas múltiples y visibles, respectivamente.

hSkyPlot = uipanel(fig,Position=[0.5 0 0.5 1]);
sp = skyplot(NaN,NaN,Parent=hSkyPlot);
title("GPS Satellites with LOS and Multipath Reception");
legend(sp)
colors = colororder(sp);
colororder(sp,[0.6*[1 1 1];colors(7,:);colors(5,:)]);

Ejecute el escenario de conducción. En cada paso del escenario:

  1. Leer pseudodistancias de satélites.

  2. Obtenga acimutes y elevaciones de satélites desde posiciones de satélites.

  3. Clasifique los satélites según su estado (Blocked, Multipath o Visible).

  4. Establezca diferentes tamaños de marcadores para que se puedan ver múltiples mediciones del mismo satélite.

  5. Actualiza el gráfico del cielo.

currTime = gnss.InitialTime;
while advance(scenario)
    % Read satellite pseudoranges.
    [p,satPos,status] = gnss();
    allSatPos = gnssconstellation(currTime);
    currTime = currTime + seconds(1/gnss.SampleRate);
    
    % Get satellite azimuths and elevations from satellite positions.
    trueRecPos = enu2lla(egoVehicle.Position,gnss.ReferenceLocation,"ellipsoid");
    [az, el] = lookangles(trueRecPos,satPos,gnss.MaskAngle);
    [allAz,allEl,vis] = lookangles(trueRecPos,allSatPos,gnss.MaskAngle);
    allEl(allEl<0) = NaN;
    
    % Set categories of satellites based on the status (Blocked, Multipath, or Visible).
    groups = categorical([-ones(size(allAz)); status.LOS],[-1 0 1],["Blocked","Multipath","Visible"]); 
    
    % Set different marker sizes so that multiple measurements from the same satellite can be seen. 
    markerSizes = 100*ones(size(groups));
    markerSizes(groups == "Multipath") = 150;
    
    % Update the sky plot.
    set(sp,AzimuthData=[allAz; az],ElevationData=[allEl; el],GroupData=groups,MarkerSizeData=markerSizes);
    drawnow;
end

Figure contains objects of type skyplot, uipanel.

Conclusión

Este ejemplo mostró cómo generar mediciones GNSS sin procesar afectadas por la propagación por trayectos múltiples a partir de obstrucciones locales. Puede utilizar estas mediciones para estimar la posición del receptor GPS o combinarlas con otros sensores, como una unidad de medición inercial (IMU), para mejorar la estimación de la posición. Consulte el ejemplo Estimación de la pose del vehículo terrestre para IMU y GNSS estrechamente acoplados para obtener más información. Puede resultar difícil determinar si una medición GNSS sin procesar contiene propagación por trayectos múltiples. Una técnica de detección es la innovación o filtrado residual. Consulte el ejemplo Detecte errores de lectura de GPS de rutas múltiples mediante filtrado residual en la fusión de sensores inerciales para obtener más información.

Consulte también

| | (Automated Driving Toolbox)

Temas relacionados