temporary storage 7/9/2026 20:41

This commit is contained in:
2026-07-09 20:41:35 +07:00
parent e9394434ba
commit 17088a227d
12 changed files with 82 additions and 107 deletions

View File

@@ -22,6 +22,7 @@ namespace
{
constexpr double kDefaultBackupDistance = 0.5; // m.
constexpr double kDefaultLinearSpeed = 0.1; // m/s.
constexpr double kDefaultControlPeriod = 0.1; // s per update tick.
} // namespace
/**
@@ -48,6 +49,7 @@ protected:
robot::NodeHandle private_nh("~/" + name_);
private_nh.param("backup_distance", default_backup_distance_, kDefaultBackupDistance);
private_nh.param("linear_speed", default_linear_speed_, kDefaultLinearSpeed);
private_nh.param("control_period", control_period_, kDefaultControlPeriod);
private_nh.param("require_costmap", require_costmap_, false);
if (!std::isfinite(default_backup_distance_) || default_backup_distance_ <= 0.0)
@@ -62,6 +64,12 @@ protected:
name_.c_str());
default_linear_speed_ = kDefaultLinearSpeed;
}
if (!std::isfinite(control_period_) || control_period_ <= 0.0)
{
robot::log_warning("[recovery_core] Invalid control_period for '%s'; using 0.1 s.",
name_.c_str());
control_period_ = kDefaultControlPeriod;
}
}
recovery_core::RecoveryResult onStart(const recovery_core::RecoveryGoal& goal) override
@@ -89,7 +97,7 @@ protected:
.withMessage("backup start");
}
recovery_core::RecoveryResult onUpdate(double dt) override
recovery_core::RecoveryResult onUpdate() override
{
if (traveled_distance_ >= backup_distance_)
{
@@ -98,8 +106,8 @@ protected:
robot_geometry_msgs::Twist command;
command.linear.x = -std::abs(linear_speed_);
traveled_distance_ =
std::min(backup_distance_, traveled_distance_ + std::abs(command.linear.x) * dt);
traveled_distance_ = std::min(
backup_distance_, traveled_distance_ + std::abs(command.linear.x) * control_period_);
if (traveled_distance_ >= backup_distance_)
{
@@ -124,6 +132,7 @@ private:
double default_backup_distance_ = kDefaultBackupDistance;
double default_linear_speed_ = kDefaultLinearSpeed;
double control_period_ = kDefaultControlPeriod;
bool require_costmap_ = false;
double backup_distance_ = kDefaultBackupDistance;

View File

@@ -87,7 +87,7 @@ protected:
return recovery_core::RecoveryResult::Running().withMessage("clear costmap start");
}
recovery_core::RecoveryResult onUpdate(double /*dt*/) override
recovery_core::RecoveryResult onUpdate() override
{
bool ok = true;
if (affected_maps_ == "global" || affected_maps_ == "both")

View File

@@ -40,7 +40,7 @@ protected:
.withMessage("regen path start");
}
recovery_core::RecoveryResult onUpdate(double /*dt*/) override
recovery_core::RecoveryResult onUpdate() override
{
const auto* global_path = ctx().global_path;
if (global_path == nullptr || global_path->empty())

View File

@@ -22,6 +22,7 @@ namespace
{
constexpr double kDefaultTargetAngle = 1.57079632679; // pi/2 rad.
constexpr double kDefaultAngularSpeed = 0.4; // rad/s.
constexpr double kDefaultControlPeriod = 0.1; // s per update tick.
} // namespace
/**
@@ -48,6 +49,7 @@ protected:
robot::NodeHandle private_nh("~/" + name_);
private_nh.param("target_angle", default_target_angle_, kDefaultTargetAngle);
private_nh.param("angular_speed", default_angular_speed_, kDefaultAngularSpeed);
private_nh.param("control_period", control_period_, kDefaultControlPeriod);
if (!std::isfinite(default_target_angle_) || std::abs(default_target_angle_) <= 0.0)
{
@@ -61,6 +63,12 @@ protected:
name_.c_str());
default_angular_speed_ = kDefaultAngularSpeed;
}
if (!std::isfinite(control_period_) || control_period_ <= 0.0)
{
robot::log_warning("[recovery_core] Invalid control_period for '%s'; using 0.1 s.",
name_.c_str());
control_period_ = kDefaultControlPeriod;
}
}
recovery_core::RecoveryResult onStart(const recovery_core::RecoveryGoal& goal) override
@@ -83,7 +91,7 @@ protected:
.withMessage("rotate start");
}
recovery_core::RecoveryResult onUpdate(double dt) override
recovery_core::RecoveryResult onUpdate() override
{
const double target = std::abs(target_angle_);
@@ -94,7 +102,8 @@ protected:
robot_geometry_msgs::Twist command;
command.angular.z = std::copysign(angular_speed_, target_angle_);
rotated_angle_ = std::min(target, rotated_angle_ + std::abs(command.angular.z) * dt);
rotated_angle_ =
std::min(target, rotated_angle_ + std::abs(command.angular.z) * control_period_);
if (rotated_angle_ >= target)
{
@@ -118,6 +127,7 @@ private:
double default_target_angle_ = kDefaultTargetAngle;
double default_angular_speed_ = kDefaultAngularSpeed;
double control_period_ = kDefaultControlPeriod;
double target_angle_ = kDefaultTargetAngle;
double angular_speed_ = kDefaultAngularSpeed;