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

    6.2.2章节在终端中输入运行指令之后显示package 'robot_joint_publisher' not found

    已定时 已固定 已锁定 已移动
    ROS2机器人开发:从入门到实践
    ros2 rviz 显示机器人
    3
    6
    472
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 3
      321731520
      最后由 编辑

      背景:

      6.2.2章节,想要实现在rviz中显示机器人

      问题描述:

      在根据b站课程输入所有代码后,在终端进行了'ros2 launch display_robot.launch.py'操作,但是并未打开rviz,而是报错显示了
      'wlz@ros2:~/chapt6/chapt6_ws/src/fishbot_description/launch$ ros2 launch display_robot.launch.py
      [INFO] [launch]: All log files can be found below /home/wlz/.ros/log/2024-11-18-16-10-28-088426-ros2-7528
      [INFO] [launch]: Default logging verbosity is set to INFO
      [ERROR] [launch]: Caught exception in launch (see debug for traceback): "package 'robot_joint_publisher' not found, searching: ['/home/wlz/chapt6/chapt6_ws/install/fishbot_description', '/opt/ros/humble']"'

      具体细节和上下文:

      display_robot.launch:

      import launch
      import launch_ros
      from ament_index_python.packages import get_package_share_directory #用于找包的文件目录,以便于导入urdf的....
      import os

      import launch_ros.parameter_descriptions

      def generate_launch_description():
      #获取默认的urdf路径
      urdf_package_path = get_package_share_directory('fishbot_description')
      default_urdf_path = os.path.join(urdf_package_path,'urdf','first_robot.urdf')
      # 声明一个urdf目录的参数,方面修改
      action_declare_arg_mode_path = launch.actions.DeclareLaunchArgument(
      name='model',default_value=str(default_urdf_path),description='加载的模型文件路径'
      )
      # 通过文件路径,获取内容,并转换成参数值对象,以供传入 robot_state_publisher
      substitutions_command_result = launch.substitutions.Command(['cat ',launch.substitutions.LaunchConfiguration('model')])
      robot_description_value = launch_ros.parameter_descriptions.ParameterValue(substitutions_command_result,value_type=str)

      action_robot_state_publisher = launch_ros.actions.Node(
          package='robot_state_publisher',
          executable='robot_state_publisher',
          parameters=[{'robot_description':robot_description_value}]
      
      )
      action_joint_state_publisher = launch_ros.actions.Node(
          package='robot_joint_publisher',
          executable='robot_joint_publisher'
      )
      
      
      action_rviz_node = launch_ros.actions.Node(
          package='rviz2',
          executable='rviz2'
      )
      
      return launch.LaunchDescription([
          action_declare_arg_mode_path,
          action_robot_state_publisher,
          action_joint_state_publisher,
          action_rviz_node,
      ])
      

      CMakeLists:

      cmake_minimum_required(VERSION 3.8)
      project(fishbot_description)

      if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
      add_compile_options(-Wall -Wextra -Wpedantic)
      endif()

      find dependencies

      find_package(ament_cmake REQUIRED)

      uncomment the following section in order to fill in

      further dependencies manually.

      find_package(<dependency> REQUIRED)

      if(BUILD_TESTING)
      find_package(ament_lint_auto REQUIRED)

      the following line skips the linter which checks for copyrights

      comment the line when a copyright and license is added to all source files

      set(ament_cmake_copyright_FOUND TRUE)

      the following line skips cpplint (only works in a git repo)

      comment the line when this package is in a git repo and when

      a copyright and license is added to all source files

      set(ament_cmake_cpplint_FOUND TRUE)
      ament_lint_auto_find_test_dependencies()
      endif()

      install(DIRECTORY launch urdf
      DESTINATION share/${PROJECT_NAME}
      )

      ament_package()

      package:

      <?xml version="1.0"?>
      <?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
      <package format="3">
      <name>fishbot_description</name>
      <version>0.0.0</version>
      <description>TODO: Package description</description>
      <maintainer email="wlz@todo.todo">wlz</maintainer>
      <license>Apache-2.0</license>

      <buildtool_depend>ament_cmake</buildtool_depend>

      <test_depend>ament_lint_auto</test_depend>
      <test_depend>ament_lint_common</test_depend>
      <depend>robot-state-publisher</depend>
      <depend>joint-state-publisher</depend>

      <export>
      <build_type>ament_cmake</build_type>
      </export>
      </package>

      尝试过的解决方法:

      之前以为是安装完joint-state-publisher和robot-state-publisher之后没有在package文件中声明依赖的原因,声明:' <depend>robot-state-publisher</depend>
      <depend>joint-state-publisher</depend>之后仍然不行'

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        从您提供的错误信息和代码中,可以看出问题出在 display_robot.launch.py 文件中尝试启动一个名为 robot_joint_publisher 的节点,但是系统找不到这个包。这里有几个可能的解决步骤:

        1. 检查包名是否正确:
          ROS 2 中并没有一个标准的包叫做 robot_joint_publisher。通常,关节状态发布器是由 joint_state_publisher 包提供的。请检查您的 display_robot.launch.py 文件中的相关部分,确保使用的是正确的包名和可执行文件。

          修改 display_robot.launch.py 中的以下部分:

          action_joint_state_publisher = launch_ros.actions.Node(
              package='joint_state_publisher',  # 修改这里
              executable='joint_state_publisher_executable'  # 确保这是正确的可执行文件名,可能只是 'joint_state_publisher'
          )
          
        2. 确保依赖已正确安装:
          您已经在 package.xml 中添加了 joint-state-publisher 的依赖,但请确保这个包已经被正确安装到您的 ROS 2 工作空间中。您可以通过以下命令来检查是否安装了该包:

          ros2 pkg list | grep joint_state_publisher
          

          如果没有列出,您可能需要重新构建并安装您的工作空间:

          cd ~/chapt6/chapt6_ws
          colcon build
          source install/setup.bash
          
        3. 检查 ROS 2 环境:
          确保您的 ROS 2 环境变量设置正确,特别是 ROS_PACKAGE_PATH 应该包含您的工作空间目录。您可以通过打印此环境变量来检查:

          echo $ROS_PACKAGE_PATH
          
        4. 检查 launch 文件的其他部分:
          确认 display_robot.launch.py 中的其他部分没有错误,特别是与 robot_state_publisher 和 rviz2 相关的部分。

        5. 重新运行 launch 文件:
          在做了上述更改后,重新运行您的 launch 文件:

          ros2 launch display_robot.launch.py
          

        如果以上步骤都正确无误,您的 rviz2 应该能够正常启动,并显示您的机器人模型。如果问题仍然存在,请检查是否有其他的配置错误或依赖问题。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

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

          @321731520 看起来就是依赖没装好,再装装

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

          3 1 条回复 最后回复 回复 引用 0
          • 3
            321731520 @小伊
            最后由 编辑

            @小伊 1138e5e9-4a2d-4d83-9f74-f0a7b8931145-图片.png 上述回答中的第三步显示如上图,这样正常吗
            另外,我修改了一下我的代码:
            import launch
            import launch_ros
            from ament_index_python.packages import get_package_share_directory #用于找包的文件目录,以便于导入urdf的....
            import os

            import launch_ros.parameter_descriptions

            def generate_launch_description():
            #获取默认的urdf路径
            urdf_package_path = get_package_share_directory('fishbot_description')
            default_urdf_path = os.path.join(urdf_package_path,'urdf','first_robot.urdf')
            # 声明一个urdf目录的参数,方面修改
            action_declare_arg_mode_path = launch.actions.DeclareLaunchArgument(
            name='model',default_value=str(default_urdf_path),description='加载的模型文件路径'
            )
            # 通过文件路径,获取内容,并转换成参数值对象,以供传入 robot_state_publisher
            substitutions_command_result = launch.substitutions.Command(['cat ',launch.substitutions.LaunchConfiguration('model')])
            robot_description_value = launch_ros.parameter_descriptions.ParameterValue(substitutions_command_result,value_type=str)

            action_robot_state_publisher = launch_ros.actions.Node(
                package='robot_state_publisher',
                executable='robot_state_publisher',
                parameters=[{'robot_description':robot_description_value}]
            
            )
            action_joint_state_publisher = launch_ros.actions.Node(
                package='robot_joint_publisher',
                executable='robot_joint_publisher'
            )
            
            
            action_rviz_node = launch_ros.actions.Node(
                package='rviz2',
                executable='rviz2'
            )
            
            return launch.LaunchDescription([
                action_declare_arg_mode_path,
                action_robot_state_publisher,
                action_joint_state_publisher,
                action_rviz_node,
            ])
            

            我将上述的步骤1中的state

            1 条回复 最后回复 回复 引用 0
            • 小伊小
              机器人小伊
              最后由 编辑

              在你的代码和描述中,有几点需要注意和修正。首先,关于你提到的“第三步显示如上图,这样正常吗”,由于你没有提供具体的“上图”内容,我无法直接判断其是否正常。不过,通常如果你在描述中提到的“第三步”是指某个特定的输出或结果,而你没有得到预期的输出,那么很可能存在问题。

              接下来,我们来看一下你的代码。你的代码主要是用于生成一个ROS 2的launch文件,该launch文件用于启动robot_state_publisher、robot_joint_publisher和rviz2。以下是对你代码的一些观察和建议:

              1. 导入语句:
                你的导入语句看起来是正确的,它们应该能够正确导入所需的模块。

              2. 获取URDF路径:
                你使用get_package_share_directory来获取fishbot_description包的共享目录,并拼接得到URDF文件的路径。这部分代码是正确的。

              3. 声明启动参数:
                你使用DeclareLaunchArgument来声明一个名为model的启动参数,其默认值为URDF文件的路径。这部分也是正确的。

              4. 使用cat命令获取文件内容:
                你使用Command(['cat ', launch.substitutions.LaunchConfiguration('model')])来获取model参数指定的文件内容。这种方法在大多数情况下是可行的,但依赖于外部命令(如cat)可能不是最健壮的解决方案。在ROS 2中,通常推荐使用更直接的文件读取方法,比如通过Python的内置文件操作函数。然而,由于ROS 2的launch系统支持这种通过命令获取参数值的方式,所以这里也不是绝对错误的。

              5. robot_state_publisher节点:
                你正确地创建了一个robot_state_publisher节点,并将robot_description参数设置为从model参数指定的文件中读取的内容。

              6. robot_joint_publisher节点:
                注意,你这里使用的包名是robot_joint_publisher,但ROS 2的标准包名是joint_state_publisher_gui(对于具有GUI的版本)或joint_state_publisher(对于无GUI的版本)。请确保你使用的包名是正确的,或者你已经正确安装并配置了一个名为robot_joint_publisher的自定义包。

              7. rviz2节点:
                你正确地创建了一个rviz2节点。但是,通常rviz2节点会接受一些参数来配置其启动时的显示设置。你可能希望添加一些额外的参数来配置rviz2的显示,比如加载特定的配置文件。

              8. 返回LaunchDescription:
                你正确地返回了一个包含所有声明和动作的LaunchDescription对象。

              综上所述,你的代码在大多数情况下应该是可以正常工作的,但请确保robot_joint_publisher包名是正确的,并考虑是否需要为rviz2添加额外的启动参数。此外,如果你提到的“第三步显示如上图”有问题,请提供更具体的信息以便进一步诊断。


              以上为生成回答,仅供参考~

              我是小伊,已接入ChatGpt,所有回复,仅供参考~

              1 条回复 最后回复 回复 引用 0
              • 3
                321731520 @小鱼
                最后由 编辑

                @小鱼 解决了,joint和robot的代码书混了

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