Apollo 10.0
自动驾驶开放平台
apollo::drivers::conti_radar::ContiRadarMessageManager类 参考

#include <conti_radar_message_manager.h>

类 apollo::drivers::conti_radar::ContiRadarMessageManager 继承关系图:
apollo::drivers::conti_radar::ContiRadarMessageManager 的协作图:

Public 成员函数

 ContiRadarMessageManager (const std::shared_ptr< apollo::cyber::Writer< ContiRadar > > &writer)
 
virtual ~ContiRadarMessageManager ()
 
void set_radar_conf (RadarConf radar_conf)
 
apollo::drivers::canbus::ProtocolData< ContiRadar > * GetMutableProtocolDataById (const uint32_t message_id)
 
void Parse (const uint32_t message_id, const uint8_t *data, int32_t length)
 parse data and store parsed info in receive protocol data
 
void set_can_client (std::shared_ptr< apollo::drivers::canbus::CanClient > can_client)
 
- Public 成员函数 继承自 apollo::drivers::canbus::MessageManager< ContiRadar >
 MessageManager ()
 
virtual ~MessageManager ()=default
 
virtual void ParseSender (const uint32_t message_id, const uint8_t *data, int32_t length)
 parse data and store parsed info in send protocol data
 
void ClearSensorData ()
 
void ClearSensorRecvData ()
 
void ClearSensorCheckRecvData ()
 
void ClearSensorSenderData ()
 
void ClearSensorCheckSenderData ()
 
std::condition_variable * GetMutableCVar ()
 
ProtocolData< ContiRadar > * GetMutableProtocolDataById (const uint32_t message_id)
 get mutable protocol data by message id
 
common::ErrorCode GetSensorData (ContiRadar *const sensor_data)
 get chassis detail.
 
common::ErrorCode GetSensorRecvData (ContiRadar *const sensor_recv_data)
 get chassis recv detail.
 
common::ErrorCode GetSensorCheckRecvData (ContiRadar *const sensor_recv_data)
 get chassis recv detail.
 
common::ErrorCode GetSensorSenderData (ContiRadar *const sensor_sender_data)
 get chassis sender detail.
 
common::ErrorCode GetSensorCheckSenderData (ContiRadar *const sensor_sender_data)
 get chassis sender detail.
 
void ResetSendMessages ()
 

额外继承的成员函数

- Protected 成员函数 继承自 apollo::drivers::canbus::MessageManager< ContiRadar >
void AddRecvProtocolData ()
 
void AddSendProtocolData ()
 
- Protected 属性 继承自 apollo::drivers::canbus::MessageManager< ContiRadar >
std::vector< std::unique_ptr< ProtocolData< ContiRadar > > > send_protocol_data_
 
std::vector< std::unique_ptr< ProtocolData< ContiRadar > > > recv_protocol_data_
 
std::unordered_map< uint32_t, ProtocolData< ContiRadar > * > protocol_data_map_
 
std::unordered_map< uint32_t, ProtocolData< ContiRadar > * > recv_protocol_data_map_
 
std::unordered_map< uint32_t, ProtocolData< ContiRadar > * > sender_protocol_data_map_
 
std::unordered_map< uint32_t, CheckIdArgcheck_ids_
 
std::set< uint32_t > received_ids_
 
std::mutex sensor_data_mutex_
 
ContiRadar sensor_data_
 
std::mutex sensor_data_recv_mutex_
 
ContiRadar sensor_recv_data_
 
std::mutex sensor_data_check_recv_mutex_
 
ContiRadar sensor_check_recv_data_
 
std::mutex sensor_data_sender_mutex_
 
ContiRadar sensor_sender_data_
 
std::mutex sensor_data_check_sender_mutex_
 
ContiRadar sensor_check_sender_data_
 
bool is_received_on_time_
 
std::condition_variable cvar_
 

详细描述

在文件 conti_radar_message_manager.h36 行定义.

构造及析构函数说明

◆ ContiRadarMessageManager()

apollo::drivers::conti_radar::ContiRadarMessageManager::ContiRadarMessageManager ( const std::shared_ptr< apollo::cyber::Writer< ContiRadar > > &  writer)
explicit

在文件 conti_radar_message_manager.cc45 行定义.

47 : conti_radar_writer_(writer) {
48 AddRecvProtocolData<RadarState201, true>();
49 AddRecvProtocolData<ClusterListStatus600, true>();
50 AddRecvProtocolData<ClusterGeneralInfo701, true>();
51 AddRecvProtocolData<ClusterQualityInfo702, true>();
52 AddRecvProtocolData<ObjectExtendedInfo60D, true>();
53 AddRecvProtocolData<ObjectGeneralInfo60B, true>();
54 AddRecvProtocolData<ObjectListStatus60A, true>();
55 AddRecvProtocolData<ObjectQualityInfo60C, true>();
56}

◆ ~ContiRadarMessageManager()

virtual apollo::drivers::conti_radar::ContiRadarMessageManager::~ContiRadarMessageManager ( )
inlinevirtual

在文件 conti_radar_message_manager.h41 行定义.

41{}

成员函数说明

◆ GetMutableProtocolDataById()

ProtocolData< ContiRadar > * apollo::drivers::conti_radar::ContiRadarMessageManager::GetMutableProtocolDataById ( const uint32_t  message_id)

在文件 conti_radar_message_manager.cc67 行定义.

68 {
69 uint32_t converted_message_id = message_id;
70 if (protocol_data_map_.find(converted_message_id) ==
71 protocol_data_map_.end()) {
72 ADEBUG << "Unable to get protocol data because of invalid message_id:"
73 << message_id;
74 return nullptr;
75 }
76 return protocol_data_map_[converted_message_id];
77}
std::unordered_map< uint32_t, ProtocolData< ContiRadar > * > protocol_data_map_
#define ADEBUG
Definition log.h:41

◆ Parse()

void apollo::drivers::conti_radar::ContiRadarMessageManager::Parse ( const uint32_t  message_id,
const uint8_t *  data,
int32_t  length 
)
virtual

parse data and store parsed info in receive protocol data

参数
message_idthe id of the message
dataa pointer to the data array to be parsed
lengththe length of data array

重载 apollo::drivers::canbus::MessageManager< ContiRadar > .

在文件 conti_radar_message_manager.cc79 行定义.

80 {
81 ProtocolData<ContiRadar> *sensor_protocol_data =
83 if (sensor_protocol_data == nullptr) {
84 return;
85 }
86
87 std::lock_guard<std::mutex> lock(sensor_data_mutex_);
88 if (!is_configured_ && message_id != RadarState201::ID) {
89 // read radar state message first
90 return;
91 }
92
93 // trigger publishment
94 if (message_id == ClusterListStatus600::ID ||
95 message_id == ObjectListStatus60A::ID) {
96 ADEBUG << sensor_data_.ShortDebugString();
97
98 if (sensor_data_.contiobs_size() <=
100 // maybe lost an object_list_status msg
101 conti_radar_writer_->Write(sensor_data_);
102 }
103 sensor_data_.Clear();
104 // fill header when receive the general info message
105 common::util::FillHeader("conti_radar", &sensor_data_);
106 }
107
108 sensor_protocol_data->Parse(data, length, &sensor_data_);
109
110 if (message_id == RadarState201::ID) {
111 ADEBUG << sensor_data_.ShortDebugString();
113 radar_config_.radar_conf().send_quality() &&
115 radar_config_.radar_conf().send_ext_info() &&
117 radar_config_.radar_conf().max_distance() &&
119 radar_config_.radar_conf().output_type() &&
121 radar_config_.radar_conf().rcs_threshold() &&
123 radar_config_.radar_conf().radar_power()) {
124 is_configured_ = true;
125 } else {
126 AINFO << "configure radar again";
127 SenderMessage<ContiRadar> sender_message(RadarConfig200::ID,
128 &radar_config_);
129 sender_message.Update();
130 can_client_->SendSingleFrame({sender_message.CanFrame()});
131 }
132 }
133
134 received_ids_.insert(message_id);
135 // check if need to check period
136 const auto it = check_ids_.find(message_id);
137 if (it != check_ids_.end()) {
138 const int64_t time = Time::Now().ToMicrosecond();
139 it->second.real_period = time - it->second.last_time;
140 // if period 1.5 large than base period, inc error_count
141 const double period_multiplier = 1.5;
142 if (it->second.real_period >
143 (static_cast<double>(it->second.period) * period_multiplier)) {
144 it->second.error_count += 1;
145 } else {
146 it->second.error_count = 0;
147 }
148 it->second.last_time = time;
149 }
150}
uint64_t ToMicrosecond() const
convert time to microsecond (us).
Definition time.cc:85
static Time Now()
get the current time.
Definition time.cc:57
std::unordered_map< uint32_t, CheckIdArg > check_ids_
apollo::drivers::canbus::ProtocolData< ContiRadar > * GetMutableProtocolDataById(const uint32_t message_id)
#define AINFO
Definition log.h:42
optional RadarState_201 radar_state
optional ObjectListStatus_60A object_list_status
optional RcsThreshold rcs_threshold
optional RadarState_201::RcsThreshold rcs_threshold
optional RadarState_201::OutputType output_type

◆ set_can_client()

void apollo::drivers::conti_radar::ContiRadarMessageManager::set_can_client ( std::shared_ptr< apollo::drivers::canbus::CanClient can_client)

在文件 conti_radar_message_manager.cc62 行定义.

63 {
64 can_client_ = can_client;
65}

◆ set_radar_conf()

void apollo::drivers::conti_radar::ContiRadarMessageManager::set_radar_conf ( RadarConf  radar_conf)

在文件 conti_radar_message_manager.cc58 行定义.

58 {
59 radar_config_.set_radar_conf(radar_conf);
60}
RadarConfig200 * set_radar_conf(RadarConf radar_conf)

该类的文档由以下文件生成: