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

    ROS2的命名空间问题以及在RViz中不显示模型图像

    已定时 已固定 已锁定 已移动 未解决
    ROS 2相关问题
    ros2机器人 ros2源代码编译
    1
    1
    158
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 2
      ✔
      最后由 编辑

      标题:ROS2的命名空间问题以及在RViz中不显示模型图像

      问题描述及具体细节:

      我需要将两款机械臂同时显示在RViz中,但是我运行.launch.py文件之后只显示了一个机械臂的每个关节的坐标轴,另一个机械臂没有显示出来。
      下面这两张图为运行.launch.py文件之后的效果图:

      b55548a3-105f-479a-8679-a5674113d572-1716885879615.jpg

      9d437f48-6a1e-4c51-93df-5f468064098e-1716886095057.jpg

      以下是我的.launch.py文件的全部代码:

      import os
      from ament_index_python import get_package_share_path
      from launch import LaunchDescription
      from launch_ros.actions import Node
      from launch.substitutions import LaunchConfiguration, Command
      from launch_ros.substitutions import FindPackageShare
      from launch_ros.substitutions import FindPackageShare
      from ament_index_python.packages import get_package_share_directory
      from launch.actions import DeclareLaunchArgument
      
      def generate_launch_description():
          # 获取包路径
          myarm_m750_description_pkg = FindPackageShare('myarm_m750').find('myarm_m750')
          # myarm_c650_description_pkg = FindPackageShare('myarm_c650').find('myarm_c650')
          mycobot_description_pkg = FindPackageShare('mycobot_description').find('mycobot_description')
      
          # 定义 URDF 文件路径
          urdf_m750 = os.path.join(mycobot_description_pkg, 'urdf','myarm_m750', 'myarm_m750.urdf.xacro')
          urdf_c650 = os.path.join(mycobot_description_pkg, 'urdf','myarm_c650', 'myarm_c650.urdf.xacro')
      
          # 定义 RViz 配置文件路径
          rviz_config_file = os.path.join(myarm_m750_description_pkg, 'config', 'myarm_m750_with_myarm_c650.rviz')
      
          ns1_arg = LaunchConfiguration('ns1')
          ns2_arg = LaunchConfiguration('ns2')
          
          return LaunchDescription([
              # 定义是否使用仿真时间参数
              DeclareLaunchArgument('use_sim_time', default_value='false', description='Use simulation (Gazebo) clock if true'),
      
              # myarm_m750 的 robot_state_publisher 节点
              Node(
                  package='robot_state_publisher',
                  executable='robot_state_publisher',
                  namespace='myarm_m750',
                  parameters=[{
                      'use_sim_time': LaunchConfiguration('use_sim_time'), 
                      'robot_description': Command(['xacro ', urdf_m750])
                  }],
                  output='screen',
              ),
              
              # myarm_m750 的 joint_state_publisher_gui 节点
              Node(
                  package='joint_state_publisher_gui',
                  executable='joint_state_publisher_gui',
                  namespace='myarm_m750',
                  parameters=[{'use_sim_time': LaunchConfiguration('use_sim_time')}],
                  output='screen',
              ),
              
              # myarm_c650 的 robot_state_publisher 节点
              Node(
                  package='robot_state_publisher',
                  executable='robot_state_publisher',
                  namespace='myarm_c650',
                  parameters=[{
                      'use_sim_time': LaunchConfiguration('use_sim_time'), 
                      'robot_description': Command(['xacro ', urdf_c650])
                  }],
                  output='screen',
              ),
              
              # myarm_c650 的 joint_state_publisher_gui 节点
              Node(
                  package='joint_state_publisher_gui',
                  executable='joint_state_publisher_gui',
                  namespace='myarm_c650',
                  parameters=[{'use_sim_time': LaunchConfiguration('use_sim_time')}],
                  output='screen',
              ),
              
              # RViz 节点
              Node(
                  package='rviz2',
                  executable='rviz2',
                  name='rviz2',
                  output='screen',
                  arguments=['-d', rviz_config_file],
              ),
              
              # 静态 TF 发布节点
              DeclareLaunchArgument(
                  'ns1',
                  default_value='myarm_m750',
                  description='Namespace 1'
              ),
              DeclareLaunchArgument(
                  'ns2',
                  default_value='myarm_c650',
                  description='Namespace 2'
              ),
      
              # Transform for ns2
              Node(
                  package='tf2_ros',
                  executable='static_transform_publisher',
                  name='static_transform_publisher1_ns2',
                  output='screen',
                  arguments=['0', '-0.5', '0', '0', '0', '0', '/map', [ns2_arg, '/base']]
              ),
              # Transform for ns1
              Node(
                  package='tf2_ros',
                  executable='static_transform_publisher',
                  name='static_transform_publisher1_ns1',
                  output='screen',
                  arguments=['0', '0.5', '0', '0', '0', '0', '/map', [ns1_arg, '/base']]
              )
          ])
      
      

      运行这个代码之后,终端的报错信息是这样的:

      83a207d0-fc7e-4b81-9a5d-0b81658255ba-1716886182539.jpg

      2eb92a54-07bb-4a84-b92c-a5c069d619ae-1716886205050.jpg

      尝试过的解决方法:

      • 我用GPT将实现同样功能的ROS1版本的launch文件中的内容转换成ROS2的.launch.py文件,但是还是报错了。求大佬出手相助!
      1 条回复 最后回复 回复 引用 0
      • 第一个帖子
        最后一个帖子
      皖ICP备16016415号-7
      Powered by NodeBB | 鱼香ROS