鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    在rviz2中显示多个机器人

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    ros2 多机器人
    6
    7
    949
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 16549396971
      异乡人
      最后由 编辑

      平台:Ubuntu22.04,ros2:humble
      问题:在学习完小鱼的“动手学ros2”建模仿真篇后,我学会了如何运用launch将单个机器人添加Gazebo中和利用rqt添加多个机器人到gazebo。
      现在我想利用一个launch将多个机器人模型展示在gazebo中,并且在rviz2中显示多个机器人。目前,在gazebo中可以显示多个机器人,但是rviz2中,只能显示一个机器人模型,且模型来回跳动,如图:
      15e34ea1-d62a-42b4-88eb-1a9e5e1aab8f-fe7f53048045685e97000b38f9f03f1.png
      fa2c85af-236c-4cf8-9345-28de1cbe443d-35c61805ca141e1f60d2e1f6a415c1d.png
      launch文件如下:
      import os
      from launch import LaunchDescription
      from launch.actions import ExecuteProcess
      from launch_ros.actions import Node
      from launch_ros.substitutions import FindPackageShare

      def generate_launch_description():
      name1 = 'fishbot1'
      name2 = 'fishbot2'
      package_name = 'fishbot_description'
      urdf_name = "fishbot_gazebo.urdf"

      ld = LaunchDescription()
      pkg_share = FindPackageShare(package=package_name).find(package_name) 
      urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}')
      gazebo_world_path = os.path.join(pkg_share, 'world/fishbot.world')
      
      # Start Gazebo server
      start_gazebo_cmd =  ExecuteProcess(
          cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so',gazebo_world_path],
          output='screen')
      
      # Launch the robot1
      spawn_entity_cmd1 = Node(
          package='gazebo_ros', 
          executable='spawn_entity.py',
          # namespace='robot1',
          arguments=[
              '-entity', name1,  
              '-file', urdf_model_path,
              '-robot_namespace', name1,
              ], 
          output='screen'
      )
      
      # Start Robot1 State publisher
      start_robot_state_publisher_cmd1 = Node(
          package='robot_state_publisher',
          executable='robot_state_publisher',
          namespace=name1,
          arguments=[urdf_model_path]
      )
      
      # Launch the robot2
      spawn_entity_cmd2 = Node(
          package='gazebo_ros', 
          executable='spawn_entity.py',
          # namespace='robot2',
          arguments=[
              '-entity', name2,  
              '-file', urdf_model_path,
              '-robot_namespace', name2,
              '-x', '0.5' 
              ], 
          output='screen'
      )
      
      # Start Robot2 State publisher
      start_robot_state_publisher_cmd2 = Node(
          package='robot_state_publisher',
          executable='robot_state_publisher',
          namespace=name2,
          arguments=[urdf_model_path]
      )
      
      # Launch RViz
      start_rviz_cmd = Node(
          package='rviz2',
          executable='rviz2',
          name='rviz2',
          output='screen',
          # arguments=['-d', default_rviz_config_path]
          
          )
      
      
      ld.add_action(start_gazebo_cmd)
      ld.add_action(spawn_entity_cmd1)
      ld.add_action(spawn_entity_cmd2)
      ld.add_action(start_robot_state_publisher_cmd1)
      ld.add_action(start_robot_state_publisher_cmd2)
      ld.add_action(start_rviz_cmd)
      
      return ld
      
      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @1654939697
        最后由 编辑

        @1654939697 两个机器人没有使用明明空间可能

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        29180954962 1 条回复 最后回复 回复 引用 0
        • 29180954962
          天问 @小鱼
          最后由 编辑

          @小鱼 怎么样去添加命名空间,我看他这个好像有用啊,是不是用的不对。

          小鱼小 1 条回复 最后回复 回复 引用 0
          • 小鱼小
            小鱼 技术大佬 @2918095496
            最后由 编辑

            @2918095496 ros2 topic list 看一下 和 TF 也看一下

            新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

            1 条回复 最后回复 回复 引用 0
            • 26607676892
              琴の酒
              最后由 编辑

              我解决了,我是加了命名空间,而且修改了urdf、xacro模型文件里关节和连杆的名称,比如link1改成robot1_link1。我猜你和我一样,都是从网上下载了不同模型的xacro或者urdf文件,这些文件里都是采用了link1、joint1之类的命名,所以运行rviz2时,系统分不清那个是link1,2,3.。。,存在命名冲突,所以会一闪一闪

              1 L 2 条回复 最后回复 回复 引用 0
              • 1
                1540302317 @2660767689
                最后由 编辑

                @2660767689 那如果要运行很多台机器呢,怎么办,一个一个加吗🤕

                1 条回复 最后回复 回复 引用 0
                • L
                  liuyuan @2660767689
                  最后由 编辑

                  @2660767689 能看一下在哪里添加了命名空间么

                  1 条回复 最后回复 回复 引用 0
                  • 第一个帖子
                    最后一个帖子
                  皖ICP备16016415号-7
                  Powered by NodeBB | 鱼香ROS