Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial support to the new Gazebo #3634

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
c52b2b0
Initial support to the new Gazebo
ahcorde Jun 16, 2023
fd50e02
Added feedback
ahcorde Jun 16, 2023
2500c8c
Fixed build
ahcorde Jun 19, 2023
5215768
Added feeback
ahcorde Jun 20, 2023
d3c421a
Fixed physics tag
ahcorde Jun 20, 2023
975bc78
Fixed physics tag
ahcorde Jun 20, 2023
469c2a2
Fix copyright and urdf
ahcorde Jun 20, 2023
34f466e
min range cannot be zero
ahcorde Jun 21, 2023
01babc9
Simplify files
ahcorde Jun 21, 2023
00b5885
Merge remote-tracking branch 'origin/main' into ahcorde/initial_suppo…
ahcorde Jun 23, 2023
792569a
Added feedback
ahcorde Jun 23, 2023
960fdd7
Added feedback
ahcorde Jun 26, 2023
5a3e06c
Fix
ahcorde Jun 28, 2023
b17def8
Try to reduce load
ahcorde Jul 3, 2023
b413994
Removed cast shadows
ahcorde Jul 17, 2023
ed65b71
Use Gazebo plugins instead of gz_ros2_control
ahcorde Jul 24, 2023
41d7f4e
update dependency
ahcorde Jul 24, 2023
9a36ecd
Removed dependency
ahcorde Jul 24, 2023
027f113
Merge remote-tracking branch 'origin/main' into ahcorde/initial_suppo…
ahcorde Oct 5, 2023
564cf39
Removed ros2_control and use ogre
ahcorde Oct 5, 2023
4b8b006
Merge remote-tracking branch 'origin/main' into ahcorde/initial_suppo…
ahcorde Nov 14, 2023
ddb760d
Use param file to configure bridge
ahcorde Nov 14, 2023
076f1f0
Use sdf model and change to ogre instead of ogre2 for sensors
azeey Dec 15, 2023
04912e6
Merge branch 'main' into support_gz-sim
azeey Dec 15, 2023
b2deaee
Support Garden and later, performance improvements
azeey Dec 20, 2023
43ef810
Merge pull request #1 from azeey/support_gz-sim
ahcorde Dec 28, 2023
1cc1474
Use xacro for world file (#2)
azeey Feb 15, 2024
6a462be
Reviewer feedback
azeey Feb 17, 2024
225f1f3
Add comment explaining temp file
azeey Feb 17, 2024
1d8634d
Fix linter
azeey Feb 17, 2024
5bf14e2
Merge branch 'main' into ahcorde/initial_support/gazebo
SteveMacenski May 28, 2024
cc5bde0
Update nav2_bringup/worlds/gz_world_only.sdf.xacro
SteveMacenski May 28, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions nav2_bringup/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ find_package(navigation2 REQUIRED)

nav2_package()

install(DIRECTORY config DESTINATION share/${PROJECT_NAME})
SteveMacenski marked this conversation as resolved.
Show resolved Hide resolved
install(DIRECTORY launch DESTINATION share/${PROJECT_NAME})
install(DIRECTORY maps DESTINATION share/${PROJECT_NAME})
install(DIRECTORY rviz DESTINATION share/${PROJECT_NAME})
Expand Down
78 changes: 78 additions & 0 deletions nav2_bringup/config/control.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/**:
controller_manager:
ros__parameters:
update_rate: 1000 # Hz

joint_state_broadcaster:
type: joint_state_broadcaster/JointStateBroadcaster

diffdrive_controller:
type: diff_drive_controller/DiffDriveController

diffdrive_controller:
ahcorde marked this conversation as resolved.
Show resolved Hide resolved
ros__parameters:
use_sim_time: True
left_wheel_names: ["wheel_left_joint"]
right_wheel_names: ["wheel_right_joint"]

wheel_separation: 0.287
wheel_radius: 0.033

# Multiplier applied to the wheel separation parameter.
# This is used to account for a difference between the robot model and a real robot.
wheel_separation_multiplier: 1.0

# Multipliers applied to the wheel radius parameter.
# This is used to account for a difference between the robot model and a real robot.
left_wheel_radius_multiplier: 1.0
right_wheel_radius_multiplier: 1.0

publish_rate: 62.0
odom_frame_id: odom
base_frame_id: base_footprint
pose_covariance_diagonal : [0.001, 0.001, 0.001, 0.001, 0.001, 0.01]
twist_covariance_diagonal: [0.001, 0.001, 0.001, 0.001, 0.001, 0.01]

open_loop: false
enable_odom_tf: true

cmd_vel_timeout: 0.5
use_stamped_vel: false

# Preserve turning radius when limiting speed/acceleration/jerk
preserve_turning_radius: true

# Publish limited velocity
publish_cmd: true

# Publish wheel data
publish_wheel_data: true

# Velocity and acceleration limits in cartesian
# These limits do not factor in per wheel limits
# that might be exceeded when linear and angular are combined
# Whenever a min_* is unspecified, default to -max_*
linear.x.has_velocity_limits: true
linear.x.has_acceleration_limits: true
linear.x.has_jerk_limits: false
# This is max if system is safety_override "full"
# motion_control_node will bound this to 0.306 if safety enabled (as is by default)
linear.x.max_velocity: 0.46
linear.x.min_velocity: -0.46
linear.x.max_acceleration: 0.9
# Not using jerk limits yet
# linear.x.max_jerk: 0.0
# linear.x.min_jerk: 0.0

angular.z.has_velocity_limits: true
angular.z.has_acceleration_limits: true
angular.z.has_jerk_limits: false
angular.z.max_velocity: 1.9
angular.z.min_velocity: -1.9
# Using 0.9 linear for each wheel, assuming one wheel accel to .9
# and other to -.9 with wheelbase leads to 7.725 rad/s^2
angular.z.max_acceleration: 7.725
angular.z.min_acceleration: -7.725
# Not using jerk limits yet
# angular.z.max_jerk: 0.0
# angular.z.min_jerk: 0.0
141 changes: 106 additions & 35 deletions nav2_bringup/launch/tb3_simulation_launch.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,14 @@
from ament_index_python.packages import get_package_share_directory

from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument, ExecuteProcess, IncludeLaunchDescription
from launch.actions import DeclareLaunchArgument, ExecuteProcess, GroupAction
from launch.actions import IncludeLaunchDescription, SetEnvironmentVariable
from launch.conditions import IfCondition
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import LaunchConfiguration, PythonExpression
from launch.substitutions import Command, LaunchConfiguration, PathJoinSubstitution
from launch.substitutions import PythonExpression
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare


def generate_launch_description():
Expand All @@ -43,6 +46,7 @@ def generate_launch_description():
autostart = LaunchConfiguration('autostart')
use_composition = LaunchConfiguration('use_composition')
use_respawn = LaunchConfiguration('use_respawn')
use_gz = LaunchConfiguration('use_gz')
ahcorde marked this conversation as resolved.
Show resolved Hide resolved

# Launch configuration variables specific to simulation
rviz_config_file = LaunchConfiguration('rviz_config_file')
Expand Down Expand Up @@ -134,6 +138,11 @@ def generate_launch_description():
default_value='True',
description='Whether to start RVIZ')

declare_use_gz_cmd = DeclareLaunchArgument(
'use_gz',
default_value='False',
description='Use Gazebo (gz) or Gazebo classic')

declare_simulator_cmd = DeclareLaunchArgument(
'headless',
default_value='True',
Expand All @@ -155,26 +164,9 @@ def generate_launch_description():

declare_robot_sdf_cmd = DeclareLaunchArgument(
'robot_sdf',
default_value=os.path.join(bringup_dir, 'worlds', 'waffle.model'),
default_value=os.path.join(bringup_dir, 'urdf', 'turtlebot3_waffle.urdf'),
description='Full path to robot sdf file to spawn the robot in gazebo')

# Specify the actions
start_gazebo_server_cmd = ExecuteProcess(
condition=IfCondition(use_simulator),
cmd=['gzserver', '-s', 'libgazebo_ros_init.so',
'-s', 'libgazebo_ros_factory.so', world],
cwd=[launch_dir], output='screen')

start_gazebo_client_cmd = ExecuteProcess(
condition=IfCondition(PythonExpression(
[use_simulator, ' and not ', headless])),
cmd=['gzclient'],
cwd=[launch_dir], output='screen')

urdf = os.path.join(bringup_dir, 'urdf', 'turtlebot3_waffle.urdf')
with open(urdf, 'r') as infp:
robot_description = infp.read()

start_robot_state_publisher_cmd = Node(
condition=IfCondition(use_robot_state_pub),
package='robot_state_publisher',
Expand All @@ -183,20 +175,9 @@ def generate_launch_description():
namespace=namespace,
output='screen',
parameters=[{'use_sim_time': use_sim_time,
'robot_description': robot_description}],
'robot_description': Command(['xacro', ' ', robot_sdf])}],
remappings=remappings)

start_gazebo_spawner_cmd = Node(
package='gazebo_ros',
executable='spawn_entity.py',
output='screen',
arguments=[
'-entity', robot_name,
'-file', robot_sdf,
'-robot_namespace', namespace,
'-x', pose['x'], '-y', pose['y'], '-z', pose['z'],
'-R', pose['R'], '-P', pose['P'], '-Y', pose['Y']])

rviz_cmd = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
os.path.join(launch_dir, 'rviz_launch.py')),
Expand All @@ -218,6 +199,96 @@ def generate_launch_description():
'use_composition': use_composition,
'use_respawn': use_respawn}.items())

env_vars = os.path.join(get_package_share_directory('turtlebot3_gazebo'), 'models') + ':' + \
os.path.join(get_package_share_directory(
'aws_robomaker_small_warehouse_world'), 'models') + ':' + \
os.path.join(get_package_share_directory(
'turtlebot3_gazebo'), '..')

load_gazeboclassic = GroupAction(
condition=IfCondition(PythonExpression(['not ', use_gz])),
actions=[
SetEnvironmentVariable('GAZEBO_MODEL_PATH', env_vars),
# Specify the actions
ExecuteProcess(
condition=IfCondition(use_simulator),
cmd=['gzserver', '--verbose', '-s', 'libgazebo_ros_init.so',
'-s', 'libgazebo_ros_factory.so', world],
cwd=[launch_dir], output='screen'),
ExecuteProcess(
condition=IfCondition(PythonExpression(
[use_simulator, ' and not ', headless])),
cmd=['gzclient'],
cwd=[launch_dir], output='screen'),
Node(
package='gazebo_ros',
executable='spawn_entity.py',
output='screen',
arguments=[
'-entity', robot_name,
'-topic', 'robot_description',
'-robot_namespace', namespace,
'-x', pose['x'], '-y', pose['y'], '-z', pose['z'],
'-R', pose['R'], '-P', pose['P'], '-Y', pose['Y']])
]
)

load_gz = GroupAction(
condition=IfCondition(use_gz),
actions=[
SetEnvironmentVariable('IGN_GAZEBO_RESOURCE_PATH', env_vars),
Node(
package='ros_gz_bridge', executable='parameter_bridge',
name='clock_bridge',
output='screen',
parameters=[{
'use_sim_time': True
}],
arguments=['/clock' + '@rosgraph_msgs/msg/Clock' + '[ignition.msgs.Clock']
),
Node(
package='ros_gz_bridge',
executable='parameter_bridge',
name='lidar_bridge',
output='screen',
parameters=[{
'use_sim_time': True
}],
arguments=[['/scan' + '@sensor_msgs/msg/LaserScan[ignition.msgs.LaserScan']],
),
ExecuteProcess(
cmd=['ros2', 'control', 'load_controller', '--set-state', 'active',
'joint_state_broadcaster'],
output='screen'
),
ExecuteProcess(
cmd=['ros2', 'control', 'load_controller', '--set-state', 'active',
'diffdrive_controller'],
output='screen'
),
Node(
package='ros_gz_sim',
executable='create',
output='screen',
arguments=[
'-entity', robot_name,
'-string', Command(['xacro', ' ', robot_sdf]),
'-robot_namespace', namespace,
'-x', pose['x'], '-y', pose['y'], '-z', pose['z'],
'-R', pose['R'], '-P', pose['P'], '-Y', pose['Y']]),
IncludeLaunchDescription(
PythonLaunchDescriptionSource(
PathJoinSubstitution([
FindPackageShare('ros_gz_sim'),
'launch',
'gz_sim.launch.py'
])
),
launch_arguments={'gz_args': ['-r -v 4 ', world]}.items(),
)
]
)

# Create the launch description and populate
ld = LaunchDescription()

Expand All @@ -240,11 +311,11 @@ def generate_launch_description():
ld.add_action(declare_robot_name_cmd)
ld.add_action(declare_robot_sdf_cmd)
ld.add_action(declare_use_respawn_cmd)
ld.add_action(declare_use_gz_cmd)

# Add any conditioned actions
ld.add_action(start_gazebo_server_cmd)
ld.add_action(start_gazebo_client_cmd)
ld.add_action(start_gazebo_spawner_cmd)
ld.add_action(load_gazeboclassic)
ld.add_action(load_gz)

# Add the actions to launch all of the navigation nodes
ld.add_action(start_robot_state_publisher_cmd)
Expand Down
5 changes: 5 additions & 0 deletions nav2_bringup/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,14 @@
<build_depend>navigation2</build_depend>
<build_depend>launch_ros</build_depend>

<exec_depend>diff_drive_controller</exec_depend>
<exec_depend>ign_ros2_control</exec_depend>
<exec_depend>joint_state_broadcaster</exec_depend>
<exec_depend>launch_ros</exec_depend>
<exec_depend>navigation2</exec_depend>
<exec_depend>nav2_common</exec_depend>
<exec_depend>ros_gz_bridge</exec_depend>
SteveMacenski marked this conversation as resolved.
Show resolved Hide resolved
<exec_depend>ros_gz_sim</exec_depend>
<exec_depend>slam_toolbox</exec_depend>
<exec_depend>turtlebot3_gazebo</exec_depend>

Expand Down
Loading