构建ROS包时出现CMake执行em.py返回错误码1如何解决
ROS Noetic qrcode_detection功能包CMake编译报错修复方案
本报错触发在ROS消息自动生成阶段,是generate_messages()执行时调用empy模板解析器返回错误码1导致,可按以下步骤排查修复:
1. 检查empy依赖安装状态
ROS Noetic依赖源安装的Python3版本empy,不要使用pip安装的版本,避免冲突:
- 先卸载pip安装的empy:
pip3 uninstall empy - 安装系统源版本:
sudo apt install python3-empy
2. 确认Python版本匹配
ROS Noetic仅支持Python3,执行python --version确认输出为3.x版本。若环境默认指向Python2,编译时指定Python3路径即可:catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3
3. 排查自定义msg/srv文件格式错误
如果功能包内定义了自定义消息/服务,检查以下内容:
- 消息字段类型均为ROS标准类型,无拼写错误
- 消息文件首行无空行、无特殊字符
- CMakeLists.txt中
add_message_files配置的文件名正确,.msg后缀未遗漏
4. 核对构建配置文件
package.xml配置要求
必须添加消息生成、运行相关依赖:
<build_depend>message_generation</build_depend> <exec_depend>message_runtime</exec_depend> <depend>std_msgs</depend> <!-- 消息依赖std_msgs时必须添加,其他依赖同理 -->
CMakeLists.txt配置要求
find_package配置项需加入message_generation及用到的消息依赖(如std_msgs)generate_messages配置项需列出依赖的消息包:
generate_messages( DEPENDENCIES std_msgs )
catkin_package配置项需加入message_runtime:
catkin_package( CATKIN_DEPENDS message_runtime std_msgs )
5. 清空缓存重新编译
所有配置修改完成后,删除旧的编译缓存再重新构建:
cd ~/catkin_ws rm -rf build devel catkin_make
内容的提问来源于stack exchange,提问作者Beny Moadab
相关产品推荐
相关产品推荐

