Skip to content

Commit ed1569a

Browse files
committed
replace polling subscriber
Signed-off-by: Mamoru Sobue <mamoru.sobue@tier4.jp>
1 parent 5cb2521 commit ed1569a

File tree

2 files changed

+51
-31
lines changed
  • control/autonomous_emergency_braking

2 files changed

+51
-31
lines changed

control/autonomous_emergency_braking/include/autonomous_emergency_braking/node.hpp

+10-10
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#include <pcl_ros/transforms.hpp>
2121
#include <rclcpp/rclcpp.hpp>
2222
#include <tier4_autoware_utils/geometry/geometry.hpp>
23-
#include <tier4_autoware_utils/ros/polling_subsriber.hpp>
23+
#include <tier4_autoware_utils/ros/polling_subscriber.hpp>
2424
#include <vehicle_info_util/vehicle_info_util.hpp>
2525

2626
#include <autoware_auto_planning_msgs/msg/trajectory.hpp>
@@ -240,7 +240,7 @@ class AEB : public rclcpp::Node
240240
// subscriber
241241
tier4_autoware_utils::InterProcessPollingSubscriber<PointCloud2> sub_point_cloud_{
242242
this, "~/input/pointcloud", getSingleDepthSensorQoS()};
243-
tier4_autoware_utils::InterProcessPollingSubscriber<VelocityReport> sub_veloclty_{
243+
tier4_autoware_utils::InterProcessPollingSubscriber<VelocityReport> sub_velocity_{
244244
this, "~/input/velocity"};
245245
tier4_autoware_utils::InterProcessPollingSubscriber<Imu> sub_imu_{this, "~/input/imu"};
246246
tier4_autoware_utils::InterProcessPollingSubscriber<Trajectory> sub_predicted_traj_{
@@ -256,12 +256,12 @@ class AEB : public rclcpp::Node
256256
rclcpp::TimerBase::SharedPtr timer_;
257257

258258
// callback
259-
void onPointCloud(const PointCloud2::ConstSharedPtr input_msg);
260-
void onVelocity(const VelocityReport::ConstSharedPtr input_msg);
261-
void onImu(const Imu::ConstSharedPtr input_msg);
259+
void fetchPointCloud();
260+
void fetchVelocity();
261+
void fetchImu();
262+
void fetchPredictedTrajectory();
263+
void fetchAutowareState();
262264
void onTimer();
263-
void onPredictedTrajectory(const Trajectory::ConstSharedPtr input_msg);
264-
void onAutowareState(const AutowareState::ConstSharedPtr input_msg);
265265
rcl_interfaces::msg::SetParametersResult onParameter(
266266
const std::vector<rclcpp::Parameter> & parameters);
267267

@@ -301,10 +301,10 @@ class AEB : public rclcpp::Node
301301
const ObjectData & closest_object, const Path & path, const double current_ego_speed);
302302

303303
PointCloud2::SharedPtr obstacle_ros_pointcloud_ptr_{nullptr};
304-
VelocityReport::ConstSharedPtr current_velocity_ptr_{nullptr};
304+
VelocityReport::SharedPtr current_velocity_ptr_{nullptr};
305305
Vector3::SharedPtr angular_velocity_ptr_{nullptr};
306-
Trajectory::ConstSharedPtr predicted_traj_ptr_{nullptr};
307-
AutowareState::ConstSharedPtr autoware_state_{nullptr};
306+
Trajectory::SharedPtr predicted_traj_ptr_{nullptr};
307+
AutowareState::SharedPtr autoware_state_{nullptr};
308308

309309
tf2_ros::Buffer tf_buffer_{get_clock()};
310310
tf2_ros::TransformListener tf_listener_{tf_buffer_};

control/autonomous_emergency_braking/src/node.cpp

+41-21
Original file line numberDiff line numberDiff line change
@@ -208,68 +208,83 @@ void AEB::onTimer()
208208
updater_.force_update();
209209
}
210210

211-
void AEB::onVelocity(const VelocityReport::ConstSharedPtr input_msg)
211+
void AEB::fetchVelocity()
212212
{
213-
current_velocity_ptr_ = input_msg;
213+
if (sub_velocity_.updateLatestData()) {
214+
current_velocity_ptr_ = std::make_shared<VelocityReport>(sub_velocity_.getData());
215+
}
214216
}
215217

216-
void AEB::onImu(const Imu::ConstSharedPtr input_msg)
218+
void AEB::fetchImu()
217219
{
220+
if (!sub_imu_.updateLatestData()) {
221+
return;
222+
}
223+
224+
const auto & input_msg = sub_imu_.getData();
218225
// transform imu
219226
geometry_msgs::msg::TransformStamped transform_stamped{};
220227
try {
221228
transform_stamped = tf_buffer_.lookupTransform(
222-
"base_link", input_msg->header.frame_id, input_msg->header.stamp,
229+
"base_link", input_msg.header.frame_id, input_msg.header.stamp,
223230
rclcpp::Duration::from_seconds(0.5));
224231
} catch (tf2::TransformException & ex) {
225232
RCLCPP_ERROR_STREAM(
226233
get_logger(),
227-
"[AEB] Failed to look up transform from base_link to" << input_msg->header.frame_id);
234+
"[AEB] Failed to look up transform from base_link to" << input_msg.header.frame_id);
228235
return;
229236
}
230237

231238
angular_velocity_ptr_ = std::make_shared<Vector3>();
232-
tf2::doTransform(input_msg->angular_velocity, *angular_velocity_ptr_, transform_stamped);
239+
tf2::doTransform(input_msg.angular_velocity, *angular_velocity_ptr_, transform_stamped);
233240
}
234241

235-
void AEB::onPredictedTrajectory(
236-
const autoware_auto_planning_msgs::msg::Trajectory::ConstSharedPtr input_msg)
242+
void AEB::fetchPredictedTrajectory()
237243
{
238-
predicted_traj_ptr_ = input_msg;
244+
if (sub_predicted_traj_.updateLatestData()) {
245+
predicted_traj_ptr_ = std::make_shared<Trajectory>(sub_predicted_traj_.getData());
246+
}
239247
}
240248

241-
void AEB::onAutowareState(const AutowareState::ConstSharedPtr input_msg)
249+
void AEB::fetchAutowareState()
242250
{
243-
autoware_state_ = input_msg;
251+
if (sub_autoware_state_.updateLatestData()) {
252+
autoware_state_ = std::make_shared<AutowareState>(sub_autoware_state_.getData());
253+
}
244254
}
245255

246-
void AEB::onPointCloud(const PointCloud2::ConstSharedPtr input_msg)
256+
void AEB::fetchPointCloud()
247257
{
258+
if (!sub_point_cloud_.updateLatestData()) {
259+
return;
260+
}
261+
262+
const auto & input_msg = sub_point_cloud_.getData();
248263
PointCloud::Ptr pointcloud_ptr(new PointCloud);
249-
pcl::fromROSMsg(*input_msg, *pointcloud_ptr);
264+
pcl::fromROSMsg(input_msg, *pointcloud_ptr);
250265

251-
if (input_msg->header.frame_id != "base_link") {
266+
if (input_msg.header.frame_id != "base_link") {
252267
RCLCPP_ERROR_STREAM(
253268
get_logger(),
254-
"[AEB]: Input point cloud frame is not base_link and it is " << input_msg->header.frame_id);
269+
"[AEB]: Input point cloud frame is not base_link and it is " << input_msg.header.frame_id);
255270
// transform pointcloud
256271
geometry_msgs::msg::TransformStamped transform_stamped{};
257272
try {
258273
transform_stamped = tf_buffer_.lookupTransform(
259-
"base_link", input_msg->header.frame_id, input_msg->header.stamp,
274+
"base_link", input_msg.header.frame_id, input_msg.header.stamp,
260275
rclcpp::Duration::from_seconds(0.5));
261276
} catch (tf2::TransformException & ex) {
262277
RCLCPP_ERROR_STREAM(
263278
get_logger(),
264-
"[AEB] Failed to look up transform from base_link to" << input_msg->header.frame_id);
279+
"[AEB] Failed to look up transform from base_link to" << input_msg.header.frame_id);
265280
return;
266281
}
267282

268283
// transform by using eigen matrix
269284
PointCloud2 transformed_points{};
270285
const Eigen::Matrix4f affine_matrix =
271286
tf2::transformToEigen(transform_stamped.transform).matrix().cast<float>();
272-
pcl_ros::transformPointCloud(affine_matrix, *input_msg, transformed_points);
287+
pcl_ros::transformPointCloud(affine_matrix, input_msg, transformed_points);
273288
pcl::fromROSMsg(transformed_points, *pointcloud_ptr);
274289
}
275290

@@ -292,7 +307,7 @@ void AEB::onPointCloud(const PointCloud2::ConstSharedPtr input_msg)
292307
obstacle_ros_pointcloud_ptr_ = std::make_shared<PointCloud2>();
293308

294309
pcl::toROSMsg(*no_height_filtered_pointcloud_ptr, *obstacle_ros_pointcloud_ptr_);
295-
obstacle_ros_pointcloud_ptr_->header = input_msg->header;
310+
obstacle_ros_pointcloud_ptr_->header = input_msg.header;
296311
}
297312

298313
bool AEB::isDataReady()
@@ -302,22 +317,27 @@ bool AEB::isDataReady()
302317
return false;
303318
};
304319

320+
fetchVelocity();
305321
if (!current_velocity_ptr_) {
306322
return missing("ego velocity");
307323
}
308324

325+
fetchPointCloud();
309326
if (!obstacle_ros_pointcloud_ptr_) {
310-
return missing("object pointcloud");
327+
return missing("filtered object pointcloud");
311328
}
312329

330+
fetchImu();
313331
if (use_imu_path_ && !angular_velocity_ptr_) {
314-
return missing("imu");
332+
return missing("filtered imu");
315333
}
316334

335+
fetchPredictedTrajectory();
317336
if (use_predicted_trajectory_ && !predicted_traj_ptr_) {
318337
return missing("control predicted trajectory");
319338
}
320339

340+
fetchAutowareState();
321341
if (!autoware_state_) {
322342
return missing("autoware_state");
323343
}

0 commit comments

Comments
 (0)