ROS2节点可通过python3运行但ros2 run执行失败的问题排查
解决ROS2运行YOLOv5节点时
ModuleNotFoundError: No module named 'models'的问题 问题根源
- 安装路径不匹配:你的CMakeLists.txt将
scripts/models、scripts/utils安装到了share/${PROJECT_NAME}目录,但执行脚本ros_recognition_yolo.py被安装到lib/${PROJECT_NAME}目录,Python运行时无法从lib目录定位到share下的模块文件。 - 错误的依赖声明:package.xml中添加了
<exec_depend>models</exec_depend>和<build_depend>models</build_depend>,但models并非ROS官方包,只是你项目内的本地文件夹,这些依赖声明完全多余且无效。
解决方案
步骤1:调整CMakeLists.txt的安装路径
修改CMakeLists中的安装规则,让models、utils与执行脚本处于同一目录:
# 替换原有的install(DIRECTORY...)部分 install( DIRECTORY scripts/models scripts/utils DESTINATION lib/${PROJECT_NAME} ) install(PROGRAMS scripts/ros_recognition_yolo.py DESTINATION lib/${PROJECT_NAME} )
步骤2:清理package.xml的无效依赖
删除package.xml中的以下两行:
<exec_depend>models</exec_depend> <build_depend>models</build_depend>
步骤3:重新编译并运行
执行以下命令完成编译与测试:
colcon build --packages-select yolobot_recognition source install/setup.bash ros2 run yolobot_recognition ros_recognition_yolo.py
内容的提问来源于stack exchange,提问作者Poguinho
相关产品推荐
相关产品推荐

