Files
ROS2_WS/simulation_ws/trolley/launch/gazeboDisPlay.launch.py
2026-02-24 22:09:19 +08:00

79 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import tempfile
from launch import LaunchDescription
from launch.actions import IncludeLaunchDescription, TimerAction, SetEnvironmentVariable
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch_ros.actions import Node
from ament_index_python.packages import get_package_share_directory
import xacro
def generate_launch_description():
pkg_trolley = get_package_share_directory("trolley")
xacro_path = os.path.join(pkg_trolley, "urdf", "miniBox.urdf.xacro")
pkg_gazebo = get_package_share_directory("gazebo_ros")
controllers_yaml = os.path.join(pkg_trolley, "config", "ros2_controllers.yaml")
# 解析 xacro传入 controllers_yaml 路径
robot_description = xacro.process_file(
xacro_path,
mappings={"controllers_yaml": controllers_yaml}
).toxml()
# ★ 将 urdf 写入固定路径临时文件(不是随机名),方便调试
urdf_tmp_path = "/tmp/box_bot.urdf"
with open(urdf_tmp_path, 'w') as f:
f.write(robot_description)
gazebo = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
os.path.join(pkg_gazebo, "launch", "gazebo.launch.py")
)
)
# ★ robot_state_publisher 使用文件路径,不传字符串参数
rsp = Node(
package="robot_state_publisher",
executable="robot_state_publisher",
output="screen",
parameters=[{
"use_sim_time": True,
"robot_description": robot_description,
}],
# ★ 关键:通过环境变量设置 RCL 参数长度限制
additional_env={"RCUTILS_LOGGING_BUFFERED_STREAM": "1"},
)
spawn = Node(
package="gazebo_ros",
executable="spawn_entity.py",
output="screen",
arguments=[
"-file", urdf_tmp_path,
"-entity", "box_bot",
"-z", "0.05",
],
)
spawn_jsb = Node(
package="controller_manager",
executable="spawner",
output="screen",
arguments=["joint_state_broadcaster", "--controller-manager", "/controller_manager"],
)
spawn_dd = Node(
package="controller_manager",
executable="spawner",
output="screen",
arguments=["diff_drive_controller", "--controller-manager", "/controller_manager"],
)
return LaunchDescription([
gazebo,
rsp,
TimerAction(period=3.0, actions=[spawn]),
TimerAction(period=6.0, actions=[spawn_jsb, spawn_dd]),
])