# use default valuexacrodemo.urdf.xacro
# set arg from clixacrodemo.urdf.xacroname:=turtle
# convert to urdf filexacrodemo.urdf.xacroname:=turtle>demo.urdf
launch file
Use python pathlib for path construct
Use xacro library
Check condition example for command and PathJoinSubstitution
fromament_index_python.packagesimportget_package_share_directoryfromlaunchimportLaunchDescriptionfromlaunch_ros.actionsimportNodefromlaunch.substitutionsimportLaunchConfiguration,Command,PathJoinSubstitutionfromlaunch.actionsimportDeclareLaunchArgumentPKG_DESCRIPTION="turtlebot_description"URDF_XACRO_FILE="demo.urdf.xacro"ARG_USE_ROS2_CONTROL="use_ros2_control"defgenerate_launch_description():ld=LaunchDescription()use_ros2_control=LaunchConfiguration(ARG_USE_ROS2_CONTROL)use_ros2_control_arg=DeclareLaunchArgument(ARG_USE_ROS2_CONTROL,default_value='false',description='Use sim time if true')xacro_file=PathJoinSubstitution([get_package_share_directory(PKG_DESCRIPTION),'urdf',URDF_XACRO_FILE])urdf=Command(['xacro ',xacro_file," use_control:=",use_ros2_control])params={'robot_description':urdf,'use_sim_time':True}node_robot_state_publisher=Node(package='robot_state_publisher',executable='robot_state_publisher',output='screen',parameters=[params])ld.add_action(use_ros2_control_arg)ld.add_action(node_robot_state_publisher)returnld