Launch File Setup
In order to properly evaluate competitors code, competitors will need to create a single ROS2 launch file that starts the competition, MoveIT if needed, and any competitor nodes. An example is shown below:
import os
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.actions import IncludeLaunchDescription
from launch_ros.substitutions import FindPackageShare
from launch.substitutions import LaunchConfiguration
from launch.actions import (
DeclareLaunchArgument,
OpaqueFunction,
)
from moveit_configs_utils import MoveItConfigsBuilder
def launch_setup(context, *args, **kwargs):
# Launch arguments
trial_name = LaunchConfiguration("trial_name")
record_state = LaunchConfiguration("record_state")
urdf = os.path.join(get_package_share_directory("ariac_description"), "urdf/ariac_robots/ariac_robots.urdf.xacro")
moveit_config = (
MoveItConfigsBuilder("ariac_robots", package_name="ariac_moveit_config")
.robot_description(urdf)
.robot_description_semantic(file_path="config/ariac_robots.srdf")
.trajectory_execution(file_path="config/moveit_controllers.yaml")
.planning_pipelines(pipelines=["ompl"])
.to_moveit_configs()
)
# Move Group
moveit = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
[FindPackageShare("ariac_moveit_config"), "/launch", "/ariac_robots_moveit.launch.py"]
)
)
# ARIAC_environment
ariac_environment = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
[FindPackageShare("ariac_gazebo"), "/launch", "/ariac.launch.py"]
),
launch_arguments={
'trial_name': trial_name,
'competitor_pkg': "nist_competitor",
'dev_mode': "true",
'record_state': record_state,
}.items()
)
# Nist Competitor node
nist_competitor = Node(
package="nist_competitor",
executable="competitor",
output="screen",
parameters=[
moveit_config.robot_description,
moveit_config.robot_description_semantic,
moveit_config.robot_description_kinematics,
moveit_config.joint_limits,
{"use_sim_time": True},
],
arguments=['--ros-args', '--log-level', 'move_group_interface:=warn', '--log-level', 'moveit_trajectory_processing.time_optimal_trajectory_generation:=error']
)
nodes_to_start = [
nist_competitor,
ariac_environment,
moveit
]
return nodes_to_start
def generate_launch_description():
declared_arguments = []
declared_arguments.append(
DeclareLaunchArgument("trial_name", default_value="kitting", description="Name of ariac trial")
)
declared_arguments.append(
DeclareLaunchArgument("record_state", default_value="true", description="Record gazebo state.log for the trial")
)
return LaunchDescription(declared_arguments + [OpaqueFunction(function=launch_setup)])
Note
Ensure that the launch arguments for the ariac_environment node are correct for your package
Include the trial_name argument as a launch argument for the launch file and make sure that it is passed to the ariac_environment launch file as shown above.
Do not pass dev_mode argument as true to
ariac.launch.py
, doing so will disqualify your team.The
record_state
launch argument must be passed as'true'
for the environment launch file. This is necessary for judging.