Инерционное состояние основной истины агента
возвращает инерционное состояние основной истины агента. Используйте эти данные в качестве входной основной истины для gTruth
= state(ac
)insSensor
Система object™.
Эта функция поддерживается только для агентов, которым создали траектории при помощи smoothTrajectory
функция.
Сгенерируйте измерения от датчика INS, который смонтирован к транспортному средству в ведущем сценарии. Постройте измерения INS против состояния основной истины транспортного средства и визуализируйте скорость и ускоряющий профиль транспортного средства.
Создайте ведущий сценарий
Загрузите географические данные для ведущего маршрута в кампусе MathWorks® Apple Hill в Натике, MA.
data = load('ahroute.mat');
latIn = data.latitude;
lonIn = data.longitude;
Преобразуйте координаты широты и долготы маршрута к Декартовым координатам. Установите источник на первую координату в ведущем маршруте. Для простоты примите высоту 0 для маршрута.
alt = 0; origin = [latIn(1),lonIn(1),alt]; [xEast,yNorth,zUp] = latlon2local(latIn,lonIn,alt,origin);
Создайте ведущий сценарий. Установите источник конвертированного маршрута как географическая контрольная точка.
scenario = drivingScenario('GeoReference',origin);
Создайте дорогу на основе Декартовых координат маршрута.
roadCenters = [xEast,yNorth,zUp]; road(scenario,roadCenters);
Создайте транспортное средство, которое следует за центральной линией дороги. Транспортное средство перемещается между 4 и 5 метрами в секунду (9 - 11 миль в час), замедляющихся в кривых на дороге. Чтобы создать траекторию, используйте smoothTrajectory
функция. Вычисленная траектория минимизирует толчок и избегает разрывов на ускорении, которое является требованием для моделирования датчиков INS.
egoVehicle = vehicle(scenario,'ClassID',1);
egoPath = roadCenters;
egoSpeed = [5 5 5 4 4 4 5 4 4 4 4 5 5 5 5 5];
smoothTrajectory(egoVehicle,egoPath,egoSpeed);
Постройте сценарий и покажите 3-D представление из-за автомобиля, оборудованного датчиком.
plot(scenario) chasePlot(egoVehicle)
Создайте датчик INS
Создайте датчик INS, который принимает вход времен симуляции. Введите шум в измерения датчика путем установки стандартного отклонения измерений скорости и точности к 0,1 и 0.05, соответственно.
INS = insSensor('TimeInput',true, ... 'VelocityAccuracy',0.1, ... 'AccelerationAccuracy',0.05);
Визуализируйте измерения INS
Инициализируйте географический проигрыватель для отображения измерений INS и основной истины агента. Сконфигурируйте проигрыватель, чтобы отобразить его последние 10 положений и установить уровень изменения масштаба на 17.
zoomLevel = 17; player = geoplayer(latIn(1),lonIn(1),zoomLevel, ... 'HistoryDepth',10,'HistoryStyle','line');
Предварительно выделите место для времен симуляции, скоростных измерений и ускоряющих измерений, которые получены в процессе моделирования.
numWaypoints = length(latIn); times = zeros(numWaypoints,1); gTruthVelocities = zeros(numWaypoints,1); gTruthAccelerations = zeros(numWaypoints,1); sensorVelocities = zeros(numWaypoints,1); sensorAccelerations = zeros(numWaypoints,1);
Симулируйте сценарий. Во время цикла симуляции получите состояние основной истины автомобиля, оборудованного датчиком и измерение INS того состояния. Преобразуйте эти показания в географические координаты, и в каждом waypoint, визуализируйте основную истину и показания INS на географическом проигрывателе. Также получите скорость и ускоряющие данные для графического вывода ускоряющие профили и скорость.
nextWaypoint = 2; while advance(scenario) % Obtain ground truth state of ego vehicle. gTruth = state(egoVehicle); % Obtain INS sensor measurement. measurement = INS(gTruth,scenario.SimulationTime); % Convert readings to geographic coordinates. [latOut,lonOut] = local2latlon(measurement.Position(1), ... measurement.Position(2), ... measurement.Position(3),origin); % Plot differences between ground truth locations and locations reported by sensor. reachedWaypoint = sum(abs(roadCenters(nextWaypoint,:) - gTruth.Position)) < 1; if reachedWaypoint plotPosition(player,latIn(nextWaypoint),lonIn(nextWaypoint),'TrackID',1) plotPosition(player,latOut,lonOut,'TrackID',2,'Label','INS') % Capture simulation times, velocities, and accelerations. times(nextWaypoint,1) = scenario.SimulationTime; gTruthVelocities(nextWaypoint,1) = gTruth.Velocity(2); gTruthAccelerations(nextWaypoint,1) = gTruth.Acceleration(2); sensorVelocities(nextWaypoint,1) = measurement.Velocity(2); sensorAccelerations(nextWaypoint,1) = measurement.Acceleration(2); nextWaypoint = nextWaypoint + 1; end if nextWaypoint > numWaypoints break end end
Постройте скоростной профиль
Сравните основную истину продольная скорость транспортного средства в зависимости от времени против скоростных измерений, полученных датчиком INS.
Удалите нули из временного вектора и векторов скорости.
times(times == 0) = []; gTruthVelocities(gTruthVelocities == 0) = []; sensorVelocities(sensorVelocities == 0) = []; figure hold on plot(times,gTruthVelocities) plot(times,sensorVelocities) title('Longitudinal Velocity Profile') xlabel('Time (s)') ylabel('Velocity (m/s)') legend('Ground truth','INS') hold off
Постройте ускоряющий профиль
Сравните основную истину продольное ускорение транспортного средства в зависимости от времени против ускоряющих измерений, полученных датчиком INS.
gTruthAccelerations(gTruthAccelerations == 0) = []; sensorAccelerations(sensorAccelerations == 0) = []; figure hold on plot(times,gTruthAccelerations) plot(times,sensorAccelerations) title('Longitudinal Acceleration Profile') xlabel('Time (s)') ylabel('Acceleration (m/s^2)') legend('Ground truth','INS') hold off
ac
— АгентActor
возразите | Vehicle
объектАгент, принадлежащий drivingScenario
объект в виде Actor
или Vehicle
объект. Чтобы создать эти объекты, используйте actor
и vehicle
функции, соответственно.
gTruth
— Инерционное состояние основной истиныИнерционное состояние основной истины агента, в локальных Декартовых координатах, возвратилось как структура, содержащая эти поля:
Поле | Описание |
---|---|
'Position' | Положение, в метрах в виде действительного, конечного N-by-3 матрица [x y z] векторы. N является количеством отсчетов в текущей системе координат. |
'Velocity' | Скорость (v), в метрах в секунду в виде действительного, конечного N-by-3 матрица [v x v y v z] вектор. N является количеством отсчетов в текущей системе координат. |
'Orientation' | Ориентация относительно локальной Декартовой системы координат в виде одной из этих опций:
Каждая матрица кватерниона или вращения является вращением системы координат от локальной Декартовой системы координат до системы координат корпуса датчика тока. N является количеством отсчетов в текущей системе координат. |
'Acceleration' | Ускорение (a), в метрах в секунду придало квадратную форму в виде действительного, конечного N-by-3 матрице [a x a y a z] векторы. N является количеством отсчетов в текущей системе координат. |
'AngularVelocity' | Скорость вращения (ω), в градусах в секунду в квадрате в виде действительного, конечного N-by-3 матрица [ω x ω y ω z] векторы. N является количеством отсчетов в текущей системе координат. |
Возвращенные значения полей имеют тип double
.
insSensor
| drivingScenario
| actor
| vehicle
| smoothTrajectory
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.