How to create a fixed user who receives GNSS signals within a map made from 3D plot?
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
inhyeok
el 12 de Mzo. de 2025
Comentada: Ryan Salvo
el 18 de Mzo. de 2025
I would like to refer to the example of matlab above to create a user who is statically fixed in the middle of the map, not a user who moves along the trajectory.
So I modified it a little bit and wrote the code, and when I run it, the figure comes out well, but there's an unknown error, so I need some help.
Error using fusion.internal.GPSSensorBase/validateInputsImpl (line 302)
Expected input to be an array with number of columns equal to 3.
Error in deepseek_v01 (line 31)
[lla, velocity] = gps(position, zeros(1,3));
^^^^^^^^^^^^^^^^^^^^^^^^^
I'm getting this error, and I'm curious about the solution. I'm also curious if there's any problem even if I ignore the error and use it.
The .osm file I use is not attached, so you can use the .osm file that Matlab supports by default.
referenceLocation = [37.498759 127.027487 0];
scene = uavScenario('ReferenceLocation', referenceLocation, 'UpdateRate', 10, 'StopTime', Inf);
buildingColor = [0.8 0.8 0.8];
if isfile('gangnam_11exit.osm')
addMesh(scene, 'buildings', {'gangnam_11exit.osm', [-250 250], [-250 250], 'auto'}, buildingColor);
else
addMesh(scene, 'buildings', {'random', [-150 150], [-150 150], [10 50]}, buildingColor);
end
user = uavPlatform('User', scene, 'ReferenceFrame', 'ENU', 'InitialPosition', [0 0 80]);
gps = gpsSensor('UpdateRate', 10, ...
'ReferenceLocation', referenceLocation, ...
'HorizontalPositionAccuracy', 1.6, ...
'VerticalPositionAccuracy', 3.0, ...
'VelocityAccuracy', 0.1);
fig = figure('Name','Static GNSS User');
ax = show3D(scene);
hold(ax, 'on');
axis(ax, 'equal');
grid(ax, 'on');
view(ax, 3);
plot3(ax, 0, 0, 80, 'ro', 'MarkerSize', 12, 'MarkerFaceColor', 'r');
setup(scene);
while ishandle(fig)
[position, orientation] = user.read();
[lla, velocity] = gps(position, zeros(1,3));
fprintf('[ENU Position] X: %.2fm, Y: %.2fm, Z: %.2fm\n', position(1), position(2), position(3));
fprintf('[GPS Coordinates] Lat: %.6f°, Lon: %.6f°, Alt: %.2fm\n\n', lla(1), lla(2), lla(3));
show3D(scene, 'Parent', ax, 'FastUpdate', true);
drawnow limitrate;
advance(scene);
end
0 comentarios
Respuesta aceptada
Ryan Salvo
el 17 de Mzo. de 2025
The output of the read object function of uavPlatform is not position, but a 16-element motion vector. The gpsSensor object expects a 3-element position vector. This can be obtained by indexing into the motion vector.
[motion, orientation] = user.read();
position = motion(1:3);
[lla, velocity] = gps(position, zeros(1,3));
2 comentarios
Ryan Salvo
el 18 de Mzo. de 2025
The fprintf command within the for-loop is most likely causing the result to repeatedly print.
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!