Дефайн-Роуд Лайоутс

Этот пример показывает, как создать множество пересечений дорог с функциями Automated Driving Toolbox™. Эти соединения могут быть объединены с другими соединениями, чтобы создать сложные дорожные сети. Можно просмотреть код для каждого графика и использовать его в собственном проекте.

Также можно создать пересечения дорог при помощи приложения Driving Scenario Designer.

Прямые дороги

Дороги фиксированной ширины могут быть заданы серией точек, которые задают местоположения центра дороги. Прямая дорога очень проста описать путем определения ее запуска и остановки местоположения. Вот пример дороги, которая запускается в (0,0) и заканчивается в (50,0) и имеет ширину 6 (метры).

s = drivingScenario;

roadCenters = [0 0; 50 0];
roadWidth = 6;

road(s, roadCenters, roadWidth);
plot(s,'RoadCenters','on','Centerline','on');

Дороги Laned

Как альтернатива определению дорожных ширин, можно задать маршруты путем обеспечения спецификации маршрута. Вот пример определения дороги с одной полосой слева и два справа.

s = drivingScenario;

roadCenters = [0 0; 50 0];

road(s, roadCenters, 'lanes', lanespec([1 2]));
plot(s,'RoadCenters','on');

Пересечения

Пересечения автоматически сгенерированы везде, где две дороги встречаются. В этом примере мы добавляем другой раздел на 50 м дороги.

roadCenters = [25 -25; 25  25];
road(s, roadCenters, 'lanes', lanespec([1 1]));

Кривые дороги

Кривые дороги могут быть описаны при помощи трех или больше точек. Чем больше точек вы используете, тем более комплексный кривая можно создать. В этом примере у нас есть кривая, проходящая через три точки:

s = drivingScenario;

roadCenters = [0 0; 10 0; 53 -20];
roadWidth = 6;

road(s, roadCenters, roadWidth,'lanes',lanespec(2));
plot(s,'RoadCenters','on');

Кольца

Когда вы задаете дорожные центры, кусочная кривая клотоиды подходящая промежуточный каждый сегмент, где искривление сохраняется промежуточные точки. Кривые клотоиды используются экстенсивно при разработке дорог, потому что у них есть искривление, которое отличается линейно с расстоянием, путешествовавшим вдоль дороги, которая очень проста для драйверов перейти.

По умолчанию дороги, созданные сценарием, не будут иметь никакого искривления в конечных точках. Чтобы сделать дорожный цикл, повторите первую и последнюю точку.

В этом примере мы показываем, что круговой дорожный сегмент 4 м шириной ограничил приблизительно область квадрата на 30 м. Добавление дорог, которые питаются в кольцо, является вопросом определения другого прямого или изогнуло дорожные сегменты

s = drivingScenario;

roadCenters = [-15 -15
                15 -15
                15  15
               -15  15
               -15 -15];

road(s, roadCenters, 'lanes', lanespec(1));

% Define roundabout exits with two lanes each
road(s, [-35   0; -20   0],'lanes', lanespec([1 1]));
road(s, [ 20   0;  35   0],'lanes', lanespec([1 1]));
road(s, [  0  35;   0  20],'lanes', lanespec([1 1]));
road(s, [  0 -20;  0  -35],'lanes', lanespec([1 1]));

plot(s,'RoadCenters','on');

Выйдите из маршрута

Этот пример моделирует простой выходной маршрут. Мы запускаем с простой прямой дороги и затем накладываем несколько точек другой дороги так, чтобы она перекрыла исходную прямую дорогу:

s = drivingScenario;

ls = lanespec(2);
laneWidth = ls.Width(1);

% add straight road segment
road(s, [0 0 0; 50 0 0], 'lanes', lanespec(2));

% define waypoints of lane exit
roadCenters =  [3.0 -laneWidth/2
                3.1 -laneWidth/2
               15.0 -laneWidth
               45.0 -20];

% add the exit lane
road(s, roadCenters, laneWidth);

plot(s,'RoadCenters','on')

Добавление повышения

Дороги могут опционально иметь информацию о повышении. Это может быть выполнено включением третьего столбца в waypoints.

s = drivingScenario;

roadCenters = [ 0 0 0
               25 0 3
               50 0 0];

road(s, roadCenters, 'lanes', lanespec(2));

plot(s,'RoadCenters','on');
view(30,24);

Переходы

Дороги могут пересечь друг друга, не пересекаясь, если у них есть отличающееся повышение. Дорожное покрытие перехода обычно на 6 - 8 метров выше дороги.

s = drivingScenario;
roadCenters = [  0   0  0
                20 -20  0
                20  20  8
               -20 -20  8
               -20  20  0
                 0   0  0];

             road(s, roadCenters, 'lanes',lanespec([1 2]));
plot(s,'RoadCenters','on');
view(30,24)

Дорожное банковское дело

Дороги могут быть окружены валом; где углы банка могут быть заданы для каждого waypoint. Следующее является овальной трассой с окруженными валом кривыми 9 степеней.

s = drivingScenario;

% transpose waypoints so they visually align with bank angles below
roadCenters = ...
    [  0  40  49  50 100  50  49 40 -40 -49 -50 -100  -50  -49  -40    0
     -50 -50 -50 -50   0  50  50 50  50  50  50    0  -50  -50  -50  -50
       0   0 .45 .45 .45 .45 .45  0   0 .45 .45  .45  .45  .45    0    0]';
bankAngles = ...
    [  0   0   9   9   9   9   9  0   0   9   9    9    9    9    0    0];

road(s, roadCenters, bankAngles, 'lanes', lanespec(2));
plot(s,'RoadCenters','on');
view(-60,20)

Ромбовидный обмен

Магистрали и скоростные автомагистрали обычно состоят из двух параллельных дорог, каждый входящий в противостоящее направление. Экономичный обмен между магистралью и локальной дорогой является ромбовидным обменом, который обычно состоит из локального дорожного перехода и четырех пандусов.

s = drivingScenario;

% Highways
road(s, [-200 -8 0; 200 -8 0], 'lanes',lanespec(3)); % north
road(s, [ 200  8 0;-200  8 0], 'lanes',lanespec(3)); % south

% Local Road
road(s, [-0 -200 8; 0  200 8], 'lanes',lanespec([1 1]));

% Access ramps
rampNE = [ 3 -20 8;  10 -20 7.8; 126 -20 .2; 130 -20 0; 200 -13.5 0];
road(s, [ 1  1  1] .* rampNE, 'lanes',lanespec(1));
road(s, [ 1 -1  1] .* flipud(rampNE), 'lanes',lanespec(1));
road(s, [-1 -1  1] .* rampNE, 'lanes',lanespec(1));
road(s, [-1  1  1] .* flipud(rampNE), 'lanes',lanespec(1));

plot(s);
view(-60,30)

Трилистниковидный обмен

Популярный обмен между двумя магистралями является трилистниковидным обменом. Трилистниковидный обмен состоит из четырех внутренних и четырех внешних пандусов.

Ограничение ведущего сценария - то, что дорожная информация удалена около пересечения дорог

s = drivingScenario;

% Highways
road(s, [-300 -8 0; 300 -8 0], 15); % north
road(s, [-300  8 0; 300  8 0], 15); % south
road(s, [-8 -300 8; -8 300 8], 15); % east
road(s, [ 8 -300 8;  8 300 8], 15); % west

% Inner ramps
rampNE = [0 -18 0; 20 -18  0; 120 -120  4; 18  -20  8; 18 0  8];
rampNW = [ 1 -1 1] .* rampNE(end:-1:1,:);
rampSW = [-1 -1 1] .* rampNE;
rampSE = [ 1 -1 1] .* rampSW(end:-1:1,:);
innerRamps = [rampNE(1:end-1,:)
              rampNW(1:end-1,:)
              rampSW(1:end-1,:)
              rampSE];
road(s, innerRamps, 5.4);

% Outer ramps
roadCenters = [13.5 -300 8; 15 -260 8; 125 -125 4; 260 -15 0; 300 -13.5 0];
road(s, [ 1  1  1] .* roadCenters, 5.4);
road(s, [ 1 -1  1] .* roadCenters, 5.4);
road(s, [-1 -1  1] .* roadCenters, 5.4);
road(s, [-1  1  1] .* roadCenters, 5.4);

plot(s,'RoadCenters','on');
view(-60,30);

Дополнительная информация

Для примера на ведущем сценарии см. Ведущий Пример по Сценарию.

Смотрите также

Приложения

Объекты

Функции