mirror of
https://github.com/introlab/rtabmap_ros.git
synced 2026-10-04 08:47:45 +08:00
Fixing turtlebot3 demos on Jazzy (#1422)
* Fixing turtlebot3 demos on Jazzy * Updated humble * Working turtlebot3 demos on humble and jazzy
This commit is contained in:
@@ -22,6 +22,18 @@
|
|||||||
},
|
},
|
||||||
"workspaceMount": "source=${localWorkspaceFolder},target=/home/vscode/ros2_ws/src/rtabmap_ros,type=bind",
|
"workspaceMount": "source=${localWorkspaceFolder},target=/home/vscode/ros2_ws/src/rtabmap_ros,type=bind",
|
||||||
"workspaceFolder": "/home/vscode/ros2_ws",
|
"workspaceFolder": "/home/vscode/ros2_ws",
|
||||||
"postCreateCommand": "echo 'Initialize: export MAKEFLAGS=\"-j6\" && colcon build --cmake-args -DRTABMAP_SYNC_MULTI_RGBD=ON -DCMAKE_BUILD_TYPE=Release --parallel-workers 2'"
|
"postCreateCommand": "echo 'Initialize: export MAKEFLAGS=\"-j6\" && colcon build --cmake-args -DRTABMAP_SYNC_MULTI_RGBD=ON -DCMAKE_BUILD_TYPE=Release --parallel-workers 2'",
|
||||||
//"runArgs": ["--privileged", "--runtime=nvidia", "--network=host"]
|
"hostRequirements": {
|
||||||
|
"gpu": "optional"
|
||||||
|
},
|
||||||
|
"runArgs": ["--privileged",
|
||||||
|
"--network=host",
|
||||||
|
"--gpus=all",
|
||||||
|
//"--runtime=nvidia", // uncommment this if rtabmap doesn't show up in nvidia-smi on the host computer
|
||||||
|
"--env=DISPLAY",
|
||||||
|
"--env=QT_X11_NO_MITSHM=1",
|
||||||
|
"--volume=/tmp/.X11-unix:/tmp/.X11-unix"],
|
||||||
|
"containerEnv": {
|
||||||
|
"NVIDIA_VISIBLE_DEVICES": "all"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,11 +20,13 @@ from launch.actions import DeclareLaunchArgument, SetEnvironmentVariable
|
|||||||
from launch.substitutions import LaunchConfiguration
|
from launch.substitutions import LaunchConfiguration
|
||||||
from launch.conditions import IfCondition, UnlessCondition
|
from launch.conditions import IfCondition, UnlessCondition
|
||||||
from launch_ros.actions import Node
|
from launch_ros.actions import Node
|
||||||
|
from launch.actions import OpaqueFunction
|
||||||
|
|
||||||
def generate_launch_description():
|
def launch_setup(context, *args, **kwargs):
|
||||||
|
|
||||||
use_sim_time = LaunchConfiguration('use_sim_time')
|
use_sim_time = LaunchConfiguration('use_sim_time')
|
||||||
localization = LaunchConfiguration('localization')
|
localization = LaunchConfiguration('localization')
|
||||||
|
max_ground_height = LaunchConfiguration('max_ground_height').perform(context)
|
||||||
|
|
||||||
parameters={
|
parameters={
|
||||||
'frame_id':'base_footprint',
|
'frame_id':'base_footprint',
|
||||||
@@ -36,7 +38,7 @@ def generate_launch_description():
|
|||||||
'Grid/3D':'false', # Use 2D occupancy
|
'Grid/3D':'false', # Use 2D occupancy
|
||||||
'Grid/RangeMax':'3',
|
'Grid/RangeMax':'3',
|
||||||
'Grid/NormalsSegmentation':'false', # Use passthrough filter to detect obstacles
|
'Grid/NormalsSegmentation':'false', # Use passthrough filter to detect obstacles
|
||||||
'Grid/MaxGroundHeight':'0.05', # All points above 5 cm are obstacles
|
'Grid/MaxGroundHeight': str(max_ground_height), # All points above 5 cm are obstacles
|
||||||
'Grid/MaxObstacleHeight':'0.4', # All points over 1 meter are ignored
|
'Grid/MaxObstacleHeight':'0.4', # All points over 1 meter are ignored
|
||||||
'Optimizer/GravitySigma':'0' # Disable imu constraints (we are already in 2D)
|
'Optimizer/GravitySigma':'0' # Disable imu constraints (we are already in 2D)
|
||||||
}
|
}
|
||||||
@@ -46,17 +48,7 @@ def generate_launch_description():
|
|||||||
('rgb/camera_info', '/camera/camera_info'),
|
('rgb/camera_info', '/camera/camera_info'),
|
||||||
('depth/image', '/camera/depth/image_raw')]
|
('depth/image', '/camera/depth/image_raw')]
|
||||||
|
|
||||||
return LaunchDescription([
|
return [
|
||||||
|
|
||||||
# Launch arguments
|
|
||||||
DeclareLaunchArgument(
|
|
||||||
'use_sim_time', default_value='true',
|
|
||||||
description='Use simulation (Gazebo) clock if true'),
|
|
||||||
|
|
||||||
DeclareLaunchArgument(
|
|
||||||
'localization', default_value='false',
|
|
||||||
description='Launch in localization mode.'),
|
|
||||||
|
|
||||||
# Nodes to launch
|
# Nodes to launch
|
||||||
|
|
||||||
# SLAM mode:
|
# SLAM mode:
|
||||||
@@ -98,4 +90,23 @@ def generate_launch_description():
|
|||||||
remappings=[('cloud', '/camera/cloud'),
|
remappings=[('cloud', '/camera/cloud'),
|
||||||
('obstacles', '/camera/obstacles'),
|
('obstacles', '/camera/obstacles'),
|
||||||
('ground', '/camera/ground')]),
|
('ground', '/camera/ground')]),
|
||||||
])
|
]
|
||||||
|
|
||||||
|
def generate_launch_description():
|
||||||
|
return LaunchDescription([
|
||||||
|
|
||||||
|
# Launch arguments
|
||||||
|
DeclareLaunchArgument(
|
||||||
|
'use_sim_time', default_value='true',
|
||||||
|
description='Use simulation (Gazebo) clock if true'),
|
||||||
|
|
||||||
|
DeclareLaunchArgument(
|
||||||
|
'localization', default_value='false',
|
||||||
|
description='Launch in localization mode.'),
|
||||||
|
|
||||||
|
DeclareLaunchArgument(
|
||||||
|
'max_ground_height', default_value='0.05',
|
||||||
|
description='Maximum ground height, everything above is obstacle'),
|
||||||
|
|
||||||
|
OpaqueFunction(function=launch_setup)
|
||||||
|
])
|
||||||
@@ -20,12 +20,13 @@ from launch.actions import DeclareLaunchArgument, SetEnvironmentVariable
|
|||||||
from launch.substitutions import LaunchConfiguration
|
from launch.substitutions import LaunchConfiguration
|
||||||
from launch.conditions import IfCondition, UnlessCondition
|
from launch.conditions import IfCondition, UnlessCondition
|
||||||
from launch_ros.actions import Node
|
from launch_ros.actions import Node
|
||||||
|
from launch.actions import OpaqueFunction
|
||||||
|
|
||||||
|
def launch_setup(context, *args, **kwargs):
|
||||||
def generate_launch_description():
|
|
||||||
|
|
||||||
use_sim_time = LaunchConfiguration('use_sim_time')
|
use_sim_time = LaunchConfiguration('use_sim_time')
|
||||||
localization = LaunchConfiguration('localization')
|
localization = LaunchConfiguration('localization')
|
||||||
|
max_ground_height = LaunchConfiguration('max_ground_height').perform(context)
|
||||||
|
|
||||||
parameters={
|
parameters={
|
||||||
'frame_id':'base_footprint',
|
'frame_id':'base_footprint',
|
||||||
@@ -42,7 +43,7 @@ def generate_launch_description():
|
|||||||
'Grid/RangeMax':'3',
|
'Grid/RangeMax':'3',
|
||||||
'Grid/NormalsSegmentation':'false', # Use passthrough filter to detect obstacles
|
'Grid/NormalsSegmentation':'false', # Use passthrough filter to detect obstacles
|
||||||
'Grid/Sensor':'2', # Use both laser scan and camera for obstacle detection in global map
|
'Grid/Sensor':'2', # Use both laser scan and camera for obstacle detection in global map
|
||||||
'Grid/MaxGroundHeight':'0.05', # All points above 5 cm are obstacles
|
'Grid/MaxGroundHeight': str(max_ground_height), # All points above are obstacles
|
||||||
'Grid/MaxObstacleHeight':'0.4', # All points over 1 meter are ignored
|
'Grid/MaxObstacleHeight':'0.4', # All points over 1 meter are ignored
|
||||||
'Grid/RangeMin':'0.2', # ignore laser scan points on the robot itself
|
'Grid/RangeMin':'0.2', # ignore laser scan points on the robot itself
|
||||||
'Optimizer/GravitySigma':'0' # Disable imu constraints (we are already in 2D)
|
'Optimizer/GravitySigma':'0' # Disable imu constraints (we are already in 2D)
|
||||||
@@ -53,17 +54,7 @@ def generate_launch_description():
|
|||||||
('rgb/camera_info', '/camera/camera_info'),
|
('rgb/camera_info', '/camera/camera_info'),
|
||||||
('depth/image', '/camera/depth/image_raw')]
|
('depth/image', '/camera/depth/image_raw')]
|
||||||
|
|
||||||
return LaunchDescription([
|
return [
|
||||||
|
|
||||||
# Launch arguments
|
|
||||||
DeclareLaunchArgument(
|
|
||||||
'use_sim_time', default_value='false',
|
|
||||||
description='Use simulation (Gazebo) clock if true'),
|
|
||||||
|
|
||||||
DeclareLaunchArgument(
|
|
||||||
'localization', default_value='false',
|
|
||||||
description='Launch in localization mode.'),
|
|
||||||
|
|
||||||
# Nodes to launch
|
# Nodes to launch
|
||||||
Node(
|
Node(
|
||||||
package='rtabmap_sync', executable='rgbd_sync', output='screen',
|
package='rtabmap_sync', executable='rgbd_sync', output='screen',
|
||||||
@@ -109,4 +100,23 @@ def generate_launch_description():
|
|||||||
remappings=[('cloud', '/camera/cloud'),
|
remappings=[('cloud', '/camera/cloud'),
|
||||||
('obstacles', '/camera/obstacles'),
|
('obstacles', '/camera/obstacles'),
|
||||||
('ground', '/camera/ground')]),
|
('ground', '/camera/ground')]),
|
||||||
])
|
]
|
||||||
|
|
||||||
|
def generate_launch_description():
|
||||||
|
return LaunchDescription([
|
||||||
|
|
||||||
|
# Launch arguments
|
||||||
|
DeclareLaunchArgument(
|
||||||
|
'use_sim_time', default_value='true',
|
||||||
|
description='Use simulation (Gazebo) clock if true'),
|
||||||
|
|
||||||
|
DeclareLaunchArgument(
|
||||||
|
'localization', default_value='false',
|
||||||
|
description='Launch in localization mode.'),
|
||||||
|
|
||||||
|
DeclareLaunchArgument(
|
||||||
|
'max_ground_height', default_value='0.05',
|
||||||
|
description='Maximum ground height, everything above is obstacle'),
|
||||||
|
|
||||||
|
OpaqueFunction(function=launch_setup)
|
||||||
|
])
|
||||||
@@ -13,8 +13,30 @@
|
|||||||
# </joint>
|
# </joint>
|
||||||
# 3) Rename <link name="camera_rgb_frame"> to <link name="camera_rgb_optical_frame">
|
# 3) Rename <link name="camera_rgb_frame"> to <link name="camera_rgb_optical_frame">
|
||||||
# 4) Add <link name="camera_rgb_frame"/>
|
# 4) Add <link name="camera_rgb_frame"/>
|
||||||
# 5) Change <sensor name="camera" type="camera"> to <sensor name="camera" type="depth">
|
# 5) Change image width/height from 1920x1080 to 640x480
|
||||||
# 6) Change image width/height from 1920x1080 to 640x480
|
# 6) [ROS2 HUMBLE] Change <sensor name="camera" type="camera"> to <sensor name="camera" type="depth">
|
||||||
|
# 6) [ROS2 JAZZY] Change <gz_frame_id>camera_rgb_frame</gz_frame_id> to <gz_frame_id>camera_rgb_optical_frame</gz_frame_id>
|
||||||
|
# 7) [ROS2 JAZZY] Add the following just after <sensor name="camera" ...> section
|
||||||
|
# <sensor name="depth" type="depth">
|
||||||
|
# <always_on>true</always_on>
|
||||||
|
# <visualize>true</visualize>
|
||||||
|
# <update_rate>30</update_rate>
|
||||||
|
# <topic>camera/depth/image_raw</topic>
|
||||||
|
# <gz_frame_id>camera_rgb_optical_frame</gz_frame_id>
|
||||||
|
# <camera name="intel_realsense_r200_depth">
|
||||||
|
# <camera_info_topic>camera/depth/camera_info</camera_info_topic>
|
||||||
|
# <horizontal_fov>1.02974</horizontal_fov>
|
||||||
|
# <image>
|
||||||
|
# <width>640</width>
|
||||||
|
# <height>480</height>
|
||||||
|
# <format>R8G8B8</format>
|
||||||
|
# </image>
|
||||||
|
# <clip>
|
||||||
|
# <near>0.02</near>
|
||||||
|
# <far>300</far>
|
||||||
|
# </clip>
|
||||||
|
# </camera>
|
||||||
|
# </sensor>
|
||||||
# Example:
|
# Example:
|
||||||
# $ ros2 launch rtabmap_demos turtlebot3_sim_rgbd_demo.launch.py
|
# $ ros2 launch rtabmap_demos turtlebot3_sim_rgbd_demo.launch.py
|
||||||
#
|
#
|
||||||
@@ -28,9 +50,12 @@ from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, Opaq
|
|||||||
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
||||||
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
||||||
from launch_ros.substitutions import FindPackageShare
|
from launch_ros.substitutions import FindPackageShare
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
ROS_DISTRO = os.environ.get('ROS_DISTRO')
|
||||||
|
|
||||||
def launch_setup(context, *args, **kwargs):
|
def launch_setup(context, *args, **kwargs):
|
||||||
if not 'TURTLEBOT3_MODEL' in os.environ:
|
if not 'TURTLEBOT3_MODEL' in os.environ:
|
||||||
os.environ['TURTLEBOT3_MODEL'] = 'waffle'
|
os.environ['TURTLEBOT3_MODEL'] = 'waffle'
|
||||||
@@ -45,9 +70,14 @@ def launch_setup(context, *args, **kwargs):
|
|||||||
|
|
||||||
world = LaunchConfiguration('world').perform(context)
|
world = LaunchConfiguration('world').perform(context)
|
||||||
|
|
||||||
nav2_params_file = PathJoinSubstitution(
|
if ROS_DISTRO == 'humble':
|
||||||
[FindPackageShare('rtabmap_demos'), 'params', 'turtlebot3_rgbd_nav2_params.yaml']
|
nav2_params_file = PathJoinSubstitution(
|
||||||
)
|
[FindPackageShare('rtabmap_demos'), 'params', 'humble', 'turtlebot3_rgbd_nav2_params.yaml']
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
nav2_params_file = PathJoinSubstitution(
|
||||||
|
[FindPackageShare('rtabmap_demos'), 'params', 'turtlebot3_rgbd_nav2_params.yaml']
|
||||||
|
)
|
||||||
|
|
||||||
# Paths
|
# Paths
|
||||||
gazebo_launch = PathJoinSubstitution(
|
gazebo_launch = PathJoinSubstitution(
|
||||||
@@ -60,13 +90,22 @@ def launch_setup(context, *args, **kwargs):
|
|||||||
[pkg_rtabmap_demos, 'launch', 'turtlebot3', 'turtlebot3_rgbd.launch.py'])
|
[pkg_rtabmap_demos, 'launch', 'turtlebot3', 'turtlebot3_rgbd.launch.py'])
|
||||||
|
|
||||||
# Includes
|
# Includes
|
||||||
gazebo = IncludeLaunchDescription(
|
gazebo = [IncludeLaunchDescription(
|
||||||
PythonLaunchDescriptionSource([gazebo_launch]),
|
PythonLaunchDescriptionSource([gazebo_launch]),
|
||||||
launch_arguments=[
|
launch_arguments=[
|
||||||
('x_pose', LaunchConfiguration('x_pose')),
|
('x_pose', LaunchConfiguration('x_pose')),
|
||||||
('y_pose', LaunchConfiguration('y_pose'))
|
('y_pose', LaunchConfiguration('y_pose'))
|
||||||
]
|
]
|
||||||
)
|
)]
|
||||||
|
if ROS_DISTRO != 'humble':
|
||||||
|
start_gazebo_ros_depth_image_bridge_cmd = Node(
|
||||||
|
package='ros_gz_image',
|
||||||
|
executable='image_bridge',
|
||||||
|
arguments=['/camera/depth/image_raw'],
|
||||||
|
output='screen',
|
||||||
|
)
|
||||||
|
gazebo.append(start_gazebo_ros_depth_image_bridge_cmd)
|
||||||
|
|
||||||
nav2 = IncludeLaunchDescription(
|
nav2 = IncludeLaunchDescription(
|
||||||
PythonLaunchDescriptionSource([nav2_launch]),
|
PythonLaunchDescriptionSource([nav2_launch]),
|
||||||
launch_arguments=[
|
launch_arguments=[
|
||||||
@@ -77,20 +116,25 @@ def launch_setup(context, *args, **kwargs):
|
|||||||
rviz = IncludeLaunchDescription(
|
rviz = IncludeLaunchDescription(
|
||||||
PythonLaunchDescriptionSource([rviz_launch])
|
PythonLaunchDescriptionSource([rviz_launch])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
max_ground_height = '0.05'
|
||||||
|
if ROS_DISTRO == 'jazzy':
|
||||||
|
max_ground_height = '0.02' # for the demo, on new gazebo the depth is more accurate
|
||||||
|
|
||||||
rtabmap = IncludeLaunchDescription(
|
rtabmap = IncludeLaunchDescription(
|
||||||
PythonLaunchDescriptionSource([rtabmap_launch]),
|
PythonLaunchDescriptionSource([rtabmap_launch]),
|
||||||
launch_arguments=[
|
launch_arguments=[
|
||||||
('localization', LaunchConfiguration('localization')),
|
('localization', LaunchConfiguration('localization')),
|
||||||
('use_sim_time', 'true')
|
('use_sim_time', 'true'),
|
||||||
|
('max_ground_height', max_ground_height)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
return [
|
return [
|
||||||
# Nodes to launch
|
# Nodes to launch
|
||||||
nav2,
|
nav2,
|
||||||
rviz,
|
rviz,
|
||||||
rtabmap,
|
rtabmap
|
||||||
gazebo
|
] + gazebo
|
||||||
]
|
|
||||||
|
|
||||||
def generate_launch_description():
|
def generate_launch_description():
|
||||||
return LaunchDescription([
|
return LaunchDescription([
|
||||||
|
|||||||
@@ -13,8 +13,30 @@
|
|||||||
# </joint>
|
# </joint>
|
||||||
# 3) Rename <link name="camera_rgb_frame"> to <link name="camera_rgb_optical_frame">
|
# 3) Rename <link name="camera_rgb_frame"> to <link name="camera_rgb_optical_frame">
|
||||||
# 4) Add <link name="camera_rgb_frame"/>
|
# 4) Add <link name="camera_rgb_frame"/>
|
||||||
# 5) Change <sensor name="camera" type="camera"> to <sensor name="camera" type="depth">
|
# 5) Change image width/height from 1920x1080 to 640x480
|
||||||
# 6) Change image width/height from 1920x1080 to 640x480
|
# 6) [ROS2 HUMBLE] Change <sensor name="camera" type="camera"> to <sensor name="camera" type="depth">
|
||||||
|
# 6) [ROS2 JAZZY] Change <gz_frame_id>camera_rgb_frame</gz_frame_id> to <gz_frame_id>camera_rgb_optical_frame</gz_frame_id>
|
||||||
|
# 7) [ROS2 JAZZY] Add the following just after <sensor name="camera" ...> section (under same link)
|
||||||
|
# <sensor name="depth" type="depth">
|
||||||
|
# <always_on>true</always_on>
|
||||||
|
# <visualize>true</visualize>
|
||||||
|
# <update_rate>30</update_rate>
|
||||||
|
# <topic>camera/depth/image_raw</topic>
|
||||||
|
# <gz_frame_id>camera_rgb_optical_frame</gz_frame_id>
|
||||||
|
# <camera name="intel_realsense_r200_depth">
|
||||||
|
# <camera_info_topic>camera/depth/camera_info</camera_info_topic>
|
||||||
|
# <horizontal_fov>1.02974</horizontal_fov>
|
||||||
|
# <image>
|
||||||
|
# <width>640</width>
|
||||||
|
# <height>480</height>
|
||||||
|
# <format>R8G8B8</format>
|
||||||
|
# </image>
|
||||||
|
# <clip>
|
||||||
|
# <near>0.02</near>
|
||||||
|
# <far>300</far>
|
||||||
|
# </clip>
|
||||||
|
# </camera>
|
||||||
|
# </sensor>
|
||||||
# Example:
|
# Example:
|
||||||
# $ ros2 launch rtabmap_demos turtlebot3_sim_rgbd_fake_scan_demo.launch.py
|
# $ ros2 launch rtabmap_demos turtlebot3_sim_rgbd_fake_scan_demo.launch.py
|
||||||
#
|
#
|
||||||
@@ -28,9 +50,12 @@ from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, Opaq
|
|||||||
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
||||||
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
||||||
from launch_ros.substitutions import FindPackageShare
|
from launch_ros.substitutions import FindPackageShare
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
ROS_DISTRO = os.environ.get('ROS_DISTRO')
|
||||||
|
|
||||||
def launch_setup(context, *args, **kwargs):
|
def launch_setup(context, *args, **kwargs):
|
||||||
if not 'TURTLEBOT3_MODEL' in os.environ:
|
if not 'TURTLEBOT3_MODEL' in os.environ:
|
||||||
os.environ['TURTLEBOT3_MODEL'] = 'waffle'
|
os.environ['TURTLEBOT3_MODEL'] = 'waffle'
|
||||||
@@ -45,9 +70,14 @@ def launch_setup(context, *args, **kwargs):
|
|||||||
|
|
||||||
world = LaunchConfiguration('world').perform(context)
|
world = LaunchConfiguration('world').perform(context)
|
||||||
|
|
||||||
nav2_params_file = PathJoinSubstitution(
|
if ROS_DISTRO == 'humble':
|
||||||
[FindPackageShare('rtabmap_demos'), 'params', 'turtlebot3_rgbd_nav2_params.yaml']
|
nav2_params_file = PathJoinSubstitution(
|
||||||
)
|
[FindPackageShare('rtabmap_demos'), 'params', 'humble', 'turtlebot3_rgbd_nav2_params.yaml']
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
nav2_params_file = PathJoinSubstitution(
|
||||||
|
[FindPackageShare('rtabmap_demos'), 'params', 'turtlebot3_rgbd_nav2_params.yaml']
|
||||||
|
)
|
||||||
|
|
||||||
# Paths
|
# Paths
|
||||||
gazebo_launch = PathJoinSubstitution(
|
gazebo_launch = PathJoinSubstitution(
|
||||||
@@ -60,13 +90,22 @@ def launch_setup(context, *args, **kwargs):
|
|||||||
[pkg_rtabmap_demos, 'launch', 'turtlebot3', 'turtlebot3_rgbd_fake_scan.launch.py'])
|
[pkg_rtabmap_demos, 'launch', 'turtlebot3', 'turtlebot3_rgbd_fake_scan.launch.py'])
|
||||||
|
|
||||||
# Includes
|
# Includes
|
||||||
gazebo = IncludeLaunchDescription(
|
gazebo = [IncludeLaunchDescription(
|
||||||
PythonLaunchDescriptionSource([gazebo_launch]),
|
PythonLaunchDescriptionSource([gazebo_launch]),
|
||||||
launch_arguments=[
|
launch_arguments=[
|
||||||
('x_pose', LaunchConfiguration('x_pose')),
|
('x_pose', LaunchConfiguration('x_pose')),
|
||||||
('y_pose', LaunchConfiguration('y_pose'))
|
('y_pose', LaunchConfiguration('y_pose'))
|
||||||
]
|
]
|
||||||
)
|
)]
|
||||||
|
if ROS_DISTRO != 'humble':
|
||||||
|
start_gazebo_ros_depth_image_bridge_cmd = Node(
|
||||||
|
package='ros_gz_image',
|
||||||
|
executable='image_bridge',
|
||||||
|
arguments=['/camera/depth/image_raw'],
|
||||||
|
output='screen',
|
||||||
|
)
|
||||||
|
gazebo.append(start_gazebo_ros_depth_image_bridge_cmd)
|
||||||
|
|
||||||
nav2 = IncludeLaunchDescription(
|
nav2 = IncludeLaunchDescription(
|
||||||
PythonLaunchDescriptionSource([nav2_launch]),
|
PythonLaunchDescriptionSource([nav2_launch]),
|
||||||
launch_arguments=[
|
launch_arguments=[
|
||||||
@@ -77,6 +116,7 @@ def launch_setup(context, *args, **kwargs):
|
|||||||
rviz = IncludeLaunchDescription(
|
rviz = IncludeLaunchDescription(
|
||||||
PythonLaunchDescriptionSource([rviz_launch])
|
PythonLaunchDescriptionSource([rviz_launch])
|
||||||
)
|
)
|
||||||
|
|
||||||
rtabmap = IncludeLaunchDescription(
|
rtabmap = IncludeLaunchDescription(
|
||||||
PythonLaunchDescriptionSource([rtabmap_launch]),
|
PythonLaunchDescriptionSource([rtabmap_launch]),
|
||||||
launch_arguments=[
|
launch_arguments=[
|
||||||
@@ -88,9 +128,8 @@ def launch_setup(context, *args, **kwargs):
|
|||||||
# Nodes to launch
|
# Nodes to launch
|
||||||
nav2,
|
nav2,
|
||||||
rviz,
|
rviz,
|
||||||
rtabmap,
|
rtabmap
|
||||||
gazebo
|
] + gazebo
|
||||||
]
|
|
||||||
|
|
||||||
def generate_launch_description():
|
def generate_launch_description():
|
||||||
return LaunchDescription([
|
return LaunchDescription([
|
||||||
|
|||||||
@@ -13,8 +13,30 @@
|
|||||||
# </joint>
|
# </joint>
|
||||||
# 3) Rename <link name="camera_rgb_frame"> to <link name="camera_rgb_optical_frame">
|
# 3) Rename <link name="camera_rgb_frame"> to <link name="camera_rgb_optical_frame">
|
||||||
# 4) Add <link name="camera_rgb_frame"/>
|
# 4) Add <link name="camera_rgb_frame"/>
|
||||||
# 5) Change <sensor name="camera" type="camera"> to <sensor name="camera" type="depth">
|
# 5) Change image width/height from 1920x1080 to 640x480
|
||||||
# 6) Change image width/height from 1920x1080 to 640x480
|
# 6) [ROS2 HUMBLE] Change <sensor name="camera" type="camera"> to <sensor name="camera" type="depth">
|
||||||
|
# 6) [ROS2 JAZZY] Change <gz_frame_id>camera_rgb_frame</gz_frame_id> to <gz_frame_id>camera_rgb_optical_frame</gz_frame_id>
|
||||||
|
# 7) [ROS2 JAZZY] Add the following just after <sensor name="camera" ...> section (under same link)
|
||||||
|
# <sensor name="depth" type="depth">
|
||||||
|
# <always_on>true</always_on>
|
||||||
|
# <visualize>true</visualize>
|
||||||
|
# <update_rate>30</update_rate>
|
||||||
|
# <topic>camera/depth/image_raw</topic>
|
||||||
|
# <gz_frame_id>camera_rgb_optical_frame</gz_frame_id>
|
||||||
|
# <camera name="intel_realsense_r200_depth">
|
||||||
|
# <camera_info_topic>camera/depth/camera_info</camera_info_topic>
|
||||||
|
# <horizontal_fov>1.02974</horizontal_fov>
|
||||||
|
# <image>
|
||||||
|
# <width>640</width>
|
||||||
|
# <height>480</height>
|
||||||
|
# <format>R8G8B8</format>
|
||||||
|
# </image>
|
||||||
|
# <clip>
|
||||||
|
# <near>0.02</near>
|
||||||
|
# <far>300</far>
|
||||||
|
# </clip>
|
||||||
|
# </camera>
|
||||||
|
# </sensor>
|
||||||
# 7) Note that we can increase min scan range from 0.12 to 0.2 to avoid having scans
|
# 7) Note that we can increase min scan range from 0.12 to 0.2 to avoid having scans
|
||||||
# hitting the robot itself
|
# hitting the robot itself
|
||||||
# Example:
|
# Example:
|
||||||
@@ -30,9 +52,12 @@ from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, Opaq
|
|||||||
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
||||||
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
||||||
from launch_ros.substitutions import FindPackageShare
|
from launch_ros.substitutions import FindPackageShare
|
||||||
|
from launch_ros.actions import Node
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
ROS_DISTRO = os.environ.get('ROS_DISTRO')
|
||||||
|
|
||||||
def launch_setup(context, *args, **kwargs):
|
def launch_setup(context, *args, **kwargs):
|
||||||
if not 'TURTLEBOT3_MODEL' in os.environ:
|
if not 'TURTLEBOT3_MODEL' in os.environ:
|
||||||
os.environ['TURTLEBOT3_MODEL'] = 'waffle'
|
os.environ['TURTLEBOT3_MODEL'] = 'waffle'
|
||||||
@@ -47,9 +72,14 @@ def launch_setup(context, *args, **kwargs):
|
|||||||
|
|
||||||
world = LaunchConfiguration('world').perform(context)
|
world = LaunchConfiguration('world').perform(context)
|
||||||
|
|
||||||
nav2_params_file = PathJoinSubstitution(
|
if ROS_DISTRO == 'humble':
|
||||||
[FindPackageShare('rtabmap_demos'), 'params', 'turtlebot3_rgbd_scan_nav2_params.yaml']
|
nav2_params_file = PathJoinSubstitution(
|
||||||
)
|
[FindPackageShare('rtabmap_demos'), 'params', 'humble', 'turtlebot3_rgbd_scan_nav2_params.yaml']
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
nav2_params_file = PathJoinSubstitution(
|
||||||
|
[FindPackageShare('rtabmap_demos'), 'params', 'turtlebot3_rgbd_scan_nav2_params.yaml']
|
||||||
|
)
|
||||||
|
|
||||||
# Paths
|
# Paths
|
||||||
gazebo_launch = PathJoinSubstitution(
|
gazebo_launch = PathJoinSubstitution(
|
||||||
@@ -62,13 +92,22 @@ def launch_setup(context, *args, **kwargs):
|
|||||||
[pkg_rtabmap_demos, 'launch', 'turtlebot3', 'turtlebot3_rgbd_scan.launch.py'])
|
[pkg_rtabmap_demos, 'launch', 'turtlebot3', 'turtlebot3_rgbd_scan.launch.py'])
|
||||||
|
|
||||||
# Includes
|
# Includes
|
||||||
gazebo = IncludeLaunchDescription(
|
gazebo = [IncludeLaunchDescription(
|
||||||
PythonLaunchDescriptionSource([gazebo_launch]),
|
PythonLaunchDescriptionSource([gazebo_launch]),
|
||||||
launch_arguments=[
|
launch_arguments=[
|
||||||
('x_pose', LaunchConfiguration('x_pose')),
|
('x_pose', LaunchConfiguration('x_pose')),
|
||||||
('y_pose', LaunchConfiguration('y_pose'))
|
('y_pose', LaunchConfiguration('y_pose'))
|
||||||
]
|
]
|
||||||
)
|
)]
|
||||||
|
if ROS_DISTRO != 'humble':
|
||||||
|
start_gazebo_ros_depth_image_bridge_cmd = Node(
|
||||||
|
package='ros_gz_image',
|
||||||
|
executable='image_bridge',
|
||||||
|
arguments=['/camera/depth/image_raw'],
|
||||||
|
output='screen',
|
||||||
|
)
|
||||||
|
gazebo.append(start_gazebo_ros_depth_image_bridge_cmd)
|
||||||
|
|
||||||
nav2 = IncludeLaunchDescription(
|
nav2 = IncludeLaunchDescription(
|
||||||
PythonLaunchDescriptionSource([nav2_launch]),
|
PythonLaunchDescriptionSource([nav2_launch]),
|
||||||
launch_arguments=[
|
launch_arguments=[
|
||||||
@@ -79,20 +118,25 @@ def launch_setup(context, *args, **kwargs):
|
|||||||
rviz = IncludeLaunchDescription(
|
rviz = IncludeLaunchDescription(
|
||||||
PythonLaunchDescriptionSource([rviz_launch])
|
PythonLaunchDescriptionSource([rviz_launch])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
max_ground_height = '0.05'
|
||||||
|
if ROS_DISTRO == 'jazzy':
|
||||||
|
max_ground_height = '0.02' # for the demo, on new gazebo the depth is more accurate
|
||||||
|
|
||||||
rtabmap = IncludeLaunchDescription(
|
rtabmap = IncludeLaunchDescription(
|
||||||
PythonLaunchDescriptionSource([rtabmap_launch]),
|
PythonLaunchDescriptionSource([rtabmap_launch]),
|
||||||
launch_arguments=[
|
launch_arguments=[
|
||||||
('localization', LaunchConfiguration('localization')),
|
('localization', LaunchConfiguration('localization')),
|
||||||
('use_sim_time', 'true')
|
('use_sim_time', 'true'),
|
||||||
|
('max_ground_height', max_ground_height)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
return [
|
return [
|
||||||
# Nodes to launch
|
# Nodes to launch
|
||||||
nav2,
|
nav2,
|
||||||
rviz,
|
rviz,
|
||||||
rtabmap,
|
rtabmap
|
||||||
gazebo
|
] + gazebo
|
||||||
]
|
|
||||||
|
|
||||||
def generate_launch_description():
|
def generate_launch_description():
|
||||||
return LaunchDescription([
|
return LaunchDescription([
|
||||||
|
|||||||
@@ -14,18 +14,22 @@
|
|||||||
from ament_index_python.packages import get_package_share_directory
|
from ament_index_python.packages import get_package_share_directory
|
||||||
|
|
||||||
from launch import LaunchDescription
|
from launch import LaunchDescription
|
||||||
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, OpaqueFunction
|
from launch.actions import AppendEnvironmentVariable, DeclareLaunchArgument, IncludeLaunchDescription, OpaqueFunction
|
||||||
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
||||||
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
||||||
from launch_ros.substitutions import FindPackageShare
|
from launch_ros.substitutions import FindPackageShare
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
ROS_DISTRO = os.environ.get('ROS_DISTRO')
|
||||||
|
|
||||||
def launch_setup(context, *args, **kwargs):
|
def launch_setup(context, *args, **kwargs):
|
||||||
if not 'TURTLEBOT3_MODEL' in os.environ:
|
if not 'TURTLEBOT3_MODEL' in os.environ:
|
||||||
os.environ['TURTLEBOT3_MODEL'] = 'waffle'
|
os.environ['TURTLEBOT3_MODEL'] = 'waffle'
|
||||||
|
|
||||||
# Directories
|
# Directories
|
||||||
|
pkg_turtlebot3_gazebo = get_package_share_directory(
|
||||||
|
'turtlebot3_gazebo')
|
||||||
pkg_nav2_bringup = get_package_share_directory(
|
pkg_nav2_bringup = get_package_share_directory(
|
||||||
'nav2_bringup')
|
'nav2_bringup')
|
||||||
pkg_rtabmap_demos = get_package_share_directory(
|
pkg_rtabmap_demos = get_package_share_directory(
|
||||||
@@ -37,14 +41,26 @@ def launch_setup(context, *args, **kwargs):
|
|||||||
icp_odometry = icp_odometry == 'True' or icp_odometry == 'true'
|
icp_odometry = icp_odometry == 'True' or icp_odometry == 'true'
|
||||||
if icp_odometry:
|
if icp_odometry:
|
||||||
# modified nav2 params to use icp_odom instead odom frame
|
# modified nav2 params to use icp_odom instead odom frame
|
||||||
nav2_params_file = PathJoinSubstitution(
|
if ROS_DISTRO == 'humble':
|
||||||
[FindPackageShare('rtabmap_demos'), 'params', 'turtlebot3_scan_nav2_params.yaml']
|
nav2_params_file = PathJoinSubstitution(
|
||||||
)
|
[FindPackageShare('rtabmap_demos'), 'params', 'humble', 'turtlebot3_scan_nav2_params.yaml']
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
nav2_params_file = PathJoinSubstitution(
|
||||||
|
[FindPackageShare('rtabmap_demos'), 'params', 'turtlebot3_scan_nav2_params.yaml']
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
# original nav2 params
|
if ROS_DISTRO == 'humble':
|
||||||
nav2_params_file = PathJoinSubstitution(
|
# original nav2 params
|
||||||
[FindPackageShare('nav2_bringup'), 'params', 'nav2_params.yaml']
|
nav2_params_file = PathJoinSubstitution(
|
||||||
)
|
[FindPackageShare('nav2_bringup'), 'params', 'nav2_params.yaml']
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# original nav2 params but with "enable_stamped_cmd_vel: True"
|
||||||
|
nav2_params_file = PathJoinSubstitution(
|
||||||
|
[FindPackageShare('rtabmap_demos'), 'params', 'turtlebot3_nav2_params.yaml']
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# Paths
|
# Paths
|
||||||
nav2_launch = PathJoinSubstitution(
|
nav2_launch = PathJoinSubstitution(
|
||||||
@@ -53,56 +69,6 @@ def launch_setup(context, *args, **kwargs):
|
|||||||
[pkg_nav2_bringup, 'launch', 'rviz_launch.py'])
|
[pkg_nav2_bringup, 'launch', 'rviz_launch.py'])
|
||||||
rtabmap_launch = PathJoinSubstitution(
|
rtabmap_launch = PathJoinSubstitution(
|
||||||
[pkg_rtabmap_demos, 'launch', 'turtlebot3', 'turtlebot3_scan.launch.py'])
|
[pkg_rtabmap_demos, 'launch', 'turtlebot3', 'turtlebot3_scan.launch.py'])
|
||||||
|
|
||||||
# To use ICP odometry, we should increase clock rate of gazebo, we copied content of
|
|
||||||
# turtlebot3_gazebo/launch/turtlebot3_world.launch here
|
|
||||||
launch_file_dir = os.path.join(get_package_share_directory('turtlebot3_gazebo'), 'launch')
|
|
||||||
pkg_gazebo_ros = get_package_share_directory('gazebo_ros')
|
|
||||||
|
|
||||||
world = os.path.join(
|
|
||||||
get_package_share_directory('turtlebot3_gazebo'),
|
|
||||||
'worlds',
|
|
||||||
f'turtlebot3_{world_name}.world'
|
|
||||||
)
|
|
||||||
|
|
||||||
import tempfile
|
|
||||||
with tempfile.NamedTemporaryFile(mode='w+t', delete=False) as clock_override_file:
|
|
||||||
clock_override_file.write("---\n"+
|
|
||||||
"gazebo:\n"+
|
|
||||||
" ros__parameters:\n"+
|
|
||||||
" publish_rate: 100.0")
|
|
||||||
|
|
||||||
gzserver_cmd = IncludeLaunchDescription(
|
|
||||||
PythonLaunchDescriptionSource(
|
|
||||||
os.path.join(pkg_gazebo_ros, 'launch', 'gzserver.launch.py')
|
|
||||||
),
|
|
||||||
launch_arguments={
|
|
||||||
'world': world,
|
|
||||||
'params_file': clock_override_file.name}.items()
|
|
||||||
)
|
|
||||||
|
|
||||||
gzclient_cmd = IncludeLaunchDescription(
|
|
||||||
PythonLaunchDescriptionSource(
|
|
||||||
os.path.join(pkg_gazebo_ros, 'launch', 'gzclient.launch.py')
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
robot_state_publisher_cmd = IncludeLaunchDescription(
|
|
||||||
PythonLaunchDescriptionSource(
|
|
||||||
os.path.join(launch_file_dir, 'robot_state_publisher.launch.py')
|
|
||||||
),
|
|
||||||
launch_arguments={'use_sim_time': 'true'}.items()
|
|
||||||
)
|
|
||||||
|
|
||||||
spawn_turtlebot_cmd = IncludeLaunchDescription(
|
|
||||||
PythonLaunchDescriptionSource(
|
|
||||||
os.path.join(launch_file_dir, 'spawn_turtlebot3.launch.py')
|
|
||||||
),
|
|
||||||
launch_arguments={
|
|
||||||
'x_pose': LaunchConfiguration('x_pose'),
|
|
||||||
'y_pose': LaunchConfiguration('y_pose')
|
|
||||||
}.items()
|
|
||||||
)
|
|
||||||
|
|
||||||
nav2 = IncludeLaunchDescription(
|
nav2 = IncludeLaunchDescription(
|
||||||
PythonLaunchDescriptionSource([nav2_launch]),
|
PythonLaunchDescriptionSource([nav2_launch]),
|
||||||
@@ -121,16 +87,83 @@ def launch_setup(context, *args, **kwargs):
|
|||||||
('use_sim_time', 'true')
|
('use_sim_time', 'true')
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# To use ICP odometry, we should increase clock rate of gazebo (humble), we copied content of
|
||||||
|
# turtlebot3_gazebo/launch/turtlebot3_world.launch here.
|
||||||
|
turtlebot3_nodes = []
|
||||||
|
if ROS_DISTRO == 'humble':
|
||||||
|
pkg_gazebo_ros = get_package_share_directory('gazebo_ros')
|
||||||
|
|
||||||
|
import tempfile
|
||||||
|
with tempfile.NamedTemporaryFile(mode='w+t', delete=False) as clock_override_file:
|
||||||
|
clock_override_file.write("---\n"+
|
||||||
|
"gazebo:\n"+
|
||||||
|
" ros__parameters:\n"+
|
||||||
|
" publish_rate: 100.0")
|
||||||
|
|
||||||
|
world = os.path.join(
|
||||||
|
pkg_turtlebot3_gazebo,
|
||||||
|
'worlds',
|
||||||
|
f'turtlebot3_{world_name}.world'
|
||||||
|
)
|
||||||
|
|
||||||
|
gzserver_cmd = IncludeLaunchDescription(
|
||||||
|
PythonLaunchDescriptionSource(
|
||||||
|
os.path.join(pkg_gazebo_ros, 'launch', 'gzserver.launch.py')
|
||||||
|
),
|
||||||
|
launch_arguments={
|
||||||
|
'world': world,
|
||||||
|
'params_file': clock_override_file.name}.items()
|
||||||
|
)
|
||||||
|
|
||||||
|
gzclient_cmd = IncludeLaunchDescription(
|
||||||
|
PythonLaunchDescriptionSource(
|
||||||
|
os.path.join(pkg_gazebo_ros, 'launch', 'gzclient.launch.py')
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
robot_state_publisher_cmd = IncludeLaunchDescription(
|
||||||
|
PythonLaunchDescriptionSource(
|
||||||
|
os.path.join(pkg_turtlebot3_gazebo, 'launch', 'robot_state_publisher.launch.py')
|
||||||
|
),
|
||||||
|
launch_arguments={'use_sim_time': 'true'}.items()
|
||||||
|
)
|
||||||
|
spawn_turtlebot_cmd = IncludeLaunchDescription(
|
||||||
|
PythonLaunchDescriptionSource(
|
||||||
|
os.path.join(pkg_turtlebot3_gazebo, 'launch', 'spawn_turtlebot3.launch.py')
|
||||||
|
),
|
||||||
|
launch_arguments={
|
||||||
|
'x_pose': LaunchConfiguration('x_pose'),
|
||||||
|
'y_pose': LaunchConfiguration('y_pose')
|
||||||
|
}.items()
|
||||||
|
)
|
||||||
|
|
||||||
|
set_env_vars_resources = AppendEnvironmentVariable(
|
||||||
|
'GZ_SIM_RESOURCE_PATH',
|
||||||
|
os.path.join(pkg_turtlebot3_gazebo, 'models'))
|
||||||
|
turtlebot3_nodes = [
|
||||||
|
gzserver_cmd,
|
||||||
|
gzclient_cmd,
|
||||||
|
robot_state_publisher_cmd,
|
||||||
|
spawn_turtlebot_cmd,
|
||||||
|
set_env_vars_resources
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
gazebo_launch = PathJoinSubstitution([pkg_turtlebot3_gazebo, 'launch', f'turtlebot3_{world_name}.launch.py'])
|
||||||
|
gazebo = IncludeLaunchDescription(
|
||||||
|
PythonLaunchDescriptionSource([gazebo_launch]),
|
||||||
|
launch_arguments=[
|
||||||
|
('x_pose', LaunchConfiguration('x_pose')),
|
||||||
|
('y_pose', LaunchConfiguration('y_pose'))
|
||||||
|
]
|
||||||
|
)
|
||||||
|
turtlebot3_nodes = [gazebo]
|
||||||
|
|
||||||
return [
|
return [
|
||||||
# Nodes to launch
|
# Nodes to launch
|
||||||
nav2,
|
nav2,
|
||||||
rviz,
|
rviz,
|
||||||
rtabmap,
|
rtabmap] + turtlebot3_nodes
|
||||||
gzserver_cmd,
|
|
||||||
gzclient_cmd,
|
|
||||||
robot_state_publisher_cmd,
|
|
||||||
spawn_turtlebot_cmd
|
|
||||||
]
|
|
||||||
|
|
||||||
def generate_launch_description():
|
def generate_launch_description():
|
||||||
return LaunchDescription([
|
return LaunchDescription([
|
||||||
|
|||||||
@@ -0,0 +1,287 @@
|
|||||||
|
# rtabmap_demos: We add segmented ground and obstacles to voxel_layer of the local costmap and removed scan source.
|
||||||
|
bt_navigator:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
global_frame: map
|
||||||
|
robot_base_frame: base_link
|
||||||
|
odom_topic: /odom
|
||||||
|
bt_loop_duration: 10
|
||||||
|
default_server_timeout: 20
|
||||||
|
wait_for_service_timeout: 1000
|
||||||
|
# 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults:
|
||||||
|
# nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml
|
||||||
|
# nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml
|
||||||
|
# They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2.
|
||||||
|
plugin_lib_names:
|
||||||
|
- nav2_compute_path_to_pose_action_bt_node
|
||||||
|
- nav2_compute_path_through_poses_action_bt_node
|
||||||
|
- nav2_smooth_path_action_bt_node
|
||||||
|
- nav2_follow_path_action_bt_node
|
||||||
|
- nav2_spin_action_bt_node
|
||||||
|
- nav2_wait_action_bt_node
|
||||||
|
- nav2_assisted_teleop_action_bt_node
|
||||||
|
- nav2_back_up_action_bt_node
|
||||||
|
- nav2_drive_on_heading_bt_node
|
||||||
|
- nav2_clear_costmap_service_bt_node
|
||||||
|
- nav2_is_stuck_condition_bt_node
|
||||||
|
- nav2_goal_reached_condition_bt_node
|
||||||
|
- nav2_goal_updated_condition_bt_node
|
||||||
|
- nav2_globally_updated_goal_condition_bt_node
|
||||||
|
- nav2_is_path_valid_condition_bt_node
|
||||||
|
- nav2_initial_pose_received_condition_bt_node
|
||||||
|
- nav2_reinitialize_global_localization_service_bt_node
|
||||||
|
- nav2_rate_controller_bt_node
|
||||||
|
- nav2_distance_controller_bt_node
|
||||||
|
- nav2_speed_controller_bt_node
|
||||||
|
- nav2_truncate_path_action_bt_node
|
||||||
|
- nav2_truncate_path_local_action_bt_node
|
||||||
|
- nav2_goal_updater_node_bt_node
|
||||||
|
- nav2_recovery_node_bt_node
|
||||||
|
- nav2_pipeline_sequence_bt_node
|
||||||
|
- nav2_round_robin_node_bt_node
|
||||||
|
- nav2_transform_available_condition_bt_node
|
||||||
|
- nav2_time_expired_condition_bt_node
|
||||||
|
- nav2_path_expiring_timer_condition
|
||||||
|
- nav2_distance_traveled_condition_bt_node
|
||||||
|
- nav2_single_trigger_bt_node
|
||||||
|
- nav2_goal_updated_controller_bt_node
|
||||||
|
- nav2_is_battery_low_condition_bt_node
|
||||||
|
- nav2_navigate_through_poses_action_bt_node
|
||||||
|
- nav2_navigate_to_pose_action_bt_node
|
||||||
|
- nav2_remove_passed_goals_action_bt_node
|
||||||
|
- nav2_planner_selector_bt_node
|
||||||
|
- nav2_controller_selector_bt_node
|
||||||
|
- nav2_goal_checker_selector_bt_node
|
||||||
|
- nav2_controller_cancel_bt_node
|
||||||
|
- nav2_path_longer_on_approach_bt_node
|
||||||
|
- nav2_wait_cancel_bt_node
|
||||||
|
- nav2_spin_cancel_bt_node
|
||||||
|
- nav2_back_up_cancel_bt_node
|
||||||
|
- nav2_assisted_teleop_cancel_bt_node
|
||||||
|
- nav2_drive_on_heading_cancel_bt_node
|
||||||
|
- nav2_is_battery_charging_condition_bt_node
|
||||||
|
|
||||||
|
bt_navigator_navigate_through_poses_rclcpp_node:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
|
||||||
|
bt_navigator_navigate_to_pose_rclcpp_node:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
|
||||||
|
controller_server:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
controller_frequency: 20.0
|
||||||
|
min_x_velocity_threshold: 0.001
|
||||||
|
min_y_velocity_threshold: 0.5
|
||||||
|
min_theta_velocity_threshold: 0.001
|
||||||
|
failure_tolerance: 0.3
|
||||||
|
progress_checker_plugin: "progress_checker"
|
||||||
|
goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"
|
||||||
|
controller_plugins: ["FollowPath"]
|
||||||
|
|
||||||
|
# Progress checker parameters
|
||||||
|
progress_checker:
|
||||||
|
plugin: "nav2_controller::SimpleProgressChecker"
|
||||||
|
required_movement_radius: 0.5
|
||||||
|
movement_time_allowance: 10.0
|
||||||
|
# Goal checker parameters
|
||||||
|
#precise_goal_checker:
|
||||||
|
# plugin: "nav2_controller::SimpleGoalChecker"
|
||||||
|
# xy_goal_tolerance: 0.25
|
||||||
|
# yaw_goal_tolerance: 0.25
|
||||||
|
# stateful: True
|
||||||
|
general_goal_checker:
|
||||||
|
stateful: True
|
||||||
|
plugin: "nav2_controller::SimpleGoalChecker"
|
||||||
|
xy_goal_tolerance: 0.25
|
||||||
|
yaw_goal_tolerance: 0.25
|
||||||
|
# DWB parameters
|
||||||
|
FollowPath:
|
||||||
|
plugin: "dwb_core::DWBLocalPlanner"
|
||||||
|
debug_trajectory_details: True
|
||||||
|
min_vel_x: 0.0
|
||||||
|
min_vel_y: 0.0
|
||||||
|
max_vel_x: 0.26
|
||||||
|
max_vel_y: 0.0
|
||||||
|
max_vel_theta: 1.0
|
||||||
|
min_speed_xy: 0.0
|
||||||
|
max_speed_xy: 0.26
|
||||||
|
min_speed_theta: 0.0
|
||||||
|
# Add high threshold velocity for turtlebot 3 issue.
|
||||||
|
# https://github.com/ROBOTIS-GIT/turtlebot3_simulations/issues/75
|
||||||
|
acc_lim_x: 2.5
|
||||||
|
acc_lim_y: 0.0
|
||||||
|
acc_lim_theta: 3.2
|
||||||
|
decel_lim_x: -2.5
|
||||||
|
decel_lim_y: 0.0
|
||||||
|
decel_lim_theta: -3.2
|
||||||
|
vx_samples: 20
|
||||||
|
vy_samples: 5
|
||||||
|
vtheta_samples: 20
|
||||||
|
sim_time: 1.7
|
||||||
|
linear_granularity: 0.05
|
||||||
|
angular_granularity: 0.025
|
||||||
|
transform_tolerance: 0.2
|
||||||
|
xy_goal_tolerance: 0.25
|
||||||
|
trans_stopped_velocity: 0.25
|
||||||
|
short_circuit_trajectory_evaluation: True
|
||||||
|
stateful: True
|
||||||
|
critics: ["RotateToGoal", "Oscillation", "BaseObstacle", "GoalAlign", "PathAlign", "PathDist", "GoalDist"]
|
||||||
|
BaseObstacle.scale: 0.02
|
||||||
|
PathAlign.scale: 32.0
|
||||||
|
PathAlign.forward_point_distance: 0.1
|
||||||
|
GoalAlign.scale: 24.0
|
||||||
|
GoalAlign.forward_point_distance: 0.1
|
||||||
|
PathDist.scale: 32.0
|
||||||
|
GoalDist.scale: 24.0
|
||||||
|
RotateToGoal.scale: 32.0
|
||||||
|
RotateToGoal.slowing_factor: 5.0
|
||||||
|
RotateToGoal.lookahead_time: -1.0
|
||||||
|
|
||||||
|
local_costmap:
|
||||||
|
local_costmap:
|
||||||
|
ros__parameters:
|
||||||
|
update_frequency: 5.0
|
||||||
|
publish_frequency: 2.0
|
||||||
|
global_frame: odom
|
||||||
|
robot_base_frame: base_link
|
||||||
|
use_sim_time: True
|
||||||
|
rolling_window: true
|
||||||
|
width: 3
|
||||||
|
height: 3
|
||||||
|
resolution: 0.05
|
||||||
|
robot_radius: 0.22
|
||||||
|
plugins: ["voxel_layer", "inflation_layer"]
|
||||||
|
inflation_layer:
|
||||||
|
plugin: "nav2_costmap_2d::InflationLayer"
|
||||||
|
cost_scaling_factor: 3.0
|
||||||
|
inflation_radius: 0.55
|
||||||
|
voxel_layer:
|
||||||
|
plugin: "nav2_costmap_2d::VoxelLayer"
|
||||||
|
enabled: True
|
||||||
|
publish_voxel_map: True
|
||||||
|
origin_z: 0.0
|
||||||
|
z_resolution: 0.05
|
||||||
|
z_voxels: 16
|
||||||
|
max_obstacle_height: 2.0
|
||||||
|
mark_threshold: 0
|
||||||
|
observation_sources: ground obstacles
|
||||||
|
ground:
|
||||||
|
topic: /camera/ground
|
||||||
|
max_obstacle_height: 0.4
|
||||||
|
clearing: True
|
||||||
|
marking: False
|
||||||
|
data_type: "PointCloud2"
|
||||||
|
raytrace_max_range: 3.0
|
||||||
|
raytrace_min_range: 0.0
|
||||||
|
obstacle_max_range: 2.5
|
||||||
|
obstacle_min_range: 0.0
|
||||||
|
obstacles:
|
||||||
|
topic: /camera/obstacles
|
||||||
|
max_obstacle_height: 0.4
|
||||||
|
clearing: True
|
||||||
|
marking: True
|
||||||
|
data_type: "PointCloud2"
|
||||||
|
raytrace_max_range: 3.0
|
||||||
|
raytrace_min_range: 0.0
|
||||||
|
obstacle_max_range: 2.5
|
||||||
|
obstacle_min_range: 0.0
|
||||||
|
static_layer:
|
||||||
|
plugin: "nav2_costmap_2d::StaticLayer"
|
||||||
|
map_subscribe_transient_local: True
|
||||||
|
always_send_full_costmap: True
|
||||||
|
|
||||||
|
global_costmap:
|
||||||
|
global_costmap:
|
||||||
|
ros__parameters:
|
||||||
|
update_frequency: 1.0
|
||||||
|
publish_frequency: 1.0
|
||||||
|
global_frame: map
|
||||||
|
robot_base_frame: base_link
|
||||||
|
use_sim_time: True
|
||||||
|
robot_radius: 0.22
|
||||||
|
resolution: 0.05
|
||||||
|
track_unknown_space: true
|
||||||
|
plugins: ["static_layer", "inflation_layer"]
|
||||||
|
static_layer:
|
||||||
|
plugin: "nav2_costmap_2d::StaticLayer"
|
||||||
|
map_subscribe_transient_local: True
|
||||||
|
inflation_layer:
|
||||||
|
plugin: "nav2_costmap_2d::InflationLayer"
|
||||||
|
cost_scaling_factor: 3.0
|
||||||
|
inflation_radius: 0.55
|
||||||
|
always_send_full_costmap: True
|
||||||
|
|
||||||
|
map_server:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
# Overridden in launch by the "map" launch configuration or provided default value.
|
||||||
|
# To use in yaml, remove the default "map" value in the tb3_simulation_launch.py file & provide full path to map below.
|
||||||
|
yaml_filename: ""
|
||||||
|
|
||||||
|
smoother_server:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
smoother_plugins: ["simple_smoother"]
|
||||||
|
simple_smoother:
|
||||||
|
plugin: "nav2_smoother::SimpleSmoother"
|
||||||
|
tolerance: 1.0e-10
|
||||||
|
max_its: 1000
|
||||||
|
do_refinement: True
|
||||||
|
|
||||||
|
behavior_server:
|
||||||
|
ros__parameters:
|
||||||
|
costmap_topic: local_costmap/costmap_raw
|
||||||
|
footprint_topic: local_costmap/published_footprint
|
||||||
|
cycle_frequency: 10.0
|
||||||
|
behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]
|
||||||
|
spin:
|
||||||
|
plugin: "nav2_behaviors/Spin"
|
||||||
|
backup:
|
||||||
|
plugin: "nav2_behaviors/BackUp"
|
||||||
|
drive_on_heading:
|
||||||
|
plugin: "nav2_behaviors/DriveOnHeading"
|
||||||
|
wait:
|
||||||
|
plugin: "nav2_behaviors/Wait"
|
||||||
|
assisted_teleop:
|
||||||
|
plugin: "nav2_behaviors/AssistedTeleop"
|
||||||
|
global_frame: odom
|
||||||
|
robot_base_frame: base_link
|
||||||
|
transform_tolerance: 0.1
|
||||||
|
use_sim_time: true
|
||||||
|
simulate_ahead_time: 2.0
|
||||||
|
max_rotational_vel: 1.0
|
||||||
|
min_rotational_vel: 0.4
|
||||||
|
rotational_acc_lim: 3.2
|
||||||
|
|
||||||
|
robot_state_publisher:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
|
||||||
|
waypoint_follower:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
loop_rate: 20
|
||||||
|
stop_on_failure: false
|
||||||
|
waypoint_task_executor_plugin: "wait_at_waypoint"
|
||||||
|
wait_at_waypoint:
|
||||||
|
plugin: "nav2_waypoint_follower::WaitAtWaypoint"
|
||||||
|
enabled: True
|
||||||
|
waypoint_pause_duration: 200
|
||||||
|
|
||||||
|
velocity_smoother:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
smoothing_frequency: 20.0
|
||||||
|
scale_velocities: False
|
||||||
|
feedback: "OPEN_LOOP"
|
||||||
|
max_velocity: [0.26, 0.0, 1.0]
|
||||||
|
min_velocity: [-0.26, 0.0, -1.0]
|
||||||
|
max_accel: [2.5, 0.0, 3.2]
|
||||||
|
max_decel: [-2.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,301 @@
|
|||||||
|
# rtabmap_demos: We add segmented ground and obstacles to voxel_layer of the local costmap.
|
||||||
|
bt_navigator:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
global_frame: map
|
||||||
|
robot_base_frame: base_link
|
||||||
|
odom_topic: /odom
|
||||||
|
bt_loop_duration: 10
|
||||||
|
default_server_timeout: 20
|
||||||
|
wait_for_service_timeout: 1000
|
||||||
|
# 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults:
|
||||||
|
# nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml
|
||||||
|
# nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml
|
||||||
|
# They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2.
|
||||||
|
plugin_lib_names:
|
||||||
|
- nav2_compute_path_to_pose_action_bt_node
|
||||||
|
- nav2_compute_path_through_poses_action_bt_node
|
||||||
|
- nav2_smooth_path_action_bt_node
|
||||||
|
- nav2_follow_path_action_bt_node
|
||||||
|
- nav2_spin_action_bt_node
|
||||||
|
- nav2_wait_action_bt_node
|
||||||
|
- nav2_assisted_teleop_action_bt_node
|
||||||
|
- nav2_back_up_action_bt_node
|
||||||
|
- nav2_drive_on_heading_bt_node
|
||||||
|
- nav2_clear_costmap_service_bt_node
|
||||||
|
- nav2_is_stuck_condition_bt_node
|
||||||
|
- nav2_goal_reached_condition_bt_node
|
||||||
|
- nav2_goal_updated_condition_bt_node
|
||||||
|
- nav2_globally_updated_goal_condition_bt_node
|
||||||
|
- nav2_is_path_valid_condition_bt_node
|
||||||
|
- nav2_initial_pose_received_condition_bt_node
|
||||||
|
- nav2_reinitialize_global_localization_service_bt_node
|
||||||
|
- nav2_rate_controller_bt_node
|
||||||
|
- nav2_distance_controller_bt_node
|
||||||
|
- nav2_speed_controller_bt_node
|
||||||
|
- nav2_truncate_path_action_bt_node
|
||||||
|
- nav2_truncate_path_local_action_bt_node
|
||||||
|
- nav2_goal_updater_node_bt_node
|
||||||
|
- nav2_recovery_node_bt_node
|
||||||
|
- nav2_pipeline_sequence_bt_node
|
||||||
|
- nav2_round_robin_node_bt_node
|
||||||
|
- nav2_transform_available_condition_bt_node
|
||||||
|
- nav2_time_expired_condition_bt_node
|
||||||
|
- nav2_path_expiring_timer_condition
|
||||||
|
- nav2_distance_traveled_condition_bt_node
|
||||||
|
- nav2_single_trigger_bt_node
|
||||||
|
- nav2_goal_updated_controller_bt_node
|
||||||
|
- nav2_is_battery_low_condition_bt_node
|
||||||
|
- nav2_navigate_through_poses_action_bt_node
|
||||||
|
- nav2_navigate_to_pose_action_bt_node
|
||||||
|
- nav2_remove_passed_goals_action_bt_node
|
||||||
|
- nav2_planner_selector_bt_node
|
||||||
|
- nav2_controller_selector_bt_node
|
||||||
|
- nav2_goal_checker_selector_bt_node
|
||||||
|
- nav2_controller_cancel_bt_node
|
||||||
|
- nav2_path_longer_on_approach_bt_node
|
||||||
|
- nav2_wait_cancel_bt_node
|
||||||
|
- nav2_spin_cancel_bt_node
|
||||||
|
- nav2_back_up_cancel_bt_node
|
||||||
|
- nav2_assisted_teleop_cancel_bt_node
|
||||||
|
- nav2_drive_on_heading_cancel_bt_node
|
||||||
|
- nav2_is_battery_charging_condition_bt_node
|
||||||
|
|
||||||
|
bt_navigator_navigate_through_poses_rclcpp_node:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
|
||||||
|
bt_navigator_navigate_to_pose_rclcpp_node:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
|
||||||
|
controller_server:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
controller_frequency: 20.0
|
||||||
|
min_x_velocity_threshold: 0.001
|
||||||
|
min_y_velocity_threshold: 0.5
|
||||||
|
min_theta_velocity_threshold: 0.001
|
||||||
|
failure_tolerance: 0.3
|
||||||
|
progress_checker_plugin: "progress_checker"
|
||||||
|
goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"
|
||||||
|
controller_plugins: ["FollowPath"]
|
||||||
|
|
||||||
|
# Progress checker parameters
|
||||||
|
progress_checker:
|
||||||
|
plugin: "nav2_controller::SimpleProgressChecker"
|
||||||
|
required_movement_radius: 0.5
|
||||||
|
movement_time_allowance: 10.0
|
||||||
|
# Goal checker parameters
|
||||||
|
#precise_goal_checker:
|
||||||
|
# plugin: "nav2_controller::SimpleGoalChecker"
|
||||||
|
# xy_goal_tolerance: 0.25
|
||||||
|
# yaw_goal_tolerance: 0.25
|
||||||
|
# stateful: True
|
||||||
|
general_goal_checker:
|
||||||
|
stateful: True
|
||||||
|
plugin: "nav2_controller::SimpleGoalChecker"
|
||||||
|
xy_goal_tolerance: 0.25
|
||||||
|
yaw_goal_tolerance: 0.25
|
||||||
|
# DWB parameters
|
||||||
|
FollowPath:
|
||||||
|
plugin: "dwb_core::DWBLocalPlanner"
|
||||||
|
debug_trajectory_details: True
|
||||||
|
min_vel_x: 0.0
|
||||||
|
min_vel_y: 0.0
|
||||||
|
max_vel_x: 0.26
|
||||||
|
max_vel_y: 0.0
|
||||||
|
max_vel_theta: 1.0
|
||||||
|
min_speed_xy: 0.0
|
||||||
|
max_speed_xy: 0.26
|
||||||
|
min_speed_theta: 0.0
|
||||||
|
# Add high threshold velocity for turtlebot 3 issue.
|
||||||
|
# https://github.com/ROBOTIS-GIT/turtlebot3_simulations/issues/75
|
||||||
|
acc_lim_x: 2.5
|
||||||
|
acc_lim_y: 0.0
|
||||||
|
acc_lim_theta: 3.2
|
||||||
|
decel_lim_x: -2.5
|
||||||
|
decel_lim_y: 0.0
|
||||||
|
decel_lim_theta: -3.2
|
||||||
|
vx_samples: 20
|
||||||
|
vy_samples: 5
|
||||||
|
vtheta_samples: 20
|
||||||
|
sim_time: 1.7
|
||||||
|
linear_granularity: 0.05
|
||||||
|
angular_granularity: 0.025
|
||||||
|
transform_tolerance: 0.2
|
||||||
|
xy_goal_tolerance: 0.25
|
||||||
|
trans_stopped_velocity: 0.25
|
||||||
|
short_circuit_trajectory_evaluation: True
|
||||||
|
stateful: True
|
||||||
|
critics: ["RotateToGoal", "Oscillation", "BaseObstacle", "GoalAlign", "PathAlign", "PathDist", "GoalDist"]
|
||||||
|
BaseObstacle.scale: 0.02
|
||||||
|
PathAlign.scale: 32.0
|
||||||
|
PathAlign.forward_point_distance: 0.1
|
||||||
|
GoalAlign.scale: 24.0
|
||||||
|
GoalAlign.forward_point_distance: 0.1
|
||||||
|
PathDist.scale: 32.0
|
||||||
|
GoalDist.scale: 24.0
|
||||||
|
RotateToGoal.scale: 32.0
|
||||||
|
RotateToGoal.slowing_factor: 5.0
|
||||||
|
RotateToGoal.lookahead_time: -1.0
|
||||||
|
|
||||||
|
local_costmap:
|
||||||
|
local_costmap:
|
||||||
|
ros__parameters:
|
||||||
|
update_frequency: 5.0
|
||||||
|
publish_frequency: 2.0
|
||||||
|
global_frame: odom
|
||||||
|
robot_base_frame: base_link
|
||||||
|
use_sim_time: True
|
||||||
|
rolling_window: true
|
||||||
|
width: 3
|
||||||
|
height: 3
|
||||||
|
resolution: 0.05
|
||||||
|
robot_radius: 0.22
|
||||||
|
plugins: ["voxel_layer", "inflation_layer"]
|
||||||
|
inflation_layer:
|
||||||
|
plugin: "nav2_costmap_2d::InflationLayer"
|
||||||
|
cost_scaling_factor: 3.0
|
||||||
|
inflation_radius: 0.55
|
||||||
|
voxel_layer:
|
||||||
|
plugin: "nav2_costmap_2d::VoxelLayer"
|
||||||
|
enabled: True
|
||||||
|
publish_voxel_map: True
|
||||||
|
origin_z: 0.0
|
||||||
|
z_resolution: 0.05
|
||||||
|
z_voxels: 16
|
||||||
|
max_obstacle_height: 2.0
|
||||||
|
mark_threshold: 0
|
||||||
|
observation_sources: scan ground obstacles
|
||||||
|
scan:
|
||||||
|
topic: /scan
|
||||||
|
max_obstacle_height: 2.0
|
||||||
|
clearing: True
|
||||||
|
marking: True
|
||||||
|
data_type: "LaserScan"
|
||||||
|
raytrace_max_range: 3.0
|
||||||
|
raytrace_min_range: 0.0
|
||||||
|
obstacle_max_range: 2.5
|
||||||
|
obstacle_min_range: 0.0
|
||||||
|
ground:
|
||||||
|
topic: /camera/ground
|
||||||
|
max_obstacle_height: 0.4
|
||||||
|
clearing: True
|
||||||
|
marking: False
|
||||||
|
data_type: "PointCloud2"
|
||||||
|
raytrace_max_range: 3.0
|
||||||
|
raytrace_min_range: 0.0
|
||||||
|
obstacle_max_range: 2.5
|
||||||
|
obstacle_min_range: 0.0
|
||||||
|
obstacles:
|
||||||
|
topic: /camera/obstacles
|
||||||
|
max_obstacle_height: 0.4
|
||||||
|
clearing: True
|
||||||
|
marking: True
|
||||||
|
data_type: "PointCloud2"
|
||||||
|
raytrace_max_range: 3.0
|
||||||
|
raytrace_min_range: 0.0
|
||||||
|
obstacle_max_range: 2.5
|
||||||
|
obstacle_min_range: 0.0
|
||||||
|
static_layer:
|
||||||
|
plugin: "nav2_costmap_2d::StaticLayer"
|
||||||
|
map_subscribe_transient_local: True
|
||||||
|
always_send_full_costmap: True
|
||||||
|
|
||||||
|
global_costmap:
|
||||||
|
global_costmap:
|
||||||
|
ros__parameters:
|
||||||
|
update_frequency: 1.0
|
||||||
|
publish_frequency: 1.0
|
||||||
|
global_frame: map
|
||||||
|
robot_base_frame: base_link
|
||||||
|
use_sim_time: True
|
||||||
|
robot_radius: 0.22
|
||||||
|
resolution: 0.05
|
||||||
|
track_unknown_space: true
|
||||||
|
plugins: ["static_layer", "inflation_layer"]
|
||||||
|
static_layer:
|
||||||
|
plugin: "nav2_costmap_2d::StaticLayer"
|
||||||
|
map_subscribe_transient_local: True
|
||||||
|
inflation_layer:
|
||||||
|
plugin: "nav2_costmap_2d::InflationLayer"
|
||||||
|
cost_scaling_factor: 3.0
|
||||||
|
inflation_radius: 0.55
|
||||||
|
always_send_full_costmap: True
|
||||||
|
|
||||||
|
planner_server:
|
||||||
|
ros__parameters:
|
||||||
|
expected_planner_frequency: 20.0
|
||||||
|
use_sim_time: True
|
||||||
|
planner_plugins: ["GridBased"]
|
||||||
|
GridBased:
|
||||||
|
plugin: "nav2_navfn_planner/NavfnPlanner"
|
||||||
|
tolerance: 0.5
|
||||||
|
use_astar: false
|
||||||
|
allow_unknown: true
|
||||||
|
|
||||||
|
smoother_server:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
smoother_plugins: ["simple_smoother"]
|
||||||
|
simple_smoother:
|
||||||
|
plugin: "nav2_smoother::SimpleSmoother"
|
||||||
|
tolerance: 1.0e-10
|
||||||
|
max_its: 1000
|
||||||
|
do_refinement: True
|
||||||
|
|
||||||
|
behavior_server:
|
||||||
|
ros__parameters:
|
||||||
|
costmap_topic: local_costmap/costmap_raw
|
||||||
|
footprint_topic: local_costmap/published_footprint
|
||||||
|
cycle_frequency: 10.0
|
||||||
|
behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]
|
||||||
|
spin:
|
||||||
|
plugin: "nav2_behaviors/Spin"
|
||||||
|
backup:
|
||||||
|
plugin: "nav2_behaviors/BackUp"
|
||||||
|
drive_on_heading:
|
||||||
|
plugin: "nav2_behaviors/DriveOnHeading"
|
||||||
|
wait:
|
||||||
|
plugin: "nav2_behaviors/Wait"
|
||||||
|
assisted_teleop:
|
||||||
|
plugin: "nav2_behaviors/AssistedTeleop"
|
||||||
|
global_frame: odom
|
||||||
|
robot_base_frame: base_link
|
||||||
|
transform_tolerance: 0.1
|
||||||
|
use_sim_time: true
|
||||||
|
simulate_ahead_time: 2.0
|
||||||
|
max_rotational_vel: 1.0
|
||||||
|
min_rotational_vel: 0.4
|
||||||
|
rotational_acc_lim: 3.2
|
||||||
|
|
||||||
|
robot_state_publisher:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
|
||||||
|
waypoint_follower:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
loop_rate: 20
|
||||||
|
stop_on_failure: false
|
||||||
|
waypoint_task_executor_plugin: "wait_at_waypoint"
|
||||||
|
wait_at_waypoint:
|
||||||
|
plugin: "nav2_waypoint_follower::WaitAtWaypoint"
|
||||||
|
enabled: True
|
||||||
|
waypoint_pause_duration: 200
|
||||||
|
|
||||||
|
velocity_smoother:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
smoothing_frequency: 20.0
|
||||||
|
scale_velocities: False
|
||||||
|
feedback: "OPEN_LOOP"
|
||||||
|
max_velocity: [0.26, 0.0, 1.0]
|
||||||
|
min_velocity: [-0.26, 0.0, -1.0]
|
||||||
|
max_accel: [2.5, 0.0, 3.2]
|
||||||
|
max_decel: [-2.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,295 @@
|
|||||||
|
# Modified to use icp_odom frame
|
||||||
|
bt_navigator:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
global_frame: map
|
||||||
|
robot_base_frame: base_link
|
||||||
|
odom_topic: /odom
|
||||||
|
bt_loop_duration: 10
|
||||||
|
default_server_timeout: 20
|
||||||
|
wait_for_service_timeout: 1000
|
||||||
|
# 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults:
|
||||||
|
# nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml
|
||||||
|
# nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml
|
||||||
|
# They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2.
|
||||||
|
plugin_lib_names:
|
||||||
|
- nav2_compute_path_to_pose_action_bt_node
|
||||||
|
- nav2_compute_path_through_poses_action_bt_node
|
||||||
|
- nav2_smooth_path_action_bt_node
|
||||||
|
- nav2_follow_path_action_bt_node
|
||||||
|
- nav2_spin_action_bt_node
|
||||||
|
- nav2_wait_action_bt_node
|
||||||
|
- nav2_assisted_teleop_action_bt_node
|
||||||
|
- nav2_back_up_action_bt_node
|
||||||
|
- nav2_drive_on_heading_bt_node
|
||||||
|
- nav2_clear_costmap_service_bt_node
|
||||||
|
- nav2_is_stuck_condition_bt_node
|
||||||
|
- nav2_goal_reached_condition_bt_node
|
||||||
|
- nav2_goal_updated_condition_bt_node
|
||||||
|
- nav2_globally_updated_goal_condition_bt_node
|
||||||
|
- nav2_is_path_valid_condition_bt_node
|
||||||
|
- nav2_initial_pose_received_condition_bt_node
|
||||||
|
- nav2_reinitialize_global_localization_service_bt_node
|
||||||
|
- nav2_rate_controller_bt_node
|
||||||
|
- nav2_distance_controller_bt_node
|
||||||
|
- nav2_speed_controller_bt_node
|
||||||
|
- nav2_truncate_path_action_bt_node
|
||||||
|
- nav2_truncate_path_local_action_bt_node
|
||||||
|
- nav2_goal_updater_node_bt_node
|
||||||
|
- nav2_recovery_node_bt_node
|
||||||
|
- nav2_pipeline_sequence_bt_node
|
||||||
|
- nav2_round_robin_node_bt_node
|
||||||
|
- nav2_transform_available_condition_bt_node
|
||||||
|
- nav2_time_expired_condition_bt_node
|
||||||
|
- nav2_path_expiring_timer_condition
|
||||||
|
- nav2_distance_traveled_condition_bt_node
|
||||||
|
- nav2_single_trigger_bt_node
|
||||||
|
- nav2_goal_updated_controller_bt_node
|
||||||
|
- nav2_is_battery_low_condition_bt_node
|
||||||
|
- nav2_navigate_through_poses_action_bt_node
|
||||||
|
- nav2_navigate_to_pose_action_bt_node
|
||||||
|
- nav2_remove_passed_goals_action_bt_node
|
||||||
|
- nav2_planner_selector_bt_node
|
||||||
|
- nav2_controller_selector_bt_node
|
||||||
|
- nav2_goal_checker_selector_bt_node
|
||||||
|
- nav2_controller_cancel_bt_node
|
||||||
|
- nav2_path_longer_on_approach_bt_node
|
||||||
|
- nav2_wait_cancel_bt_node
|
||||||
|
- nav2_spin_cancel_bt_node
|
||||||
|
- nav2_back_up_cancel_bt_node
|
||||||
|
- nav2_assisted_teleop_cancel_bt_node
|
||||||
|
- nav2_drive_on_heading_cancel_bt_node
|
||||||
|
- nav2_is_battery_charging_condition_bt_node
|
||||||
|
|
||||||
|
bt_navigator_navigate_through_poses_rclcpp_node:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
|
||||||
|
bt_navigator_navigate_to_pose_rclcpp_node:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
|
||||||
|
controller_server:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
controller_frequency: 20.0
|
||||||
|
min_x_velocity_threshold: 0.001
|
||||||
|
min_y_velocity_threshold: 0.5
|
||||||
|
min_theta_velocity_threshold: 0.001
|
||||||
|
failure_tolerance: 0.3
|
||||||
|
progress_checker_plugin: "progress_checker"
|
||||||
|
goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"
|
||||||
|
controller_plugins: ["FollowPath"]
|
||||||
|
|
||||||
|
# Progress checker parameters
|
||||||
|
progress_checker:
|
||||||
|
plugin: "nav2_controller::SimpleProgressChecker"
|
||||||
|
required_movement_radius: 0.5
|
||||||
|
movement_time_allowance: 10.0
|
||||||
|
# Goal checker parameters
|
||||||
|
#precise_goal_checker:
|
||||||
|
# plugin: "nav2_controller::SimpleGoalChecker"
|
||||||
|
# xy_goal_tolerance: 0.25
|
||||||
|
# yaw_goal_tolerance: 0.25
|
||||||
|
# stateful: True
|
||||||
|
general_goal_checker:
|
||||||
|
stateful: True
|
||||||
|
plugin: "nav2_controller::SimpleGoalChecker"
|
||||||
|
xy_goal_tolerance: 0.25
|
||||||
|
yaw_goal_tolerance: 0.25
|
||||||
|
# DWB parameters
|
||||||
|
FollowPath:
|
||||||
|
plugin: "dwb_core::DWBLocalPlanner"
|
||||||
|
debug_trajectory_details: True
|
||||||
|
min_vel_x: 0.0
|
||||||
|
min_vel_y: 0.0
|
||||||
|
max_vel_x: 0.26
|
||||||
|
max_vel_y: 0.0
|
||||||
|
max_vel_theta: 1.0
|
||||||
|
min_speed_xy: 0.0
|
||||||
|
max_speed_xy: 0.26
|
||||||
|
min_speed_theta: 0.0
|
||||||
|
# Add high threshold velocity for turtlebot 3 issue.
|
||||||
|
# https://github.com/ROBOTIS-GIT/turtlebot3_simulations/issues/75
|
||||||
|
acc_lim_x: 2.5
|
||||||
|
acc_lim_y: 0.0
|
||||||
|
acc_lim_theta: 3.2
|
||||||
|
decel_lim_x: -2.5
|
||||||
|
decel_lim_y: 0.0
|
||||||
|
decel_lim_theta: -3.2
|
||||||
|
vx_samples: 20
|
||||||
|
vy_samples: 5
|
||||||
|
vtheta_samples: 20
|
||||||
|
sim_time: 1.7
|
||||||
|
linear_granularity: 0.05
|
||||||
|
angular_granularity: 0.025
|
||||||
|
transform_tolerance: 0.2
|
||||||
|
xy_goal_tolerance: 0.25
|
||||||
|
trans_stopped_velocity: 0.25
|
||||||
|
short_circuit_trajectory_evaluation: True
|
||||||
|
stateful: True
|
||||||
|
critics: ["RotateToGoal", "Oscillation", "BaseObstacle", "GoalAlign", "PathAlign", "PathDist", "GoalDist"]
|
||||||
|
BaseObstacle.scale: 0.02
|
||||||
|
PathAlign.scale: 32.0
|
||||||
|
PathAlign.forward_point_distance: 0.1
|
||||||
|
GoalAlign.scale: 24.0
|
||||||
|
GoalAlign.forward_point_distance: 0.1
|
||||||
|
PathDist.scale: 32.0
|
||||||
|
GoalDist.scale: 24.0
|
||||||
|
RotateToGoal.scale: 32.0
|
||||||
|
RotateToGoal.slowing_factor: 5.0
|
||||||
|
RotateToGoal.lookahead_time: -1.0
|
||||||
|
|
||||||
|
local_costmap:
|
||||||
|
local_costmap:
|
||||||
|
ros__parameters:
|
||||||
|
update_frequency: 5.0
|
||||||
|
publish_frequency: 2.0
|
||||||
|
global_frame: icp_odom
|
||||||
|
robot_base_frame: base_link
|
||||||
|
use_sim_time: True
|
||||||
|
rolling_window: true
|
||||||
|
width: 3
|
||||||
|
height: 3
|
||||||
|
resolution: 0.05
|
||||||
|
robot_radius: 0.22
|
||||||
|
plugins: ["voxel_layer", "inflation_layer"]
|
||||||
|
inflation_layer:
|
||||||
|
plugin: "nav2_costmap_2d::InflationLayer"
|
||||||
|
cost_scaling_factor: 3.0
|
||||||
|
inflation_radius: 0.55
|
||||||
|
voxel_layer:
|
||||||
|
plugin: "nav2_costmap_2d::VoxelLayer"
|
||||||
|
enabled: True
|
||||||
|
publish_voxel_map: True
|
||||||
|
origin_z: 0.0
|
||||||
|
z_resolution: 0.05
|
||||||
|
z_voxels: 16
|
||||||
|
max_obstacle_height: 2.0
|
||||||
|
mark_threshold: 0
|
||||||
|
observation_sources: scan
|
||||||
|
scan:
|
||||||
|
topic: /scan
|
||||||
|
max_obstacle_height: 2.0
|
||||||
|
clearing: True
|
||||||
|
marking: True
|
||||||
|
data_type: "LaserScan"
|
||||||
|
raytrace_max_range: 3.0
|
||||||
|
raytrace_min_range: 0.0
|
||||||
|
obstacle_max_range: 2.5
|
||||||
|
obstacle_min_range: 0.0
|
||||||
|
static_layer:
|
||||||
|
plugin: "nav2_costmap_2d::StaticLayer"
|
||||||
|
map_subscribe_transient_local: True
|
||||||
|
always_send_full_costmap: True
|
||||||
|
|
||||||
|
global_costmap:
|
||||||
|
global_costmap:
|
||||||
|
ros__parameters:
|
||||||
|
update_frequency: 1.0
|
||||||
|
publish_frequency: 1.0
|
||||||
|
global_frame: map
|
||||||
|
robot_base_frame: base_link
|
||||||
|
use_sim_time: True
|
||||||
|
robot_radius: 0.22
|
||||||
|
resolution: 0.05
|
||||||
|
track_unknown_space: true
|
||||||
|
plugins: ["static_layer", "obstacle_layer", "inflation_layer"]
|
||||||
|
obstacle_layer:
|
||||||
|
plugin: "nav2_costmap_2d::ObstacleLayer"
|
||||||
|
enabled: True
|
||||||
|
observation_sources: scan
|
||||||
|
scan:
|
||||||
|
topic: /scan
|
||||||
|
max_obstacle_height: 2.0
|
||||||
|
clearing: True
|
||||||
|
marking: True
|
||||||
|
data_type: "LaserScan"
|
||||||
|
raytrace_max_range: 3.0
|
||||||
|
raytrace_min_range: 0.0
|
||||||
|
obstacle_max_range: 2.5
|
||||||
|
obstacle_min_range: 0.0
|
||||||
|
static_layer:
|
||||||
|
plugin: "nav2_costmap_2d::StaticLayer"
|
||||||
|
map_subscribe_transient_local: True
|
||||||
|
inflation_layer:
|
||||||
|
plugin: "nav2_costmap_2d::InflationLayer"
|
||||||
|
cost_scaling_factor: 3.0
|
||||||
|
inflation_radius: 0.55
|
||||||
|
always_send_full_costmap: True
|
||||||
|
|
||||||
|
planner_server:
|
||||||
|
ros__parameters:
|
||||||
|
expected_planner_frequency: 20.0
|
||||||
|
use_sim_time: True
|
||||||
|
planner_plugins: ["GridBased"]
|
||||||
|
GridBased:
|
||||||
|
plugin: "nav2_navfn_planner/NavfnPlanner"
|
||||||
|
tolerance: 0.5
|
||||||
|
use_astar: false
|
||||||
|
allow_unknown: true
|
||||||
|
|
||||||
|
smoother_server:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
smoother_plugins: ["simple_smoother"]
|
||||||
|
simple_smoother:
|
||||||
|
plugin: "nav2_smoother::SimpleSmoother"
|
||||||
|
tolerance: 1.0e-10
|
||||||
|
max_its: 1000
|
||||||
|
do_refinement: True
|
||||||
|
|
||||||
|
behavior_server:
|
||||||
|
ros__parameters:
|
||||||
|
costmap_topic: local_costmap/costmap_raw
|
||||||
|
footprint_topic: local_costmap/published_footprint
|
||||||
|
cycle_frequency: 10.0
|
||||||
|
behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]
|
||||||
|
spin:
|
||||||
|
plugin: "nav2_behaviors/Spin"
|
||||||
|
backup:
|
||||||
|
plugin: "nav2_behaviors/BackUp"
|
||||||
|
drive_on_heading:
|
||||||
|
plugin: "nav2_behaviors/DriveOnHeading"
|
||||||
|
wait:
|
||||||
|
plugin: "nav2_behaviors/Wait"
|
||||||
|
assisted_teleop:
|
||||||
|
plugin: "nav2_behaviors/AssistedTeleop"
|
||||||
|
global_frame: icp_odom
|
||||||
|
robot_base_frame: base_link
|
||||||
|
transform_tolerance: 0.1
|
||||||
|
use_sim_time: true
|
||||||
|
simulate_ahead_time: 2.0
|
||||||
|
max_rotational_vel: 1.0
|
||||||
|
min_rotational_vel: 0.4
|
||||||
|
rotational_acc_lim: 3.2
|
||||||
|
|
||||||
|
robot_state_publisher:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
|
||||||
|
waypoint_follower:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
loop_rate: 20
|
||||||
|
stop_on_failure: false
|
||||||
|
waypoint_task_executor_plugin: "wait_at_waypoint"
|
||||||
|
wait_at_waypoint:
|
||||||
|
plugin: "nav2_waypoint_follower::WaitAtWaypoint"
|
||||||
|
enabled: True
|
||||||
|
waypoint_pause_duration: 200
|
||||||
|
|
||||||
|
velocity_smoother:
|
||||||
|
ros__parameters:
|
||||||
|
use_sim_time: True
|
||||||
|
smoothing_frequency: 20.0
|
||||||
|
scale_velocities: False
|
||||||
|
feedback: "OPEN_LOOP"
|
||||||
|
max_velocity: [0.26, 0.0, 1.0]
|
||||||
|
min_velocity: [-0.26, 0.0, -1.0]
|
||||||
|
max_accel: [2.5, 0.0, 3.2]
|
||||||
|
max_decel: [-2.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,421 @@
|
|||||||
|
bt_navigator:
|
||||||
|
ros__parameters:
|
||||||
|
global_frame: map
|
||||||
|
robot_base_frame: base_link
|
||||||
|
odom_topic: /odom
|
||||||
|
bt_loop_duration: 10
|
||||||
|
default_server_timeout: 20
|
||||||
|
wait_for_service_timeout: 1000
|
||||||
|
action_server_result_timeout: 900.0
|
||||||
|
navigators: ["navigate_to_pose", "navigate_through_poses"]
|
||||||
|
navigate_to_pose:
|
||||||
|
plugin: "nav2_bt_navigator::NavigateToPoseNavigator"
|
||||||
|
navigate_through_poses:
|
||||||
|
plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator"
|
||||||
|
# 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults:
|
||||||
|
# nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml
|
||||||
|
# nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml
|
||||||
|
# They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2.
|
||||||
|
|
||||||
|
# plugin_lib_names is used to add custom BT plugins to the executor (vector of strings).
|
||||||
|
# Built-in plugins are added automatically
|
||||||
|
# plugin_lib_names: []
|
||||||
|
|
||||||
|
error_code_names:
|
||||||
|
- compute_path_error_code
|
||||||
|
- follow_path_error_code
|
||||||
|
|
||||||
|
controller_server:
|
||||||
|
ros__parameters:
|
||||||
|
enable_stamped_cmd_vel: True
|
||||||
|
controller_frequency: 20.0
|
||||||
|
costmap_update_timeout: 0.30
|
||||||
|
min_x_velocity_threshold: 0.001
|
||||||
|
min_y_velocity_threshold: 0.5
|
||||||
|
min_theta_velocity_threshold: 0.001
|
||||||
|
failure_tolerance: 0.3
|
||||||
|
progress_checker_plugins: ["progress_checker"]
|
||||||
|
goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"
|
||||||
|
controller_plugins: ["FollowPath"]
|
||||||
|
use_realtime_priority: false
|
||||||
|
|
||||||
|
# Progress checker parameters
|
||||||
|
progress_checker:
|
||||||
|
plugin: "nav2_controller::SimpleProgressChecker"
|
||||||
|
required_movement_radius: 0.5
|
||||||
|
movement_time_allowance: 10.0
|
||||||
|
# Goal checker parameters
|
||||||
|
#precise_goal_checker:
|
||||||
|
# plugin: "nav2_controller::SimpleGoalChecker"
|
||||||
|
# xy_goal_tolerance: 0.25
|
||||||
|
# yaw_goal_tolerance: 0.25
|
||||||
|
# stateful: True
|
||||||
|
general_goal_checker:
|
||||||
|
stateful: True
|
||||||
|
plugin: "nav2_controller::SimpleGoalChecker"
|
||||||
|
xy_goal_tolerance: 0.25
|
||||||
|
yaw_goal_tolerance: 0.25
|
||||||
|
FollowPath:
|
||||||
|
plugin: "nav2_mppi_controller::MPPIController"
|
||||||
|
time_steps: 56
|
||||||
|
model_dt: 0.05
|
||||||
|
batch_size: 2000
|
||||||
|
ax_max: 3.0
|
||||||
|
ax_min: -3.0
|
||||||
|
ay_max: 3.0
|
||||||
|
ay_min: -3.0
|
||||||
|
az_max: 3.5
|
||||||
|
vx_std: 0.2
|
||||||
|
vy_std: 0.2
|
||||||
|
wz_std: 0.4
|
||||||
|
vx_max: 0.5
|
||||||
|
vx_min: -0.35
|
||||||
|
vy_max: 0.5
|
||||||
|
wz_max: 1.9
|
||||||
|
iteration_count: 1
|
||||||
|
prune_distance: 1.7
|
||||||
|
transform_tolerance: 0.1
|
||||||
|
temperature: 0.3
|
||||||
|
gamma: 0.015
|
||||||
|
motion_model: "DiffDrive"
|
||||||
|
visualize: true
|
||||||
|
regenerate_noises: true
|
||||||
|
TrajectoryVisualizer:
|
||||||
|
trajectory_step: 5
|
||||||
|
time_step: 3
|
||||||
|
AckermannConstraints:
|
||||||
|
min_turning_r: 0.2
|
||||||
|
critics: [
|
||||||
|
"ConstraintCritic", "CostCritic", "GoalCritic",
|
||||||
|
"GoalAngleCritic", "PathAlignCritic", "PathFollowCritic",
|
||||||
|
"PathAngleCritic", "PreferForwardCritic"]
|
||||||
|
ConstraintCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 4.0
|
||||||
|
GoalCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 5.0
|
||||||
|
threshold_to_consider: 1.4
|
||||||
|
GoalAngleCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 3.0
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
PreferForwardCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 5.0
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
CostCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 3.81
|
||||||
|
near_collision_cost: 253
|
||||||
|
critical_cost: 300.0
|
||||||
|
consider_footprint: false
|
||||||
|
collision_cost: 1000000.0
|
||||||
|
near_goal_distance: 1.0
|
||||||
|
trajectory_point_step: 2
|
||||||
|
PathAlignCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 14.0
|
||||||
|
max_path_occupancy_ratio: 0.05
|
||||||
|
trajectory_point_step: 4
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
offset_from_furthest: 20
|
||||||
|
use_path_orientations: false
|
||||||
|
PathFollowCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 5.0
|
||||||
|
offset_from_furthest: 5
|
||||||
|
threshold_to_consider: 1.4
|
||||||
|
PathAngleCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 2.0
|
||||||
|
offset_from_furthest: 4
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
max_angle_to_furthest: 1.0
|
||||||
|
mode: 0
|
||||||
|
# TwirlingCritic:
|
||||||
|
# enabled: true
|
||||||
|
# twirling_cost_power: 1
|
||||||
|
# twirling_cost_weight: 10.0
|
||||||
|
|
||||||
|
local_costmap:
|
||||||
|
local_costmap:
|
||||||
|
ros__parameters:
|
||||||
|
update_frequency: 5.0
|
||||||
|
publish_frequency: 2.0
|
||||||
|
global_frame: odom
|
||||||
|
robot_base_frame: base_link
|
||||||
|
rolling_window: true
|
||||||
|
width: 3
|
||||||
|
height: 3
|
||||||
|
resolution: 0.05
|
||||||
|
robot_radius: 0.22
|
||||||
|
plugins: ["voxel_layer", "inflation_layer"]
|
||||||
|
inflation_layer:
|
||||||
|
plugin: "nav2_costmap_2d::InflationLayer"
|
||||||
|
cost_scaling_factor: 3.0
|
||||||
|
inflation_radius: 0.70
|
||||||
|
voxel_layer:
|
||||||
|
plugin: "nav2_costmap_2d::VoxelLayer"
|
||||||
|
enabled: True
|
||||||
|
publish_voxel_map: True
|
||||||
|
origin_z: 0.0
|
||||||
|
z_resolution: 0.05
|
||||||
|
z_voxels: 16
|
||||||
|
max_obstacle_height: 2.0
|
||||||
|
mark_threshold: 0
|
||||||
|
observation_sources: scan
|
||||||
|
scan:
|
||||||
|
topic: /scan
|
||||||
|
max_obstacle_height: 2.0
|
||||||
|
clearing: True
|
||||||
|
marking: True
|
||||||
|
data_type: "LaserScan"
|
||||||
|
raytrace_max_range: 3.0
|
||||||
|
raytrace_min_range: 0.0
|
||||||
|
obstacle_max_range: 2.5
|
||||||
|
obstacle_min_range: 0.0
|
||||||
|
static_layer:
|
||||||
|
plugin: "nav2_costmap_2d::StaticLayer"
|
||||||
|
map_subscribe_transient_local: True
|
||||||
|
always_send_full_costmap: True
|
||||||
|
|
||||||
|
global_costmap:
|
||||||
|
global_costmap:
|
||||||
|
ros__parameters:
|
||||||
|
update_frequency: 1.0
|
||||||
|
publish_frequency: 1.0
|
||||||
|
global_frame: map
|
||||||
|
robot_base_frame: base_link
|
||||||
|
robot_radius: 0.22
|
||||||
|
resolution: 0.05
|
||||||
|
track_unknown_space: true
|
||||||
|
plugins: ["static_layer", "obstacle_layer", "inflation_layer"]
|
||||||
|
obstacle_layer:
|
||||||
|
plugin: "nav2_costmap_2d::ObstacleLayer"
|
||||||
|
enabled: True
|
||||||
|
observation_sources: scan
|
||||||
|
scan:
|
||||||
|
topic: /scan
|
||||||
|
max_obstacle_height: 2.0
|
||||||
|
clearing: True
|
||||||
|
marking: True
|
||||||
|
data_type: "LaserScan"
|
||||||
|
raytrace_max_range: 3.0
|
||||||
|
raytrace_min_range: 0.0
|
||||||
|
obstacle_max_range: 2.5
|
||||||
|
obstacle_min_range: 0.0
|
||||||
|
static_layer:
|
||||||
|
plugin: "nav2_costmap_2d::StaticLayer"
|
||||||
|
map_subscribe_transient_local: True
|
||||||
|
inflation_layer:
|
||||||
|
plugin: "nav2_costmap_2d::InflationLayer"
|
||||||
|
cost_scaling_factor: 3.0
|
||||||
|
inflation_radius: 0.7
|
||||||
|
always_send_full_costmap: True
|
||||||
|
|
||||||
|
planner_server:
|
||||||
|
ros__parameters:
|
||||||
|
expected_planner_frequency: 20.0
|
||||||
|
planner_plugins: ["GridBased"]
|
||||||
|
costmap_update_timeout: 1.0
|
||||||
|
GridBased:
|
||||||
|
plugin: "nav2_navfn_planner::NavfnPlanner"
|
||||||
|
tolerance: 0.5
|
||||||
|
use_astar: false
|
||||||
|
allow_unknown: true
|
||||||
|
|
||||||
|
smoother_server:
|
||||||
|
ros__parameters:
|
||||||
|
smoother_plugins: ["simple_smoother"]
|
||||||
|
simple_smoother:
|
||||||
|
plugin: "nav2_smoother::SimpleSmoother"
|
||||||
|
tolerance: 1.0e-10
|
||||||
|
max_its: 1000
|
||||||
|
do_refinement: True
|
||||||
|
|
||||||
|
behavior_server:
|
||||||
|
ros__parameters:
|
||||||
|
enable_stamped_cmd_vel: True
|
||||||
|
local_costmap_topic: local_costmap/costmap_raw
|
||||||
|
global_costmap_topic: global_costmap/costmap_raw
|
||||||
|
local_footprint_topic: local_costmap/published_footprint
|
||||||
|
global_footprint_topic: global_costmap/published_footprint
|
||||||
|
cycle_frequency: 10.0
|
||||||
|
behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]
|
||||||
|
spin:
|
||||||
|
plugin: "nav2_behaviors::Spin"
|
||||||
|
backup:
|
||||||
|
plugin: "nav2_behaviors::BackUp"
|
||||||
|
drive_on_heading:
|
||||||
|
plugin: "nav2_behaviors::DriveOnHeading"
|
||||||
|
wait:
|
||||||
|
plugin: "nav2_behaviors::Wait"
|
||||||
|
assisted_teleop:
|
||||||
|
plugin: "nav2_behaviors::AssistedTeleop"
|
||||||
|
local_frame: odom
|
||||||
|
global_frame: map
|
||||||
|
robot_base_frame: base_link
|
||||||
|
transform_tolerance: 0.1
|
||||||
|
simulate_ahead_time: 2.0
|
||||||
|
max_rotational_vel: 1.0
|
||||||
|
min_rotational_vel: 0.4
|
||||||
|
rotational_acc_lim: 3.2
|
||||||
|
|
||||||
|
waypoint_follower:
|
||||||
|
ros__parameters:
|
||||||
|
loop_rate: 20
|
||||||
|
stop_on_failure: false
|
||||||
|
action_server_result_timeout: 900.0
|
||||||
|
waypoint_task_executor_plugin: "wait_at_waypoint"
|
||||||
|
wait_at_waypoint:
|
||||||
|
plugin: "nav2_waypoint_follower::WaitAtWaypoint"
|
||||||
|
enabled: True
|
||||||
|
waypoint_pause_duration: 200
|
||||||
|
|
||||||
|
route_server:
|
||||||
|
ros__parameters:
|
||||||
|
# The graph_filepath does not need to be specified since it going to be set by defaults in launch.
|
||||||
|
# If you'd rather set it in the yaml, remove the default "graph" value in the launch file(s).
|
||||||
|
# file & provide full path to map below. If graph config or launch default is provided, it is used
|
||||||
|
# graph_filepath: $(find-pkg-share nav2_route)/graphs/aws_graph.geojson
|
||||||
|
boundary_radius_to_achieve_node: 1.0
|
||||||
|
radius_to_achieve_node: 2.0
|
||||||
|
smooth_corners: true
|
||||||
|
operations: ["AdjustSpeedLimit", "ReroutingService", "CollisionMonitor"]
|
||||||
|
ReroutingService:
|
||||||
|
plugin: "nav2_route::ReroutingService"
|
||||||
|
AdjustSpeedLimit:
|
||||||
|
plugin: "nav2_route::AdjustSpeedLimit"
|
||||||
|
CollisionMonitor:
|
||||||
|
plugin: "nav2_route::CollisionMonitor"
|
||||||
|
max_collision_dist: 3.0
|
||||||
|
edge_cost_functions: ["DistanceScorer", "CostmapScorer"]
|
||||||
|
DistanceScorer:
|
||||||
|
plugin: "nav2_route::DistanceScorer"
|
||||||
|
CostmapScorer:
|
||||||
|
plugin: "nav2_route::CostmapScorer"
|
||||||
|
|
||||||
|
velocity_smoother:
|
||||||
|
ros__parameters:
|
||||||
|
enable_stamped_cmd_vel: True
|
||||||
|
smoothing_frequency: 20.0
|
||||||
|
stamp_smoothed_velocity_with_smoothing_time: False
|
||||||
|
scale_velocities: False
|
||||||
|
feedback: "OPEN_LOOP"
|
||||||
|
max_velocity: [0.5, 0.0, 2.0]
|
||||||
|
min_velocity: [-0.5, 0.0, -2.0]
|
||||||
|
max_accel: [2.5, 0.0, 3.2]
|
||||||
|
max_decel: [-2.5, 0.0, -3.2]
|
||||||
|
odom_topic: "odom"
|
||||||
|
odom_duration: 0.1
|
||||||
|
deadband_velocity: [0.0, 0.0, 0.0]
|
||||||
|
velocity_timeout: 1.0
|
||||||
|
|
||||||
|
collision_monitor:
|
||||||
|
ros__parameters:
|
||||||
|
enable_stamped_cmd_vel: True
|
||||||
|
base_frame_id: "base_footprint"
|
||||||
|
odom_frame_id: "odom"
|
||||||
|
cmd_vel_in_topic: "cmd_vel_smoothed"
|
||||||
|
cmd_vel_out_topic: "cmd_vel"
|
||||||
|
state_topic: "collision_monitor_state"
|
||||||
|
transform_tolerance: 0.2
|
||||||
|
source_timeout: 1.0
|
||||||
|
base_shift_correction: True
|
||||||
|
stop_pub_timeout: 2.0
|
||||||
|
# Polygons represent zone around the robot for "stop", "slowdown" and "limit" action types,
|
||||||
|
# and robot footprint for "approach" action type.
|
||||||
|
polygons: ["FootprintApproach"]
|
||||||
|
FootprintApproach:
|
||||||
|
type: "polygon"
|
||||||
|
action_type: "approach"
|
||||||
|
footprint_topic: "/local_costmap/published_footprint"
|
||||||
|
time_before_collision: 1.2
|
||||||
|
simulation_time_step: 0.1
|
||||||
|
min_points: 6
|
||||||
|
visualize: False
|
||||||
|
enabled: True
|
||||||
|
observation_sources: ["scan"]
|
||||||
|
scan:
|
||||||
|
type: "scan"
|
||||||
|
topic: "scan"
|
||||||
|
min_height: 0.15
|
||||||
|
max_height: 2.0
|
||||||
|
enabled: True
|
||||||
|
|
||||||
|
docking_server:
|
||||||
|
ros__parameters:
|
||||||
|
enable_stamped_cmd_vel: True
|
||||||
|
controller_frequency: 50.0
|
||||||
|
initial_perception_timeout: 5.0
|
||||||
|
wait_charge_timeout: 5.0
|
||||||
|
dock_approach_timeout: 30.0
|
||||||
|
undock_linear_tolerance: 0.05
|
||||||
|
undock_angular_tolerance: 0.1
|
||||||
|
max_retries: 3
|
||||||
|
base_frame: "base_link"
|
||||||
|
fixed_frame: "odom"
|
||||||
|
dock_backwards: false
|
||||||
|
dock_prestaging_tolerance: 0.5
|
||||||
|
|
||||||
|
# Types of docks
|
||||||
|
dock_plugins: ['simple_charging_dock']
|
||||||
|
simple_charging_dock:
|
||||||
|
plugin: 'opennav_docking::SimpleChargingDock'
|
||||||
|
docking_threshold: 0.05
|
||||||
|
staging_x_offset: -0.7
|
||||||
|
use_external_detection_pose: true
|
||||||
|
use_battery_status: false # true
|
||||||
|
use_stall_detection: false # true
|
||||||
|
|
||||||
|
external_detection_timeout: 1.0
|
||||||
|
external_detection_translation_x: -0.18
|
||||||
|
external_detection_translation_y: 0.0
|
||||||
|
external_detection_rotation_roll: -1.57
|
||||||
|
external_detection_rotation_pitch: -1.57
|
||||||
|
external_detection_rotation_yaw: 0.0
|
||||||
|
filter_coef: 0.1
|
||||||
|
|
||||||
|
# Dock instances
|
||||||
|
# The following example illustrates configuring dock instances.
|
||||||
|
# docks: ['home_dock'] # Input your docks here
|
||||||
|
# home_dock:
|
||||||
|
# type: 'simple_charging_dock'
|
||||||
|
# frame: map
|
||||||
|
# pose: [0.0, 0.0, 0.0]
|
||||||
|
|
||||||
|
controller:
|
||||||
|
k_phi: 3.0
|
||||||
|
k_delta: 2.0
|
||||||
|
v_linear_min: 0.15
|
||||||
|
v_linear_max: 0.15
|
||||||
|
use_collision_detection: true
|
||||||
|
costmap_topic: "local_costmap/costmap_raw"
|
||||||
|
footprint_topic: "local_costmap/published_footprint"
|
||||||
|
transform_tolerance: 0.1
|
||||||
|
projection_time: 5.0
|
||||||
|
simulation_step: 0.1
|
||||||
|
dock_collision_threshold: 0.3
|
||||||
|
|
||||||
|
loopback_simulator:
|
||||||
|
ros__parameters:
|
||||||
|
base_frame_id: "base_footprint"
|
||||||
|
odom_frame_id: "odom"
|
||||||
|
map_frame_id: "map"
|
||||||
|
scan_frame_id: "base_scan" # tb4_loopback_simulator.launch.py remaps to 'rplidar_link'
|
||||||
|
update_duration: 0.02
|
||||||
|
scan_range_min: 0.05
|
||||||
|
scan_range_max: 30.0
|
||||||
|
scan_angle_min: -3.1415
|
||||||
|
scan_angle_max: 3.1415
|
||||||
|
scan_angle_increment: 0.02617
|
||||||
|
scan_use_inf: true
|
||||||
@@ -1,85 +1,44 @@
|
|||||||
# rtabmap_demos: We add segmented ground and obstacles to voxel_layer of the local costmap and removed scan source.
|
# rtabmap_demos: We add segmented ground and obstacles to voxel_layer of the local costmap and removed scan source.
|
||||||
bt_navigator:
|
bt_navigator:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
|
||||||
global_frame: map
|
global_frame: map
|
||||||
robot_base_frame: base_link
|
robot_base_frame: base_link
|
||||||
odom_topic: /odom
|
odom_topic: /odom
|
||||||
bt_loop_duration: 10
|
bt_loop_duration: 10
|
||||||
default_server_timeout: 20
|
default_server_timeout: 20
|
||||||
wait_for_service_timeout: 1000
|
wait_for_service_timeout: 1000
|
||||||
|
action_server_result_timeout: 900.0
|
||||||
|
navigators: ["navigate_to_pose", "navigate_through_poses"]
|
||||||
|
navigate_to_pose:
|
||||||
|
plugin: "nav2_bt_navigator::NavigateToPoseNavigator"
|
||||||
|
navigate_through_poses:
|
||||||
|
plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator"
|
||||||
# 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults:
|
# 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults:
|
||||||
# nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml
|
# nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml
|
||||||
# nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml
|
# nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml
|
||||||
# They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2.
|
# They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2.
|
||||||
plugin_lib_names:
|
|
||||||
- nav2_compute_path_to_pose_action_bt_node
|
|
||||||
- nav2_compute_path_through_poses_action_bt_node
|
|
||||||
- nav2_smooth_path_action_bt_node
|
|
||||||
- nav2_follow_path_action_bt_node
|
|
||||||
- nav2_spin_action_bt_node
|
|
||||||
- nav2_wait_action_bt_node
|
|
||||||
- nav2_assisted_teleop_action_bt_node
|
|
||||||
- nav2_back_up_action_bt_node
|
|
||||||
- nav2_drive_on_heading_bt_node
|
|
||||||
- nav2_clear_costmap_service_bt_node
|
|
||||||
- nav2_is_stuck_condition_bt_node
|
|
||||||
- nav2_goal_reached_condition_bt_node
|
|
||||||
- nav2_goal_updated_condition_bt_node
|
|
||||||
- nav2_globally_updated_goal_condition_bt_node
|
|
||||||
- nav2_is_path_valid_condition_bt_node
|
|
||||||
- nav2_initial_pose_received_condition_bt_node
|
|
||||||
- nav2_reinitialize_global_localization_service_bt_node
|
|
||||||
- nav2_rate_controller_bt_node
|
|
||||||
- nav2_distance_controller_bt_node
|
|
||||||
- nav2_speed_controller_bt_node
|
|
||||||
- nav2_truncate_path_action_bt_node
|
|
||||||
- nav2_truncate_path_local_action_bt_node
|
|
||||||
- nav2_goal_updater_node_bt_node
|
|
||||||
- nav2_recovery_node_bt_node
|
|
||||||
- nav2_pipeline_sequence_bt_node
|
|
||||||
- nav2_round_robin_node_bt_node
|
|
||||||
- nav2_transform_available_condition_bt_node
|
|
||||||
- nav2_time_expired_condition_bt_node
|
|
||||||
- nav2_path_expiring_timer_condition
|
|
||||||
- nav2_distance_traveled_condition_bt_node
|
|
||||||
- nav2_single_trigger_bt_node
|
|
||||||
- nav2_goal_updated_controller_bt_node
|
|
||||||
- nav2_is_battery_low_condition_bt_node
|
|
||||||
- nav2_navigate_through_poses_action_bt_node
|
|
||||||
- nav2_navigate_to_pose_action_bt_node
|
|
||||||
- nav2_remove_passed_goals_action_bt_node
|
|
||||||
- nav2_planner_selector_bt_node
|
|
||||||
- nav2_controller_selector_bt_node
|
|
||||||
- nav2_goal_checker_selector_bt_node
|
|
||||||
- nav2_controller_cancel_bt_node
|
|
||||||
- nav2_path_longer_on_approach_bt_node
|
|
||||||
- nav2_wait_cancel_bt_node
|
|
||||||
- nav2_spin_cancel_bt_node
|
|
||||||
- nav2_back_up_cancel_bt_node
|
|
||||||
- nav2_assisted_teleop_cancel_bt_node
|
|
||||||
- nav2_drive_on_heading_cancel_bt_node
|
|
||||||
- nav2_is_battery_charging_condition_bt_node
|
|
||||||
|
|
||||||
bt_navigator_navigate_through_poses_rclcpp_node:
|
# plugin_lib_names is used to add custom BT plugins to the executor (vector of strings).
|
||||||
ros__parameters:
|
# Built-in plugins are added automatically
|
||||||
use_sim_time: True
|
# plugin_lib_names: []
|
||||||
|
|
||||||
bt_navigator_navigate_to_pose_rclcpp_node:
|
error_code_names:
|
||||||
ros__parameters:
|
- compute_path_error_code
|
||||||
use_sim_time: True
|
- follow_path_error_code
|
||||||
|
|
||||||
controller_server:
|
controller_server:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
enable_stamped_cmd_vel: True
|
||||||
controller_frequency: 20.0
|
controller_frequency: 20.0
|
||||||
|
costmap_update_timeout: 0.30
|
||||||
min_x_velocity_threshold: 0.001
|
min_x_velocity_threshold: 0.001
|
||||||
min_y_velocity_threshold: 0.5
|
min_y_velocity_threshold: 0.5
|
||||||
min_theta_velocity_threshold: 0.001
|
min_theta_velocity_threshold: 0.001
|
||||||
failure_tolerance: 0.3
|
failure_tolerance: 0.3
|
||||||
progress_checker_plugin: "progress_checker"
|
progress_checker_plugins: ["progress_checker"]
|
||||||
goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"
|
goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"
|
||||||
controller_plugins: ["FollowPath"]
|
controller_plugins: ["FollowPath"]
|
||||||
|
use_realtime_priority: false
|
||||||
|
|
||||||
# Progress checker parameters
|
# Progress checker parameters
|
||||||
progress_checker:
|
progress_checker:
|
||||||
@@ -97,48 +56,96 @@ controller_server:
|
|||||||
plugin: "nav2_controller::SimpleGoalChecker"
|
plugin: "nav2_controller::SimpleGoalChecker"
|
||||||
xy_goal_tolerance: 0.25
|
xy_goal_tolerance: 0.25
|
||||||
yaw_goal_tolerance: 0.25
|
yaw_goal_tolerance: 0.25
|
||||||
# DWB parameters
|
|
||||||
FollowPath:
|
FollowPath:
|
||||||
plugin: "dwb_core::DWBLocalPlanner"
|
plugin: "nav2_mppi_controller::MPPIController"
|
||||||
debug_trajectory_details: True
|
time_steps: 56
|
||||||
min_vel_x: 0.0
|
model_dt: 0.05
|
||||||
min_vel_y: 0.0
|
batch_size: 2000
|
||||||
max_vel_x: 0.26
|
ax_max: 3.0
|
||||||
max_vel_y: 0.0
|
ax_min: -3.0
|
||||||
max_vel_theta: 1.0
|
ay_max: 3.0
|
||||||
min_speed_xy: 0.0
|
ay_min: -3.0
|
||||||
max_speed_xy: 0.26
|
az_max: 3.5
|
||||||
min_speed_theta: 0.0
|
vx_std: 0.2
|
||||||
# Add high threshold velocity for turtlebot 3 issue.
|
vy_std: 0.2
|
||||||
# https://github.com/ROBOTIS-GIT/turtlebot3_simulations/issues/75
|
wz_std: 0.4
|
||||||
acc_lim_x: 2.5
|
vx_max: 0.5
|
||||||
acc_lim_y: 0.0
|
vx_min: -0.35
|
||||||
acc_lim_theta: 3.2
|
vy_max: 0.5
|
||||||
decel_lim_x: -2.5
|
wz_max: 1.9
|
||||||
decel_lim_y: 0.0
|
iteration_count: 1
|
||||||
decel_lim_theta: -3.2
|
prune_distance: 1.7
|
||||||
vx_samples: 20
|
transform_tolerance: 0.1
|
||||||
vy_samples: 5
|
temperature: 0.3
|
||||||
vtheta_samples: 20
|
gamma: 0.015
|
||||||
sim_time: 1.7
|
motion_model: "DiffDrive"
|
||||||
linear_granularity: 0.05
|
visualize: true
|
||||||
angular_granularity: 0.025
|
regenerate_noises: true
|
||||||
transform_tolerance: 0.2
|
TrajectoryVisualizer:
|
||||||
xy_goal_tolerance: 0.25
|
trajectory_step: 5
|
||||||
trans_stopped_velocity: 0.25
|
time_step: 3
|
||||||
short_circuit_trajectory_evaluation: True
|
AckermannConstraints:
|
||||||
stateful: True
|
min_turning_r: 0.2
|
||||||
critics: ["RotateToGoal", "Oscillation", "BaseObstacle", "GoalAlign", "PathAlign", "PathDist", "GoalDist"]
|
critics: [
|
||||||
BaseObstacle.scale: 0.02
|
"ConstraintCritic", "CostCritic", "GoalCritic",
|
||||||
PathAlign.scale: 32.0
|
"GoalAngleCritic", "PathAlignCritic", "PathFollowCritic",
|
||||||
PathAlign.forward_point_distance: 0.1
|
"PathAngleCritic", "PreferForwardCritic"]
|
||||||
GoalAlign.scale: 24.0
|
ConstraintCritic:
|
||||||
GoalAlign.forward_point_distance: 0.1
|
enabled: true
|
||||||
PathDist.scale: 32.0
|
cost_power: 1
|
||||||
GoalDist.scale: 24.0
|
cost_weight: 4.0
|
||||||
RotateToGoal.scale: 32.0
|
GoalCritic:
|
||||||
RotateToGoal.slowing_factor: 5.0
|
enabled: true
|
||||||
RotateToGoal.lookahead_time: -1.0
|
cost_power: 1
|
||||||
|
cost_weight: 5.0
|
||||||
|
threshold_to_consider: 1.4
|
||||||
|
GoalAngleCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 3.0
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
PreferForwardCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 5.0
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
CostCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 3.81
|
||||||
|
near_collision_cost: 253
|
||||||
|
critical_cost: 300.0
|
||||||
|
consider_footprint: false
|
||||||
|
collision_cost: 1000000.0
|
||||||
|
near_goal_distance: 1.0
|
||||||
|
trajectory_point_step: 2
|
||||||
|
PathAlignCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 14.0
|
||||||
|
max_path_occupancy_ratio: 0.05
|
||||||
|
trajectory_point_step: 4
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
offset_from_furthest: 20
|
||||||
|
use_path_orientations: false
|
||||||
|
PathFollowCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 5.0
|
||||||
|
offset_from_furthest: 5
|
||||||
|
threshold_to_consider: 1.4
|
||||||
|
PathAngleCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 2.0
|
||||||
|
offset_from_furthest: 4
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
max_angle_to_furthest: 1.0
|
||||||
|
mode: 0
|
||||||
|
# TwirlingCritic:
|
||||||
|
# enabled: true
|
||||||
|
# twirling_cost_power: 1
|
||||||
|
# twirling_cost_weight: 10.0
|
||||||
|
|
||||||
local_costmap:
|
local_costmap:
|
||||||
local_costmap:
|
local_costmap:
|
||||||
@@ -147,7 +154,6 @@ local_costmap:
|
|||||||
publish_frequency: 2.0
|
publish_frequency: 2.0
|
||||||
global_frame: odom
|
global_frame: odom
|
||||||
robot_base_frame: base_link
|
robot_base_frame: base_link
|
||||||
use_sim_time: True
|
|
||||||
rolling_window: true
|
rolling_window: true
|
||||||
width: 3
|
width: 3
|
||||||
height: 3
|
height: 3
|
||||||
@@ -157,7 +163,7 @@ local_costmap:
|
|||||||
inflation_layer:
|
inflation_layer:
|
||||||
plugin: "nav2_costmap_2d::InflationLayer"
|
plugin: "nav2_costmap_2d::InflationLayer"
|
||||||
cost_scaling_factor: 3.0
|
cost_scaling_factor: 3.0
|
||||||
inflation_radius: 0.55
|
inflation_radius: 0.70
|
||||||
voxel_layer:
|
voxel_layer:
|
||||||
plugin: "nav2_costmap_2d::VoxelLayer"
|
plugin: "nav2_costmap_2d::VoxelLayer"
|
||||||
enabled: True
|
enabled: True
|
||||||
@@ -200,7 +206,6 @@ global_costmap:
|
|||||||
publish_frequency: 1.0
|
publish_frequency: 1.0
|
||||||
global_frame: map
|
global_frame: map
|
||||||
robot_base_frame: base_link
|
robot_base_frame: base_link
|
||||||
use_sim_time: True
|
|
||||||
robot_radius: 0.22
|
robot_radius: 0.22
|
||||||
resolution: 0.05
|
resolution: 0.05
|
||||||
track_unknown_space: true
|
track_unknown_space: true
|
||||||
@@ -211,19 +216,22 @@ global_costmap:
|
|||||||
inflation_layer:
|
inflation_layer:
|
||||||
plugin: "nav2_costmap_2d::InflationLayer"
|
plugin: "nav2_costmap_2d::InflationLayer"
|
||||||
cost_scaling_factor: 3.0
|
cost_scaling_factor: 3.0
|
||||||
inflation_radius: 0.55
|
inflation_radius: 0.7
|
||||||
always_send_full_costmap: True
|
always_send_full_costmap: True
|
||||||
|
|
||||||
map_server:
|
planner_server:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
expected_planner_frequency: 20.0
|
||||||
# Overridden in launch by the "map" launch configuration or provided default value.
|
planner_plugins: ["GridBased"]
|
||||||
# To use in yaml, remove the default "map" value in the tb3_simulation_launch.py file & provide full path to map below.
|
costmap_update_timeout: 1.0
|
||||||
yaml_filename: ""
|
GridBased:
|
||||||
|
plugin: "nav2_navfn_planner::NavfnPlanner"
|
||||||
|
tolerance: 0.5
|
||||||
|
use_astar: false
|
||||||
|
allow_unknown: true
|
||||||
|
|
||||||
smoother_server:
|
smoother_server:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
|
||||||
smoother_plugins: ["simple_smoother"]
|
smoother_plugins: ["simple_smoother"]
|
||||||
simple_smoother:
|
simple_smoother:
|
||||||
plugin: "nav2_smoother::SimpleSmoother"
|
plugin: "nav2_smoother::SimpleSmoother"
|
||||||
@@ -233,55 +241,178 @@ smoother_server:
|
|||||||
|
|
||||||
behavior_server:
|
behavior_server:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
costmap_topic: local_costmap/costmap_raw
|
enable_stamped_cmd_vel: True
|
||||||
footprint_topic: local_costmap/published_footprint
|
local_costmap_topic: local_costmap/costmap_raw
|
||||||
|
global_costmap_topic: global_costmap/costmap_raw
|
||||||
|
local_footprint_topic: local_costmap/published_footprint
|
||||||
|
global_footprint_topic: global_costmap/published_footprint
|
||||||
cycle_frequency: 10.0
|
cycle_frequency: 10.0
|
||||||
behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]
|
behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]
|
||||||
spin:
|
spin:
|
||||||
plugin: "nav2_behaviors/Spin"
|
plugin: "nav2_behaviors::Spin"
|
||||||
backup:
|
backup:
|
||||||
plugin: "nav2_behaviors/BackUp"
|
plugin: "nav2_behaviors::BackUp"
|
||||||
drive_on_heading:
|
drive_on_heading:
|
||||||
plugin: "nav2_behaviors/DriveOnHeading"
|
plugin: "nav2_behaviors::DriveOnHeading"
|
||||||
wait:
|
wait:
|
||||||
plugin: "nav2_behaviors/Wait"
|
plugin: "nav2_behaviors::Wait"
|
||||||
assisted_teleop:
|
assisted_teleop:
|
||||||
plugin: "nav2_behaviors/AssistedTeleop"
|
plugin: "nav2_behaviors::AssistedTeleop"
|
||||||
global_frame: odom
|
local_frame: odom
|
||||||
|
global_frame: map
|
||||||
robot_base_frame: base_link
|
robot_base_frame: base_link
|
||||||
transform_tolerance: 0.1
|
transform_tolerance: 0.1
|
||||||
use_sim_time: true
|
|
||||||
simulate_ahead_time: 2.0
|
simulate_ahead_time: 2.0
|
||||||
max_rotational_vel: 1.0
|
max_rotational_vel: 1.0
|
||||||
min_rotational_vel: 0.4
|
min_rotational_vel: 0.4
|
||||||
rotational_acc_lim: 3.2
|
rotational_acc_lim: 3.2
|
||||||
|
|
||||||
robot_state_publisher:
|
|
||||||
ros__parameters:
|
|
||||||
use_sim_time: True
|
|
||||||
|
|
||||||
waypoint_follower:
|
waypoint_follower:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
|
||||||
loop_rate: 20
|
loop_rate: 20
|
||||||
stop_on_failure: false
|
stop_on_failure: false
|
||||||
|
action_server_result_timeout: 900.0
|
||||||
waypoint_task_executor_plugin: "wait_at_waypoint"
|
waypoint_task_executor_plugin: "wait_at_waypoint"
|
||||||
wait_at_waypoint:
|
wait_at_waypoint:
|
||||||
plugin: "nav2_waypoint_follower::WaitAtWaypoint"
|
plugin: "nav2_waypoint_follower::WaitAtWaypoint"
|
||||||
enabled: True
|
enabled: True
|
||||||
waypoint_pause_duration: 200
|
waypoint_pause_duration: 200
|
||||||
|
|
||||||
|
route_server:
|
||||||
|
ros__parameters:
|
||||||
|
# The graph_filepath does not need to be specified since it going to be set by defaults in launch.
|
||||||
|
# If you'd rather set it in the yaml, remove the default "graph" value in the launch file(s).
|
||||||
|
# file & provide full path to map below. If graph config or launch default is provided, it is used
|
||||||
|
# graph_filepath: $(find-pkg-share nav2_route)/graphs/aws_graph.geojson
|
||||||
|
boundary_radius_to_achieve_node: 1.0
|
||||||
|
radius_to_achieve_node: 2.0
|
||||||
|
smooth_corners: true
|
||||||
|
operations: ["AdjustSpeedLimit", "ReroutingService", "CollisionMonitor"]
|
||||||
|
ReroutingService:
|
||||||
|
plugin: "nav2_route::ReroutingService"
|
||||||
|
AdjustSpeedLimit:
|
||||||
|
plugin: "nav2_route::AdjustSpeedLimit"
|
||||||
|
CollisionMonitor:
|
||||||
|
plugin: "nav2_route::CollisionMonitor"
|
||||||
|
max_collision_dist: 3.0
|
||||||
|
edge_cost_functions: ["DistanceScorer", "CostmapScorer"]
|
||||||
|
DistanceScorer:
|
||||||
|
plugin: "nav2_route::DistanceScorer"
|
||||||
|
CostmapScorer:
|
||||||
|
plugin: "nav2_route::CostmapScorer"
|
||||||
|
|
||||||
velocity_smoother:
|
velocity_smoother:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
enable_stamped_cmd_vel: True
|
||||||
smoothing_frequency: 20.0
|
smoothing_frequency: 20.0
|
||||||
|
stamp_smoothed_velocity_with_smoothing_time: False
|
||||||
scale_velocities: False
|
scale_velocities: False
|
||||||
feedback: "OPEN_LOOP"
|
feedback: "OPEN_LOOP"
|
||||||
max_velocity: [0.26, 0.0, 1.0]
|
max_velocity: [0.5, 0.0, 2.0]
|
||||||
min_velocity: [-0.26, 0.0, -1.0]
|
min_velocity: [-0.5, 0.0, -2.0]
|
||||||
max_accel: [2.5, 0.0, 3.2]
|
max_accel: [2.5, 0.0, 3.2]
|
||||||
max_decel: [-2.5, 0.0, -3.2]
|
max_decel: [-2.5, 0.0, -3.2]
|
||||||
odom_topic: "odom"
|
odom_topic: "odom"
|
||||||
odom_duration: 0.1
|
odom_duration: 0.1
|
||||||
deadband_velocity: [0.0, 0.0, 0.0]
|
deadband_velocity: [0.0, 0.0, 0.0]
|
||||||
velocity_timeout: 1.0
|
velocity_timeout: 1.0
|
||||||
|
|
||||||
|
collision_monitor:
|
||||||
|
ros__parameters:
|
||||||
|
enable_stamped_cmd_vel: True
|
||||||
|
base_frame_id: "base_footprint"
|
||||||
|
odom_frame_id: "odom"
|
||||||
|
cmd_vel_in_topic: "cmd_vel_smoothed"
|
||||||
|
cmd_vel_out_topic: "cmd_vel"
|
||||||
|
state_topic: "collision_monitor_state"
|
||||||
|
transform_tolerance: 0.2
|
||||||
|
source_timeout: 1.0
|
||||||
|
base_shift_correction: True
|
||||||
|
stop_pub_timeout: 2.0
|
||||||
|
# Polygons represent zone around the robot for "stop", "slowdown" and "limit" action types,
|
||||||
|
# and robot footprint for "approach" action type.
|
||||||
|
polygons: ["FootprintApproach"]
|
||||||
|
FootprintApproach:
|
||||||
|
type: "polygon"
|
||||||
|
action_type: "approach"
|
||||||
|
footprint_topic: "/local_costmap/published_footprint"
|
||||||
|
time_before_collision: 1.2
|
||||||
|
simulation_time_step: 0.1
|
||||||
|
min_points: 6
|
||||||
|
visualize: False
|
||||||
|
enabled: True
|
||||||
|
observation_sources: ["scan"]
|
||||||
|
scan:
|
||||||
|
type: "scan"
|
||||||
|
topic: "scan"
|
||||||
|
min_height: 0.15
|
||||||
|
max_height: 2.0
|
||||||
|
enabled: True
|
||||||
|
|
||||||
|
docking_server:
|
||||||
|
ros__parameters:
|
||||||
|
enable_stamped_cmd_vel: True
|
||||||
|
controller_frequency: 50.0
|
||||||
|
initial_perception_timeout: 5.0
|
||||||
|
wait_charge_timeout: 5.0
|
||||||
|
dock_approach_timeout: 30.0
|
||||||
|
undock_linear_tolerance: 0.05
|
||||||
|
undock_angular_tolerance: 0.1
|
||||||
|
max_retries: 3
|
||||||
|
base_frame: "base_link"
|
||||||
|
fixed_frame: "odom"
|
||||||
|
dock_backwards: false
|
||||||
|
dock_prestaging_tolerance: 0.5
|
||||||
|
|
||||||
|
# Types of docks
|
||||||
|
dock_plugins: ['simple_charging_dock']
|
||||||
|
simple_charging_dock:
|
||||||
|
plugin: 'opennav_docking::SimpleChargingDock'
|
||||||
|
docking_threshold: 0.05
|
||||||
|
staging_x_offset: -0.7
|
||||||
|
use_external_detection_pose: true
|
||||||
|
use_battery_status: false # true
|
||||||
|
use_stall_detection: false # true
|
||||||
|
|
||||||
|
external_detection_timeout: 1.0
|
||||||
|
external_detection_translation_x: -0.18
|
||||||
|
external_detection_translation_y: 0.0
|
||||||
|
external_detection_rotation_roll: -1.57
|
||||||
|
external_detection_rotation_pitch: -1.57
|
||||||
|
external_detection_rotation_yaw: 0.0
|
||||||
|
filter_coef: 0.1
|
||||||
|
|
||||||
|
# Dock instances
|
||||||
|
# The following example illustrates configuring dock instances.
|
||||||
|
# docks: ['home_dock'] # Input your docks here
|
||||||
|
# home_dock:
|
||||||
|
# type: 'simple_charging_dock'
|
||||||
|
# frame: map
|
||||||
|
# pose: [0.0, 0.0, 0.0]
|
||||||
|
|
||||||
|
controller:
|
||||||
|
k_phi: 3.0
|
||||||
|
k_delta: 2.0
|
||||||
|
v_linear_min: 0.15
|
||||||
|
v_linear_max: 0.15
|
||||||
|
use_collision_detection: true
|
||||||
|
costmap_topic: "local_costmap/costmap_raw"
|
||||||
|
footprint_topic: "local_costmap/published_footprint"
|
||||||
|
transform_tolerance: 0.1
|
||||||
|
projection_time: 5.0
|
||||||
|
simulation_step: 0.1
|
||||||
|
dock_collision_threshold: 0.3
|
||||||
|
|
||||||
|
loopback_simulator:
|
||||||
|
ros__parameters:
|
||||||
|
base_frame_id: "base_footprint"
|
||||||
|
odom_frame_id: "odom"
|
||||||
|
map_frame_id: "map"
|
||||||
|
scan_frame_id: "base_scan" # tb4_loopback_simulator.launch.py remaps to 'rplidar_link'
|
||||||
|
update_duration: 0.02
|
||||||
|
scan_range_min: 0.05
|
||||||
|
scan_range_max: 30.0
|
||||||
|
scan_angle_min: -3.1415
|
||||||
|
scan_angle_max: 3.1415
|
||||||
|
scan_angle_increment: 0.02617
|
||||||
|
scan_use_inf: true
|
||||||
|
|||||||
@@ -1,85 +1,44 @@
|
|||||||
# rtabmap_demos: We add segmented ground and obstacles to voxel_layer of the local costmap.
|
# rtabmap_demos: We add segmented ground and obstacles to voxel_layer of the local costmap.
|
||||||
bt_navigator:
|
bt_navigator:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
|
||||||
global_frame: map
|
global_frame: map
|
||||||
robot_base_frame: base_link
|
robot_base_frame: base_link
|
||||||
odom_topic: /odom
|
odom_topic: /odom
|
||||||
bt_loop_duration: 10
|
bt_loop_duration: 10
|
||||||
default_server_timeout: 20
|
default_server_timeout: 20
|
||||||
wait_for_service_timeout: 1000
|
wait_for_service_timeout: 1000
|
||||||
|
action_server_result_timeout: 900.0
|
||||||
|
navigators: ["navigate_to_pose", "navigate_through_poses"]
|
||||||
|
navigate_to_pose:
|
||||||
|
plugin: "nav2_bt_navigator::NavigateToPoseNavigator"
|
||||||
|
navigate_through_poses:
|
||||||
|
plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator"
|
||||||
# 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults:
|
# 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults:
|
||||||
# nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml
|
# nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml
|
||||||
# nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml
|
# nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml
|
||||||
# They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2.
|
# They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2.
|
||||||
plugin_lib_names:
|
|
||||||
- nav2_compute_path_to_pose_action_bt_node
|
|
||||||
- nav2_compute_path_through_poses_action_bt_node
|
|
||||||
- nav2_smooth_path_action_bt_node
|
|
||||||
- nav2_follow_path_action_bt_node
|
|
||||||
- nav2_spin_action_bt_node
|
|
||||||
- nav2_wait_action_bt_node
|
|
||||||
- nav2_assisted_teleop_action_bt_node
|
|
||||||
- nav2_back_up_action_bt_node
|
|
||||||
- nav2_drive_on_heading_bt_node
|
|
||||||
- nav2_clear_costmap_service_bt_node
|
|
||||||
- nav2_is_stuck_condition_bt_node
|
|
||||||
- nav2_goal_reached_condition_bt_node
|
|
||||||
- nav2_goal_updated_condition_bt_node
|
|
||||||
- nav2_globally_updated_goal_condition_bt_node
|
|
||||||
- nav2_is_path_valid_condition_bt_node
|
|
||||||
- nav2_initial_pose_received_condition_bt_node
|
|
||||||
- nav2_reinitialize_global_localization_service_bt_node
|
|
||||||
- nav2_rate_controller_bt_node
|
|
||||||
- nav2_distance_controller_bt_node
|
|
||||||
- nav2_speed_controller_bt_node
|
|
||||||
- nav2_truncate_path_action_bt_node
|
|
||||||
- nav2_truncate_path_local_action_bt_node
|
|
||||||
- nav2_goal_updater_node_bt_node
|
|
||||||
- nav2_recovery_node_bt_node
|
|
||||||
- nav2_pipeline_sequence_bt_node
|
|
||||||
- nav2_round_robin_node_bt_node
|
|
||||||
- nav2_transform_available_condition_bt_node
|
|
||||||
- nav2_time_expired_condition_bt_node
|
|
||||||
- nav2_path_expiring_timer_condition
|
|
||||||
- nav2_distance_traveled_condition_bt_node
|
|
||||||
- nav2_single_trigger_bt_node
|
|
||||||
- nav2_goal_updated_controller_bt_node
|
|
||||||
- nav2_is_battery_low_condition_bt_node
|
|
||||||
- nav2_navigate_through_poses_action_bt_node
|
|
||||||
- nav2_navigate_to_pose_action_bt_node
|
|
||||||
- nav2_remove_passed_goals_action_bt_node
|
|
||||||
- nav2_planner_selector_bt_node
|
|
||||||
- nav2_controller_selector_bt_node
|
|
||||||
- nav2_goal_checker_selector_bt_node
|
|
||||||
- nav2_controller_cancel_bt_node
|
|
||||||
- nav2_path_longer_on_approach_bt_node
|
|
||||||
- nav2_wait_cancel_bt_node
|
|
||||||
- nav2_spin_cancel_bt_node
|
|
||||||
- nav2_back_up_cancel_bt_node
|
|
||||||
- nav2_assisted_teleop_cancel_bt_node
|
|
||||||
- nav2_drive_on_heading_cancel_bt_node
|
|
||||||
- nav2_is_battery_charging_condition_bt_node
|
|
||||||
|
|
||||||
bt_navigator_navigate_through_poses_rclcpp_node:
|
# plugin_lib_names is used to add custom BT plugins to the executor (vector of strings).
|
||||||
ros__parameters:
|
# Built-in plugins are added automatically
|
||||||
use_sim_time: True
|
# plugin_lib_names: []
|
||||||
|
|
||||||
bt_navigator_navigate_to_pose_rclcpp_node:
|
error_code_names:
|
||||||
ros__parameters:
|
- compute_path_error_code
|
||||||
use_sim_time: True
|
- follow_path_error_code
|
||||||
|
|
||||||
controller_server:
|
controller_server:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
enable_stamped_cmd_vel: True
|
||||||
controller_frequency: 20.0
|
controller_frequency: 20.0
|
||||||
|
costmap_update_timeout: 0.30
|
||||||
min_x_velocity_threshold: 0.001
|
min_x_velocity_threshold: 0.001
|
||||||
min_y_velocity_threshold: 0.5
|
min_y_velocity_threshold: 0.5
|
||||||
min_theta_velocity_threshold: 0.001
|
min_theta_velocity_threshold: 0.001
|
||||||
failure_tolerance: 0.3
|
failure_tolerance: 0.3
|
||||||
progress_checker_plugin: "progress_checker"
|
progress_checker_plugins: ["progress_checker"]
|
||||||
goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"
|
goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"
|
||||||
controller_plugins: ["FollowPath"]
|
controller_plugins: ["FollowPath"]
|
||||||
|
use_realtime_priority: false
|
||||||
|
|
||||||
# Progress checker parameters
|
# Progress checker parameters
|
||||||
progress_checker:
|
progress_checker:
|
||||||
@@ -97,48 +56,96 @@ controller_server:
|
|||||||
plugin: "nav2_controller::SimpleGoalChecker"
|
plugin: "nav2_controller::SimpleGoalChecker"
|
||||||
xy_goal_tolerance: 0.25
|
xy_goal_tolerance: 0.25
|
||||||
yaw_goal_tolerance: 0.25
|
yaw_goal_tolerance: 0.25
|
||||||
# DWB parameters
|
|
||||||
FollowPath:
|
FollowPath:
|
||||||
plugin: "dwb_core::DWBLocalPlanner"
|
plugin: "nav2_mppi_controller::MPPIController"
|
||||||
debug_trajectory_details: True
|
time_steps: 56
|
||||||
min_vel_x: 0.0
|
model_dt: 0.05
|
||||||
min_vel_y: 0.0
|
batch_size: 2000
|
||||||
max_vel_x: 0.26
|
ax_max: 3.0
|
||||||
max_vel_y: 0.0
|
ax_min: -3.0
|
||||||
max_vel_theta: 1.0
|
ay_max: 3.0
|
||||||
min_speed_xy: 0.0
|
ay_min: -3.0
|
||||||
max_speed_xy: 0.26
|
az_max: 3.5
|
||||||
min_speed_theta: 0.0
|
vx_std: 0.2
|
||||||
# Add high threshold velocity for turtlebot 3 issue.
|
vy_std: 0.2
|
||||||
# https://github.com/ROBOTIS-GIT/turtlebot3_simulations/issues/75
|
wz_std: 0.4
|
||||||
acc_lim_x: 2.5
|
vx_max: 0.5
|
||||||
acc_lim_y: 0.0
|
vx_min: -0.35
|
||||||
acc_lim_theta: 3.2
|
vy_max: 0.5
|
||||||
decel_lim_x: -2.5
|
wz_max: 1.9
|
||||||
decel_lim_y: 0.0
|
iteration_count: 1
|
||||||
decel_lim_theta: -3.2
|
prune_distance: 1.7
|
||||||
vx_samples: 20
|
transform_tolerance: 0.1
|
||||||
vy_samples: 5
|
temperature: 0.3
|
||||||
vtheta_samples: 20
|
gamma: 0.015
|
||||||
sim_time: 1.7
|
motion_model: "DiffDrive"
|
||||||
linear_granularity: 0.05
|
visualize: true
|
||||||
angular_granularity: 0.025
|
regenerate_noises: true
|
||||||
transform_tolerance: 0.2
|
TrajectoryVisualizer:
|
||||||
xy_goal_tolerance: 0.25
|
trajectory_step: 5
|
||||||
trans_stopped_velocity: 0.25
|
time_step: 3
|
||||||
short_circuit_trajectory_evaluation: True
|
AckermannConstraints:
|
||||||
stateful: True
|
min_turning_r: 0.2
|
||||||
critics: ["RotateToGoal", "Oscillation", "BaseObstacle", "GoalAlign", "PathAlign", "PathDist", "GoalDist"]
|
critics: [
|
||||||
BaseObstacle.scale: 0.02
|
"ConstraintCritic", "CostCritic", "GoalCritic",
|
||||||
PathAlign.scale: 32.0
|
"GoalAngleCritic", "PathAlignCritic", "PathFollowCritic",
|
||||||
PathAlign.forward_point_distance: 0.1
|
"PathAngleCritic", "PreferForwardCritic"]
|
||||||
GoalAlign.scale: 24.0
|
ConstraintCritic:
|
||||||
GoalAlign.forward_point_distance: 0.1
|
enabled: true
|
||||||
PathDist.scale: 32.0
|
cost_power: 1
|
||||||
GoalDist.scale: 24.0
|
cost_weight: 4.0
|
||||||
RotateToGoal.scale: 32.0
|
GoalCritic:
|
||||||
RotateToGoal.slowing_factor: 5.0
|
enabled: true
|
||||||
RotateToGoal.lookahead_time: -1.0
|
cost_power: 1
|
||||||
|
cost_weight: 5.0
|
||||||
|
threshold_to_consider: 1.4
|
||||||
|
GoalAngleCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 3.0
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
PreferForwardCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 5.0
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
CostCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 3.81
|
||||||
|
near_collision_cost: 253
|
||||||
|
critical_cost: 300.0
|
||||||
|
consider_footprint: false
|
||||||
|
collision_cost: 1000000.0
|
||||||
|
near_goal_distance: 1.0
|
||||||
|
trajectory_point_step: 2
|
||||||
|
PathAlignCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 14.0
|
||||||
|
max_path_occupancy_ratio: 0.05
|
||||||
|
trajectory_point_step: 4
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
offset_from_furthest: 20
|
||||||
|
use_path_orientations: false
|
||||||
|
PathFollowCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 5.0
|
||||||
|
offset_from_furthest: 5
|
||||||
|
threshold_to_consider: 1.4
|
||||||
|
PathAngleCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 2.0
|
||||||
|
offset_from_furthest: 4
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
max_angle_to_furthest: 1.0
|
||||||
|
mode: 0
|
||||||
|
# TwirlingCritic:
|
||||||
|
# enabled: true
|
||||||
|
# twirling_cost_power: 1
|
||||||
|
# twirling_cost_weight: 10.0
|
||||||
|
|
||||||
local_costmap:
|
local_costmap:
|
||||||
local_costmap:
|
local_costmap:
|
||||||
@@ -147,7 +154,6 @@ local_costmap:
|
|||||||
publish_frequency: 2.0
|
publish_frequency: 2.0
|
||||||
global_frame: odom
|
global_frame: odom
|
||||||
robot_base_frame: base_link
|
robot_base_frame: base_link
|
||||||
use_sim_time: True
|
|
||||||
rolling_window: true
|
rolling_window: true
|
||||||
width: 3
|
width: 3
|
||||||
height: 3
|
height: 3
|
||||||
@@ -157,7 +163,7 @@ local_costmap:
|
|||||||
inflation_layer:
|
inflation_layer:
|
||||||
plugin: "nav2_costmap_2d::InflationLayer"
|
plugin: "nav2_costmap_2d::InflationLayer"
|
||||||
cost_scaling_factor: 3.0
|
cost_scaling_factor: 3.0
|
||||||
inflation_radius: 0.55
|
inflation_radius: 0.70
|
||||||
voxel_layer:
|
voxel_layer:
|
||||||
plugin: "nav2_costmap_2d::VoxelLayer"
|
plugin: "nav2_costmap_2d::VoxelLayer"
|
||||||
enabled: True
|
enabled: True
|
||||||
@@ -210,7 +216,6 @@ global_costmap:
|
|||||||
publish_frequency: 1.0
|
publish_frequency: 1.0
|
||||||
global_frame: map
|
global_frame: map
|
||||||
robot_base_frame: base_link
|
robot_base_frame: base_link
|
||||||
use_sim_time: True
|
|
||||||
robot_radius: 0.22
|
robot_radius: 0.22
|
||||||
resolution: 0.05
|
resolution: 0.05
|
||||||
track_unknown_space: true
|
track_unknown_space: true
|
||||||
@@ -221,23 +226,22 @@ global_costmap:
|
|||||||
inflation_layer:
|
inflation_layer:
|
||||||
plugin: "nav2_costmap_2d::InflationLayer"
|
plugin: "nav2_costmap_2d::InflationLayer"
|
||||||
cost_scaling_factor: 3.0
|
cost_scaling_factor: 3.0
|
||||||
inflation_radius: 0.55
|
inflation_radius: 0.7
|
||||||
always_send_full_costmap: True
|
always_send_full_costmap: True
|
||||||
|
|
||||||
planner_server:
|
planner_server:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
expected_planner_frequency: 20.0
|
expected_planner_frequency: 20.0
|
||||||
use_sim_time: True
|
|
||||||
planner_plugins: ["GridBased"]
|
planner_plugins: ["GridBased"]
|
||||||
|
costmap_update_timeout: 1.0
|
||||||
GridBased:
|
GridBased:
|
||||||
plugin: "nav2_navfn_planner/NavfnPlanner"
|
plugin: "nav2_navfn_planner::NavfnPlanner"
|
||||||
tolerance: 0.5
|
tolerance: 0.5
|
||||||
use_astar: false
|
use_astar: false
|
||||||
allow_unknown: true
|
allow_unknown: true
|
||||||
|
|
||||||
smoother_server:
|
smoother_server:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
|
||||||
smoother_plugins: ["simple_smoother"]
|
smoother_plugins: ["simple_smoother"]
|
||||||
simple_smoother:
|
simple_smoother:
|
||||||
plugin: "nav2_smoother::SimpleSmoother"
|
plugin: "nav2_smoother::SimpleSmoother"
|
||||||
@@ -247,55 +251,178 @@ smoother_server:
|
|||||||
|
|
||||||
behavior_server:
|
behavior_server:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
costmap_topic: local_costmap/costmap_raw
|
enable_stamped_cmd_vel: True
|
||||||
footprint_topic: local_costmap/published_footprint
|
local_costmap_topic: local_costmap/costmap_raw
|
||||||
|
global_costmap_topic: global_costmap/costmap_raw
|
||||||
|
local_footprint_topic: local_costmap/published_footprint
|
||||||
|
global_footprint_topic: global_costmap/published_footprint
|
||||||
cycle_frequency: 10.0
|
cycle_frequency: 10.0
|
||||||
behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]
|
behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]
|
||||||
spin:
|
spin:
|
||||||
plugin: "nav2_behaviors/Spin"
|
plugin: "nav2_behaviors::Spin"
|
||||||
backup:
|
backup:
|
||||||
plugin: "nav2_behaviors/BackUp"
|
plugin: "nav2_behaviors::BackUp"
|
||||||
drive_on_heading:
|
drive_on_heading:
|
||||||
plugin: "nav2_behaviors/DriveOnHeading"
|
plugin: "nav2_behaviors::DriveOnHeading"
|
||||||
wait:
|
wait:
|
||||||
plugin: "nav2_behaviors/Wait"
|
plugin: "nav2_behaviors::Wait"
|
||||||
assisted_teleop:
|
assisted_teleop:
|
||||||
plugin: "nav2_behaviors/AssistedTeleop"
|
plugin: "nav2_behaviors::AssistedTeleop"
|
||||||
global_frame: odom
|
local_frame: odom
|
||||||
|
global_frame: map
|
||||||
robot_base_frame: base_link
|
robot_base_frame: base_link
|
||||||
transform_tolerance: 0.1
|
transform_tolerance: 0.1
|
||||||
use_sim_time: true
|
|
||||||
simulate_ahead_time: 2.0
|
simulate_ahead_time: 2.0
|
||||||
max_rotational_vel: 1.0
|
max_rotational_vel: 1.0
|
||||||
min_rotational_vel: 0.4
|
min_rotational_vel: 0.4
|
||||||
rotational_acc_lim: 3.2
|
rotational_acc_lim: 3.2
|
||||||
|
|
||||||
robot_state_publisher:
|
|
||||||
ros__parameters:
|
|
||||||
use_sim_time: True
|
|
||||||
|
|
||||||
waypoint_follower:
|
waypoint_follower:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
|
||||||
loop_rate: 20
|
loop_rate: 20
|
||||||
stop_on_failure: false
|
stop_on_failure: false
|
||||||
|
action_server_result_timeout: 900.0
|
||||||
waypoint_task_executor_plugin: "wait_at_waypoint"
|
waypoint_task_executor_plugin: "wait_at_waypoint"
|
||||||
wait_at_waypoint:
|
wait_at_waypoint:
|
||||||
plugin: "nav2_waypoint_follower::WaitAtWaypoint"
|
plugin: "nav2_waypoint_follower::WaitAtWaypoint"
|
||||||
enabled: True
|
enabled: True
|
||||||
waypoint_pause_duration: 200
|
waypoint_pause_duration: 200
|
||||||
|
|
||||||
|
route_server:
|
||||||
|
ros__parameters:
|
||||||
|
# The graph_filepath does not need to be specified since it going to be set by defaults in launch.
|
||||||
|
# If you'd rather set it in the yaml, remove the default "graph" value in the launch file(s).
|
||||||
|
# file & provide full path to map below. If graph config or launch default is provided, it is used
|
||||||
|
# graph_filepath: $(find-pkg-share nav2_route)/graphs/aws_graph.geojson
|
||||||
|
boundary_radius_to_achieve_node: 1.0
|
||||||
|
radius_to_achieve_node: 2.0
|
||||||
|
smooth_corners: true
|
||||||
|
operations: ["AdjustSpeedLimit", "ReroutingService", "CollisionMonitor"]
|
||||||
|
ReroutingService:
|
||||||
|
plugin: "nav2_route::ReroutingService"
|
||||||
|
AdjustSpeedLimit:
|
||||||
|
plugin: "nav2_route::AdjustSpeedLimit"
|
||||||
|
CollisionMonitor:
|
||||||
|
plugin: "nav2_route::CollisionMonitor"
|
||||||
|
max_collision_dist: 3.0
|
||||||
|
edge_cost_functions: ["DistanceScorer", "CostmapScorer"]
|
||||||
|
DistanceScorer:
|
||||||
|
plugin: "nav2_route::DistanceScorer"
|
||||||
|
CostmapScorer:
|
||||||
|
plugin: "nav2_route::CostmapScorer"
|
||||||
|
|
||||||
velocity_smoother:
|
velocity_smoother:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
enable_stamped_cmd_vel: True
|
||||||
smoothing_frequency: 20.0
|
smoothing_frequency: 20.0
|
||||||
|
stamp_smoothed_velocity_with_smoothing_time: False
|
||||||
scale_velocities: False
|
scale_velocities: False
|
||||||
feedback: "OPEN_LOOP"
|
feedback: "OPEN_LOOP"
|
||||||
max_velocity: [0.26, 0.0, 1.0]
|
max_velocity: [0.5, 0.0, 2.0]
|
||||||
min_velocity: [-0.26, 0.0, -1.0]
|
min_velocity: [-0.5, 0.0, -2.0]
|
||||||
max_accel: [2.5, 0.0, 3.2]
|
max_accel: [2.5, 0.0, 3.2]
|
||||||
max_decel: [-2.5, 0.0, -3.2]
|
max_decel: [-2.5, 0.0, -3.2]
|
||||||
odom_topic: "odom"
|
odom_topic: "odom"
|
||||||
odom_duration: 0.1
|
odom_duration: 0.1
|
||||||
deadband_velocity: [0.0, 0.0, 0.0]
|
deadband_velocity: [0.0, 0.0, 0.0]
|
||||||
velocity_timeout: 1.0
|
velocity_timeout: 1.0
|
||||||
|
|
||||||
|
collision_monitor:
|
||||||
|
ros__parameters:
|
||||||
|
enable_stamped_cmd_vel: True
|
||||||
|
base_frame_id: "base_footprint"
|
||||||
|
odom_frame_id: "odom"
|
||||||
|
cmd_vel_in_topic: "cmd_vel_smoothed"
|
||||||
|
cmd_vel_out_topic: "cmd_vel"
|
||||||
|
state_topic: "collision_monitor_state"
|
||||||
|
transform_tolerance: 0.2
|
||||||
|
source_timeout: 1.0
|
||||||
|
base_shift_correction: True
|
||||||
|
stop_pub_timeout: 2.0
|
||||||
|
# Polygons represent zone around the robot for "stop", "slowdown" and "limit" action types,
|
||||||
|
# and robot footprint for "approach" action type.
|
||||||
|
polygons: ["FootprintApproach"]
|
||||||
|
FootprintApproach:
|
||||||
|
type: "polygon"
|
||||||
|
action_type: "approach"
|
||||||
|
footprint_topic: "/local_costmap/published_footprint"
|
||||||
|
time_before_collision: 1.2
|
||||||
|
simulation_time_step: 0.1
|
||||||
|
min_points: 6
|
||||||
|
visualize: False
|
||||||
|
enabled: True
|
||||||
|
observation_sources: ["scan"]
|
||||||
|
scan:
|
||||||
|
type: "scan"
|
||||||
|
topic: "scan"
|
||||||
|
min_height: 0.15
|
||||||
|
max_height: 2.0
|
||||||
|
enabled: True
|
||||||
|
|
||||||
|
docking_server:
|
||||||
|
ros__parameters:
|
||||||
|
enable_stamped_cmd_vel: True
|
||||||
|
controller_frequency: 50.0
|
||||||
|
initial_perception_timeout: 5.0
|
||||||
|
wait_charge_timeout: 5.0
|
||||||
|
dock_approach_timeout: 30.0
|
||||||
|
undock_linear_tolerance: 0.05
|
||||||
|
undock_angular_tolerance: 0.1
|
||||||
|
max_retries: 3
|
||||||
|
base_frame: "base_link"
|
||||||
|
fixed_frame: "odom"
|
||||||
|
dock_backwards: false
|
||||||
|
dock_prestaging_tolerance: 0.5
|
||||||
|
|
||||||
|
# Types of docks
|
||||||
|
dock_plugins: ['simple_charging_dock']
|
||||||
|
simple_charging_dock:
|
||||||
|
plugin: 'opennav_docking::SimpleChargingDock'
|
||||||
|
docking_threshold: 0.05
|
||||||
|
staging_x_offset: -0.7
|
||||||
|
use_external_detection_pose: true
|
||||||
|
use_battery_status: false # true
|
||||||
|
use_stall_detection: false # true
|
||||||
|
|
||||||
|
external_detection_timeout: 1.0
|
||||||
|
external_detection_translation_x: -0.18
|
||||||
|
external_detection_translation_y: 0.0
|
||||||
|
external_detection_rotation_roll: -1.57
|
||||||
|
external_detection_rotation_pitch: -1.57
|
||||||
|
external_detection_rotation_yaw: 0.0
|
||||||
|
filter_coef: 0.1
|
||||||
|
|
||||||
|
# Dock instances
|
||||||
|
# The following example illustrates configuring dock instances.
|
||||||
|
# docks: ['home_dock'] # Input your docks here
|
||||||
|
# home_dock:
|
||||||
|
# type: 'simple_charging_dock'
|
||||||
|
# frame: map
|
||||||
|
# pose: [0.0, 0.0, 0.0]
|
||||||
|
|
||||||
|
controller:
|
||||||
|
k_phi: 3.0
|
||||||
|
k_delta: 2.0
|
||||||
|
v_linear_min: 0.15
|
||||||
|
v_linear_max: 0.15
|
||||||
|
use_collision_detection: true
|
||||||
|
costmap_topic: "local_costmap/costmap_raw"
|
||||||
|
footprint_topic: "local_costmap/published_footprint"
|
||||||
|
transform_tolerance: 0.1
|
||||||
|
projection_time: 5.0
|
||||||
|
simulation_step: 0.1
|
||||||
|
dock_collision_threshold: 0.3
|
||||||
|
|
||||||
|
loopback_simulator:
|
||||||
|
ros__parameters:
|
||||||
|
base_frame_id: "base_footprint"
|
||||||
|
odom_frame_id: "odom"
|
||||||
|
map_frame_id: "map"
|
||||||
|
scan_frame_id: "base_scan" # tb4_loopback_simulator.launch.py remaps to 'rplidar_link'
|
||||||
|
update_duration: 0.02
|
||||||
|
scan_range_min: 0.05
|
||||||
|
scan_range_max: 30.0
|
||||||
|
scan_angle_min: -3.1415
|
||||||
|
scan_angle_max: 3.1415
|
||||||
|
scan_angle_increment: 0.02617
|
||||||
|
scan_use_inf: true
|
||||||
@@ -1,85 +1,44 @@
|
|||||||
# Modified to use icp_odom frame
|
# Using icp_odom TF instead of odom
|
||||||
bt_navigator:
|
bt_navigator:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
|
||||||
global_frame: map
|
global_frame: map
|
||||||
robot_base_frame: base_link
|
robot_base_frame: base_link
|
||||||
odom_topic: /odom
|
odom_topic: /odom
|
||||||
bt_loop_duration: 10
|
bt_loop_duration: 10
|
||||||
default_server_timeout: 20
|
default_server_timeout: 20
|
||||||
wait_for_service_timeout: 1000
|
wait_for_service_timeout: 1000
|
||||||
|
action_server_result_timeout: 900.0
|
||||||
|
navigators: ["navigate_to_pose", "navigate_through_poses"]
|
||||||
|
navigate_to_pose:
|
||||||
|
plugin: "nav2_bt_navigator::NavigateToPoseNavigator"
|
||||||
|
navigate_through_poses:
|
||||||
|
plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator"
|
||||||
# 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults:
|
# 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults:
|
||||||
# nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml
|
# nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml
|
||||||
# nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml
|
# nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml
|
||||||
# They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2.
|
# They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2.
|
||||||
plugin_lib_names:
|
|
||||||
- nav2_compute_path_to_pose_action_bt_node
|
|
||||||
- nav2_compute_path_through_poses_action_bt_node
|
|
||||||
- nav2_smooth_path_action_bt_node
|
|
||||||
- nav2_follow_path_action_bt_node
|
|
||||||
- nav2_spin_action_bt_node
|
|
||||||
- nav2_wait_action_bt_node
|
|
||||||
- nav2_assisted_teleop_action_bt_node
|
|
||||||
- nav2_back_up_action_bt_node
|
|
||||||
- nav2_drive_on_heading_bt_node
|
|
||||||
- nav2_clear_costmap_service_bt_node
|
|
||||||
- nav2_is_stuck_condition_bt_node
|
|
||||||
- nav2_goal_reached_condition_bt_node
|
|
||||||
- nav2_goal_updated_condition_bt_node
|
|
||||||
- nav2_globally_updated_goal_condition_bt_node
|
|
||||||
- nav2_is_path_valid_condition_bt_node
|
|
||||||
- nav2_initial_pose_received_condition_bt_node
|
|
||||||
- nav2_reinitialize_global_localization_service_bt_node
|
|
||||||
- nav2_rate_controller_bt_node
|
|
||||||
- nav2_distance_controller_bt_node
|
|
||||||
- nav2_speed_controller_bt_node
|
|
||||||
- nav2_truncate_path_action_bt_node
|
|
||||||
- nav2_truncate_path_local_action_bt_node
|
|
||||||
- nav2_goal_updater_node_bt_node
|
|
||||||
- nav2_recovery_node_bt_node
|
|
||||||
- nav2_pipeline_sequence_bt_node
|
|
||||||
- nav2_round_robin_node_bt_node
|
|
||||||
- nav2_transform_available_condition_bt_node
|
|
||||||
- nav2_time_expired_condition_bt_node
|
|
||||||
- nav2_path_expiring_timer_condition
|
|
||||||
- nav2_distance_traveled_condition_bt_node
|
|
||||||
- nav2_single_trigger_bt_node
|
|
||||||
- nav2_goal_updated_controller_bt_node
|
|
||||||
- nav2_is_battery_low_condition_bt_node
|
|
||||||
- nav2_navigate_through_poses_action_bt_node
|
|
||||||
- nav2_navigate_to_pose_action_bt_node
|
|
||||||
- nav2_remove_passed_goals_action_bt_node
|
|
||||||
- nav2_planner_selector_bt_node
|
|
||||||
- nav2_controller_selector_bt_node
|
|
||||||
- nav2_goal_checker_selector_bt_node
|
|
||||||
- nav2_controller_cancel_bt_node
|
|
||||||
- nav2_path_longer_on_approach_bt_node
|
|
||||||
- nav2_wait_cancel_bt_node
|
|
||||||
- nav2_spin_cancel_bt_node
|
|
||||||
- nav2_back_up_cancel_bt_node
|
|
||||||
- nav2_assisted_teleop_cancel_bt_node
|
|
||||||
- nav2_drive_on_heading_cancel_bt_node
|
|
||||||
- nav2_is_battery_charging_condition_bt_node
|
|
||||||
|
|
||||||
bt_navigator_navigate_through_poses_rclcpp_node:
|
# plugin_lib_names is used to add custom BT plugins to the executor (vector of strings).
|
||||||
ros__parameters:
|
# Built-in plugins are added automatically
|
||||||
use_sim_time: True
|
# plugin_lib_names: []
|
||||||
|
|
||||||
bt_navigator_navigate_to_pose_rclcpp_node:
|
error_code_names:
|
||||||
ros__parameters:
|
- compute_path_error_code
|
||||||
use_sim_time: True
|
- follow_path_error_code
|
||||||
|
|
||||||
controller_server:
|
controller_server:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
enable_stamped_cmd_vel: True
|
||||||
controller_frequency: 20.0
|
controller_frequency: 20.0
|
||||||
|
costmap_update_timeout: 0.30
|
||||||
min_x_velocity_threshold: 0.001
|
min_x_velocity_threshold: 0.001
|
||||||
min_y_velocity_threshold: 0.5
|
min_y_velocity_threshold: 0.5
|
||||||
min_theta_velocity_threshold: 0.001
|
min_theta_velocity_threshold: 0.001
|
||||||
failure_tolerance: 0.3
|
failure_tolerance: 0.3
|
||||||
progress_checker_plugin: "progress_checker"
|
progress_checker_plugins: ["progress_checker"]
|
||||||
goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"
|
goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"
|
||||||
controller_plugins: ["FollowPath"]
|
controller_plugins: ["FollowPath"]
|
||||||
|
use_realtime_priority: false
|
||||||
|
|
||||||
# Progress checker parameters
|
# Progress checker parameters
|
||||||
progress_checker:
|
progress_checker:
|
||||||
@@ -97,48 +56,96 @@ controller_server:
|
|||||||
plugin: "nav2_controller::SimpleGoalChecker"
|
plugin: "nav2_controller::SimpleGoalChecker"
|
||||||
xy_goal_tolerance: 0.25
|
xy_goal_tolerance: 0.25
|
||||||
yaw_goal_tolerance: 0.25
|
yaw_goal_tolerance: 0.25
|
||||||
# DWB parameters
|
|
||||||
FollowPath:
|
FollowPath:
|
||||||
plugin: "dwb_core::DWBLocalPlanner"
|
plugin: "nav2_mppi_controller::MPPIController"
|
||||||
debug_trajectory_details: True
|
time_steps: 56
|
||||||
min_vel_x: 0.0
|
model_dt: 0.05
|
||||||
min_vel_y: 0.0
|
batch_size: 2000
|
||||||
max_vel_x: 0.26
|
ax_max: 3.0
|
||||||
max_vel_y: 0.0
|
ax_min: -3.0
|
||||||
max_vel_theta: 1.0
|
ay_max: 3.0
|
||||||
min_speed_xy: 0.0
|
ay_min: -3.0
|
||||||
max_speed_xy: 0.26
|
az_max: 3.5
|
||||||
min_speed_theta: 0.0
|
vx_std: 0.2
|
||||||
# Add high threshold velocity for turtlebot 3 issue.
|
vy_std: 0.2
|
||||||
# https://github.com/ROBOTIS-GIT/turtlebot3_simulations/issues/75
|
wz_std: 0.4
|
||||||
acc_lim_x: 2.5
|
vx_max: 0.5
|
||||||
acc_lim_y: 0.0
|
vx_min: -0.35
|
||||||
acc_lim_theta: 3.2
|
vy_max: 0.5
|
||||||
decel_lim_x: -2.5
|
wz_max: 1.9
|
||||||
decel_lim_y: 0.0
|
iteration_count: 1
|
||||||
decel_lim_theta: -3.2
|
prune_distance: 1.7
|
||||||
vx_samples: 20
|
transform_tolerance: 0.1
|
||||||
vy_samples: 5
|
temperature: 0.3
|
||||||
vtheta_samples: 20
|
gamma: 0.015
|
||||||
sim_time: 1.7
|
motion_model: "DiffDrive"
|
||||||
linear_granularity: 0.05
|
visualize: true
|
||||||
angular_granularity: 0.025
|
regenerate_noises: true
|
||||||
transform_tolerance: 0.2
|
TrajectoryVisualizer:
|
||||||
xy_goal_tolerance: 0.25
|
trajectory_step: 5
|
||||||
trans_stopped_velocity: 0.25
|
time_step: 3
|
||||||
short_circuit_trajectory_evaluation: True
|
AckermannConstraints:
|
||||||
stateful: True
|
min_turning_r: 0.2
|
||||||
critics: ["RotateToGoal", "Oscillation", "BaseObstacle", "GoalAlign", "PathAlign", "PathDist", "GoalDist"]
|
critics: [
|
||||||
BaseObstacle.scale: 0.02
|
"ConstraintCritic", "CostCritic", "GoalCritic",
|
||||||
PathAlign.scale: 32.0
|
"GoalAngleCritic", "PathAlignCritic", "PathFollowCritic",
|
||||||
PathAlign.forward_point_distance: 0.1
|
"PathAngleCritic", "PreferForwardCritic"]
|
||||||
GoalAlign.scale: 24.0
|
ConstraintCritic:
|
||||||
GoalAlign.forward_point_distance: 0.1
|
enabled: true
|
||||||
PathDist.scale: 32.0
|
cost_power: 1
|
||||||
GoalDist.scale: 24.0
|
cost_weight: 4.0
|
||||||
RotateToGoal.scale: 32.0
|
GoalCritic:
|
||||||
RotateToGoal.slowing_factor: 5.0
|
enabled: true
|
||||||
RotateToGoal.lookahead_time: -1.0
|
cost_power: 1
|
||||||
|
cost_weight: 5.0
|
||||||
|
threshold_to_consider: 1.4
|
||||||
|
GoalAngleCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 3.0
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
PreferForwardCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 5.0
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
CostCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 3.81
|
||||||
|
near_collision_cost: 253
|
||||||
|
critical_cost: 300.0
|
||||||
|
consider_footprint: false
|
||||||
|
collision_cost: 1000000.0
|
||||||
|
near_goal_distance: 1.0
|
||||||
|
trajectory_point_step: 2
|
||||||
|
PathAlignCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 14.0
|
||||||
|
max_path_occupancy_ratio: 0.05
|
||||||
|
trajectory_point_step: 4
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
offset_from_furthest: 20
|
||||||
|
use_path_orientations: false
|
||||||
|
PathFollowCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 5.0
|
||||||
|
offset_from_furthest: 5
|
||||||
|
threshold_to_consider: 1.4
|
||||||
|
PathAngleCritic:
|
||||||
|
enabled: true
|
||||||
|
cost_power: 1
|
||||||
|
cost_weight: 2.0
|
||||||
|
offset_from_furthest: 4
|
||||||
|
threshold_to_consider: 0.5
|
||||||
|
max_angle_to_furthest: 1.0
|
||||||
|
mode: 0
|
||||||
|
# TwirlingCritic:
|
||||||
|
# enabled: true
|
||||||
|
# twirling_cost_power: 1
|
||||||
|
# twirling_cost_weight: 10.0
|
||||||
|
|
||||||
local_costmap:
|
local_costmap:
|
||||||
local_costmap:
|
local_costmap:
|
||||||
@@ -147,7 +154,6 @@ local_costmap:
|
|||||||
publish_frequency: 2.0
|
publish_frequency: 2.0
|
||||||
global_frame: icp_odom
|
global_frame: icp_odom
|
||||||
robot_base_frame: base_link
|
robot_base_frame: base_link
|
||||||
use_sim_time: True
|
|
||||||
rolling_window: true
|
rolling_window: true
|
||||||
width: 3
|
width: 3
|
||||||
height: 3
|
height: 3
|
||||||
@@ -157,7 +163,7 @@ local_costmap:
|
|||||||
inflation_layer:
|
inflation_layer:
|
||||||
plugin: "nav2_costmap_2d::InflationLayer"
|
plugin: "nav2_costmap_2d::InflationLayer"
|
||||||
cost_scaling_factor: 3.0
|
cost_scaling_factor: 3.0
|
||||||
inflation_radius: 0.55
|
inflation_radius: 0.70
|
||||||
voxel_layer:
|
voxel_layer:
|
||||||
plugin: "nav2_costmap_2d::VoxelLayer"
|
plugin: "nav2_costmap_2d::VoxelLayer"
|
||||||
enabled: True
|
enabled: True
|
||||||
@@ -190,7 +196,6 @@ global_costmap:
|
|||||||
publish_frequency: 1.0
|
publish_frequency: 1.0
|
||||||
global_frame: map
|
global_frame: map
|
||||||
robot_base_frame: base_link
|
robot_base_frame: base_link
|
||||||
use_sim_time: True
|
|
||||||
robot_radius: 0.22
|
robot_radius: 0.22
|
||||||
resolution: 0.05
|
resolution: 0.05
|
||||||
track_unknown_space: true
|
track_unknown_space: true
|
||||||
@@ -215,23 +220,22 @@ global_costmap:
|
|||||||
inflation_layer:
|
inflation_layer:
|
||||||
plugin: "nav2_costmap_2d::InflationLayer"
|
plugin: "nav2_costmap_2d::InflationLayer"
|
||||||
cost_scaling_factor: 3.0
|
cost_scaling_factor: 3.0
|
||||||
inflation_radius: 0.55
|
inflation_radius: 0.7
|
||||||
always_send_full_costmap: True
|
always_send_full_costmap: True
|
||||||
|
|
||||||
planner_server:
|
planner_server:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
expected_planner_frequency: 20.0
|
expected_planner_frequency: 20.0
|
||||||
use_sim_time: True
|
|
||||||
planner_plugins: ["GridBased"]
|
planner_plugins: ["GridBased"]
|
||||||
|
costmap_update_timeout: 1.0
|
||||||
GridBased:
|
GridBased:
|
||||||
plugin: "nav2_navfn_planner/NavfnPlanner"
|
plugin: "nav2_navfn_planner::NavfnPlanner"
|
||||||
tolerance: 0.5
|
tolerance: 0.5
|
||||||
use_astar: false
|
use_astar: false
|
||||||
allow_unknown: true
|
allow_unknown: true
|
||||||
|
|
||||||
smoother_server:
|
smoother_server:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
|
||||||
smoother_plugins: ["simple_smoother"]
|
smoother_plugins: ["simple_smoother"]
|
||||||
simple_smoother:
|
simple_smoother:
|
||||||
plugin: "nav2_smoother::SimpleSmoother"
|
plugin: "nav2_smoother::SimpleSmoother"
|
||||||
@@ -241,55 +245,178 @@ smoother_server:
|
|||||||
|
|
||||||
behavior_server:
|
behavior_server:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
costmap_topic: local_costmap/costmap_raw
|
enable_stamped_cmd_vel: True
|
||||||
footprint_topic: local_costmap/published_footprint
|
local_costmap_topic: local_costmap/costmap_raw
|
||||||
|
global_costmap_topic: global_costmap/costmap_raw
|
||||||
|
local_footprint_topic: local_costmap/published_footprint
|
||||||
|
global_footprint_topic: global_costmap/published_footprint
|
||||||
cycle_frequency: 10.0
|
cycle_frequency: 10.0
|
||||||
behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]
|
behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]
|
||||||
spin:
|
spin:
|
||||||
plugin: "nav2_behaviors/Spin"
|
plugin: "nav2_behaviors::Spin"
|
||||||
backup:
|
backup:
|
||||||
plugin: "nav2_behaviors/BackUp"
|
plugin: "nav2_behaviors::BackUp"
|
||||||
drive_on_heading:
|
drive_on_heading:
|
||||||
plugin: "nav2_behaviors/DriveOnHeading"
|
plugin: "nav2_behaviors::DriveOnHeading"
|
||||||
wait:
|
wait:
|
||||||
plugin: "nav2_behaviors/Wait"
|
plugin: "nav2_behaviors::Wait"
|
||||||
assisted_teleop:
|
assisted_teleop:
|
||||||
plugin: "nav2_behaviors/AssistedTeleop"
|
plugin: "nav2_behaviors::AssistedTeleop"
|
||||||
global_frame: icp_odom
|
local_frame: icp_odom
|
||||||
|
global_frame: map
|
||||||
robot_base_frame: base_link
|
robot_base_frame: base_link
|
||||||
transform_tolerance: 0.1
|
transform_tolerance: 0.1
|
||||||
use_sim_time: true
|
|
||||||
simulate_ahead_time: 2.0
|
simulate_ahead_time: 2.0
|
||||||
max_rotational_vel: 1.0
|
max_rotational_vel: 1.0
|
||||||
min_rotational_vel: 0.4
|
min_rotational_vel: 0.4
|
||||||
rotational_acc_lim: 3.2
|
rotational_acc_lim: 3.2
|
||||||
|
|
||||||
robot_state_publisher:
|
|
||||||
ros__parameters:
|
|
||||||
use_sim_time: True
|
|
||||||
|
|
||||||
waypoint_follower:
|
waypoint_follower:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
|
||||||
loop_rate: 20
|
loop_rate: 20
|
||||||
stop_on_failure: false
|
stop_on_failure: false
|
||||||
|
action_server_result_timeout: 900.0
|
||||||
waypoint_task_executor_plugin: "wait_at_waypoint"
|
waypoint_task_executor_plugin: "wait_at_waypoint"
|
||||||
wait_at_waypoint:
|
wait_at_waypoint:
|
||||||
plugin: "nav2_waypoint_follower::WaitAtWaypoint"
|
plugin: "nav2_waypoint_follower::WaitAtWaypoint"
|
||||||
enabled: True
|
enabled: True
|
||||||
waypoint_pause_duration: 200
|
waypoint_pause_duration: 200
|
||||||
|
|
||||||
|
route_server:
|
||||||
|
ros__parameters:
|
||||||
|
# The graph_filepath does not need to be specified since it going to be set by defaults in launch.
|
||||||
|
# If you'd rather set it in the yaml, remove the default "graph" value in the launch file(s).
|
||||||
|
# file & provide full path to map below. If graph config or launch default is provided, it is used
|
||||||
|
# graph_filepath: $(find-pkg-share nav2_route)/graphs/aws_graph.geojson
|
||||||
|
boundary_radius_to_achieve_node: 1.0
|
||||||
|
radius_to_achieve_node: 2.0
|
||||||
|
smooth_corners: true
|
||||||
|
operations: ["AdjustSpeedLimit", "ReroutingService", "CollisionMonitor"]
|
||||||
|
ReroutingService:
|
||||||
|
plugin: "nav2_route::ReroutingService"
|
||||||
|
AdjustSpeedLimit:
|
||||||
|
plugin: "nav2_route::AdjustSpeedLimit"
|
||||||
|
CollisionMonitor:
|
||||||
|
plugin: "nav2_route::CollisionMonitor"
|
||||||
|
max_collision_dist: 3.0
|
||||||
|
edge_cost_functions: ["DistanceScorer", "CostmapScorer"]
|
||||||
|
DistanceScorer:
|
||||||
|
plugin: "nav2_route::DistanceScorer"
|
||||||
|
CostmapScorer:
|
||||||
|
plugin: "nav2_route::CostmapScorer"
|
||||||
|
|
||||||
velocity_smoother:
|
velocity_smoother:
|
||||||
ros__parameters:
|
ros__parameters:
|
||||||
use_sim_time: True
|
enable_stamped_cmd_vel: True
|
||||||
smoothing_frequency: 20.0
|
smoothing_frequency: 20.0
|
||||||
|
stamp_smoothed_velocity_with_smoothing_time: False
|
||||||
scale_velocities: False
|
scale_velocities: False
|
||||||
feedback: "OPEN_LOOP"
|
feedback: "OPEN_LOOP"
|
||||||
max_velocity: [0.26, 0.0, 1.0]
|
max_velocity: [0.5, 0.0, 2.0]
|
||||||
min_velocity: [-0.26, 0.0, -1.0]
|
min_velocity: [-0.5, 0.0, -2.0]
|
||||||
max_accel: [2.5, 0.0, 3.2]
|
max_accel: [2.5, 0.0, 3.2]
|
||||||
max_decel: [-2.5, 0.0, -3.2]
|
max_decel: [-2.5, 0.0, -3.2]
|
||||||
odom_topic: "odom"
|
odom_topic: "odom"
|
||||||
odom_duration: 0.1
|
odom_duration: 0.1
|
||||||
deadband_velocity: [0.0, 0.0, 0.0]
|
deadband_velocity: [0.0, 0.0, 0.0]
|
||||||
velocity_timeout: 1.0
|
velocity_timeout: 1.0
|
||||||
|
|
||||||
|
collision_monitor:
|
||||||
|
ros__parameters:
|
||||||
|
enable_stamped_cmd_vel: True
|
||||||
|
base_frame_id: "base_footprint"
|
||||||
|
odom_frame_id: "icp_odom"
|
||||||
|
cmd_vel_in_topic: "cmd_vel_smoothed"
|
||||||
|
cmd_vel_out_topic: "cmd_vel"
|
||||||
|
state_topic: "collision_monitor_state"
|
||||||
|
transform_tolerance: 0.2
|
||||||
|
source_timeout: 1.0
|
||||||
|
base_shift_correction: True
|
||||||
|
stop_pub_timeout: 2.0
|
||||||
|
# Polygons represent zone around the robot for "stop", "slowdown" and "limit" action types,
|
||||||
|
# and robot footprint for "approach" action type.
|
||||||
|
polygons: ["FootprintApproach"]
|
||||||
|
FootprintApproach:
|
||||||
|
type: "polygon"
|
||||||
|
action_type: "approach"
|
||||||
|
footprint_topic: "/local_costmap/published_footprint"
|
||||||
|
time_before_collision: 1.2
|
||||||
|
simulation_time_step: 0.1
|
||||||
|
min_points: 6
|
||||||
|
visualize: False
|
||||||
|
enabled: True
|
||||||
|
observation_sources: ["scan"]
|
||||||
|
scan:
|
||||||
|
type: "scan"
|
||||||
|
topic: "scan"
|
||||||
|
min_height: 0.15
|
||||||
|
max_height: 2.0
|
||||||
|
enabled: True
|
||||||
|
|
||||||
|
docking_server:
|
||||||
|
ros__parameters:
|
||||||
|
enable_stamped_cmd_vel: True
|
||||||
|
controller_frequency: 50.0
|
||||||
|
initial_perception_timeout: 5.0
|
||||||
|
wait_charge_timeout: 5.0
|
||||||
|
dock_approach_timeout: 30.0
|
||||||
|
undock_linear_tolerance: 0.05
|
||||||
|
undock_angular_tolerance: 0.1
|
||||||
|
max_retries: 3
|
||||||
|
base_frame: "base_link"
|
||||||
|
fixed_frame: "icp_odom"
|
||||||
|
dock_backwards: false
|
||||||
|
dock_prestaging_tolerance: 0.5
|
||||||
|
|
||||||
|
# Types of docks
|
||||||
|
dock_plugins: ['simple_charging_dock']
|
||||||
|
simple_charging_dock:
|
||||||
|
plugin: 'opennav_docking::SimpleChargingDock'
|
||||||
|
docking_threshold: 0.05
|
||||||
|
staging_x_offset: -0.7
|
||||||
|
use_external_detection_pose: true
|
||||||
|
use_battery_status: false # true
|
||||||
|
use_stall_detection: false # true
|
||||||
|
|
||||||
|
external_detection_timeout: 1.0
|
||||||
|
external_detection_translation_x: -0.18
|
||||||
|
external_detection_translation_y: 0.0
|
||||||
|
external_detection_rotation_roll: -1.57
|
||||||
|
external_detection_rotation_pitch: -1.57
|
||||||
|
external_detection_rotation_yaw: 0.0
|
||||||
|
filter_coef: 0.1
|
||||||
|
|
||||||
|
# Dock instances
|
||||||
|
# The following example illustrates configuring dock instances.
|
||||||
|
# docks: ['home_dock'] # Input your docks here
|
||||||
|
# home_dock:
|
||||||
|
# type: 'simple_charging_dock'
|
||||||
|
# frame: map
|
||||||
|
# pose: [0.0, 0.0, 0.0]
|
||||||
|
|
||||||
|
controller:
|
||||||
|
k_phi: 3.0
|
||||||
|
k_delta: 2.0
|
||||||
|
v_linear_min: 0.15
|
||||||
|
v_linear_max: 0.15
|
||||||
|
use_collision_detection: true
|
||||||
|
costmap_topic: "local_costmap/costmap_raw"
|
||||||
|
footprint_topic: "local_costmap/published_footprint"
|
||||||
|
transform_tolerance: 0.1
|
||||||
|
projection_time: 5.0
|
||||||
|
simulation_step: 0.1
|
||||||
|
dock_collision_threshold: 0.3
|
||||||
|
|
||||||
|
loopback_simulator:
|
||||||
|
ros__parameters:
|
||||||
|
base_frame_id: "base_footprint"
|
||||||
|
odom_frame_id: "icp_odom"
|
||||||
|
map_frame_id: "map"
|
||||||
|
scan_frame_id: "base_scan" # tb4_loopback_simulator.launch.py remaps to 'rplidar_link'
|
||||||
|
update_duration: 0.02
|
||||||
|
scan_range_min: 0.05
|
||||||
|
scan_range_max: 30.0
|
||||||
|
scan_angle_min: -3.1415
|
||||||
|
scan_angle_max: 3.1415
|
||||||
|
scan_angle_increment: 0.02617
|
||||||
|
scan_use_inf: true
|
||||||
|
|||||||
Reference in New Issue
Block a user