- 功能总览
- 产品介绍
- 快速入门
- 用户指南
- API参考
- SDK参考
- 常见问题
- 文档下载
- 通用参考
链接复制成功!
Struct
struct类型,又称结构类型,是一种由简单类型(例如int、float、string类型,scalar类型,简单的struct类型等)构建的复杂类型,一般用于表示抽象的道路结构,与地图文件中的具体的道路结构建立关联。osc2.0支持的struct类型有:odr_point、position_3d、road_point、orientation_3d和pose_3d。
position_3d
- 定义:笛卡尔(XYZ)坐标系中的三维位置(position)。
- 用途:设置坐标系中的三维位置,用于构成xyz_point。
- 参数:参数如下表
表1 position_3d参数 Parameter
Type
Mandatory
Description
x
length
yes
position on the x-axis
y
length
yes
position on the y-axis
z
length
yes
position on the z-axis
代码样例
my_position: position_3d with: keep(it.x == 150.0m) keep(it.y == 200.0m) keep(it.z == 0.0m)
xyz_point
- 定义:笛卡尔(XYZ)坐标系中的特定位置点(point)。
- 用途:设置实体位置,用于构成pose_3d。
- 参数:参数如下表
表2 xyz_point参数 Parameter
Type
Mandatory
Description
position
yes
Position in Cartesian (XYZ) coordinates
keep创建
my_pos: position_3d with: keep(it.x == 150.0m) keep(it.y == 200.0m) keep(it.z == 0.0m) my_xyz: xyz_point with: keep(it.position == my_pos)
create创建
my_xyz: xyz_point = map.create_xyz_point(x: 150.0m, y: 200.0m ,z: 0.0m)
road_point
- 定义:路网s-t坐标系中的特定位置点(point)。
- 用途:设置实体位置,用于构成pose_3d。
- 参数:参数如下表
表3 road_point参数 Parameter
Type
Mandatory
Description
road_id
string
yes
identifier for the road in which this point is located
s
length
yes
Coordinate along the s-axis of the corresponding road
t
length
yes
Coordinate along the t-axis of the corresponding road
keep创建
my_road: road_point with keep(it.road_id == '1') keep(it.s == 5.0m) keep(it.t == 0.0m)
create创建
my_point: road_point = map.create_road_point(road_id: '1', s: 5.0m, t: 0.0m)
odr_point
- 定义:ASAM OpenDRIVE坐标系中的位置点(point)。
- 用途:设置实体位置,用于构成pose_3d。
- 参数:参数如下表
表4 odr_point参数 Parameter
Type
Mandatory
Description
road_id
string
yes
ASAM OpenDRIVE identifier for the road
lane_id
string
yes
ASAM OpenDRIVE identifier for the lane
s
length
yes
Coordinate along the ASAM OpenDRIVE s-axis
t
length
yes
Coordinate along the ASAM OpenDRIVE t-axis, the t-coordinate is measured from the lane centerline
keep创建
my_odr: odr_point with: keep(it.road_id == '1') keep(it.lane_id == '-2') keep(it.s == 3.0m) keep(it.t == 0.0m)
create创建
my_odr: odr_point = map.create_odr_point(road_id: '1',lane_id:'-2',s: 3.0m, t: 0.0m)
orientation_3d
- 定义:由Tait–Bryan角度的三个参数roll(横滚角,围绕x轴的角度)、pitch(俯仰角,围绕y轴的角度)和yaw(偏航角,围绕z轴的角度)定义的三维角度。
- 用途:设置实体的朝向角度、用于构成pose_3d。
- 参数:参数如下表
Parameter |
Type |
Mandatory |
Description |
---|---|---|---|
roll |
angle |
yes |
rotation angle around the x-axis |
pitch |
angle |
yes |
rotation angle around the y-axis |
yaw |
angle |
yes |
rotation angle around the z-axis |
- 根据ISO 8855的定义,角度旋转的顺序是:首先进行yaw(围绕z轴)、接着pitch(围绕新y轴),最后roll(围绕新x轴)。
- 当实体的朝向与road0的方向相同时,无需设置orientation_3d。
- angle的单位一般为rad(弧度)而非degree(角度),rad = degree*pi/180,1rad约等于57.3度(详见scalar units中的angle units一节)。
与road 0的方向相反(相差180°)
m_orientation: orientation_3d with: keep(it.roll == 0.0rad) keep(it.pitch == 0.0rad) keep(it.yaw == 3.14rad)
pose_3d
- 定义:三维空间的复合位置,包含位置点(odr_point或position_3d或road_point)和方向(orientation_3d)两个参数
- 用途:设置实体的初始位置(assign_init_speed动作)、目标位置(acquire_position动作)
- 参数:参数如下表
Parameter |
Type |
Mandatory |
Description |
---|---|---|---|
xyz_point |
xyz_point |
no |
a pose in space specified in Cartesian (XYZ) coordinates |
odr_point |
odr_point |
no |
a point expressed in ASAM OpenDRIVE coordinates |
road_point |
road_point |
no |
a point on route network specified in S-T coordinates |
orientation |
orientation_3d |
no |
three-dimensional orientation |
- xyz_point、odr_point和road_point必须设置且仅设置一个,用以提供位置信息。
- orientation非必选项,当不设置orientation时,对应roll、pitch、yaw均为0时的方向。
使用xyz_point、设置orientation
my_xyz: xyz_point = map.create_xyz_point(x: 150.0m, y: 200.0m ,z: 0.0m) m_orientation: orientation_3d with: keep(it.roll == 0.0rad) keep(it.pitch == 0.0rad) keep(it.yaw == 1.57rad) my_pose: pose_3d with: keep(it.xyz_point == my_xyz) keep(it.orientation == m_orientation)
使用odr_point、不设置orientation
my_odr: odr_point = map.create_odr_point(road_id: '1',lane_id:'-2',s: 3.0m, t: 0.0m) my_pose: pose_3d with: keep(it.odr_point == my_odr)
使用road_point、不设置orientation
my_road: road_point with keep(it.road_id == '1') keep(it.s == 5.0m) keep(it.t == 0.0m) my_pose: pose_3d with: keep(it.road_point == my_road)