Skip to content

Commit 3c6e48f

Browse files
Added VehicleSpec
Signed-off-by: Shintaro Sakoda <shintaro.sakoda@tier4.jp>
1 parent 15ad5b8 commit 3c6e48f

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

planning/autoware_diffusion_planner/include/autoware/diffusion_planner/diffusion_planner_core.hpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,22 @@ using utils::NormalizationMap;
6767
using InputDataMap = std::unordered_map<std::string, std::vector<float>>;
6868
using AgentPoses = std::vector<std::vector<std::vector<Eigen::Matrix4d>>>;
6969

70+
struct VehicleSpec
71+
{
72+
double wheel_base;
73+
double vehicle_length;
74+
double vehicle_width;
75+
double base_link_to_center;
76+
77+
explicit VehicleSpec(const VehicleInfo & info)
78+
: wheel_base(info.wheel_base_m),
79+
vehicle_length(info.front_overhang_m + info.wheel_base_m + info.rear_overhang_m),
80+
vehicle_width(info.left_overhang_m + info.wheel_tread_m + info.right_overhang_m),
81+
base_link_to_center((info.front_overhang_m + info.wheel_base_m - info.rear_overhang_m) / 2.0)
82+
{
83+
}
84+
};
85+
7086
struct PlannerOutput
7187
{
7288
Trajectory trajectory;
@@ -254,7 +270,7 @@ class DiffusionPlannerCore
254270
private:
255271
// Parameters
256272
DiffusionPlannerParams params_;
257-
VehicleInfo vehicle_info_;
273+
VehicleSpec vehicle_spec_;
258274
NormalizationMap normalization_map_;
259275

260276
// Inference engine

planning/autoware_diffusion_planner/src/diffusion_planner_core.cpp

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ namespace autoware::diffusion_planner
3939
DiffusionPlannerCore::DiffusionPlannerCore(
4040
const DiffusionPlannerParams & params, const VehicleInfo & vehicle_info)
4141
: params_(params),
42-
vehicle_info_(vehicle_info),
42+
vehicle_spec_(vehicle_info),
4343
turn_indicator_manager_(
4444
rclcpp::Duration::from_seconds(params.turn_indicator_hold_duration),
4545
params.turn_indicator_keep_offset)
@@ -98,7 +98,7 @@ std::optional<FrameContext> DiffusionPlannerCore::create_frame_context(
9898
Odometry kinematic_state = *ego_kinematic_state;
9999
if (params_.shift_x) {
100100
kinematic_state.pose.pose =
101-
utils::shift_x(kinematic_state.pose.pose, vehicle_info_.wheel_base_m / 2.0);
101+
utils::shift_x(kinematic_state.pose.pose, vehicle_spec_.base_link_to_center);
102102
}
103103

104104
// Get transforms
@@ -155,7 +155,7 @@ InputDataMap DiffusionPlannerCore::create_input_data(const FrameContext & frame_
155155
const geometry_msgs::msg::Pose & pose_center =
156156
params_.shift_x
157157
? utils::shift_x(
158-
frame_context.ego_kinematic_state.pose.pose, vehicle_info_.wheel_base_m / 2.0)
158+
frame_context.ego_kinematic_state.pose.pose, vehicle_spec_.base_link_to_center)
159159
: frame_context.ego_kinematic_state.pose.pose;
160160
const Eigen::Matrix4d ego_to_map_transform = utils::pose_to_matrix4d(pose_center);
161161
const Eigen::Matrix4d map_to_ego_transform = utils::inverse(ego_to_map_transform);
@@ -174,7 +174,7 @@ InputDataMap DiffusionPlannerCore::create_input_data(const FrameContext & frame_
174174
{
175175
const auto ego_current_state = preprocess::create_ego_current_state(
176176
frame_context.ego_kinematic_state, frame_context.ego_acceleration,
177-
static_cast<float>(vehicle_info_.wheel_base_m));
177+
static_cast<float>(vehicle_spec_.wheel_base));
178178
input_data_map["ego_current_state"] =
179179
utils::replicate_for_batch(ego_current_state, params_.batch_size);
180180
}
@@ -257,12 +257,10 @@ InputDataMap DiffusionPlannerCore::create_input_data(const FrameContext & frame_
257257

258258
// ego shape
259259
{
260-
const float wheel_base = static_cast<float>(vehicle_info_.wheel_base_m);
261-
const float vehicle_length = static_cast<float>(
262-
vehicle_info_.front_overhang_m + vehicle_info_.wheel_base_m + vehicle_info_.rear_overhang_m);
263-
const float vehicle_width = static_cast<float>(
264-
vehicle_info_.left_overhang_m + vehicle_info_.wheel_tread_m + vehicle_info_.right_overhang_m);
265-
std::vector<float> single_ego_shape = {wheel_base, vehicle_length, vehicle_width};
260+
const std::vector<float> single_ego_shape = {
261+
static_cast<float>(vehicle_spec_.wheel_base),
262+
static_cast<float>(vehicle_spec_.vehicle_length),
263+
static_cast<float>(vehicle_spec_.vehicle_width)};
266264
input_data_map["ego_shape"] = utils::replicate_for_batch(single_ego_shape, params_.batch_size);
267265
}
268266

@@ -313,8 +311,7 @@ PlannerOutput DiffusionPlannerCore::create_planner_output(
313311

314312
if (params_.shift_x) {
315313
for (auto & point : trajectory.points) {
316-
// TODO(sakoda): front and rear overhang should be considered for more accurate shifting.
317-
point.pose = utils::shift_x(point.pose, -vehicle_info_.wheel_base_m / 2.0);
314+
point.pose = utils::shift_x(point.pose, -vehicle_spec_.base_link_to_center);
318315
}
319316
}
320317

@@ -369,7 +366,7 @@ DiffusionPlannerCore::get_first_traffic_light_on_route(const FrameContext & fram
369366
const geometry_msgs::msg::Pose & pose_center =
370367
params_.shift_x
371368
? utils::shift_x(
372-
frame_context.ego_kinematic_state.pose.pose, vehicle_info_.wheel_base_m / 2.0)
369+
frame_context.ego_kinematic_state.pose.pose, vehicle_spec_.base_link_to_center)
373370
: frame_context.ego_kinematic_state.pose.pose;
374371

375372
const double center_x = pose_center.position.x;

0 commit comments

Comments
 (0)