自动驾驶云服务 OCTOPUS-基于样例的拓展

时间:2024-05-11 16:52:39

基于样例的拓展

本章的场景样例可以结合第一章介绍的各模块代码样例进行修改和拓展.以straigh场景的osc为例,设定初始位置时,除了使用st坐标系(odr_point,即osc1.0中的LanePosition)还可以使用xyz坐标系(xyz_point,即osc1.0中的WorldPosition)来替代:

st坐标系(odr_point)写法:

Ego_InitPosition_LaneId: string = ['-1', '-2']
Ego_InitPosition_s: length = [0m..30m]
Ego_Odr: odr_point = map.create_odr_point(road_id: '10', lane_id: Ego_InitPosition_LaneId, s: Ego_InitPosition_s, t: 0.0m)
Ego_InitPosition: pose_3d with:
    keep(it.odr_point == Ego_Odr)
对应xyz坐标系(xyz_point)写法,其中y值-1.5m和-4.5m分别对应车道宽度为3m时的'-1'和'-2'车道的中心位置:
y: length = [-1.5m, -4.5m] 
x: length = [0m..30m]
Ego_xyz: xyz_point = map.create_xyz_point(x: x, y: y, z: 0.0m)
Ego_InitPosition: pose_3d with:
    keep(it.xyz_point == Ego_xyz)

以上对等替换仅存在于odr_point的road_id固定的情形,当road_id(仿真器A中的TrackId)是一个可泛化的值时,起点可以出现在多条道路上,对应多段x和y值的组合区间,无法使用一个xyz_point直接对等泛化.此时可以使用多个动态场景来实现同等的泛化,例如:

假设地图上存在多条road,且对odr_point的road_id进行了泛化:

Ego_InitPosition_Road_id: string = ['10', '1']
Ego_InitPosition_LaneId: string = ['-1', '-2']
Ego_InitPosition_s: length = [0m..30m]
Ego_Odr: odr_point = map.create_odr_point(road_id: Ego_InitPosition_Road_id, lane_id: Ego_InitPosition_LaneId, s: Ego_InitPosition_s, t: 0.0m)
Ego_InitPosition: pose_3d with:
    keep(it.odr_point == Ego_Odr)

可以在两个动态场景文件中分别使用一组xyz_point来替代,例如:

第一组对应road_id为'10'的情况(同前例):

y: length = [-1.5m, -4.5m] 
x: length = [0m..30m]
Ego_xyz: xyz_point = map.create_xyz_point(x: x, y: y, z: 0.0m)
Ego_InitPosition: pose_3d with:
    keep(it.xyz_point == Ego_xyz)

第二组对应road_id为'1'的情况,该道路与road_id为'10'的道路垂直,x值的101.5m和104.5m分别对应车道宽度为3m时的'-1'和'-2'车道的中心位置:

y: length = [-40m..-10m] 
x: length = [101.5m, 104.5m]
Ego_xyz: xyz_point = map.create_xyz_point(x: x, y: y, z: 0.0m)
Ego_InitPosition: pose_3d with:
    keep(it.xyz_point == Ego_xyz)
support.huaweicloud.com/usermanual-octopus/octopus-03-0194.html