Skip to content

Commit 351fabb

Browse files
authored
feat(pid_longitudinal_controller): remove trans/rot deviation validation since the control_validator has the same feature (#9675)
* feat(pid_longitudinal_controller): remove trans/rot deviation validation since the control_validator has the same feature Signed-off-by: Takayuki Murooka <takayuki5168@gmail.com> * fix test Signed-off-by: Takayuki Murooka <takayuki5168@gmail.com> --------- Signed-off-by: Takayuki Murooka <takayuki5168@gmail.com>
1 parent f41ae01 commit 351fabb

File tree

6 files changed

+1
-113
lines changed

6 files changed

+1
-113
lines changed

control/autoware_pid_longitudinal_controller/config/autoware_pid_longitudinal_controller.param.yaml

-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
stopped_state_entry_vel: 0.01
1717
stopped_state_entry_acc: 0.1
1818
emergency_state_overshoot_stop_dist: 1.5
19-
emergency_state_traj_trans_dev: 3.0
20-
emergency_state_traj_rot_dev: 0.7854
2119

2220
# drive state
2321
kp: 1.0

control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/pid_longitudinal_controller.hpp

-9
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro
8787

8888
struct ControlData
8989
{
90-
bool is_far_from_trajectory{false};
9190
autoware_planning_msgs::msg::Trajectory interpolated_traj{};
9291
size_t nearest_idx{0}; // nearest_idx = 0 when nearest_idx is not found with findNearestIdx
9392
size_t target_idx{0};
@@ -162,8 +161,6 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro
162161
double stopped_state_entry_acc;
163162
// emergency
164163
double emergency_state_overshoot_stop_dist;
165-
double emergency_state_traj_trans_dev;
166-
double emergency_state_traj_rot_dev;
167164
};
168165
StateTransitionParams m_state_transition_params;
169166

@@ -246,12 +243,6 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro
246243
// Diagnostic
247244
std::shared_ptr<diagnostic_updater::Updater>
248245
diag_updater_{}; // Diagnostic updater for publishing diagnostic data.
249-
struct DiagnosticData
250-
{
251-
double trans_deviation{0.0}; // translation deviation between nearest point and current_pose
252-
double rot_deviation{0.0}; // rotation deviation between nearest point and current_pose
253-
};
254-
DiagnosticData m_diagnostic_data;
255246
void setupDiagnosticUpdater();
256247
void checkControlState(diagnostic_updater::DiagnosticStatusWrapper & stat);
257248

control/autoware_pid_longitudinal_controller/media/LongitudinalControllerStateTransition.drawio.svg

+1-5
Loading

control/autoware_pid_longitudinal_controller/schema/autoware_pid_longitudinal_controller.schema.json

-12
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,6 @@
7171
"description": "If `enable_overshoot_emergency` is true and the ego is `emergency_state_overshoot_stop_dist`-meter ahead of the stop point, the state will transit to EMERGENCY. [m]",
7272
"default": "1.5"
7373
},
74-
"emergency_state_traj_trans_dev": {
75-
"type": "number",
76-
"description": "If the ego's position is `emergency_state_traj_trans_dev` meter away from the nearest trajectory point, the state will transit to EMERGENCY. [m]",
77-
"default": "3.0"
78-
},
79-
"emergency_state_traj_rot_dev": {
80-
"type": "number",
81-
"description": "If the ego's orientation is `emergency_state_traj_rot_dev` rad away from the nearest trajectory point orientation, the state will transit to EMERGENCY. [rad]",
82-
"default": "0.7854"
83-
},
8474
"kp": {
8575
"type": "number",
8676
"description": "p gain for longitudinal control",
@@ -326,8 +316,6 @@
326316
"stopped_state_entry_vel",
327317
"stopped_state_entry_acc",
328318
"emergency_state_overshoot_stop_dist",
329-
"emergency_state_traj_trans_dev",
330-
"emergency_state_traj_rot_dev",
331319
"kp",
332320
"ki",
333321
"kd",

control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp

-57
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,6 @@ PidLongitudinalController::PidLongitudinalController(
7979
// emergency
8080
p.emergency_state_overshoot_stop_dist =
8181
node.declare_parameter<double>("emergency_state_overshoot_stop_dist"); // [m]
82-
p.emergency_state_traj_trans_dev =
83-
node.declare_parameter<double>("emergency_state_traj_trans_dev"); // [m]
84-
p.emergency_state_traj_rot_dev =
85-
node.declare_parameter<double>("emergency_state_traj_rot_dev"); // [m]
8682
}
8783

8884
// parameters for drive state
@@ -286,8 +282,6 @@ rcl_interfaces::msg::SetParametersResult PidLongitudinalController::paramCallbac
286282
update_param("stopped_state_entry_vel", p.stopped_state_entry_vel);
287283
update_param("stopped_state_entry_acc", p.stopped_state_entry_acc);
288284
update_param("emergency_state_overshoot_stop_dist", p.emergency_state_overshoot_stop_dist);
289-
update_param("emergency_state_traj_trans_dev", p.emergency_state_traj_trans_dev);
290-
update_param("emergency_state_traj_rot_dev", p.emergency_state_traj_rot_dev);
291285
}
292286

293287
// drive state
@@ -423,24 +417,6 @@ trajectory_follower::LongitudinalOutput PidLongitudinalController::run(
423417

424418
const auto control_data = getControlData(current_pose);
425419

426-
// self pose is far from trajectory
427-
if (control_data.is_far_from_trajectory) {
428-
if (m_enable_large_tracking_error_emergency) {
429-
// update control state
430-
changeControlState(ControlState::EMERGENCY, "the tracking error is too large");
431-
}
432-
const Motion raw_ctrl_cmd = calcEmergencyCtrlCmd(control_data.dt); // calculate control command
433-
m_prev_raw_ctrl_cmd = raw_ctrl_cmd;
434-
const auto cmd_msg =
435-
createCtrlCmdMsg(raw_ctrl_cmd, control_data.current_motion.vel); // create control command
436-
publishDebugData(raw_ctrl_cmd, control_data); // publish debug data
437-
trajectory_follower::LongitudinalOutput output;
438-
output.control_cmd = cmd_msg;
439-
output.control_cmd_horizon.controls.push_back(cmd_msg);
440-
output.control_cmd_horizon.time_step_ms = 0.0;
441-
return output;
442-
}
443-
444420
// update control state
445421
updateControlState(control_data);
446422

@@ -491,23 +467,6 @@ PidLongitudinalController::ControlData PidLongitudinalController::getControlData
491467
const auto nearest_point = current_interpolated_pose.first;
492468
auto target_point = current_interpolated_pose.first;
493469

494-
// check if the deviation is worth emergency
495-
m_diagnostic_data.trans_deviation =
496-
autoware::universe_utils::calcDistance2d(current_interpolated_pose.first, current_pose);
497-
const bool is_dist_deviation_large =
498-
m_state_transition_params.emergency_state_traj_trans_dev < m_diagnostic_data.trans_deviation;
499-
m_diagnostic_data.rot_deviation = std::abs(autoware::universe_utils::normalizeRadian(
500-
tf2::getYaw(current_interpolated_pose.first.pose.orientation) -
501-
tf2::getYaw(current_pose.orientation)));
502-
const bool is_yaw_deviation_large =
503-
m_state_transition_params.emergency_state_traj_rot_dev < m_diagnostic_data.rot_deviation;
504-
505-
if (is_dist_deviation_large || is_yaw_deviation_large) {
506-
// return here if nearest index is not found
507-
control_data.is_far_from_trajectory = true;
508-
return control_data;
509-
}
510-
511470
// Delay compensation - Calculate the distance we got, predicted velocity and predicted
512471
// acceleration after delay
513472
control_data.state_after_delay =
@@ -1250,23 +1209,7 @@ void PidLongitudinalController::checkControlState(
12501209
msg = "emergency occurred due to ";
12511210
}
12521211

1253-
if (
1254-
m_state_transition_params.emergency_state_traj_trans_dev < m_diagnostic_data.trans_deviation) {
1255-
msg += "translation deviation";
1256-
}
1257-
1258-
if (m_state_transition_params.emergency_state_traj_rot_dev < m_diagnostic_data.rot_deviation) {
1259-
msg += "rotation deviation";
1260-
}
1261-
12621212
stat.add<int32_t>("control_state", static_cast<int32_t>(m_control_state));
1263-
stat.addf(
1264-
"translation deviation threshold", "%lf",
1265-
m_state_transition_params.emergency_state_traj_trans_dev);
1266-
stat.addf("translation deviation", "%lf", m_diagnostic_data.trans_deviation);
1267-
stat.addf(
1268-
"rotation deviation threshold", "%lf", m_state_transition_params.emergency_state_traj_rot_dev);
1269-
stat.addf("rotation deviation", "%lf", m_diagnostic_data.rot_deviation);
12701213
stat.summary(level, msg);
12711214
}
12721215

control/autoware_trajectory_follower_node/test/test_controller_node.cpp

-28
Original file line numberDiff line numberDiff line change
@@ -510,34 +510,6 @@ TEST_F(FakeNodeFixture, longitudinal_reverse)
510510
EXPECT_GT(tester.cmd_msg->longitudinal.acceleration, 0.0f);
511511
}
512512

513-
TEST_F(FakeNodeFixture, longitudinal_emergency)
514-
{
515-
const auto node_options = makeNodeOptions();
516-
ControllerTester tester(this, node_options);
517-
518-
tester.send_default_transform();
519-
tester.publish_default_odom();
520-
tester.publish_autonomous_operation_mode();
521-
tester.publish_default_steer();
522-
tester.publish_default_acc();
523-
524-
// Publish trajectory starting away from the current ego pose
525-
Trajectory traj;
526-
traj.header.stamp = tester.node->now();
527-
traj.header.frame_id = "map";
528-
traj.points.push_back(make_traj_point(10.0, 0.0, 1.0f));
529-
traj.points.push_back(make_traj_point(50.0, 0.0, 1.0f));
530-
traj.points.push_back(make_traj_point(100.0, 0.0, 1.0f));
531-
tester.traj_pub->publish(traj);
532-
533-
test_utils::waitForMessage(tester.node, this, tester.received_control_command);
534-
535-
ASSERT_TRUE(tester.received_control_command);
536-
// Emergencies (e.g., far from trajectory) produces braking command (0 vel, negative accel)
537-
EXPECT_DOUBLE_EQ(tester.cmd_msg->longitudinal.velocity, 0.0f);
538-
EXPECT_LT(tester.cmd_msg->longitudinal.acceleration, 0.0f);
539-
}
540-
541513
TEST_F(FakeNodeFixture, longitudinal_not_check_steer_converged)
542514
{
543515
const auto node_options = makeNodeOptions();

0 commit comments

Comments
 (0)