From d4bba025352568491ba512a3944a950358f8f74d Mon Sep 17 00:00:00 2001 From: chyoo Date: Tue, 22 Sep 2026 11:12:05 +0900 Subject: [PATCH] feat: support Yahboom in shared Nav2 control --- .../config/control_2d_real_yahboom.yaml | 112 ++++++++++++++++++ .../config/control_2d_sim_yahboom.yaml | 112 ++++++++++++++++++ src/control_pkg/launch/nav2_control.launch.py | 2 +- 3 files changed, 225 insertions(+), 1 deletion(-) create mode 100644 src/control_pkg/config/control_2d_real_yahboom.yaml create mode 100644 src/control_pkg/config/control_2d_sim_yahboom.yaml diff --git a/src/control_pkg/config/control_2d_real_yahboom.yaml b/src/control_pkg/config/control_2d_real_yahboom.yaml new file mode 100644 index 0000000..70e339d --- /dev/null +++ b/src/control_pkg/config/control_2d_real_yahboom.yaml @@ -0,0 +1,112 @@ +# Yahboom Pi5 differential-drive profile. Vehicle owns /scan, /odom and TF. +controller_server: + ros__parameters: + use_sim_time: false + controller_frequency: 20.0 + min_x_velocity_threshold: 0.001 + min_y_velocity_threshold: 0.0 + min_theta_velocity_threshold: 0.001 + failure_tolerance: 0.5 + progress_checker_plugin: progress_checker + goal_checker_plugins: [goal_checker] + controller_plugins: [FollowPath] + progress_checker: + plugin: nav2_controller::SimpleProgressChecker + required_movement_radius: 0.08 + movement_time_allowance: 10.0 + goal_checker: + plugin: nav2_controller::SimpleGoalChecker + xy_goal_tolerance: 0.15 + yaw_goal_tolerance: 0.2 + stateful: true + FollowPath: + plugin: dwb_core::DWBLocalPlanner + debug_trajectory_details: false + min_vel_x: -0.05 + max_vel_x: 0.2 + max_vel_theta: 1.0 + min_speed_xy: 0.0 + max_speed_xy: 0.2 + acc_lim_x: 1.5 + decel_lim_x: -1.5 + acc_lim_theta: 3.2 + decel_lim_theta: -3.2 + vx_samples: 20 + vtheta_samples: 20 + sim_time: 1.7 + transform_tolerance: 0.2 + xy_goal_tolerance: 0.15 + trans_stopped_velocity: 0.05 + short_circuit_trajectory_evaluation: true + stateful: true + critics: [RotateToGoal, Oscillation, BaseObstacle, GoalAlign, PathAlign, PathDist, GoalDist] + BaseObstacle.scale: 0.02 + PathAlign.scale: 24.0 + PathAlign.forward_point_distance: 0.1 + GoalAlign.scale: 18.0 + GoalAlign.forward_point_distance: 0.1 + PathDist.scale: 24.0 + GoalDist.scale: 18.0 + RotateToGoal.scale: 24.0 + RotateToGoal.slowing_factor: 5.0 + RotateToGoal.lookahead_time: -1.0 + +local_costmap: + local_costmap: + ros__parameters: + use_sim_time: false + global_frame: odom + robot_base_frame: base_footprint + rolling_window: true + width: 3 + height: 3 + resolution: 0.05 + footprint: "[[-0.165,-0.08],[-0.165,0.08],[0.125,0.08],[0.125,-0.08]]" + update_frequency: 5.0 + publish_frequency: 2.0 + plugins: [obstacle_layer, inflation_layer] + obstacle_layer: + plugin: nav2_costmap_2d::ObstacleLayer + observation_sources: scan + scan: + topic: /scan + data_type: LaserScan + marking: true + clearing: true + max_obstacle_height: 1.0 + inflation_layer: + plugin: nav2_costmap_2d::InflationLayer + inflation_radius: 0.30 + cost_scaling_factor: 3.0 + +behavior_server: + ros__parameters: + use_sim_time: false + costmap_topic: local_costmap/costmap_raw + footprint_topic: local_costmap/published_footprint + cycle_frequency: 10.0 + behavior_plugins: [backup, drive_on_heading, wait] + backup: + plugin: nav2_behaviors/BackUp + drive_on_heading: + plugin: nav2_behaviors/DriveOnHeading + wait: + plugin: nav2_behaviors/Wait + global_frame: odom + robot_base_frame: base_footprint + transform_tolerance: 0.2 + +velocity_smoother: + ros__parameters: + use_sim_time: false + smoothing_frequency: 20.0 + scale_velocities: false + feedback: OPEN_LOOP + max_velocity: [0.2, 0.0, 1.0] + min_velocity: [-0.05, 0.0, -1.0] + max_accel: [1.5, 0.0, 3.2] + max_decel: [-1.5, 0.0, -3.2] + odom_topic: /odom + odom_duration: 0.1 + deadband_velocity: [0.0, 0.0, 0.0] + velocity_timeout: 1.0 diff --git a/src/control_pkg/config/control_2d_sim_yahboom.yaml b/src/control_pkg/config/control_2d_sim_yahboom.yaml new file mode 100644 index 0000000..9ea36c3 --- /dev/null +++ b/src/control_pkg/config/control_2d_sim_yahboom.yaml @@ -0,0 +1,112 @@ +# Yahboom Pi5 differential-drive profile. Vehicle owns /scan, /odom and TF. +controller_server: + ros__parameters: + use_sim_time: true + controller_frequency: 20.0 + min_x_velocity_threshold: 0.001 + min_y_velocity_threshold: 0.0 + min_theta_velocity_threshold: 0.001 + failure_tolerance: 0.5 + progress_checker_plugin: progress_checker + goal_checker_plugins: [goal_checker] + controller_plugins: [FollowPath] + progress_checker: + plugin: nav2_controller::SimpleProgressChecker + required_movement_radius: 0.08 + movement_time_allowance: 10.0 + goal_checker: + plugin: nav2_controller::SimpleGoalChecker + xy_goal_tolerance: 0.15 + yaw_goal_tolerance: 0.2 + stateful: true + FollowPath: + plugin: dwb_core::DWBLocalPlanner + debug_trajectory_details: false + min_vel_x: -0.05 + max_vel_x: 0.2 + max_vel_theta: 1.0 + min_speed_xy: 0.0 + max_speed_xy: 0.2 + acc_lim_x: 1.5 + decel_lim_x: -1.5 + acc_lim_theta: 3.2 + decel_lim_theta: -3.2 + vx_samples: 20 + vtheta_samples: 20 + sim_time: 1.7 + transform_tolerance: 0.2 + xy_goal_tolerance: 0.15 + trans_stopped_velocity: 0.05 + short_circuit_trajectory_evaluation: true + stateful: true + critics: [RotateToGoal, Oscillation, BaseObstacle, GoalAlign, PathAlign, PathDist, GoalDist] + BaseObstacle.scale: 0.02 + PathAlign.scale: 24.0 + PathAlign.forward_point_distance: 0.1 + GoalAlign.scale: 18.0 + GoalAlign.forward_point_distance: 0.1 + PathDist.scale: 24.0 + GoalDist.scale: 18.0 + RotateToGoal.scale: 24.0 + RotateToGoal.slowing_factor: 5.0 + RotateToGoal.lookahead_time: -1.0 + +local_costmap: + local_costmap: + ros__parameters: + use_sim_time: true + global_frame: odom + robot_base_frame: base_footprint + rolling_window: true + width: 3 + height: 3 + resolution: 0.05 + footprint: "[[-0.165,-0.08],[-0.165,0.08],[0.125,0.08],[0.125,-0.08]]" + update_frequency: 5.0 + publish_frequency: 2.0 + plugins: [obstacle_layer, inflation_layer] + obstacle_layer: + plugin: nav2_costmap_2d::ObstacleLayer + observation_sources: scan + scan: + topic: /scan + data_type: LaserScan + marking: true + clearing: true + max_obstacle_height: 1.0 + inflation_layer: + plugin: nav2_costmap_2d::InflationLayer + inflation_radius: 0.30 + cost_scaling_factor: 3.0 + +behavior_server: + ros__parameters: + use_sim_time: true + costmap_topic: local_costmap/costmap_raw + footprint_topic: local_costmap/published_footprint + cycle_frequency: 10.0 + behavior_plugins: [backup, drive_on_heading, wait] + backup: + plugin: nav2_behaviors/BackUp + drive_on_heading: + plugin: nav2_behaviors/DriveOnHeading + wait: + plugin: nav2_behaviors/Wait + global_frame: odom + robot_base_frame: base_footprint + transform_tolerance: 0.2 + +velocity_smoother: + ros__parameters: + use_sim_time: true + smoothing_frequency: 20.0 + scale_velocities: false + feedback: OPEN_LOOP + max_velocity: [0.2, 0.0, 1.0] + min_velocity: [-0.05, 0.0, -1.0] + max_accel: [1.5, 0.0, 3.2] + max_decel: [-1.5, 0.0, -3.2] + odom_topic: /odom + odom_duration: 0.1 + deadband_velocity: [0.0, 0.0, 0.0] + velocity_timeout: 1.0 diff --git a/src/control_pkg/launch/nav2_control.launch.py b/src/control_pkg/launch/nav2_control.launch.py index 3cc16b4..e57993e 100644 --- a/src/control_pkg/launch/nav2_control.launch.py +++ b/src/control_pkg/launch/nav2_control.launch.py @@ -15,7 +15,7 @@ from nav2_common.launch import RewrittenYaml ARGUMENTS = [ DeclareLaunchArgument('sim_mode', default_value='true'), DeclareLaunchArgument('log_level', default_value='info'), - DeclareLaunchArgument('robot', default_value='turtlebot3', choices=['mkmini', 'fr09', 'turtlebot3']), + DeclareLaunchArgument('robot', default_value='turtlebot3', choices=['mkmini', 'fr09', 'turtlebot3', 'yahboom']), DeclareLaunchArgument('level', default_value='2d'), ]