Skip to content

Commit 0b90a97

Browse files
TakaHoribekosuke55
andauthored
fix(simple_planning_simulator): fix steering bias model (#6240)
* fix(simple_planning_simulator): fix steering bias model Signed-off-by: Takamasa Horibe <horibe.takamasa@gmail.com> * remove old implementation Signed-off-by: Takamasa Horibe <horibe.takamasa@gmail.com> * fix initialize order Signed-off-by: Takamasa Horibe <horibe.takamasa@gmail.com> * fix yawrate measurement Signed-off-by: Takamasa Horibe <horibe.takamasa@gmail.com> * remove unused code Signed-off-by: Takamasa Horibe <horibe.takamasa@gmail.com> * add bias to steer rate Signed-off-by: kosuke55 <kosuke.tnp@gmail.com> * add comments Signed-off-by: kosuke55 <kosuke.tnp@gmail.com> * fix getWz() Signed-off-by: kosuke55 <kosuke.tnp@gmail.com> * Update simulator/simple_planning_simulator/src/simple_planning_simulator/vehicle_model/sim_model_delay_steer_acc.cpp * Update simulator/simple_planning_simulator/src/simple_planning_simulator/vehicle_model/sim_model_delay_steer_map_acc_geared.cpp * Update simulator/simple_planning_simulator/src/simple_planning_simulator/vehicle_model/sim_model_delay_steer_vel.cpp --------- Signed-off-by: Takamasa Horibe <horibe.takamasa@gmail.com> Signed-off-by: kosuke55 <kosuke.tnp@gmail.com> Co-authored-by: kosuke55 <kosuke.tnp@gmail.com>
1 parent c0d7904 commit 0b90a97

11 files changed

+57
-44
lines changed

simulator/simple_planning_simulator/README.md

+12-12
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,17 @@ The purpose of this simulator is for the integration test of planning and contro
4040

4141
### Common Parameters
4242

43-
| Name | Type | Description | Default value |
44-
| :--------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------- | :------------------- |
45-
| simulated_frame_id | string | set to the child_frame_id in output tf | "base_link" |
46-
| origin_frame_id | string | set to the frame_id in output tf | "odom" |
47-
| initialize_source | string | If "ORIGIN", the initial pose is set at (0,0,0). If "INITIAL_POSE_TOPIC", node will wait until the `input/initialpose` topic is published. | "INITIAL_POSE_TOPIC" |
48-
| add_measurement_noise | bool | If true, the Gaussian noise is added to the simulated results. | true |
49-
| pos_noise_stddev | double | Standard deviation for position noise | 0.01 |
50-
| rpy_noise_stddev | double | Standard deviation for Euler angle noise | 0.0001 |
51-
| vel_noise_stddev | double | Standard deviation for longitudinal velocity noise | 0.0 |
52-
| angvel_noise_stddev | double | Standard deviation for angular velocity noise | 0.0 |
53-
| steer_noise_stddev | double | Standard deviation for steering angle noise | 0.0001 |
54-
| measurement_steer_bias | double | Measurement bias for steering angle | 0.0 |
43+
| Name | Type | Description | Default value |
44+
| :-------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------- | :------------------- |
45+
| simulated_frame_id | string | set to the child_frame_id in output tf | "base_link" |
46+
| origin_frame_id | string | set to the frame_id in output tf | "odom" |
47+
| initialize_source | string | If "ORIGIN", the initial pose is set at (0,0,0). If "INITIAL_POSE_TOPIC", node will wait until the `input/initialpose` topic is published. | "INITIAL_POSE_TOPIC" |
48+
| add_measurement_noise | bool | If true, the Gaussian noise is added to the simulated results. | true |
49+
| pos_noise_stddev | double | Standard deviation for position noise | 0.01 |
50+
| rpy_noise_stddev | double | Standard deviation for Euler angle noise | 0.0001 |
51+
| vel_noise_stddev | double | Standard deviation for longitudinal velocity noise | 0.0 |
52+
| angvel_noise_stddev | double | Standard deviation for angular velocity noise | 0.0 |
53+
| steer_noise_stddev | double | Standard deviation for steering angle noise | 0.0001 |
5554

5655
### Vehicle Model Parameters
5756

@@ -82,6 +81,7 @@ The table below shows which models correspond to what parameters. The model name
8281
| vel_rate_lim | double | limit of acceleration | x | x | x | o | o | o | o | 7.0 | [m/ss] |
8382
| steer_lim | double | limit of steering angle | x | x | x | o | o | o | o | 1.0 | [rad] |
8483
| steer_rate_lim | double | limit of steering angle change rate | x | x | x | o | o | o | o | 5.0 | [rad/s] |
84+
| steer_bias | double | bias for steering angle | x | x | x | o | o | o | o | 0.0 | [rad] |
8585
| debug_acc_scaling_factor | double | scaling factor for accel command | x | x | x | x | o | o | x | 1.0 | [-] |
8686
| debug_steer_scaling_factor | double | scaling factor for steer command | x | x | x | x | o | o | x | 1.0 | [-] |
8787
| acceleration_map_path | string | path to csv file for acceleration map which converts velocity and ideal acceleration to actual acceleration | x | x | x | x | x | x | o | - | [-] |

simulator/simple_planning_simulator/include/simple_planning_simulator/simple_planning_simulator_core.hpp

-3
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,6 @@ class PLANNING_SIMULATOR_PUBLIC SimplePlanningSimulator : public rclcpp::Node
195195
bool is_initialized_ = false; //!< @brief flag to check the initial position is set
196196
bool add_measurement_noise_ = false; //!< @brief flag to add measurement noise
197197

198-
/* measurement bias */
199-
double measurement_steer_bias_ = 0.0; //!< @brief measurement bias for steering measurement
200-
201198
DeltaTime delta_time_{}; //!< @brief to calculate delta time
202199

203200
MeasurementNoiseGenerator measurement_noise_{}; //!< @brief for measurement noise

simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model_delay_steer_acc.hpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,15 @@ class SimModelDelaySteerAcc : public SimModelInterface
4040
* @param [in] steer_delay time delay for steering command [s]
4141
* @param [in] steer_time_constant time constant for 1D model of steering dynamics
4242
* @param [in] steer_dead_band dead band for steering angle [rad]
43+
* @param [in] steer_bias steering bias [rad]
4344
* @param [in] debug_acc_scaling_factor scaling factor for accel command
4445
* @param [in] debug_steer_scaling_factor scaling factor for steering command
4546
*/
4647
SimModelDelaySteerAcc(
4748
double vx_lim, double steer_lim, double vx_rate_lim, double steer_rate_lim, double wheelbase,
4849
double dt, double acc_delay, double acc_time_constant, double steer_delay,
49-
double steer_time_constant, double steer_dead_band, double debug_acc_scaling_factor,
50-
double debug_steer_scaling_factor);
50+
double steer_time_constant, double steer_dead_band, double steer_bias,
51+
double debug_acc_scaling_factor, double debug_steer_scaling_factor);
5152

5253
/**
5354
* @brief default destructor
@@ -84,6 +85,7 @@ class SimModelDelaySteerAcc : public SimModelInterface
8485
const double steer_delay_; //!< @brief time delay for steering command [s]
8586
const double steer_time_constant_; //!< @brief time constant for steering dynamics
8687
const double steer_dead_band_; //!< @brief dead band for steering angle [rad]
88+
const double steer_bias_; //!< @brief steering angle bias [rad]
8789
const double debug_acc_scaling_factor_; //!< @brief scaling factor for accel command
8890
const double debug_steer_scaling_factor_; //!< @brief scaling factor for steering command
8991

simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model_delay_steer_acc_geared.hpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,15 @@ class SimModelDelaySteerAccGeared : public SimModelInterface
4040
* @param [in] steer_delay time delay for steering command [s]
4141
* @param [in] steer_time_constant time constant for 1D model of steering dynamics
4242
* @param [in] steer_dead_band dead band for steering angle [rad]
43+
* @param [in] steer_bias steering bias [rad]
4344
* @param [in] debug_acc_scaling_factor scaling factor for accel command
4445
* @param [in] debug_steer_scaling_factor scaling factor for steering command
4546
*/
4647
SimModelDelaySteerAccGeared(
4748
double vx_lim, double steer_lim, double vx_rate_lim, double steer_rate_lim, double wheelbase,
4849
double dt, double acc_delay, double acc_time_constant, double steer_delay,
49-
double steer_time_constant, double steer_dead_band, double debug_acc_scaling_factor,
50-
double debug_steer_scaling_factor);
50+
double steer_time_constant, double steer_dead_band, double steer_bias,
51+
double debug_acc_scaling_factor, double debug_steer_scaling_factor);
5152

5253
/**
5354
* @brief default destructor
@@ -84,6 +85,7 @@ class SimModelDelaySteerAccGeared : public SimModelInterface
8485
const double steer_delay_; //!< @brief time delay for steering command [s]
8586
const double steer_time_constant_; //!< @brief time constant for steering dynamics
8687
const double steer_dead_band_; //!< @brief dead band for steering angle [rad]
88+
const double steer_bias_; //!< @brief steering angle bias [rad]
8789
const double debug_acc_scaling_factor_; //!< @brief scaling factor for accel command
8890
const double debug_steer_scaling_factor_; //!< @brief scaling factor for steering command
8991

simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model_delay_steer_map_acc_geared.hpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,13 @@ class SimModelDelaySteerMapAccGeared : public SimModelInterface
9292
* @param [in] acc_time_constant time constant for 1D model of accel dynamics
9393
* @param [in] steer_delay time delay for steering command [s]
9494
* @param [in] steer_time_constant time constant for 1D model of steering dynamics
95+
* @param [in] steer_bias steering bias [rad]
9596
* @param [in] path path to csv file for acceleration conversion map
9697
*/
9798
SimModelDelaySteerMapAccGeared(
9899
double vx_lim, double steer_lim, double vx_rate_lim, double steer_rate_lim, double wheelbase,
99100
double dt, double acc_delay, double acc_time_constant, double steer_delay,
100-
double steer_time_constant, std::string path);
101+
double steer_time_constant, double steer_bias, std::string path);
101102

102103
/**
103104
* @brief default destructor
@@ -135,6 +136,7 @@ class SimModelDelaySteerMapAccGeared : public SimModelInterface
135136
const double acc_time_constant_; //!< @brief time constant for accel dynamics
136137
const double steer_delay_; //!< @brief time delay for steering command [s]
137138
const double steer_time_constant_; //!< @brief time constant for steering dynamics
139+
const double steer_bias_; //!< @brief steering angle bias [rad]
138140
const std::string path_; //!< @brief conversion map path
139141

140142
/**

simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model_delay_steer_vel.hpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,12 @@ class SimModelDelaySteerVel : public SimModelInterface
4343
* @param [in] steer_delay time delay for steering command [s]
4444
* @param [in] steer_time_constant time constant for 1D model of steering dynamics
4545
* @param [in] steer_dead_band dead band for steering angle [rad]
46+
* @param [in] steer_bias steering bias [rad]
4647
*/
4748
SimModelDelaySteerVel(
4849
double vx_lim, double steer_lim, double vx_rate_lim, double steer_rate_lim, double wheelbase,
4950
double dt, double vx_delay, double vx_time_constant, double steer_delay,
50-
double steer_time_constant, double steer_dead_band);
51+
double steer_time_constant, double steer_dead_band, double steer_bias);
5152

5253
/**
5354
* @brief destructor
@@ -86,6 +87,7 @@ class SimModelDelaySteerVel : public SimModelInterface
8687
const double
8788
steer_time_constant_; //!< @brief time constant for 1D model of angular-velocity dynamics
8889
const double steer_dead_band_; //!< @brief dead band for steering angle [rad]
90+
const double steer_bias_; //!< @brief steering angle bias [rad]
8991

9092
/**
9193
* @brief set queue buffer for input command

simulator/simple_planning_simulator/src/simple_planning_simulator/simple_planning_simulator_core.cpp

+7-8
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ SimplePlanningSimulator::SimplePlanningSimulator(const rclcpp::NodeOptions & opt
102102
simulated_frame_id_ = declare_parameter("simulated_frame_id", "base_link");
103103
origin_frame_id_ = declare_parameter("origin_frame_id", "odom");
104104
add_measurement_noise_ = declare_parameter("add_measurement_noise", false);
105-
measurement_steer_bias_ = declare_parameter("measurement_steer_bias", 0.0);
106105
simulate_motion_ = declare_parameter<bool>("initial_engage_state");
107106
enable_road_slope_simulation_ = declare_parameter("enable_road_slope_simulation", false);
108107

@@ -232,6 +231,8 @@ void SimplePlanningSimulator::initialize_vehicle_model()
232231
const double steer_time_delay = declare_parameter("steer_time_delay", 0.24);
233232
const double steer_time_constant = declare_parameter("steer_time_constant", 0.27);
234233
const double steer_dead_band = declare_parameter("steer_dead_band", 0.0);
234+
const double steer_bias = declare_parameter("steer_bias", 0.0);
235+
235236
const double debug_acc_scaling_factor = declare_parameter("debug_acc_scaling_factor", 1.0);
236237
const double debug_steer_scaling_factor = declare_parameter("debug_steer_scaling_factor", 1.0);
237238
const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo();
@@ -250,19 +251,20 @@ void SimplePlanningSimulator::initialize_vehicle_model()
250251
vehicle_model_type_ = VehicleModelType::DELAY_STEER_VEL;
251252
vehicle_model_ptr_ = std::make_shared<SimModelDelaySteerVel>(
252253
vel_lim, steer_lim, vel_rate_lim, steer_rate_lim, wheelbase, timer_sampling_time_ms_ / 1000.0,
253-
vel_time_delay, vel_time_constant, steer_time_delay, steer_time_constant, steer_dead_band);
254+
vel_time_delay, vel_time_constant, steer_time_delay, steer_time_constant, steer_dead_band,
255+
steer_bias);
254256
} else if (vehicle_model_type_str == "DELAY_STEER_ACC") {
255257
vehicle_model_type_ = VehicleModelType::DELAY_STEER_ACC;
256258
vehicle_model_ptr_ = std::make_shared<SimModelDelaySteerAcc>(
257259
vel_lim, steer_lim, vel_rate_lim, steer_rate_lim, wheelbase, timer_sampling_time_ms_ / 1000.0,
258260
acc_time_delay, acc_time_constant, steer_time_delay, steer_time_constant, steer_dead_band,
259-
debug_acc_scaling_factor, debug_steer_scaling_factor);
261+
steer_bias, debug_acc_scaling_factor, debug_steer_scaling_factor);
260262
} else if (vehicle_model_type_str == "DELAY_STEER_ACC_GEARED") {
261263
vehicle_model_type_ = VehicleModelType::DELAY_STEER_ACC_GEARED;
262264
vehicle_model_ptr_ = std::make_shared<SimModelDelaySteerAccGeared>(
263265
vel_lim, steer_lim, vel_rate_lim, steer_rate_lim, wheelbase, timer_sampling_time_ms_ / 1000.0,
264266
acc_time_delay, acc_time_constant, steer_time_delay, steer_time_constant, steer_dead_band,
265-
debug_acc_scaling_factor, debug_steer_scaling_factor);
267+
steer_bias, debug_acc_scaling_factor, debug_steer_scaling_factor);
266268
} else if (vehicle_model_type_str == "DELAY_STEER_MAP_ACC_GEARED") {
267269
vehicle_model_type_ = VehicleModelType::DELAY_STEER_MAP_ACC_GEARED;
268270
const std::string acceleration_map_path =
@@ -277,7 +279,7 @@ void SimplePlanningSimulator::initialize_vehicle_model()
277279
}
278280
vehicle_model_ptr_ = std::make_shared<SimModelDelaySteerMapAccGeared>(
279281
vel_lim, steer_lim, vel_rate_lim, steer_rate_lim, wheelbase, timer_sampling_time_ms_ / 1000.0,
280-
acc_time_delay, acc_time_constant, steer_time_delay, steer_time_constant,
282+
acc_time_delay, acc_time_constant, steer_time_delay, steer_time_constant, steer_bias,
281283
acceleration_map_path);
282284
} else {
283285
throw std::invalid_argument("Invalid vehicle_model_type: " + vehicle_model_type_str);
@@ -383,9 +385,6 @@ void SimplePlanningSimulator::on_timer()
383385
add_measurement_noise(current_odometry_, current_velocity_, current_steer_);
384386
}
385387

386-
// add measurement bias
387-
current_steer_.steering_tire_angle += measurement_steer_bias_;
388-
389388
// add estimate covariance
390389
{
391390
using COV_IDX = tier4_autoware_utils::xyzrpy_covariance_index::XYZRPY_COV_IDX;

simulator/simple_planning_simulator/src/simple_planning_simulator/vehicle_model/sim_model_delay_steer_acc.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
SimModelDelaySteerAcc::SimModelDelaySteerAcc(
2020
double vx_lim, double steer_lim, double vx_rate_lim, double steer_rate_lim, double wheelbase,
2121
double dt, double acc_delay, double acc_time_constant, double steer_delay,
22-
double steer_time_constant, double steer_dead_band, double debug_acc_scaling_factor,
23-
double debug_steer_scaling_factor)
22+
double steer_time_constant, double steer_dead_band, double steer_bias,
23+
double debug_acc_scaling_factor, double debug_steer_scaling_factor)
2424
: SimModelInterface(6 /* dim x */, 2 /* dim u */),
2525
MIN_TIME_CONSTANT(0.03),
2626
vx_lim_(vx_lim),
@@ -33,6 +33,7 @@ SimModelDelaySteerAcc::SimModelDelaySteerAcc(
3333
steer_delay_(steer_delay),
3434
steer_time_constant_(std::max(steer_time_constant, MIN_TIME_CONSTANT)),
3535
steer_dead_band_(steer_dead_band),
36+
steer_bias_(steer_bias),
3637
debug_acc_scaling_factor_(std::max(debug_acc_scaling_factor, 0.0)),
3738
debug_steer_scaling_factor_(std::max(debug_steer_scaling_factor, 0.0))
3839
{
@@ -69,7 +70,7 @@ double SimModelDelaySteerAcc::getWz()
6970
}
7071
double SimModelDelaySteerAcc::getSteer()
7172
{
72-
return state_(IDX::STEER);
73+
return state_(IDX::STEER) + steer_bias_;
7374
}
7475
void SimModelDelaySteerAcc::update(const double & dt)
7576
{
@@ -111,7 +112,7 @@ Eigen::VectorXd SimModelDelaySteerAcc::calcModel(
111112
sat(input(IDX_U::ACCX_DES), vx_rate_lim_, -vx_rate_lim_) * debug_acc_scaling_factor_;
112113
const double steer_des =
113114
sat(input(IDX_U::STEER_DES), steer_lim_, -steer_lim_) * debug_steer_scaling_factor_;
114-
const double steer_diff = steer - steer_des;
115+
const double steer_diff = getSteer() - steer_des;
115116
const double steer_diff_with_dead_band = std::invoke([&]() {
116117
if (steer_diff > steer_dead_band_) {
117118
return steer_diff - steer_dead_band_;

0 commit comments

Comments
 (0)