3.4.3 系统信息获取发布运行节点出错
-
代码都是按照鱼哥视频一步一步来的但是在运行发布的节点的时候一直不能运行,我看了下确定功能包名字没有写错哇,鱼哥救我
报错日志: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'
],
},
) -
@2118561423 目录不对,sys_status_pub.py 放到 init.py 同一个级别
-
根据你提供的错误信息和代码,问题似乎出在 Python 包的导入路径上。错误日志
ModuleNotFoundError: No module named 'status_publisher.sys_status_pub'
表明 Python 无法在status_publisher
包中找到sys_status_pub
模块。这通常是由于以下几种情况之一导致的:-
文件结构问题:确保
sys_status_pub.py
文件位于正确的目录下,通常应该是status_publisher
文件夹内。 -
setup.py
中的find_packages
:find_packages()
函数应正确识别你的包和模块。你的setup.py
看起来是正确的,但确保find_packages()
没有被错误地配置为排除status_publisher
包或其中的任何文件。 -
PYTHONPATH 环境变量:确保你的工作空间已经正确设置到 PYTHONPATH 中。在使用 ROS 2 时,通常通过
source install/setup.bash
来设置环境。 -
包安装问题:可能是包没有正确安装。尝试重新安装你的工作空间:
cd /path/to/your/workspace colcon build --packages-up-to status_publisher source install/setup.bash
-
检查
__init__.py
文件:确保status_publisher
文件夹中有一个__init__.py
文件(即使它是空的)。这个文件使 Python 将该文件夹视为一个包。 -
入口点配置:你的
setup.py
中的entry_points
配置看起来是正确的,但确保没有拼写错误。
解决步骤
-
检查文件结构:
确保你的文件结构类似于:topic_practice_ws/ ├── src/ │ └── status_publisher/ │ ├── __init__.py │ ├── sys_status_pub.py │ └── ... (其他可能的文件) ├── setup.py └── ... (其他 ROS 2 工作空间文件)
-
确保
__init__.py
存在:
在status_publisher
文件夹中检查是否有一个__init__.py
文件。 -
重新安装工作空间:
cd /home/chen/chapt3/topic_practice_ws colcon build --packages-up-to status_publisher source install/setup.bash
-
尝试运行节点:
ros2 run status_publisher sys_status_pub
如果以上步骤仍然无法解决问题,请检查是否有其他配置或环境问题影响到包的导入。希望这些信息能帮助你解决问题!如果问题仍然存在,请提供更多的信息,如你的工作空间的整体结构和任何可能的自定义配置。
以上为生成回答,仅供参考~
-
-
-
@2118561423 目录不对,sys_status_pub.py 放到 init.py 同一个级别
-
@小鱼 哇趣,把sys_status_pub.py挪上来果然就好了,谢谢我鱼哥,感谢感谢
-
@2118561423 记得选一个回复作为最佳答案把帖子标记为已解决
-
-