当前位置: 首页 > news >正文

【已解决】conda环境下ROS2 colcon build编译选择特定python解释器

目录

  • 1 问题背景
  • 2 问题探索
  • 3 问题解决
  • 4 告别Bug

1 问题背景

环境:

  • ROS2 Humble
  • Ubuntu22.04

现象:运行colcon build后由cpp编译生成的python导出库(如自定义消息、服务等),其版本与由python setup.py安装的python库版本不一致,导致诸如

rosidl_generator_py.import_type_support_impl.UnsupportedTypeSupport: Could not import 'rosidl_typesupport_c' for package 'msg_lab_py'等问题

在这里插入图片描述

2 问题探索

检查发现,本地存在两个不同版本的python解释器,分别对应出现问题的版本号3.103.11,这表明conda虚拟环境的引入将导致colcon build进行构建和安装时CMake使用的python解释器版本与python setup.py使用的版本不同。

在这里插入图片描述

因此解决问题的核心是使用同一个环境的python解释器。

首先卸载全局的colcon编译选项,避免编译过程中错选

sudo apt remove python3-colcon-*

接着创建虚拟环境,原理可看Anaconda安装与Python虚拟环境配置保姆级图文教程(附速查字典)

conda create -n ros2 python=3.10

并切换到虚拟环境

conda activate ros2

创建后如下所示

在这里插入图片描述

在该虚拟环境中安装colcon编译依赖项

pip install -U colcon-common-extensions

以及其他依赖项

pip install catkin_pkg numpy lark setuptools==58.2.0

此时可能还会出现问题
ImportError: /home/winter/anaconda3/envs/ros2/bin/../lib/libstdc++.so.6: version GLIBCXX_3.4.30' not found (required by /opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/_rclpy_pybind11.cpython-310-x86_64-linux-gnu.so)

解决方法是安装gcc

conda install -c conda-forge gcc=12.1.0

至此已经可以成功编译

在这里插入图片描述

3 问题解决

总结一下修复的流程:

  • 创建虚拟环境
    conda create -n ros2 python=3.10
    
  • 切换到虚拟环境
    conda activate ros2
    
  • 安装colcon构建系统
    pip install -U colcon-common-extensions
    
  • 安装其他依赖项
    pip install catkin_pkg numpy lark setuptools==58.2.0
    conda install -c conda-forge gcc=12.1.0
    

4 告别Bug

本文收录于《告别Bug》专栏,该专栏记录人工智能领域中各类Bug以备复查,文章形式为:问题背景 + 问题探索 + 问题解决,订阅专栏+关注博主后可通过下方名片联系我进入AI技术交流群帮忙解决问题


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇
http://www.lryc.cn/news/311990.html

相关文章:

  • QT C++实践| 连接数据库的登录界面实现| 附源码
  • html样式排版
  • Java:性能优化细节31-45
  • YOLOv9独家原创改进|增加SPD-Conv无卷积步长或池化:用于低分辨率图像和小物体的新 CNN 模块
  • Android Gradle开发与应用 (四) : Gradle构建与生命周期
  • [MRCTF2020]Transform1
  • JavaWeb HTTP 请求头、请求体、响应头、响应体、响应状态码
  • 穿越数字防线:SSH协议的全景解析与未来展望
  • 语文教学方法有哪些,产生了什么效果
  • Docker之网络配置
  • Mybatis实现分页查询数据(代码实操讲解)
  • 【自动驾驶技术系列丛书学习】1.《自动驾驶技术概论》学习笔记
  • 2023年全国职业院校技能大赛 GZ073网络系统管理赛项 模块A:网络构建(运维配置)
  • Linux设备模型(八) - sysfs
  • C语言实现Linux下的UDP服务端和客户端
  • Excel小技巧 (2) - 如何去除和增加前导0
  • 【GIS人必看】ArcPy脚本如何导入到ArcToolBox中(上)【建议收藏】
  • AI入门笔记(三)
  • Linux搭建SFTP服务器
  • MobaXterm无法上传整个文件夹,只能上传的单个文件
  • Android 中get请求网络数据 详细举例
  • 每日五道java面试题之mysql数据库篇(六)
  • Latex——多张图排列
  • 前端复选框问题-节点赋值未选中最后显示时确变成选中状态?
  • JavaScript命名标识符规范,前端开发面试
  • 从零学习Linux操作系统 第三十部分 部署Anisble
  • C++对象模型剖析(六)一一Data语义学(三)
  • Java 代理模式详解(附案例源代码)
  • 七牛云 上传 文件 file is empty
  • 【AI视野·今日Sound 声学论文速览 第五十二期】Tue, 5 Mar 2024