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

#include <racobit_radar_message_manager.h>

类 apollo::drivers::racobit_radar::RacobitRadarMessageManager 继承关系图:
apollo::drivers::racobit_radar::RacobitRadarMessageManager 的协作图:

Public 成员函数

 RacobitRadarMessageManager (std::shared_ptr< cyber::Writer< RacobitRadar > > writer)
 
virtual ~RacobitRadarMessageManager ()
 
void set_radar_conf (RadarConf radar_conf)
 
ProtocolData< RacobitRadar > * GetMutableProtocolDataById (const uint32_t message_id)
 
void Parse (const uint32_t message_id, const uint8_t *data, int32_t length)
 
void set_can_client (std::shared_ptr< CanClient > can_client)
 

详细描述

在文件 racobit_radar_message_manager.h48 行定义.

构造及析构函数说明

◆ RacobitRadarMessageManager()

apollo::drivers::racobit_radar::RacobitRadarMessageManager::RacobitRadarMessageManager ( std::shared_ptr< cyber::Writer< RacobitRadar > >  writer)

在文件 racobit_radar_message_manager.cc40 行定义.

42 : writer_(std::move(writer)) {
43 AddRecvProtocolData<RadarState201, true>();
44 AddRecvProtocolData<ClusterListStatus600, true>();
45 AddRecvProtocolData<ClusterGeneralInfo701, true>();
46 AddRecvProtocolData<ClusterQualityInfo702, true>();
47 AddRecvProtocolData<ObjectExtendedInfo60D, true>();
48 AddRecvProtocolData<ObjectGeneralInfo60B, true>();
49 AddRecvProtocolData<ObjectListStatus60A, true>();
50 AddRecvProtocolData<ObjectQualityInfo60C, true>();
51}

◆ ~RacobitRadarMessageManager()

virtual apollo::drivers::racobit_radar::RacobitRadarMessageManager::~RacobitRadarMessageManager ( )
inlinevirtual

在文件 racobit_radar_message_manager.h52 行定义.

52{}

成员函数说明

◆ GetMutableProtocolDataById()

ProtocolData< RacobitRadar > * apollo::drivers::racobit_radar::RacobitRadarMessageManager::GetMutableProtocolDataById ( const uint32_t  message_id)

在文件 racobit_radar_message_manager.cc63 行定义.

64 {
65 uint32_t converted_message_id = message_id;
66 if (protocol_data_map_.find(converted_message_id) ==
67 protocol_data_map_.end()) {
68 ADEBUG << "Unable to get protocol data because of invalid message_id:"
69 << message_id;
70 return nullptr;
71 }
72 return protocol_data_map_[converted_message_id];
73}
#define ADEBUG
Definition log.h:41

◆ Parse()

void apollo::drivers::racobit_radar::RacobitRadarMessageManager::Parse ( const uint32_t  message_id,
const uint8_t *  data,
int32_t  length 
)

在文件 racobit_radar_message_manager.cc75 行定义.

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

◆ set_can_client()

void apollo::drivers::racobit_radar::RacobitRadarMessageManager::set_can_client ( std::shared_ptr< CanClient can_client)

在文件 racobit_radar_message_manager.cc57 行定义.

58 {
59 can_client_ = can_client;
60}

◆ set_radar_conf()

void apollo::drivers::racobit_radar::RacobitRadarMessageManager::set_radar_conf ( RadarConf  radar_conf)

在文件 racobit_radar_message_manager.cc53 行定义.

53 {
54 radar_config_.set_radar_conf(radar_conf);
55}
RadarConfig200 * set_radar_conf(RadarConf radar_conf)

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