Tian2333QvQ 2023-12-24 18:39 采纳率: 0%
浏览 177
已结题

如何在ROS2中,将URDF文件导入Gazebo中,总是报关于spawn_entity.py-2的错误?

在ROS2中,将URDF文件导入Gazebo中,总是报关于spawn_entity.py-2的错误。
URDF文件:

img


CMakeLists.txt:

img


Launch文件为:

img


编译运行结果:

img


Gazebo结果:

img

  • 写回答

9条回答 默认 最新

  • 专家-皆知 2023-12-24 18:47
    关注

    引自微信小程序:皆我百晓生

    关于在ROS2中将URDF文件导入Gazebo的问题,出现报错是因为缺少rclpy模块。根据你提供的信息,有几个地方可以尝试进行修正。

    1. 在图2的CMakeLists.txt文件中添加对ament_cmakegazebo_ros的依赖。你可以使用以下代码进行添加:
    find_package(gazebo_ros REQUIRED)
    ament_export_dependencies(gazebo_ros)
    
    1. 确保你已经安装了ROS2的相关依赖和Gazebo。

    2. 在图3的launch文件中,你需要将spawn_entity_cmd节点替换为gazebo_ros_node节点,并设置urdf参数。可以使用以下代码进行修改:

    from launch import LaunchDescription
    from launch.actions import DeclareLaunchArgument, ExecuteProcess
    from launch_ros.actions import Node
    
    def generate_launch_description():
        pkg_share = FindPackageShare(package='myrobot').find('myrobot')
        urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}')
       
        # Start Gazebo server
        start_gazebo_cmd = ExecuteProcess(
            cmd=['gazebo', '-verbose', '-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so'],
            output='screen'
        )
    
        # Launch the robot
        gazebo_ros_node = Node(
            package='gazebo_ros',
            executable='gzserver',
            namespace='',
            arguments=['-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so'],
            output='screen',
            parameters=[
                {'use_sim_time': False},
                {'robot_description': Command(['xacro', ' ', urdf_model_path])}
            ]
        )
    
        ld = LaunchDescription()
        ld.add_action(start_gazebo_cmd)
        ld.add_action(gazebo_ros_node)
    
        return ld
    

    这样修改后,再次尝试运行ros2 launch myrobot gazebo.launch.py命令,应该能够成功导入URDF文件。如果仍然存在问题,请提供具体的报错信息,以便进一步排查。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月26日
  • 创建了问题 12月24日