factorTwoPoseSE2
Descripción
El objeto factorTwoPoseSE2
contiene factores que relacionan pares de poses en el espacio de estados SE(2) para un objeto factorGraph
.
Creación
Descripción
crea un objeto F
= factorTwoPoseSE2(nodeID
)factorTwoPoseSE2
, F
, con la propiedad de números de identificación de nodo NodeID
establecida en nodeID
.
especifica propiedades utilizando uno o más argumentos de nombre-valor. Por ejemplo, F
= factorTwoPoseSE2(nodeID
,Name=Value
)factorTwoPoseSE2([1 2],Measurement=[1 5 7])
establece la propiedad Measurement
del objeto factorTwoPoseSE2
en [1 5 7]
.
Propiedades
Esta propiedad o parámetro es de solo lectura.
Números de identificación de nodo, especificados como una matriz N por 2 de números enteros no negativos, donde N es el número total de factores deseados. Cada fila representa un factor que se conecta a dos nodos de tipo POSE_SE2
en los ID de nodo especificados en el gráfico de factores. Las filas tienen el formato [PoseID1 PoseID2].
Si un factor en el objeto factorTwoPoseSE2
especifica un ID que no corresponde a un nodo en el gráfico de factores, el gráfico de factores crea automáticamente un nodo del tipo requerido con ese ID y lo agrega al gráfico de factores al agregar el factor al gráfico de factores.
Para obtener más información sobre los tipos de nodos esperados de todos los factores admitidos, consulte Tipos de nodos esperados de objetos de factores.
Pose relativa medida, especificada como una matriz N por 3, donde cada fila tiene la forma [dx dy dtheta]. N es el número total de factores. dx y dy son el cambio de posición en x y y, respectivamente, y dtheta es el ángulo entre las dos posiciones.
Matriz de información asociada a la medición, especificada como una matriz de 3 por 3 o una matriz de 3 por 3N. N es el número total de factores especificados por este objeto factorTwoPoseSE2
. Cada matriz de información corresponde a las medidas de los nodos especificados en NodeIDs
.
Si especifica esta propiedad como una matriz de 3 por 3 cuando NodeID
contiene más de una fila, la matriz de información corresponde a todas las mediciones en Measurement
.
Funciones del objeto
nodeType | Obtener el tipo de nodo en el gráfico de factores |
Ejemplos
Defina ground-truth para cinco poses de robots como un bucle y cree un gráfico de factores.
gndtruth = [0 0 0; 2 0 pi/2; 2 2 pi; 0 2 3*pi 0 0 0]; fg = factorGraph;
Genere los ID de nodo necesarios para crear tres factores factorTwoPoseSE2
. Como el nodo 4 coincidiría directamente sobre el nodo 0, en lugar de especificar un factor que conecte el nodo 3 con un nuevo nodo 4, cree un cierre de bucle agregando otro factor que relacione el nodo 3 con el nodo 0.
poseFIDs = generateNodeID(fg,3,"factorTwoPoseSE2");
poseFIDs = [poseFIDs; 3 0]
poseFIDs = 4×2
0 1
1 2
2 3
3 0
Defina la medida relativa entre cada pose consecutiva y agregue un poco de ruido para que la medida se parezca más a la lectura de un sensor.
relMeasure = [2 0 pi/2; 2 0 pi/2; 2 0 pi/2; 2 0 pi/2] + 0.1*rand(4,3);
Cree los factores factorTwoPoseSE2
con las medidas relativas definidas y luego agregue los factores al gráfico de factores.
poseFactor = factorTwoPoseSE2(poseFIDs,Measurement=relMeasure); addFactor(fg,poseFactor);
Obtenga los ID de nodo de todos los nodos de pose SE2 en el gráfico de factores.
poseIDs = nodeIDs(fg,NodeType="POSE_SE2");
Debido a que los nodos de tipo POSE_SE2
tienen un estado predeterminado de [0 0 0]
, debe proporcionar una estimación inicial del estado. Normalmente esto proviene de un sensor de odometría en el robot. Pero para este ejemplo, utilice ground-truth con algo de ruido.
predictedState = gndtruth(1:4,:); predictedState(2:4,:) = predictedState(2:4,:) + 0.1*rand(3,3);
Luego, establezca los estados de los nodos de pose en los estados estimados previstos.
nodeState(fg,poseIDs,predictedState);
Arregle el primer nodo de pose. Debido a que todos los nodos son relativos entre sí, necesitan un estado conocido para ser un ancla.
fixNode(fg,0);
Optimice el gráfico de factores y los resultados visuales
Optimice el gráfico de factores con las opciones de solver predeterminadas. La optimización actualiza los estados de todos los nodos en el gráfico de factores para que las poses del vehículo se actualicen.
rng default
optimize(fg)
ans = struct with fields:
InitialCost: 6.1614
FinalCost: 0.0118
NumSuccessfulSteps: 5
NumUnsuccessfulSteps: 0
TotalTime: 1.5998e-04
TerminationType: 0
IsSolutionUsable: 1
OptimizedNodeIDs: [1 2 3]
FixedNodeIDs: 0
Obtenga y almacene los estados de nodo actualizados para el robot. Luego, trace los resultados, comparando la estimación del gráfico de factores de la trayectoria del robot con ground-truth del robot.
poseStatesOpt = nodeState(fg,poseIDs)
poseStatesOpt = 4×3
0 0 0
2.0777 0.0689 1.5881
2.0280 2.1646 -3.1137
0.0132 2.0864 -1.6014
figure plot(gndtruth(:,1),gndtruth(:,2),Marker="*",LineWidth=1.5) hold on plot([poseStatesOpt(:,1); 0],[poseStatesOpt(:,2); 0],Marker="*",LineStyle="--",LineWidth=1); legend(["Ground Truth","Opt. Position"]); s2 = se2(poseStatesOpt,"xytheta"); plotTransforms(s2,FrameSize=0.5,FrameAxisLabels="on"); axis padded hold off
Tenga en cuenta que las poses no coinciden perfectamente con la ground-truth porque no hay muchos factores en este gráfico que la función optimize
pueda usar para proporcionar una solución más precisa. La precisión se puede mejorar utilizando mediciones más precisas, conjeturas precisas del estado inicial y agregando factores adicionales para agregar más información para que la use el optimizador.
Más acerca de
La propiedad NodeID
de cada objeto de factor especifica y se conecta a estos tipos de nodos:
Objeto de factor | Tipos de nodos esperados de ID de nodos especificados |
---|---|
factorGPS | ["POSE_SE3"] |
factorIMU | ["POSE_SE3","VEL3","IMU_BIAS","POSE_SE3","VEL3","IMU_BIAS"] |
factorCameraSE3AndPointXYZ | ["POSE_SE3","POINT_XYZ"] o ["POSE_SE3","POINT_XYZ","TRANSFORM_SE3"] |
factorPoseSE2AndPointXY | ["POSE_SE2","POINT_XY"] |
factorPoseSE3AndPointXYZ | ["POSE_SE3","POINT_XYZ"] |
factorTwoPoseSE2 | ["POSE_SE2","POSE_SE2"] |
factorTwoPoseSE3 | ["POSE_SE3","POSE_SE3"] |
factorTwoPoseSIM3 | ["POSE_SE3","POSE_SE3_SCALE","POSE_SE3","POSE_SE3_SCALE"] |
factorIMUBiasPrior | ["IMU_BIAS"] |
factorPoseSE3Prior | ["POSE_SE3"] |
factorVelocity3Prior | ["VEL_3"] |
Por ejemplo, factorPoseSE2AndPointXY([1 2])
crea un factor de referencia 2-D que se conecta a los identificadores de nodo 1 y 2. Si intenta agregar ese factor a un gráfico de factores que ya contiene nodos con los ID 1 y 2, el factor espera que los nodos 1 y 2 sean de los tipos "POSE_SE2"
y "POINT_XY"
, respectivamente.
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Historial de versiones
Introducido en R2022aLas propiedades NodeID
, Measurement
y Information
ahora aceptan filas adicionales para especificar múltiples factores.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)