Apollo
11.0
自动驾驶开放平台
asensing_binary_parser.cc
浏览该文件的文档.
1
/******************************************************************************
2
* Copyright 2024 The Apollo Authors. All Rights Reserved.
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*****************************************************************************/
16
#include "
modules/drivers/gnss/parser/asensing_parser/asensing_base_parser.h
"
17
#include "
modules/drivers/gnss/parser/asensing_parser/protocol_asensing.h
"
18
19
namespace
apollo
{
20
namespace
drivers {
21
namespace
gnss {
22
23
class
AsensingBinaryParser
:
public
AsensingBaseParser
{
24
public
:
25
explicit
AsensingBinaryParser
(
const
config::Config
&config)
26
:
AsensingBaseParser
(config) {}
27
bool
PrepareMessage
()
override
;
28
29
void
FillGnssBestpos
()
override
;
30
void
FillIns
()
override
;
31
void
FillInsStat
()
override
;
32
void
FillImu
()
override
;
33
void
FillHeading
()
override
;
34
35
private
:
36
ProtocolAsensing
asensing;
37
Decode_0A
decode_a;
38
Decode_0B
decode_b;
39
};
40
41
Parser
*
Parser::CreateAsensingBinary
(
const
config::Config
&config) {
42
return
new
AsensingBinaryParser
(config);
43
}
44
45
bool
AsensingBinaryParser::PrepareMessage
() {
46
asensing.
addData
(
47
std::string(
reinterpret_cast<
const
char
*
>
(
data_
),
data_end_
-
data_
));
48
AINFO
<<
"get protocol: "
<< asensing.
getProtocol
();
49
if
(asensing.
getProtocol
() != decode_b.
m_typeImu
) {
50
return
false
;
51
}
52
if
((decode_b.
insdata
.
InsStatus
& 0x0F) == 0x0F) {
53
solution_status_
=
SolutionStatus::SOL_COMPUTED
;
54
}
else
{
55
solution_status_
=
SolutionStatus::INSUFFICIENT_OBS
;
56
}
57
if
(SolutionType_IsValid(decode_b.
insdata
.
flag_pos
)) {
58
solution_type_
=
SolutionType
(decode_b.
insdata
.
flag_pos
);
59
}
else
{
60
solution_type_
=
SolutionType::NONE
;
61
}
62
gps_sec_
=
63
apollo::drivers::util::unix2gps
(decode_b.
insdata
.
SysTime_ms
/ 1000.0);
64
return
true
;
65
}
66
67
void
AsensingBinaryParser::FillGnssBestpos
() {
68
bestpos_
.set_measurement_time(
gps_sec_
);
69
bestpos_
.set_sol_status(
solution_status_
);
70
bestpos_
.set_sol_type(
solution_type_
);
71
bestpos_
.set_latitude(decode_b.
insdata
.
Lat_gnss_deg
);
72
bestpos_
.set_longitude(decode_b.
insdata
.
Lon_gnss_deg
);
73
bestpos_
.set_height_msl(decode_b.
insdata
.
Alt_gnss_m
);
74
75
if
(decode_b.
insdata
.
LoopType
== 0) {
76
bestpos_
.set_latitude_std_dev(exp(decode_b.
insdata
.
data1
/ 100));
77
bestpos_
.set_longitude_std_dev(exp(decode_b.
insdata
.
data2
/ 100));
78
bestpos_
.set_height_std_dev(exp(decode_b.
insdata
.
data3
/ 100));
79
}
80
bestpos_
.set_differential_age(decode_b.
insdata
.
differential_age
);
81
// bestpos_.set_num_sats_tracked(0);
82
// bestpos_.set_num_sats_in_solution(0);
83
// bestpos_.set_num_sats_l1(0);
84
// bestpos_.set_num_sats_multi(0);
85
}
86
87
void
AsensingBinaryParser::FillIns
() {
88
ins_
.mutable_euler_angles()->set_x(decode_b.
insdata
.
Roll_deg
*
DEG_TO_RAD
);
89
ins_
.mutable_euler_angles()->set_y(-decode_b.
insdata
.
Pitch_deg
*
DEG_TO_RAD
);
90
ins_
.mutable_euler_angles()->set_z(
91
azimuth_deg_to_yaw_rad
(decode_b.
insdata
.
Yaw_deg
));
92
93
ins_
.mutable_position()->set_lon(decode_b.
insdata
.
Lon_deg
);
94
ins_
.mutable_position()->set_lat(decode_b.
insdata
.
Lat_deg
);
95
ins_
.mutable_position()->set_height(decode_b.
insdata
.
Alt_m
);
96
ins_
.mutable_linear_velocity()->set_x(decode_b.
insdata
.
VelE_mps
);
97
ins_
.mutable_linear_velocity()->set_y(decode_b.
insdata
.
VelN_mps
);
98
ins_
.mutable_linear_velocity()->set_z(-decode_b.
insdata
.
VelD_mps
);
99
rfu_to_flu
(decode_b.
insdata
.
AccX_g
, decode_b.
insdata
.
AccY_g
,
100
decode_b.
insdata
.
AccZ_g
,
ins_
.mutable_linear_acceleration());
101
rfu_to_flu
(decode_b.
insdata
.
GyroX
, decode_b.
insdata
.
GyroY
,
102
decode_b.
insdata
.
GyroZ
,
ins_
.mutable_angular_velocity());
103
ins_
.set_measurement_time(
gps_sec_
);
104
ins_
.mutable_header()->set_timestamp_sec(
cyber::Time::Now
().ToSecond());
105
106
switch
(
solution_type_
) {
107
case
SolutionType::INS_RTKFIXED
:
108
case
SolutionType::NARROW_INT
:
109
case
SolutionType::INS_RTKFLOAT
:
110
case
SolutionType::NARROW_FLOAT
:
111
ins_
.set_type(
Ins::GOOD
);
112
break
;
113
case
SolutionType::SINGLE
:
114
ins_
.set_type(
Ins::CONVERGING
);
115
break
;
116
default
:
117
ins_
.set_type(
Ins::INVALID
);
118
break
;
119
}
120
}
121
122
void
AsensingBinaryParser::FillInsStat
() {
123
ins_stat_
.set_ins_status(
solution_status_
);
124
ins_stat_
.set_pos_type(
solution_type_
);
125
}
126
127
void
AsensingBinaryParser::FillImu
() {
128
rfu_to_flu
(decode_b.
insdata
.
AccX_g
, decode_b.
insdata
.
AccY_g
,
129
decode_b.
insdata
.
AccZ_g
,
imu_
.mutable_linear_acceleration());
130
rfu_to_flu
(decode_b.
insdata
.
GyroX
, decode_b.
insdata
.
GyroY
,
131
decode_b.
insdata
.
GyroZ
,
imu_
.mutable_angular_velocity());
132
imu_
.set_measurement_time(
gps_sec_
);
133
}
134
135
void
AsensingBinaryParser::FillHeading
() {
136
heading_
.set_solution_status(
solution_status_
);
137
heading_
.set_position_type(
solution_type_
);
138
heading_
.set_measurement_time(
gps_sec_
);
139
heading_
.set_heading(decode_b.
insdata
.
Yaw_deg
);
140
heading_
.set_pitch(decode_b.
insdata
.
Pitch_deg
);
141
142
if
(decode_b.
insdata
.
LoopType
== 2) {
143
heading_
.set_heading_std_dev(exp(decode_b.
insdata
.
data3
/ 100));
144
heading_
.set_pitch_std_dev(exp(decode_b.
insdata
.
data2
/ 100));
145
}
146
147
// heading_.set_station_id("0");
148
// heading_.set_satellite_number_multi(0);
149
// heading_.set_satellite_soulution_number(0);
150
}
151
152
}
// namespace gnss
153
}
// namespace drivers
154
}
// namespace apollo
asensing_base_parser.h
Decode_0A
Definition
protocol_asensing.h:121
Decode_0B
Definition
protocol_asensing.h:137
Decode_0B::insdata
InsType insdata
Definition
protocol_asensing.h:146
Decode_0B::m_typeImu
std::string m_typeImu
Definition
protocol_asensing.h:150
ProtocolAsensing
Definition
protocol_asensing.h:83
ProtocolAsensing::getProtocol
std::string getProtocol()
Definition
protocol_asensing.h:108
ProtocolAsensing::addData
void addData(const std::string &data)
Definition
protocol_asensing.cc:72
apollo::cyber::Time::Now
static Time Now()
get the current time.
Definition
time.cc:57
apollo::drivers::gnss::AsensingBaseParser
Definition
asensing_base_parser.h:39
apollo::drivers::gnss::AsensingBaseParser::ins_stat_
InsStat ins_stat_
Definition
asensing_base_parser.h:63
apollo::drivers::gnss::AsensingBaseParser::gps_sec_
double gps_sec_
Definition
asensing_base_parser.h:55
apollo::drivers::gnss::AsensingBaseParser::solution_type_
SolutionType solution_type_
Definition
asensing_base_parser.h:54
apollo::drivers::gnss::AsensingBaseParser::bestpos_
GnssBestPose bestpos_
Definition
asensing_base_parser.h:57
apollo::drivers::gnss::AsensingBaseParser::imu_
Imu imu_
Definition
asensing_base_parser.h:60
apollo::drivers::gnss::AsensingBaseParser::heading_
Heading heading_
Definition
asensing_base_parser.h:61
apollo::drivers::gnss::AsensingBaseParser::solution_status_
SolutionStatus solution_status_
Definition
asensing_base_parser.h:53
apollo::drivers::gnss::AsensingBaseParser::ins_
Ins ins_
Definition
asensing_base_parser.h:62
apollo::drivers::gnss::AsensingBinaryParser
Definition
asensing_binary_parser.cc:23
apollo::drivers::gnss::AsensingBinaryParser::FillIns
void FillIns() override
Definition
asensing_binary_parser.cc:87
apollo::drivers::gnss::AsensingBinaryParser::FillGnssBestpos
void FillGnssBestpos() override
Definition
asensing_binary_parser.cc:67
apollo::drivers::gnss::AsensingBinaryParser::FillHeading
void FillHeading() override
Definition
asensing_binary_parser.cc:135
apollo::drivers::gnss::AsensingBinaryParser::PrepareMessage
bool PrepareMessage() override
Definition
asensing_binary_parser.cc:45
apollo::drivers::gnss::AsensingBinaryParser::AsensingBinaryParser
AsensingBinaryParser(const config::Config &config)
Definition
asensing_binary_parser.cc:25
apollo::drivers::gnss::AsensingBinaryParser::FillImu
void FillImu() override
Definition
asensing_binary_parser.cc:127
apollo::drivers::gnss::AsensingBinaryParser::FillInsStat
void FillInsStat() override
Definition
asensing_binary_parser.cc:122
apollo::drivers::gnss::Parser
Definition
parser.h:78
apollo::drivers::gnss::Parser::CreateAsensingBinary
static Parser * CreateAsensingBinary(const config::Config &config)
Definition
asensing_binary_parser.cc:41
apollo::drivers::gnss::Parser::data_
const uint8_t * data_
Definition
parser.h:145
apollo::drivers::gnss::Parser::data_end_
const uint8_t * data_end_
Definition
parser.h:146
AINFO
#define AINFO
Definition
log.h:42
apollo::drivers::gnss::DEG_TO_RAD
constexpr double DEG_TO_RAD
Definition
parser_common.h:35
apollo::drivers::gnss::rfu_to_flu
void rfu_to_flu(double r, double f, double u, ::apollo::common::Point3D *flu)
Definition
parser_common.h:47
apollo::drivers::gnss::SOL_COMPUTED
@ SOL_COMPUTED
Definition
gnss_best_pose.proto:8
apollo::drivers::gnss::INSUFFICIENT_OBS
@ INSUFFICIENT_OBS
Definition
gnss_best_pose.proto:9
apollo::drivers::gnss::SolutionType
SolutionType
Definition
gnss_best_pose.proto:28
apollo::drivers::gnss::NONE
@ NONE
Definition
gnss_best_pose.proto:29
apollo::drivers::gnss::SINGLE
@ SINGLE
Definition
gnss_best_pose.proto:36
apollo::drivers::gnss::INS_RTKFLOAT
@ INS_RTKFLOAT
Definition
gnss_best_pose.proto:51
apollo::drivers::gnss::INS_RTKFIXED
@ INS_RTKFIXED
Definition
gnss_best_pose.proto:52
apollo::drivers::gnss::NARROW_FLOAT
@ NARROW_FLOAT
Definition
gnss_best_pose.proto:43
apollo::drivers::gnss::NARROW_INT
@ NARROW_INT
Definition
gnss_best_pose.proto:46
apollo::drivers::gnss::azimuth_deg_to_yaw_rad
constexpr double azimuth_deg_to_yaw_rad(double azimuth)
Definition
parser_common.h:41
apollo::drivers::util::unix2gps
T unix2gps(const T unix_seconds)
Definition
time_conversion.h:118
apollo
class register implement
Definition
arena_queue.h:37
protocol_asensing.h
InsType::AccZ_g
float AccZ_g
Definition
protocol_asensing.h:38
InsType::AccX_g
float AccX_g
Definition
protocol_asensing.h:36
InsType::GyroZ
float GyroZ
Definition
protocol_asensing.h:35
InsType::InsStatus
uint8_t InsStatus
Definition
protocol_asensing.h:52
InsType::GyroY
float GyroY
Definition
protocol_asensing.h:34
InsType::Alt_m
float Alt_m
Definition
protocol_asensing.h:46
InsType::Lon_gnss_deg
double Lon_gnss_deg
Definition
protocol_asensing.h:40
InsType::Lat_gnss_deg
double Lat_gnss_deg
Definition
protocol_asensing.h:41
InsType::Yaw_deg
float Yaw_deg
Definition
protocol_asensing.h:31
InsType::Alt_gnss_m
float Alt_gnss_m
Definition
protocol_asensing.h:42
InsType::data1
float data1
Definition
protocol_asensing.h:57
InsType::GyroX
float GyroX
Definition
protocol_asensing.h:33
InsType::differential_age
float differential_age
Definition
protocol_asensing.h:66
InsType::Lon_deg
double Lon_deg
Definition
protocol_asensing.h:44
InsType::data2
float data2
Definition
protocol_asensing.h:58
InsType::Pitch_deg
float Pitch_deg
Definition
protocol_asensing.h:27
InsType::Roll_deg
float Roll_deg
Definition
protocol_asensing.h:29
InsType::flag_pos
uint8_t flag_pos
Definition
protocol_asensing.h:63
InsType::VelN_mps
float VelN_mps
Definition
protocol_asensing.h:48
InsType::Lat_deg
double Lat_deg
Definition
protocol_asensing.h:45
InsType::LoopType
uint8_t LoopType
Definition
protocol_asensing.h:56
InsType::AccY_g
float AccY_g
Definition
protocol_asensing.h:37
InsType::VelD_mps
float VelD_mps
Definition
protocol_asensing.h:50
InsType::VelE_mps
float VelE_mps
Definition
protocol_asensing.h:49
InsType::SysTime_ms
int64_t SysTime_ms
Definition
protocol_asensing.h:61
InsType::data3
float data3
Definition
protocol_asensing.h:59
apollo::drivers::gnss::Ins::INVALID
@ INVALID
Definition
ins.proto:26
apollo::drivers::gnss::Ins::GOOD
@ GOOD
Definition
ins.proto:33
apollo::drivers::gnss::Ins::CONVERGING
@ CONVERGING
Definition
ins.proto:30
apollo::drivers::gnss::config::Config
Definition
config.proto:100
modules
drivers
gnss
parser
asensing_parser
asensing_binary_parser.cc