62 for (
int index = 0; index < conti_radar.contiobs_size(); ++index) {
63 const auto& contiobs = conti_radar.
contiobs(index);
67 rob.set_id(contiobs.obstacle_id());
68 rob.set_rcs(contiobs.rcs());
73 Point relative_pos_sl;
76 relative_pos_sl.set_x(contiobs.longitude_dist());
77 relative_pos_sl.set_y(contiobs.lateral_dist());
78 rob.mutable_relative_position()->CopyFrom(relative_pos_sl);
80 Point relative_pos_xy =
SLtoXY(relative_pos_sl, adc_theta);
82 absolute_pos.set_x(adc_pos.x() + relative_pos_xy.
x());
83 absolute_pos.set_y(adc_pos.y() + relative_pos_xy.
y());
84 absolute_pos.set_z(adc_pos.z());
85 rob.mutable_absolute_position()->CopyFrom(absolute_pos);
87 rob.mutable_relative_velocity()->set_x(contiobs.longitude_vel());
88 rob.mutable_relative_velocity()->set_y(contiobs.lateral_vel());
90 const auto iter = last_radar_obstacles.
radar_obstacle().find(index);
94 rob.set_movable(
false);
95 rob.set_moving_frames_count(0);
96 absolute_vel.set_x(0.0);
97 absolute_vel.set_y(0.0);
98 absolute_vel.set_z(0.0);
99 }
else if (!FLAGS_use_navigation_mode) {
100 rob.set_count(iter->second.count() + 1);
101 rob.set_movable(iter->second.movable());
103 (absolute_pos.
x() - iter->second.absolute_position().x()) /
104 (current_timestamp - last_timestamp));
106 (absolute_pos.
y() - iter->second.absolute_position().y()) /
107 (current_timestamp - last_timestamp));
108 absolute_vel.set_z(0.0);
109 double v_heading = std::atan2(absolute_vel.
y(), absolute_vel.
x());
111 if (heading_diff < FLAGS_movable_heading_threshold &&
112 Speed(absolute_vel) * std::cos(heading_diff) >
113 FLAGS_movable_speed_threshold) {
114 rob.set_moving_frames_count(iter->second.moving_frames_count() + 1);
116 rob.set_moving_frames_count(0);
119 rob.set_count(iter->second.count() + 1);
120 rob.set_movable(iter->second.movable());
121 absolute_vel.set_x(contiobs.longitude_vel() + chassis.
speed_mps());
122 absolute_vel.set_y(contiobs.lateral_vel());
123 absolute_vel.set_z(0.0);
127 if (contiobs.clusterortrack() == 0) {
128 rob.set_theta(contiobs.oritation_angle() / 180 * M_PI);
136 rob.mutable_absolute_velocity()->CopyFrom(absolute_vel);
139 rob.set_movable(
true);
141 (*obstacles.mutable_radar_obstacle())[index] = rob;
144 obstacles.mutable_header()->CopyFrom(conti_radar.
header());
157 std::vector<apollo::drivers::Esr_trackmotionpower_540::Motionpower>
159 for (
const auto& esr_trackmotionpower_540 :
161 if (!esr_trackmotionpower_540.has_can_tx_track_can_id_group()) {
162 AERROR <<
"ESR track motion power 540 does not have "
163 "can_tx_track_can_id_group()";
166 const int can_tx_track_can_id_group =
167 esr_trackmotionpower_540.can_tx_track_can_id_group();
168 const int can_tx_track_motion_power_size =
169 esr_trackmotionpower_540.can_tx_track_motion_power_size();
170 for (
int index = 0; index < (can_tx_track_can_id_group < 9 ? 7 : 1) &&
171 index < can_tx_track_motion_power_size;
173 std::size_t motion_powers_index = can_tx_track_can_id_group * 7 + index;
174 if (motion_powers_index < motionpowers.size()) {
175 motionpowers[motion_powers_index].CopyFrom(
176 esr_trackmotionpower_540.can_tx_track_motion_power(index));
186 for (
int index = 0; index < delphi_esr.esr_track01_500_size() &&
187 index <
static_cast<int>(motionpowers.size());
192 if (data_500.can_tx_track_status() ==
200 rob.set_rcs(
static_cast<double>(motionpowers[index].can_tx_track_power()) -
206 const double range = data_500.can_tx_track_range();
207 const double angle = data_500.can_tx_track_angle() * M_PI / 180.0;
208 Point relative_pos_sl;
209 relative_pos_sl.set_x(range * std::cos(angle) +
210 FLAGS_radar_pos_adjust +
213 relative_pos_sl.set_y(range * std::sin(angle));
214 rob.mutable_relative_position()->CopyFrom(relative_pos_sl);
216 Point relative_pos_xy =
SLtoXY(relative_pos_sl, adc_theta);
218 absolute_pos.set_x(adc_pos.x() + relative_pos_xy.
x());
219 absolute_pos.set_y(adc_pos.y() + relative_pos_xy.
y());
220 absolute_pos.set_z(adc_pos.z());
221 rob.mutable_absolute_position()->CopyFrom(absolute_pos);
224 rob.set_theta(theta);
226 const double range_vel = data_500.can_tx_track_range_rate();
227 const double lateral_vel = data_500.can_tx_track_lat_rate();
228 rob.mutable_relative_velocity()->set_x(range_vel * std::cos(angle) -
229 lateral_vel * std::sin(angle));
230 rob.mutable_relative_velocity()->set_y(range_vel * std::sin(angle) +
231 lateral_vel * std::cos(angle));
233 const auto iter = last_radar_obstacles.
radar_obstacle().find(index);
237 rob.set_movable(
false);
238 rob.set_moving_frames_count(0);
239 absolute_vel.set_x(0.0);
240 absolute_vel.set_y(0.0);
241 absolute_vel.set_z(0.0);
243 rob.set_count(iter->second.count() + 1);
244 rob.set_movable(iter->second.movable());
246 (absolute_pos.
x() - iter->second.absolute_position().x()) /
247 (current_timestamp - last_timestamp));
249 (absolute_pos.
y() - iter->second.absolute_position().y()) /
250 (current_timestamp - last_timestamp));
251 absolute_vel.set_z(0.0);
252 double v_heading = std::atan2(absolute_vel.
y(), absolute_vel.
x());
254 if (heading_diff < FLAGS_movable_heading_threshold &&
255 Speed(absolute_vel) * std::cos(heading_diff) >
256 FLAGS_movable_speed_threshold) {
257 rob.set_moving_frames_count(iter->second.moving_frames_count() + 1);
259 rob.set_moving_frames_count(0);
263 rob.mutable_absolute_velocity()->CopyFrom(absolute_vel);
266 rob.set_movable(
true);
268 (*obstacles.mutable_radar_obstacle())[index] = rob;
271 obstacles.mutable_header()->CopyFrom(delphi_esr.
header());
280 auto* pob = obstacles.add_perception_obstacle();
281 const auto& radar_obstacle = iter.second;
283 pob->set_id(radar_obstacle.id() + FLAGS_radar_id_offset);
286 pob->set_length(radar_obstacle.length());
287 pob->set_width(radar_obstacle.width());
288 pob->set_height(radar_obstacle.height());
290 if (!FLAGS_use_navigation_mode) {
291 pob->mutable_position()->CopyFrom(radar_obstacle.absolute_position());
292 pob->mutable_velocity()->CopyFrom(radar_obstacle.absolute_velocity());
294 pob->mutable_position()->CopyFrom(radar_obstacle.relative_position());
295 pob->mutable_velocity()->CopyFrom(radar_obstacle.relative_velocity());
298 pob->set_theta(radar_obstacle.theta());
302 pob->position().z(), pob->length(), pob->width(),
303 pob->height(), pob->theta());
304 pob->set_confidence(0.01);
307 obstacles.mutable_header()->CopyFrom(radar_obstacles.
header());