ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ubuntu系统下各个“环境“(ros2,conda,c++编译器)之间的关系

ubuntu系统下各个“环境“(ros2,conda,c++编译器)之间的关系 ROS2、C 编译器、conda Python 解释器三者可以共存但默认情况下各走各的路。它们之间的关系是ROS2 是一个机器人开发框架它依赖系统里的 C 编译器和系统 Python而 conda 是一个独立的 Python 环境管理器通常不和 ROS2 混用。下面分开说清楚。1. ROS2 是什么ROS2Robot Operating System 2不是操作系统而是一套开发机器人软件的框架和工具集。它支持两种主要语言C核心库、性能敏感的节点用 C 写。Python快速原型、脚本、工具用 Python 写。ROS2 本身在 Ubuntu 上通常通过apt安装bashsudo apt install ros-humble-desktop装完后ROS2 的库、头文件、Python 模块都在系统目录里比如text/opt/ros/humble/2. ROS2 和 C 编译器的关系ROS2 的 C 代码需要编译。它使用CMake作为构建系统底层调用g来编译。当你创建一个 ROS2 C 包时会有textmy_package/ ├── CMakeLists.txt ├── package.xml └── src/ └── my_node.cpp构建命令bashcolcon buildcolcon会调用 CMakeCMake 再调用系统里的g来编译.cpp文件生成可执行节点。所以ROS2 的 C 部分依赖你系统里的g和gcc。你之前装的build-essential正好满足这个需求。3. ROS2 和 Python 解释器的关系ROS2 的 Python 部分rclpy需要 Python 解释器。但这里有个关键点ROS2 官方 apt 包是为系统 Python 编译的也就是/usr/bin/python3。Ubuntu 22.04 系统 Python 是 3.10。ROS2 Humble 就是针对 Python 3.10 构建的。如果你用 conda 的 Python比如 3.11 或 3.12ROS2 的 Python 模块可能找不到因为路径不匹配找到了但 ABI 不兼容导入报错依赖的 C 扩展加载失败。所以跑 ROS2 的 Python 节点时应该用系统 Python不要激活 conda 环境。4. conda 和 ROS2 的关系conda 是一个独立的 Python 环境管理器。它和 ROS2 默认没有直接关系而且容易冲突conda 会修改PATH把 conda 的 Python 放到最前面。如果此时运行python3用的是 conda 的 Python不是系统的。ROS2 的rclpy是为系统 Python 编译的在 conda Python 下可能无法导入。conda 还可能设置LD_LIBRARY_PATH影响 ROS2 的动态库加载。因此一般建议开发 ROS2 时不要激活 conda 环境。如果一定要在 conda 里用 ROS2可以考虑RoboStack项目它把 ROS2 打包成了 conda 包专门适配 conda 环境。但那是一套独立的安装方式和系统 apt 装的 ROS2 不是一回事。5. 三者的实际关系图text┌─────────────────────────────────────────────┐ │ Ubuntu 系统 │ │ │ │ ┌─────────────┐ ┌─────────────────┐ │ │ │ 系统 Python │ │ 系统 C 编译器 │ │ │ │ /usr/bin/ │ │ /usr/bin/g │ │ │ │ python3 │ │ /usr/bin/gcc │ │ │ └──────┬──────┘ └────────┬────────┘ │ │ │ │ │ │ │ │ │ │ ▼ ▼ │ │ ┌─────────────────────────────────────┐ │ │ │ ROS2 │ │ │ │ - Python 节点用系统 Python │ │ │ │ - C 节点用 g 编译 │ │ │ │ - 安装在 /opt/ros/ │ │ │ └─────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────┐ │ │ │ conda 环境独立 │ │ │ │ - 自己的 Python │ │ │ │ - 自己的包 │ │ │ │ - 默认不和 ROS2 混用 │ │ │ └─────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────┘6. 建议的使用方式任务用什么环境写普通 Python 项目conda 环境conda activate写 ROS2 Python 节点系统 Python不要激活 conda写 ROS2 C 节点系统g通过colcon build编译同时需要 conda 和 ROS2开两个终端一个用 conda一个用系统环境或者用 RoboStack具体操作跑 ROS2 前确保没有激活 condabashconda deactivate检查当前 Pythonbashwhich python3应该是/usr/bin/python3不是/home/sq/anaconda3/...。然后 source ROS2bashsource /opt/ros/humble/setup.bash7. 总结ROS2 依赖系统的 C 编译器和系统 Python。conda 是独立的 Python 环境默认不和 ROS2 混用。你之前装的g、gdb对 ROS2 的 C 开发有用但 ROS2 的 Python 部分要用系统 Python不要用 conda 的。两者可以共存只要别在跑 ROS2 时激活 conda 环境。
返回列表