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

    3.4.3 系统信息获取发布运行节点出错

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

      代码都是按照鱼哥视频一步一步来的但是在运行发布的节点的时候一直不能运行,我看了下确定功能包名字没有写错哇,鱼哥救我
      报错日志:

        File "/home/chen/chapt3/topic_practice_ws/install/status_publisher/lib/status_publisher/sys_status_pub", line 33, in <module>
          sys.exit(load_entry_point('status-publisher==0.0.0', 'console_scripts', 'sys_status_pub')())
        File "/home/chen/chapt3/topic_practice_ws/install/status_publisher/lib/status_publisher/sys_status_pub", line 25, in importlib_load_entry_point
          return next(matches).load()
        File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 171, in load
          module = import_module(match.group('module'))
        File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
          return _bootstrap._gcd_import(name[level:], package, level)
        File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
        File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
        File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked
      ModuleNotFoundError: No module named 'status_publisher.sys_status_pub'
      [ros2run]: Process exited with failure 1
      

      sys_status_pub.py

      import rclpy
      from rclpy.node import Node
      from status_interface.msg import SystemStatus # 导入消息接口
      import psutil
      import platform
      
      class SysStatusPub(Node):
          def __init__(self, node_name):
              super().__init__(node_name)
              self.status_publisher_ = self.create_publisher(
                  SystemStatus, 'sys_status', 10)
              self.timer = self.create_timer(1, self.timer_callback)
      
          def timer_callback(self):
              cpu_percent = psutil.cpu_percent()
              memory_info = psutil.virtual_memory()
              net_io_counters = psutil.net_io_counters()
      
              msg = SystemStatus()
              msg.stamp = self.get_clock().now().to_msg()
              msg.host_name = platform.node()
              msg.cpu_percent = cpu_percent
              msg.memory_percent = memory_info.percent
              msg.memory_total = memory_info.total / 1024 / 1024
              msg.memory_available = memory_info.available / 1024 / 1024
              msg.net_sent = net_io_counters.bytes_sent / 1024 / 1024
              msg.net_recv = net_io_counters.bytes_recv / 1024 / 1024
      
              self.get_logger().info(f'发布:{str(msg)}')
              self.status_publisher_.publish(msg)
      
      
      def main():
          rclpy.init()
          node = SysStatusPub('sys_status_pub')
          rclpy.spin(node)
          rclpy.shutdown()
      
      
              ```
      setup.py
      

      from setuptools import find_packages, setup

      package_name = 'status_publisher'

      setup(
      name=package_name,
      version='0.0.0',
      packages=find_packages(exclude=['test']),
      data_files=[
      ('share/ament_index/resource_index/packages',
      ['resource/' + package_name]),
      ('share/' + package_name, ['package.xml']),
      ],
      install_requires=['setuptools'],
      zip_safe=True,
      maintainer='mzebra',
      maintainer_email='mzebra@foxmail.com',
      description='TODO: Package description',
      license='Apache-2.0',
      tests_require=['pytest'],
      entry_points={
      'console_scripts': [
      'sys_status_pub=status_publisher.sys_status_pub:main'
      ],
      },
      )

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

        @2118561423 目录不对,sys_status_pub.py 放到 init.py 同一个级别

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

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

          根据你提供的错误信息和代码,问题似乎出在 Python 包的导入路径上。错误日志 ModuleNotFoundError: No module named 'status_publisher.sys_status_pub' 表明 Python 无法在 status_publisher 包中找到 sys_status_pub 模块。这通常是由于以下几种情况之一导致的:

          1. 文件结构问题:确保 sys_status_pub.py 文件位于正确的目录下,通常应该是 status_publisher 文件夹内。

          2. setup.py 中的 find_packages:find_packages() 函数应正确识别你的包和模块。你的 setup.py 看起来是正确的,但确保 find_packages() 没有被错误地配置为排除 status_publisher 包或其中的任何文件。

          3. PYTHONPATH 环境变量:确保你的工作空间已经正确设置到 PYTHONPATH 中。在使用 ROS 2 时,通常通过 source install/setup.bash 来设置环境。

          4. 包安装问题:可能是包没有正确安装。尝试重新安装你的工作空间:

            cd /path/to/your/workspace
            colcon build --packages-up-to status_publisher
            source install/setup.bash
            
          5. 检查 __init__.py 文件:确保 status_publisher 文件夹中有一个 __init__.py 文件(即使它是空的)。这个文件使 Python 将该文件夹视为一个包。

          6. 入口点配置:你的 setup.py 中的 entry_points 配置看起来是正确的,但确保没有拼写错误。

          解决步骤

          1. 检查文件结构:
            确保你的文件结构类似于:

            topic_practice_ws/
            ├── src/
            │   └── status_publisher/
            │       ├── __init__.py
            │       ├── sys_status_pub.py
            │       └── ... (其他可能的文件)
            ├── setup.py
            └── ... (其他 ROS 2 工作空间文件)
            
          2. 确保 __init__.py 存在:
            在 status_publisher 文件夹中检查是否有一个 __init__.py 文件。

          3. 重新安装工作空间:

            cd /home/chen/chapt3/topic_practice_ws
            colcon build --packages-up-to status_publisher
            source install/setup.bash
            
          4. 尝试运行节点:

            ros2 run status_publisher sys_status_pub
            

          如果以上步骤仍然无法解决问题,请检查是否有其他配置或环境问题影响到包的导入。希望这些信息能帮助你解决问题!如果问题仍然存在,请提供更多的信息,如你的工作空间的整体结构和任何可能的自定义配置。


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

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

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

            @小伊 350bf757-005e-431a-9442-b093a8aac6cd-image.png

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

              @2118561423 目录不对,sys_status_pub.py 放到 init.py 同一个级别

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

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

                @小鱼 哇趣,把sys_status_pub.py挪上来果然就好了,谢谢我鱼哥,感谢感谢

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

                  @2118561423 记得选一个回复作为最佳答案把帖子标记为已解决

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

                  1 条回复 最后回复 回复 引用 1
                  • 2 2118561423 将这个主题标记为已解决,在
                  • 小鱼小 小鱼 将这个主题标记为已解决,在
                  • 第一个帖子
                    最后一个帖子
                  皖ICP备16016415号-7
                  Powered by NodeBB | 鱼香ROS