ROS2 Jazzy下Gazebo Harmonic启动后黑屏问题求助
ROS2 Jazzy + Gazebo Harmonic 仿真黑屏问题排查与解决
问题排查与修复步骤
1. 修复时钟桥参数语法错误
你的gz_ros2_bridge节点参数缺少闭合右括号,会导致桥接启动失败,影响仿真时间同步,进而引发显示异常:
gz_ros2_bridge = Node( package="ros_gz_bridge", executable="parameter_bridge", arguments=[ "/clock@rosgraph_msgs/msg/Clock[gz.msgs.Clock]" # 补充缺失的右括号 ] )
2. 修正Gazebo资源路径设置
当前GZ_SIM_RESOURCE_PATH仅设置了包的父目录,Gazebo可能无法找到模型、材质等资源。建议保留系统原有资源路径的同时,添加当前描述包目录:
gazebo_resource_path = SetEnvironmentVariable( name="GZ_SIM_RESOURCE_PATH", value=[ os.environ.get("GZ_SIM_RESOURCE_PATH", ""), # 保留系统默认资源路径 os.pathsep, # 路径分隔符(Linux为:,Windows为;) arduinobot_description_dir, # 添加机器人描述包目录 os.pathsep, str(Path(arduinobot_description_dir).parent.resolve()) ] )
3. 调整Gazebo启动参数拼接格式
当前physics_engine与gz_args拼接时缺少空格,会导致参数解析错误。同时简化Harmonic版本的物理引擎参数:
# 简化物理引擎参数 physics_engine = "" if ros_distro == "humble" else "--physics-engine bullet" # 修正Gazebo启动参数拼接 gazebo = IncludeLaunchDescription( PythonLaunchDescriptionSource([ os.path.join( get_package_share_directory("ros_gz_sim"), "launch", "gz_sim.launch.py" ) ]), launch_arguments=[ ("gz_args", ["-v 4 -r empty.sdf ", physics_engine]) # 保留empty.sdf后的空格 ] )
4. 延迟Spawn实体,适配Gazebo启动节奏
Gazebo未完全初始化时就Spawn机器人,可能导致实体加载失败引发黑屏。添加延迟启动Spawn节点:
from launch.actions import TimerAction # 替换原gz_spawn_entity定义 gz_spawn_entity = TimerAction( period=5.0, # 延迟5秒,给Gazebo足够初始化时间 actions=[ Node( package="ros_gz_sim", executable="create", output="screen", arguments=["-topic", "robot_description", "-name", "arduinobot"] ) ] )
5. 验证URDF转SDF的正确性
即使URDF无报错,转SDF时可能存在隐性问题,手动生成并验证:
xacro path/to/arduinobot.urdf.xacro is_ignition:=False > robot.sdf gz sdf -validate robot.sdf
若SDF验证不通过,需修复URDF中的惯性参数、材质定义等问题。
6. 查看Gazebo详细日志
启动时通过-v4输出的详细日志,搜索Error或Warning关键词,定位资源缺失、加载失败等具体问题。
内容的提问来源于stack exchange,提问作者Sanjay
相关产品推荐
相关产品推荐

