How to create a fixed user who receives GNSS signals within a map made from 3D plot?
3 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Ryan Salvo
2025-3-17
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 个评论
Ryan Salvo
2025-3-18
The fprintf command within the for-loop is most likely causing the result to repeatedly print.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!