14
14
15
15
#include " radar_tracks_msgs_converter/radar_tracks_msgs_converter_node.hpp"
16
16
17
+ #include " tier4_autoware_utils/tier4_autoware_utils.hpp"
18
+
17
19
#include < tf2/utils.h>
18
20
19
21
#ifdef ROS_DISTRO_GALACTIC
@@ -153,94 +155,36 @@ void RadarTracksMsgsConverterNode::onTimer()
153
155
node_param_.new_frame_id , header.frame_id , header.stamp , rclcpp::Duration::from_seconds (0.01 ));
154
156
155
157
TrackedObjects tracked_objects = convertRadarTrackToTrackedObjects ();
156
- DetectedObjects detected_objects = convertRadarTrackToDetectedObjects ( );
158
+ DetectedObjects detected_objects = convertTrackedObjectsToDetectedObjects (tracked_objects );
157
159
if (!tracked_objects.objects .empty ()) {
158
160
pub_tracked_objects_->publish (tracked_objects);
159
161
pub_detected_objects_->publish (detected_objects);
160
162
}
161
163
}
162
164
163
- DetectedObjects RadarTracksMsgsConverterNode::convertRadarTrackToDetectedObjects ()
165
+ DetectedObjects RadarTracksMsgsConverterNode::convertTrackedObjectsToDetectedObjects (
166
+ TrackedObjects & objects)
164
167
{
165
168
DetectedObjects detected_objects;
166
- detected_objects.header = radar_data_->header ;
167
- detected_objects.header .frame_id = node_param_.new_frame_id ;
168
- using POSE_IDX = tier4_autoware_utils::xyzrpy_covariance_index::XYZRPY_COV_IDX;
169
- using RADAR_IDX = tier4_autoware_utils::xyz_upper_covariance_index::XYZ_UPPER_COV_IDX;
169
+ detected_objects.header = objects.header ;
170
170
171
- for (auto & radar_track : radar_data_-> tracks ) {
171
+ for (auto & object : objects. objects ) {
172
172
DetectedObject detected_object;
173
-
174
173
detected_object.existence_probability = 1.0 ;
174
+ detected_object.shape = object.shape ;
175
175
176
- detected_object.shape .type = Shape::BOUNDING_BOX;
177
- detected_object.shape .dimensions = radar_track.size ;
178
-
179
- // kinematics
176
+ // kinematics setting
180
177
DetectedObjectKinematics kinematics;
178
+ kinematics.orientation_availability =
179
+ autoware_auto_perception_msgs::msg::DetectedObjectKinematics::SIGN_UNKNOWN;
181
180
kinematics.has_twist = true ;
182
181
kinematics.has_twist_covariance = true ;
183
-
184
- // convert by tf
185
- geometry_msgs::msg::PoseStamped radar_pose_stamped{};
186
- radar_pose_stamped.pose .position = radar_track.position ;
187
- geometry_msgs::msg::PoseStamped transformed_pose_stamped{};
188
- tf2::doTransform (radar_pose_stamped, transformed_pose_stamped, *transform_);
189
- kinematics.pose_with_covariance .pose = transformed_pose_stamped.pose ;
190
-
191
- {
192
- auto & pose_cov = kinematics.pose_with_covariance .covariance ;
193
- auto & radar_position_cov = radar_track.position_covariance ;
194
- pose_cov[POSE_IDX::X_X] = radar_position_cov[RADAR_IDX::X_X];
195
- pose_cov[POSE_IDX::X_Y] = radar_position_cov[RADAR_IDX::X_Y];
196
- pose_cov[POSE_IDX::X_Z] = radar_position_cov[RADAR_IDX::X_Z];
197
- pose_cov[POSE_IDX::Y_X] = radar_position_cov[RADAR_IDX::X_Y];
198
- pose_cov[POSE_IDX::Y_Y] = radar_position_cov[RADAR_IDX::Y_Y];
199
- pose_cov[POSE_IDX::Y_Z] = radar_position_cov[RADAR_IDX::Y_Z];
200
- pose_cov[POSE_IDX::Z_X] = radar_position_cov[RADAR_IDX::X_Z];
201
- pose_cov[POSE_IDX::Z_Y] = radar_position_cov[RADAR_IDX::Y_Z];
202
- pose_cov[POSE_IDX::Z_Z] = radar_position_cov[RADAR_IDX::Z_Z];
203
- }
204
-
205
- // convert by tf
206
- geometry_msgs::msg::Vector3Stamped radar_velocity_stamped{};
207
- radar_velocity_stamped.vector = radar_track.velocity ;
208
- geometry_msgs::msg::Vector3Stamped transformed_vector3_stamped{};
209
- tf2::doTransform (radar_velocity_stamped, transformed_vector3_stamped, *transform_);
210
- kinematics.twist_with_covariance .twist .linear = transformed_vector3_stamped.vector ;
211
-
212
- // twist compensation
213
- if (node_param_.use_twist_compensation ) {
214
- if (odometry_data_) {
215
- kinematics.twist_with_covariance .twist .linear .x += odometry_data_->twist .twist .linear .x ;
216
- kinematics.twist_with_covariance .twist .linear .y += odometry_data_->twist .twist .linear .y ;
217
- kinematics.twist_with_covariance .twist .linear .z += odometry_data_->twist .twist .linear .z ;
218
- } else {
219
- RCLCPP_INFO (get_logger (), " Odometry data is not coming" );
220
- }
221
- }
222
-
223
- {
224
- auto & twist_cov = kinematics.twist_with_covariance .covariance ;
225
- auto & radar_vel_cov = radar_track.velocity_covariance ;
226
- twist_cov[POSE_IDX::X_X] = radar_vel_cov[RADAR_IDX::X_X];
227
- twist_cov[POSE_IDX::X_Y] = radar_vel_cov[RADAR_IDX::X_Y];
228
- twist_cov[POSE_IDX::X_Z] = radar_vel_cov[RADAR_IDX::X_Z];
229
- twist_cov[POSE_IDX::Y_X] = radar_vel_cov[RADAR_IDX::X_Y];
230
- twist_cov[POSE_IDX::Y_Y] = radar_vel_cov[RADAR_IDX::Y_Y];
231
- twist_cov[POSE_IDX::Y_Z] = radar_vel_cov[RADAR_IDX::Y_Z];
232
- twist_cov[POSE_IDX::Z_X] = radar_vel_cov[RADAR_IDX::X_Z];
233
- twist_cov[POSE_IDX::Z_Y] = radar_vel_cov[RADAR_IDX::Y_Z];
234
- twist_cov[POSE_IDX::Z_Z] = radar_vel_cov[RADAR_IDX::Z_Z];
235
- }
182
+ kinematics.twist_with_covariance = object.kinematics .twist_with_covariance ;
183
+ kinematics.pose_with_covariance = object.kinematics .pose_with_covariance ;
236
184
detected_object.kinematics = kinematics;
237
185
238
186
// classification
239
- ObjectClassification classification;
240
- classification.probability = 1.0 ;
241
- classification.label = convertClassification (radar_track.classification );
242
- detected_object.classification .emplace_back (classification);
243
-
187
+ detected_object.classification = object.classification ;
244
188
detected_objects.objects .emplace_back (detected_object);
245
189
}
246
190
return detected_objects;
@@ -263,14 +207,34 @@ TrackedObjects RadarTracksMsgsConverterNode::convertRadarTrackToTrackedObjects()
263
207
tracked_object.shape .type = Shape::BOUNDING_BOX;
264
208
tracked_object.shape .dimensions = radar_track.size ;
265
209
266
- // kinematics
210
+ // kinematics setting
267
211
TrackedObjectKinematics kinematics;
268
212
kinematics.orientation_availability = TrackedObjectKinematics::AVAILABLE;
269
213
kinematics.is_stationary = false ;
270
214
271
- // convert by tf
215
+ // Twist conversion
216
+ geometry_msgs::msg::Vector3 compensated_velocity = radar_track.velocity ;
217
+ if (node_param_.use_twist_compensation ) {
218
+ if (odometry_data_) {
219
+ compensated_velocity.x += odometry_data_->twist .twist .linear .x ;
220
+ compensated_velocity.y += odometry_data_->twist .twist .linear .y ;
221
+ compensated_velocity.z += odometry_data_->twist .twist .linear .z ;
222
+ } else {
223
+ RCLCPP_INFO (get_logger (), " Odometry data is not coming" );
224
+ }
225
+ }
226
+ kinematics.twist_with_covariance .twist .linear .x = std::sqrt (
227
+ compensated_velocity.x * compensated_velocity.x +
228
+ compensated_velocity.y * compensated_velocity.y );
229
+
230
+ // Pose conversion
272
231
geometry_msgs::msg::PoseStamped radar_pose_stamped{};
273
232
radar_pose_stamped.pose .position = radar_track.position ;
233
+
234
+ double yaw = tier4_autoware_utils::normalizeRadian (
235
+ std::atan2 (compensated_velocity.y , compensated_velocity.x ));
236
+ radar_pose_stamped.pose .orientation = tier4_autoware_utils::createQuaternionFromYaw (yaw);
237
+
274
238
geometry_msgs::msg::PoseStamped transformed_pose_stamped{};
275
239
tf2::doTransform (radar_pose_stamped, transformed_pose_stamped, *transform_);
276
240
kinematics.pose_with_covariance .pose = transformed_pose_stamped.pose ;
@@ -289,24 +253,6 @@ TrackedObjects RadarTracksMsgsConverterNode::convertRadarTrackToTrackedObjects()
289
253
pose_cov[POSE_IDX::Z_Z] = radar_position_cov[RADAR_IDX::Z_Z];
290
254
}
291
255
292
- // convert by tf
293
- geometry_msgs::msg::Vector3Stamped radar_velocity_stamped{};
294
- radar_velocity_stamped.vector = radar_track.velocity ;
295
- geometry_msgs::msg::Vector3Stamped transformed_vector3_stamped{};
296
- tf2::doTransform (radar_velocity_stamped, transformed_vector3_stamped, *transform_);
297
- kinematics.twist_with_covariance .twist .linear = transformed_vector3_stamped.vector ;
298
-
299
- // twist compensation
300
- if (node_param_.use_twist_compensation ) {
301
- if (odometry_data_) {
302
- kinematics.twist_with_covariance .twist .linear .x += odometry_data_->twist .twist .linear .x ;
303
- kinematics.twist_with_covariance .twist .linear .y += odometry_data_->twist .twist .linear .y ;
304
- kinematics.twist_with_covariance .twist .linear .z += odometry_data_->twist .twist .linear .z ;
305
- } else {
306
- RCLCPP_INFO (get_logger (), " Odometry data is not coming" );
307
- }
308
- }
309
-
310
256
{
311
257
auto & twist_cov = kinematics.twist_with_covariance .covariance ;
312
258
auto & radar_vel_cov = radar_track.velocity_covariance ;
0 commit comments