Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Pinoxchio
apollo
提交
58600665
A
apollo
项目概览
Pinoxchio
/
apollo
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apollo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
58600665
编写于
3月 06, 2019
作者:
D
deidaraho
提交者:
Jinyun Zhou
3月 06, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
planning: implement open space fall back decider
上级
86825f3c
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
166 addition
and
7 deletion
+166
-7
modules/planning/common/open_space_info.h
modules/planning/common/open_space_info.h
+6
-2
modules/planning/proto/open_space_fallback_decider_config.proto
...s/planning/proto/open_space_fallback_decider_config.proto
+8
-1
modules/planning/tasks/deciders/open_space_fallback_decider.cc
...es/planning/tasks/deciders/open_space_fallback_decider.cc
+125
-2
modules/planning/tasks/deciders/open_space_fallback_decider.h
...les/planning/tasks/deciders/open_space_fallback_decider.h
+27
-1
modules/planning/tasks/deciders/open_space_roi_decider.h
modules/planning/tasks/deciders/open_space_roi_decider.h
+0
-1
未找到文件。
modules/planning/common/open_space_info.h
浏览文件 @
58600665
...
...
@@ -192,16 +192,20 @@ class OpenSpaceInfo {
return
&
chosen_paritioned_trajectory_
;
}
bool
*
mutable_fallback_flag
()
{
return
&
fallback_flag_
;
}
const
bool
&
fallback_flag
()
const
{
return
fallback_flag_
;
}
void
set_fallback_flag
(
bool
flag
)
{
fallback_flag_
=
flag
;
}
TrajGearPair
*
mutable_fallback_trajectory
()
{
return
&
fallback_trajectory_
;
}
const
TrajGearPair
&
fallback_trajectory
()
const
{
return
fallback_trajectory_
;
}
void
set_fallback_trajectory
(
const
TrajGearPair
&
traj_gear_pair
)
{
fallback_trajectory_
=
traj_gear_pair
;
}
std
::
pair
<
PublishableTrajectory
,
canbus
::
Chassis
::
GearPosition
>
*
mutable_publishable_trajectory_data
()
{
return
&
publishable_trajectory_data_
;
...
...
modules/planning/proto/open_space_fallback_decider_config.proto
浏览文件 @
58600665
...
...
@@ -2,4 +2,11 @@ syntax = "proto2";
package
apollo
.
planning
;
message
OpenSpaceFallBackDeciderConfig
{}
\ No newline at end of file
message
OpenSpaceFallBackDeciderConfig
{
// prediction time horizon for prediction obstacles
optional
double
open_space_prediction_time_period
=
1
[
default
=
5.0
];
// fallback collision check distance
optional
double
open_space_fall_back_collision_distance
=
2
[
default
=
5.0
];
// fallback stop trajectory safety gap to obstacles
optional
double
open_space_fall_back_stop_safety_gap
=
3
[
default
=
1.0
];
}
\ No newline at end of file
modules/planning/tasks/deciders/open_space_fallback_decider.cc
浏览文件 @
58600665
...
...
@@ -22,13 +22,136 @@
namespace
apollo
{
namespace
planning
{
using
apollo
::
common
::
Status
;
using
apollo
::
common
::
math
::
Box2d
;
using
apollo
::
common
::
math
::
Vec2d
;
using
apollo
::
common
::
TrajectoryPoint
;
using
apollo
::
planning
::
TrajGearPair
;
OpenSpaceFallbackDecider
::
OpenSpaceFallbackDecider
(
const
TaskConfig
&
config
)
:
Decider
(
config
)
{}
Status
OpenSpaceFallbackDecider
::
Process
(
Frame
*
frame
)
{
return
Status
::
OK
();
}
Status
OpenSpaceFallbackDecider
::
Process
(
Frame
*
frame
)
{
std
::
vector
<
std
::
vector
<
common
::
math
::
Box2d
>>
predicted_bounding_rectangles
;
double
collision_distance
;
BuildPredictedEnvironment
(
frame
->
obstacles
(),
predicted_bounding_rectangles
);
if
(
!
IsCollisionFreeTrajectory
(
frame
->
open_space_info
().
chosen_paritioned_trajectory
(),
predicted_bounding_rectangles
,
&
collision_distance
))
{
// change gflag
frame_
->
mutable_open_space_info
()
->
set_fallback_flag
(
true
);
// generate fallback trajectory base on current partition trajectory
// vehicle speed is decreased to zero inside safety distance
*
(
frame_
->
mutable_open_space_info
()
->
mutable_fallback_trajectory
())
=
frame
->
open_space_info
().
chosen_paritioned_trajectory
();
auto
fallback_trajectory_vec
=
frame_
->
mutable_open_space_info
()
->
mutable_fallback_trajectory
()
->
first
;
double
stop_distance
=
std
::
max
(
0.0
,
collision_distance
-
config_
.
open_space_fallback_decider_config
().
open_space_fall_back_stop_safety_gap
());
if
(
stop_distance
>
0.0
)
{
// the accelerate = v0^2 / (2*s), where s is slowing down distance
double
accelerate
=
(
frame_
->
vehicle_state
().
linear_velocity
()
*
frame_
->
vehicle_state
().
linear_velocity
())
/
2.0
/
stop_distance
;
double
current_v
=
frame_
->
vehicle_state
().
linear_velocity
();
size_t
temp_horizon
=
frame_
->
open_space_info
().
fallback_trajectory
().
first
.
NumOfPoints
();
for
(
size_t
i
=
0
;
i
<
temp_horizon
;
++
i
)
{
double
next_v
=
std
::
max
(
0.0
,
current_v
-
accelerate
*
frame_
->
open_space_info
().
fallback_trajectory
().
first
.
TrajectoryPointAt
(
i
).
relative_time
());
fallback_trajectory_vec
[
i
].
set_v
(
next_v
);
fallback_trajectory_vec
[
i
].
set_a
(
-
accelerate
);
current_v
=
next_v
;
}
}
else
{
// if the stop distance is not enough, stop at current location
size_t
temp_horizon
=
frame_
->
open_space_info
().
fallback_trajectory
().
first
.
NumOfPoints
();
for
(
size_t
i
=
0
;
i
<
temp_horizon
;
++
i
)
{
fallback_trajectory_vec
[
i
].
set_v
(
0.0
);
}
}
}
else
{
frame_
->
mutable_open_space_info
()
->
set_fallback_flag
(
false
);
}
return
Status
::
OK
();
}
void
OpenSpaceFallbackDecider
::
BuildPredictedEnvironment
(
const
std
::
vector
<
const
Obstacle
*>&
obstacles
,
std
::
vector
<
std
::
vector
<
common
::
math
::
Box2d
>>
&
predicted_bounding_rectangles
)
{
predicted_bounding_rectangles
.
clear
();
double
relative_time
=
0.0
;
while
(
relative_time
<
config_
.
open_space_fallback_decider_config
().
open_space_prediction_time_period
())
{
std
::
vector
<
Box2d
>
predicted_env
;
for
(
const
Obstacle
*
obstacle
:
obstacles
)
{
TrajectoryPoint
point
=
obstacle
->
GetPointAtTime
(
relative_time
);
Box2d
box
=
obstacle
->
GetBoundingBox
(
point
);
predicted_env
.
push_back
(
std
::
move
(
box
));
}
predicted_bounding_rectangles
.
emplace_back
(
std
::
move
(
predicted_env
));
relative_time
+=
FLAGS_trajectory_time_resolution
;
}
}
bool
OpenSpaceFallbackDecider
::
IsCollisionFreeTrajectory
(
const
TrajGearPair
&
trajectory_gear_pair
,
const
std
::
vector
<
std
::
vector
<
common
::
math
::
Box2d
>>
&
predicted_bounding_rectangles
,
double
*
collision_distance
)
{
const
auto
&
vehicle_config
=
common
::
VehicleConfigHelper
::
Instance
()
->
GetConfig
();
double
ego_length
=
vehicle_config
.
vehicle_param
().
length
();
double
ego_width
=
vehicle_config
.
vehicle_param
().
width
();
auto
trajectory_pb
=
trajectory_gear_pair
.
first
;
const
size_t
point_size
=
trajectory_pb
.
NumOfPoints
();
for
(
size_t
i
=
0
;
i
<
point_size
;
++
i
)
{
const
auto
&
trajectory_point
=
trajectory_pb
.
TrajectoryPointAt
(
i
);
double
ego_theta
=
trajectory_point
.
path_point
().
theta
();
Box2d
ego_box
(
{
trajectory_point
.
path_point
().
x
(),
trajectory_point
.
path_point
().
y
()},
ego_theta
,
ego_length
,
ego_width
);
double
shift_distance
=
ego_length
/
2.0
-
vehicle_config
.
vehicle_param
().
back_edge_to_center
();
Vec2d
shift_vec
{
shift_distance
*
std
::
cos
(
ego_theta
),
shift_distance
*
std
::
sin
(
ego_theta
)};
ego_box
.
Shift
(
shift_vec
);
size_t
predicted_time_horizon
=
predicted_bounding_rectangles
.
size
();
for
(
size_t
j
=
0
;
j
<
predicted_time_horizon
;
j
++
)
{
for
(
const
auto
&
obstacle_box
:
predicted_bounding_rectangles
[
j
])
{
if
(
ego_box
.
HasOverlap
(
obstacle_box
))
{
const
auto
&
vehicle_state
=
frame_
->
vehicle_state
();
Vec2d
vehicle_vec
(
{
vehicle_state
.
x
(),
vehicle_state
.
y
()});
if
(
obstacle_box
.
DistanceTo
(
vehicle_vec
)
<
config_
.
open_space_fallback_decider_config
().
open_space_fall_back_collision_distance
())
{
*
collision_distance
=
obstacle_box
.
DistanceTo
(
vehicle_vec
);
return
false
;
}
}
}
}
}
return
true
;
}
}
// namespace planning
}
// namespace apollo
modules/planning/tasks/deciders/open_space_fallback_decider.h
浏览文件 @
58600665
...
...
@@ -20,11 +20,25 @@
#pragma once
#include <algorithm>
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include "Eigen/Dense"
#include "modules/common/configs/proto/vehicle_config.pb.h"
#include "modules/common/configs/vehicle_config_helper.h"
#include "modules/common/math/vec2d.h"
#include "modules/planning/common/frame.h"
#include "modules/planning/common/obstacle.h"
#include "modules/planning/common/planning_gflags.h"
#include "modules/planning/common/trajectory/discretized_trajectory.h"
#include "modules/planning/common/trajectory/publishable_trajectory.h"
#include "modules/planning/tasks/deciders/decider.h"
namespace
apollo
{
namespace
planning
{
class
OpenSpaceFallbackDecider
:
public
Decider
{
public:
explicit
OpenSpaceFallbackDecider
(
const
TaskConfig
&
config
);
...
...
@@ -32,6 +46,18 @@ class OpenSpaceFallbackDecider : public Decider {
private:
apollo
::
common
::
Status
Process
(
Frame
*
frame
)
override
;
// bool IsCollisionFreeTrajectory(const ADCTrajectory& trajectory_pb);
void
BuildPredictedEnvironment
(
const
std
::
vector
<
const
Obstacle
*>&
obstacles
,
std
::
vector
<
std
::
vector
<
common
::
math
::
Box2d
>>
&
predicted_bounding_rectangles
);
bool
IsCollisionFreeTrajectory
(
const
TrajGearPair
&
trajectory_pb
,
const
std
::
vector
<
std
::
vector
<
common
::
math
::
Box2d
>>
&
predicted_bounding_rectangles
,
double
*
collision_distance
);
};
}
// namespace planning
...
...
modules/planning/tasks/deciders/open_space_roi_decider.h
浏览文件 @
58600665
...
...
@@ -19,7 +19,6 @@
**/
#pragma once
#pragma once
#include <algorithm>
#include <memory>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录