|
8 | 8 | #include <utility>
|
9 | 9 | #include <math.h>
|
10 | 10 | #include <fmt/core.h>
|
| 11 | +#include <tf2/LinearMath/Quaternion.h> |
| 12 | +#include "../include/radar_transforms.hpp" |
11 | 13 |
|
12 | 14 | #define _USE_MATH_DEFINES
|
13 | 15 |
|
@@ -52,15 +54,20 @@ namespace FHAC
|
52 | 54 | auto node = shared_from_this();
|
53 | 55 | node->declare_parameter("can_channel", rclcpp::ParameterValue(""));
|
54 | 56 | node->declare_parameter("odom_topic_name", rclcpp::ParameterValue(""));
|
| 57 | + node->declare_parameter("robot_base_frame", rclcpp::ParameterValue("base_link")); |
| 58 | + node->declare_parameter("transform_timeout", rclcpp::ParameterValue(0.1)); |
55 | 59 | node->declare_parameter("object_list_topic_name", rclcpp::ParameterValue("ars408/objectlist"));
|
56 | 60 | node->declare_parameter("marker_array_topic_name", rclcpp::ParameterValue("ars408/marker_array"));
|
57 | 61 | node->declare_parameter("radar_tracks_topic_name", rclcpp::ParameterValue("ars408/radar_tracks"));
|
58 | 62 | node->declare_parameter("obstacle_array_topic_name", rclcpp::ParameterValue("ars408/obstacle_array"));
|
59 | 63 | node->declare_parameter("filter_config_topic_name", rclcpp::ParameterValue("ars408/filter_config"));
|
60 | 64 | node->declare_parameter("radar_state_topic_name", rclcpp::ParameterValue("ars408/radar_state"));
|
61 | 65 |
|
| 66 | + double transform_timeout_double; |
62 | 67 | node->get_parameter("can_channel", can_channel_);
|
63 | 68 | node->get_parameter("odom_topic_name", odom_topic_name_);
|
| 69 | + node->get_parameter("robot_base_frame", robot_base_frame_); |
| 70 | + node->get_parameter("transform_timeout", transform_timeout_double); |
64 | 71 | node->get_parameter("object_list_topic_name", object_list_topic_name_);
|
65 | 72 | node->get_parameter("marker_array_topic_name", marker_array_topic_name_);
|
66 | 73 | node->get_parameter("radar_tracks_topic_name", radar_tracks_topic_name_);
|
@@ -248,6 +255,9 @@ namespace FHAC
|
248 | 255 | odometry_subscriber_ = create_subscription<nav_msgs::msg::Odometry>(odom_topic_name_, qos_settings, std::bind(&radar_conti_ars408::odomCallback, this, std::placeholders::_1));
|
249 | 256 | }
|
250 | 257 |
|
| 258 | + tf_buffer_ = std::make_unique<tf2_ros::Buffer>(node->get_clock()); |
| 259 | + tf_listener_ = std::make_shared<tf2_ros::TransformListener>(*tf_buffer_); |
| 260 | + transform_timeout_ = rclcpp::Duration::from_seconds(transform_timeout_double); |
251 | 261 | generateUUIDTable();
|
252 | 262 |
|
253 | 263 | return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
|
@@ -695,6 +705,12 @@ namespace FHAC
|
695 | 705 |
|
696 | 706 | std::map<int, radar_conti_ars408_msgs::msg::Object>::iterator itr;
|
697 | 707 |
|
| 708 | + nav_msgs::msg::Odometry corrected_odom; |
| 709 | + if (!odom_topic_name_.empty()) |
| 710 | + { |
| 711 | + corrected_odom = radar_transforms::transform2DOdom(vehicle_odometry_, tf_buffer_, radar_link_names_[sensor_id], robot_base_frame_, transform_timeout_, this->get_clock()->now(), this->get_clock()); |
| 712 | + } |
| 713 | + |
698 | 714 | for (itr = object_map_list_[sensor_id].begin(); itr != object_map_list_[sensor_id].end(); ++itr)
|
699 | 715 | {
|
700 | 716 |
|
@@ -729,9 +745,11 @@ namespace FHAC
|
729 | 745 | radar_track.position.y = itr->second.object_general.obj_distlat.data;
|
730 | 746 | radar_track.position.z = 0.0;
|
731 | 747 |
|
732 |
| - radar_track.velocity.x = itr->second.object_general.obj_vrellong.data; |
733 |
| - radar_track.velocity.y = itr->second.object_general.obj_vrellat.data; |
734 |
| - radar_track.velocity.z = 0.0; |
| 748 | + geometry_msgs::msg::Vector3 radar_track_vel_raw; |
| 749 | + radar_track_vel_raw.x = itr->second.object_general.obj_vrellong.data; |
| 750 | + radar_track_vel_raw.y = itr->second.object_general.obj_vrellat.data; |
| 751 | + radar_track_vel_raw.z = 0.0; |
| 752 | + radar_track.velocity = radar_transforms::correctObstacleVelocity(corrected_odom, radar_track_vel_raw, radar_track.position); |
735 | 753 |
|
736 | 754 | radar_track.acceleration.x = 0.0;
|
737 | 755 | radar_track.acceleration.y = 0.0;
|
@@ -1194,6 +1212,9 @@ namespace FHAC
|
1194 | 1212 |
|
1195 | 1213 | void radar_conti_ars408::odomCallback(const nav_msgs::msg::Odometry::SharedPtr msg)
|
1196 | 1214 | {
|
| 1215 | + |
| 1216 | + vehicle_odometry_ = *msg; |
| 1217 | + |
1197 | 1218 | // Threshold for standstill detection
|
1198 | 1219 | const double standstill_threshold = 0.01;
|
1199 | 1220 |
|
|
0 commit comments