feat: support Yahboom in shared Nav2 control

This commit is contained in:
2026-09-22 11:12:05 +09:00
parent 6c6a6df06c
commit d4bba02535
3 changed files with 225 additions and 1 deletions
@@ -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
@@ -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
@@ -15,7 +15,7 @@ from nav2_common.launch import RewrittenYaml
ARGUMENTS = [ ARGUMENTS = [
DeclareLaunchArgument('sim_mode', default_value='true'), DeclareLaunchArgument('sim_mode', default_value='true'),
DeclareLaunchArgument('log_level', default_value='info'), 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'), DeclareLaunchArgument('level', default_value='2d'),
] ]