You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中创建Conda环境后ROS环境失效问题求助

问题与解决方案:ROS Docker镜像中部署Contact-GraspNet冲突问题

问题描述

  • 环境:预装ROS的Docker镜像(原ROS相关任务运行正常)
  • 操作:按照Contact-GraspNet官方指引创建conda环境
  • 异常:ROS包无法编译、rospy功能失效;尝试本地安装conda包仍无法运行Contact-GraspNet

原始Docker配置

... 
general setup of the docker image
...

ENV PATH="/root/miniconda3/bin:$PATH"
RUN apt-get update \
    && apt-get install -y wget

RUN wget \
    https://repo.anaconda.com/miniconda/Miniconda3-py38_23.3.1-0-Linux-x86_64.sh \
    && mkdir /root/.conda \
    && bash Miniconda3-py38_23.3.1-0-Linux-x86_64.sh -b

RUN echo "source activate contact_graspnet_env" >> ~/.bashrc \
    && /bin/bash -c "source ~/.bashrc"

RUN conda --version

WORKDIR /ros-ws

RUN cd src && \
    git clone https://github.com/NVlabs/contact_graspnet.git

RUN cd src/contact_graspnet && conda env create -f contact_graspnet_env.yml

RUN sudo apt-get install freeglut3-dev -y

RUN /bin/bash -c "source activate contact_graspnet_env"

CMD bash

核心原因

conda环境默认激活后会覆盖系统Python路径,导致ROS依赖的系统级Python(apt安装的ROS绑定系统Python)无法被正确调用,进而引发编译失败和rospy运行异常。

分步解决方法

1. 隔离conda与ROS的全局环境

删除Dockerfile中自动激活conda环境的配置,避免污染ROS依赖的系统环境:

# 移除这两行:
# RUN echo "source activate contact_graspnet_env" >> ~/.bashrc \
#     && /bin/bash -c "source ~/.bashrc"

2. 修正Dockerfile的conda环境逻辑

调整conda安装与环境创建步骤,确保仅在需要时手动激活:

# 安装Miniconda后清理安装包
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.3.1-0-Linux-x86_64.sh \
    && mkdir /root/.conda \
    && bash Miniconda3-py38_23.3.1-0-Linux-x86_64.sh -b \
    && rm Miniconda3-py38_23.3.1-0-Linux-x86_64.sh

# 初始化conda(方便后续调用)
RUN /root/miniconda3/bin/conda init bash

# 创建Contact-GraspNet环境但不自动激活
RUN cd src/contact_graspnet && /root/miniconda3/bin/conda env create -f contact_graspnet_env.yml

3. 分离ROS与Contact-GraspNet的运行环境

  • 运行ROS任务:直接使用系统默认环境,无需激活conda
  • 运行Contact-GraspNet:手动激活conda环境后执行命令:
    source /root/miniconda3/bin/activate contact_graspnet_env
    # 执行Contact-GraspNet相关指令
    

4. 修复ROS编译问题

清理ROS工作空间并重新编译,确保使用系统Python:

cd /ros-ws
catkin clean -y
source /opt/ros/<你的ROS版本>/setup.bash  # 替换为实际版本,如noetic/melodic
catkin_make  # 或catkin build

5. 补全Contact-GraspNet依赖

激活conda环境后手动安装缺失依赖(若本地安装失败):

source /root/miniconda3/bin/activate contact_graspnet_env
cd src/contact_graspnet
pip install -r requirements.txt  # 参考官方文档的依赖清单

内容的提问来源于stack exchange,提问作者Lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:22:38