Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Pinoxchio
apollo
提交
ff2801d8
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,发现更多精彩内容 >>
提交
ff2801d8
编写于
2月 05, 2018
作者:
D
Dong Li
提交者:
Liangliang Zhang
2月 05, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
localization: added check in rtk_localization.cc
上级
1665b184
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
38 addition
and
32 deletion
+38
-32
modules/localization/rtk/rtk_localization.cc
modules/localization/rtk/rtk_localization.cc
+37
-31
modules/localization/rtk/rtk_localization.h
modules/localization/rtk/rtk_localization.h
+1
-1
未找到文件。
modules/localization/rtk/rtk_localization.cc
浏览文件 @
ff2801d8
...
...
@@ -130,7 +130,7 @@ bool RTKLocalization::FindMatchingIMU(const double gps_timestamp_sec,
}
auto
*
imu_adapter
=
AdapterManager
::
GetImu
();
if
(
imu_adapter
->
Empty
())
{
AERROR
<<
"
[FindMatchingIMU]:
Cannot find Matching IMU. "
AERROR
<<
"Cannot find Matching IMU. "
<<
"IMU message Queue is empty! GPS timestamp["
<<
gps_timestamp_sec
<<
"]"
;
return
false
;
...
...
@@ -148,7 +148,7 @@ bool RTKLocalization::FindMatchingIMU(const double gps_timestamp_sec,
if
(
imu_it
!=
imu_adapter
->
end
())
{
// found one
if
(
imu_it
==
imu_adapter
->
begin
())
{
AERROR
<<
"
[FindMatchingIMU]:
IMU queue too short or request too old. "
AERROR
<<
"IMU queue too short or request too old. "
<<
"Oldest timestamp["
<<
imu_adapter
->
GetOldestObserved
().
header
().
timestamp_sec
()
<<
"], Newest timestamp["
...
...
@@ -163,7 +163,10 @@ bool RTKLocalization::FindMatchingIMU(const double gps_timestamp_sec,
AERROR
<<
"imu1 and imu_it_1 must both have header."
;
return
false
;
}
InterpolateIMU
(
**
imu_it_1
,
**
imu_it
,
gps_timestamp_sec
,
imu_msg
);
if
(
!
InterpolateIMU
(
**
imu_it_1
,
**
imu_it
,
gps_timestamp_sec
,
imu_msg
))
{
AERROR
<<
"failed to interpolate IMU"
;
return
false
;
}
}
}
else
{
// give the newest imu, without extrapolation
...
...
@@ -181,7 +184,7 @@ bool RTKLocalization::FindMatchingIMU(const double gps_timestamp_sec,
if
(
fabs
(
imu_msg
->
header
().
timestamp_sec
()
-
gps_timestamp_sec
)
>
FLAGS_report_gps_imu_time_diff_threshold
)
{
// 20ms threshold to report error
AERROR
<<
"
[FindMatchingIMU]:
Cannot find Matching IMU. "
AERROR
<<
"Cannot find Matching IMU. "
<<
"IMU messages too old"
<<
"Newest timestamp["
<<
imu_adapter
->
GetLatestObserved
().
header
().
timestamp_sec
()
...
...
@@ -191,9 +194,14 @@ bool RTKLocalization::FindMatchingIMU(const double gps_timestamp_sec,
return
true
;
}
void
RTKLocalization
::
InterpolateIMU
(
const
Imu
&
imu1
,
const
Imu
&
imu2
,
bool
RTKLocalization
::
InterpolateIMU
(
const
Imu
&
imu1
,
const
Imu
&
imu2
,
const
double
timestamp_sec
,
Imu
*
imu_msg
)
{
DCHECK_NOTNULL
(
imu_msg
);
if
(
!
(
imu1
.
has_header
()
&&
imu1
.
header
().
has_timestamp_sec
()
&&
imu2
.
has_header
()
&&
imu2
.
header
().
has_timestamp_sec
()))
{
AERROR
<<
"imu1 and imu2 has no header or no timestamp_sec in header"
;
return
false
;
}
if
(
timestamp_sec
-
imu1
.
header
().
timestamp_sec
()
<
FLAGS_timestamp_sec_tolerance
)
{
AERROR
<<
"[InterpolateIMU]: the given time stamp["
<<
timestamp_sec
...
...
@@ -210,37 +218,35 @@ void RTKLocalization::InterpolateIMU(const Imu &imu1, const Imu &imu2,
*
imu_msg
=
imu1
;
imu_msg
->
mutable_header
()
->
set_timestamp_sec
(
timestamp_sec
);
if
(
imu1
.
has_header
()
&&
imu1
.
header
().
has_timestamp_sec
()
&&
imu2
.
has_header
()
&&
imu2
.
header
().
has_timestamp_sec
())
{
double
time_diff
=
imu2
.
header
().
timestamp_sec
()
-
imu1
.
header
().
timestamp_sec
();
if
(
fabs
(
time_diff
)
>=
0.001
)
{
double
frac1
=
(
timestamp_sec
-
imu1
.
header
().
timestamp_sec
())
/
time_diff
;
if
(
imu1
.
has_imu
()
&&
imu1
.
imu
().
has_angular_velocity
()
&&
imu2
.
has_imu
()
&&
imu2
.
imu
().
has_angular_velocity
())
{
auto
val
=
InterpolateXYZ
(
imu1
.
imu
().
angular_velocity
(),
imu2
.
imu
().
angular_velocity
(),
frac1
);
imu_msg
->
mutable_imu
()
->
mutable_angular_velocity
()
->
CopyFrom
(
val
);
}
double
time_diff
=
imu2
.
header
().
timestamp_sec
()
-
imu1
.
header
().
timestamp_sec
();
if
(
fabs
(
time_diff
)
>=
0.001
)
{
double
frac1
=
(
timestamp_sec
-
imu1
.
header
().
timestamp_sec
())
/
time_diff
;
if
(
imu1
.
has_imu
()
&&
imu1
.
imu
().
has_angular_velocity
()
&&
imu2
.
has_imu
()
&&
imu2
.
imu
().
has_angular_velocity
())
{
auto
val
=
InterpolateXYZ
(
imu1
.
imu
().
angular_velocity
(),
imu2
.
imu
().
angular_velocity
(),
frac1
);
imu_msg
->
mutable_imu
()
->
mutable_angular_velocity
()
->
CopyFrom
(
val
);
}
if
(
imu1
.
has_imu
()
&&
imu1
.
imu
().
has_linear_acceleration
()
&&
imu2
.
has_imu
()
&&
imu2
.
imu
().
has_linear_acceleration
())
{
auto
val
=
InterpolateXYZ
(
imu1
.
imu
().
linear_acceleration
(),
imu2
.
imu
().
linear_acceleration
(),
frac1
);
imu_msg
->
mutable_imu
()
->
mutable_linear_acceleration
()
->
CopyFrom
(
val
);
}
if
(
imu1
.
has_imu
()
&&
imu1
.
imu
().
has_linear_acceleration
()
&&
imu2
.
has_imu
()
&&
imu2
.
imu
().
has_linear_acceleration
())
{
auto
val
=
InterpolateXYZ
(
imu1
.
imu
().
linear_acceleration
(),
imu2
.
imu
().
linear_acceleration
(),
frac1
);
imu_msg
->
mutable_imu
()
->
mutable_linear_acceleration
()
->
CopyFrom
(
val
);
}
if
(
imu1
.
has_imu
()
&&
imu1
.
imu
().
has_euler_angles
()
&&
imu2
.
has_imu
()
&&
imu2
.
imu
().
has_euler_angles
())
{
auto
val
=
InterpolateXYZ
(
imu1
.
imu
().
euler_angles
(),
imu2
.
imu
().
euler_angles
(),
frac1
);
imu_msg
->
mutable_imu
()
->
mutable_euler_angles
()
->
CopyFrom
(
val
);
}
if
(
imu1
.
has_imu
()
&&
imu1
.
imu
().
has_euler_angles
()
&&
imu2
.
has_imu
()
&&
imu2
.
imu
().
has_euler_angles
())
{
auto
val
=
InterpolateXYZ
(
imu1
.
imu
().
euler_angles
(),
imu2
.
imu
().
euler_angles
(),
frac1
);
imu_msg
->
mutable_imu
()
->
mutable_euler_angles
()
->
CopyFrom
(
val
);
}
}
}
return
true
;
}
void
RTKLocalization
::
PrepareLocalizationMsg
(
...
...
modules/localization/rtk/rtk_localization.h
浏览文件 @
ff2801d8
...
...
@@ -79,7 +79,7 @@ class RTKLocalization : public LocalizationBase {
const
localization
::
Imu
&
imu
,
LocalizationEstimate
*
localization
);
bool
FindMatchingIMU
(
const
double
gps_timestamp_sec
,
Imu
*
imu_msg
);
void
InterpolateIMU
(
const
Imu
&
imu1
,
const
Imu
&
imu2
,
bool
InterpolateIMU
(
const
Imu
&
imu1
,
const
Imu
&
imu2
,
const
double
timestamp_sec
,
Imu
*
msgbuf
);
template
<
class
T
>
T
InterpolateXYZ
(
const
T
&
p1
,
const
T
&
p2
,
const
double
&
frac1
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录