Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Pinoxchio
apollo
提交
92ff4b6b
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 搜索 >>
提交
92ff4b6b
编写于
7月 06, 2017
作者:
H
henryhu6
提交者:
Yifei Jiang
7月 06, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Ensure vehicle is always within planning trajectory
上级
7dc2b05f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
41 addition
and
25 deletion
+41
-25
modules/tools/record_play/rtk_player.py
modules/tools/record_play/rtk_player.py
+41
-25
未找到文件。
modules/tools/record_play/rtk_player.py
浏览文件 @
92ff4b6b
...
...
@@ -44,12 +44,12 @@ import hmi_status_helper
SEARCH_INTERVAL
=
1000
class
RtkPlayer
(
object
):
"""
rtk player class
"""
def
__init__
(
self
,
record_file
,
speedmultiplier
,
completepath
,
replan
):
"""Init player."""
self
.
firstvalid
=
False
...
...
@@ -80,7 +80,7 @@ class RtkPlayer(object):
b
,
a
=
signal
.
butter
(
6
,
0.05
,
'low'
)
self
.
data
[
'acceleration'
]
=
signal
.
filtfilt
(
b
,
a
,
self
.
data
[
'acceleration'
])
self
.
data
[
'acceleration'
])
self
.
start
=
0
self
.
end
=
0
...
...
@@ -129,22 +129,44 @@ class RtkPlayer(object):
self
.
padmsg
.
CopyFrom
(
data
)
def
restart
(
self
):
shortest_dist_sqr
=
float
(
'inf'
)
self
.
logger
.
info
(
"before replan self.start=%s, self.closestpoint=%s"
%
(
self
.
start
,
self
.
closestpoint
))
self
.
closestpoint
=
closest_dist
()
self
.
start
=
max
(
self
.
closestpoint
-
100
,
0
)
self
.
starttime
=
rospy
.
get_time
()
self
.
end
=
min
(
self
.
start
+
1000
,
len
(
self
.
data
)
-
1
)
self
.
logger
.
info
(
"finish replan at time %s, self.closestpoint=%s"
%
(
self
.
starttime
,
self
.
closestpoint
))
def
closest_dist
(
self
):
shortest_dist_sqr
=
float
(
'inf'
)
self
.
logger
.
info
(
"before closest self.start=%s"
%
(
self
.
start
))
search_start
=
max
(
self
.
start
-
SEARCH_INTERVAL
/
2
,
0
)
search_end
=
min
(
self
.
start
+
SEARCH_INTERVAL
/
2
,
len
(
self
.
data
))
start
=
self
.
start
for
i
in
range
(
search_start
,
search_end
):
dist_sqr
=
(
self
.
carx
-
self
.
data
[
'x'
][
i
])
**
2
+
\
(
self
.
cary
-
self
.
data
[
'y'
][
i
])
**
2
if
dist_sqr
<=
shortest_dist_sqr
:
s
elf
.
s
tart
=
i
start
=
i
shortest_dist_sqr
=
dist_sqr
return
start
def
closest_time
(
self
):
time_elapsed
=
rospy
.
get_time
()
-
self
.
starttime
closest_time
=
self
.
start
time_diff
=
self
.
data
[
'time'
][
closest_time
]
-
\
self
.
data
[
'time'
][
self
.
closestpoint
]
while
time_diff
<
time_elapsed
and
closest_time
<
(
len
(
self
.
data
)
-
1
):
closest_time
=
closest_time
+
1
time_diff
=
self
.
data
[
'time'
][
closest_time
]
-
\
self
.
data
[
'time'
][
self
.
closestpoint
]
self
.
closestpoint
=
self
.
start
self
.
starttime
=
rospy
.
get_time
()
self
.
logger
.
info
(
"finish replan at time %s, self.closestpoint=%s"
%
(
self
.
starttime
,
self
.
closestpoint
))
return
closest_time
def
publish_planningmsg
(
self
):
"""
...
...
@@ -171,31 +193,25 @@ class RtkPlayer(object):
%
(
self
.
replan
,
self
.
sequence_num
,
self
.
automode
))
self
.
restart
()
else
:
time_elapsed
=
now
-
self
.
starttime
time_diff
=
self
.
data
[
'time'
][
self
.
start
]
-
\
self
.
data
[
'time'
][
self
.
closestpoint
]
while
time_diff
<
time_elapsed
and
self
.
start
<
(
len
(
self
.
data
)
-
1
):
self
.
start
=
self
.
start
+
1
time_diff
=
self
.
data
[
'time'
][
self
.
start
]
-
\
self
.
data
[
'time'
][
self
.
closestpoint
]
xdiff_sqr
=
(
self
.
data
[
'x'
][
self
.
start
]
-
self
.
carx
)
**
2
ydiff_sqr
=
(
self
.
data
[
'y'
][
self
.
start
]
-
self
.
cary
)
**
2
if
xdiff_sqr
+
ydiff_sqr
>
4.0
:
self
.
logger
.
info
(
"trigger replan: distance larger than 2.0"
)
self
.
restart
()
timepoint
=
closest_time
()
distpoint
=
closest_dist
()
self
.
start
=
max
(
min
(
timepoint
,
distpoint
)
-
100
,
0
)
self
.
end
=
min
(
max
(
timepoint
,
distpoint
)
+
900
,
len
(
self
.
data
)
-
1
)
xdiff_sqr
=
(
self
.
data
[
'x'
][
timepoint
]
-
self
.
carx
)
**
2
ydiff_sqr
=
(
self
.
data
[
'y'
][
timepoint
]
-
self
.
cary
)
**
2
if
xdiff_sqr
+
ydiff_sqr
>
4.0
:
self
.
logger
.
info
(
"trigger replan: distance larger than 2.0"
)
self
.
restart
()
if
self
.
completepath
:
self
.
start
=
0
self
.
end
=
len
(
self
.
data
)
-
1
else
:
self
.
start
=
max
(
self
.
start
-
100
,
0
)
self
.
end
=
min
(
self
.
start
+
1000
,
len
(
self
.
data
)
-
1
)
self
.
logger
.
debug
(
"publish_planningmsg: after adjust start: self.start = %s, self.end=%s"
%
(
self
.
start
,
self
.
end
))
for
i
in
range
(
self
.
start
,
self
.
end
):
adc_point
=
planning_pb2
.
ADCTrajectoryPoint
()
adc_point
.
x
=
self
.
data
[
'x'
][
i
]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录