@@ -48,14 +48,18 @@ PredictedPath PathGenerator::generatePathToTargetPoint(
48
48
const auto velocity = std::max (std::hypot (obj_vel.x , obj_vel.y ), min_crosswalk_user_velocity_);
49
49
const auto arrival_time = pedestrian_to_entry_point.norm () / velocity;
50
50
51
+ const auto pedestrian_to_entry_point_normalized = pedestrian_to_entry_point.normalized ();
52
+ const auto pedestrian_to_entry_point_orientation = tier4_autoware_utils::createQuaternionFromYaw (
53
+ std::atan2 (pedestrian_to_entry_point_normalized.y (), pedestrian_to_entry_point_normalized.x ()));
54
+
51
55
for (double dt = 0.0 ; dt < arrival_time + ep; dt += sampling_time_interval_) {
52
56
geometry_msgs::msg::Pose world_frame_pose;
53
57
world_frame_pose.position .x =
54
- obj_pos.x + velocity * pedestrian_to_entry_point. normalized () .x () * dt;
58
+ obj_pos.x + velocity * pedestrian_to_entry_point_normalized .x () * dt;
55
59
world_frame_pose.position .y =
56
- obj_pos.y + velocity * pedestrian_to_entry_point. normalized () .y () * dt;
60
+ obj_pos.y + velocity * pedestrian_to_entry_point_normalized .y () * dt;
57
61
world_frame_pose.position .z = obj_pos.z ;
58
- world_frame_pose.orientation = object. kinematics . pose_with_covariance . pose . orientation ;
62
+ world_frame_pose.orientation = pedestrian_to_entry_point_orientation ;
59
63
predicted_path.path .push_back (world_frame_pose);
60
64
if (predicted_path.path .size () >= predicted_path.path .max_size ()) {
61
65
break ;
@@ -87,43 +91,39 @@ PredictedPath PathGenerator::generatePathForCrosswalkUser(
87
91
const auto velocity = std::max (std::hypot (obj_vel.x , obj_vel.y ), min_crosswalk_user_velocity_);
88
92
const auto arrival_time = pedestrian_to_entry_point.norm () / velocity;
89
93
94
+ const auto pedestrian_to_entry_point_normalized = pedestrian_to_entry_point.normalized ();
95
+ const auto pedestrian_to_entry_point_orientation = tier4_autoware_utils::createQuaternionFromYaw (
96
+ std::atan2 (pedestrian_to_entry_point_normalized.y (), pedestrian_to_entry_point_normalized.x ()));
97
+ const auto entry_to_exit_point_normalized = entry_to_exit_point.normalized ();
98
+ const auto entry_to_exit_point_orientation = tier4_autoware_utils::createQuaternionFromYaw (
99
+ std::atan2 (entry_to_exit_point_normalized.y (), entry_to_exit_point_normalized.x ()));
100
+
90
101
for (double dt = 0.0 ; dt < duration + ep; dt += sampling_time_interval_) {
91
102
geometry_msgs::msg::Pose world_frame_pose;
92
103
if (dt < arrival_time) {
93
104
world_frame_pose.position .x =
94
- obj_pos.x + velocity * pedestrian_to_entry_point. normalized () .x () * dt;
105
+ obj_pos.x + velocity * pedestrian_to_entry_point_normalized .x () * dt;
95
106
world_frame_pose.position .y =
96
- obj_pos.y + velocity * pedestrian_to_entry_point. normalized () .y () * dt;
107
+ obj_pos.y + velocity * pedestrian_to_entry_point_normalized .y () * dt;
97
108
world_frame_pose.position .z = obj_pos.z ;
98
- world_frame_pose.orientation = object. kinematics . pose_with_covariance . pose . orientation ;
109
+ world_frame_pose.orientation = pedestrian_to_entry_point_orientation ;
99
110
predicted_path.path .push_back (world_frame_pose);
100
111
} else {
101
112
world_frame_pose.position .x =
102
113
reachable_crosswalk.front_center_point .x () +
103
- velocity * entry_to_exit_point. normalized () .x () * (dt - arrival_time);
114
+ velocity * entry_to_exit_point_normalized .x () * (dt - arrival_time);
104
115
world_frame_pose.position .y =
105
116
reachable_crosswalk.front_center_point .y () +
106
- velocity * entry_to_exit_point. normalized () .y () * (dt - arrival_time);
117
+ velocity * entry_to_exit_point_normalized .y () * (dt - arrival_time);
107
118
world_frame_pose.position .z = obj_pos.z ;
108
- world_frame_pose.orientation = object. kinematics . pose_with_covariance . pose . orientation ;
119
+ world_frame_pose.orientation = entry_to_exit_point_orientation ;
109
120
predicted_path.path .push_back (world_frame_pose);
110
121
}
111
122
if (predicted_path.path .size () >= predicted_path.path .max_size ()) {
112
123
break ;
113
124
}
114
125
}
115
126
116
- // calculate orientation of each point
117
- if (predicted_path.path .size () >= 2 ) {
118
- for (size_t i = 0 ; i < predicted_path.path .size () - 1 ; i++) {
119
- const auto yaw = tier4_autoware_utils::calcAzimuthAngle (
120
- predicted_path.path .at (i).position , predicted_path.path .at (i + 1 ).position );
121
- predicted_path.path .at (i).orientation = tier4_autoware_utils::createQuaternionFromYaw (yaw);
122
- }
123
- predicted_path.path .back ().orientation =
124
- predicted_path.path .at (predicted_path.path .size () - 2 ).orientation ;
125
- }
126
-
127
127
predicted_path.confidence = 1.0 ;
128
128
predicted_path.time_step = rclcpp::Duration::from_seconds (sampling_time_interval_);
129
129
0 commit comments