निर्माण ROS2 कार्यक्षेत्र में डोकर कंटेनर -- नहीं मिल सकता है ament_cmake

0

सवाल

मैं एक ROS2 कार्यक्षेत्र में इस तरह की परियोजना:

├── build-in-docker
├── docker
│   ├── build
│   ├── Dockerfile
│   └── env
└── src

docker/env है वातावरण चर:

#!/bin/bash

NOC='\033[0m'
GRN='\033[0;32m'
YLW='\033[0;33m'

image_name="docker-build-ros2"
container_name="ros2-ws"
target_path="/ros2-ws"

और docker/Dockerfile सामग्री है:

# syntax=docker/dockerfile:experimental

# prepare the docker   -----------------
FROM ubuntu:20.04
ARG DEBIAN_FRONTEND=noninteractive
# By default, ubuntu docker images include code to remove downloaded packages.
# Use the invocation from examples to avoid this and make the apt cache effective.
RUN rm -f /etc/apt/apt.conf.d/docker-clean \
    && echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' \
    > /etc/apt/apt.conf.d/keep-cache

ENV ROS_PYTHON_VERSION 3
RUN apt-get update && apt-get install -y locales
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8

# run export DOCKER_BUILDKIT=1 to enable BuildKit
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
    --mount=type=cache,target=/var/lib/apt,sharing=locked \
    apt-get update && apt-get --no-install-recommends install -y \
    autoconf bash-completion build-essential cmake curl \
    dirmngr gcc git gnupg2 g++ libtool lsb-release \
    pkg-config python3-pip libccd-dev \
    libflann-dev libpcl-dev libyaml-cpp-dev \
    && pip3 install cython \
    && rm -rf /var/lib/apt/lists/*

RUN export LANG=en_US.UTF-8

RUN curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add -
RUN sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'

RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
    --mount=type=cache,target=/var/lib/apt,sharing=locked \
    apt-get update && apt-get --no-install-recommends install -y \
    ros-foxy-desktop \
    python3-argcomplete \
    python3-colcon-common-extensions \
    python3-colcon-mixin \
    python3-rosdep \
    python3-vcstool \
    && rm -rf /var/lib/apt/lists/*

RUN rosdep init || true \
    && rosdep update

RUN echo "source /opt/ros/foxy/setup.bash" >> /etc/bash.bashrc
RUN echo "source /opt/ros/foxy/local_setup.bash" >> /etc/bash.bashrc

फिर, मैं जा रहा हूँ का उपयोग करने के लिए build-in-docker स्क्रिप्ट का निर्माण करने के लिए ROS2 कार्यक्षेत्र में, build-in-docker सामग्री है:

#!/bin/bash
set -eu -o pipefail

script_dir="$(dirname "$0")"
pushd "$script_dir" &>/dev/null

source "$script_dir/docker/env"

# stop the container if it is running ------------------------
if [[ $(docker ps --filter "name=^/${container_name}$" --format '{{.Names}}') == "${container_name}" &&
"$(docker container inspect -f '{{.State.Running}}' ${container_name})" == "true" ]]; then
    echo -e "${YLW}Stop container \"${container_name}\"${NOC} ..."
    docker stop ${container_name}
fi

# remove the container if it exists but not running ------------------------
if [[ $(docker ps --filter "name=^/${container_name}$" --format '{{.Names}}') == "${container_name}" ]]; then
    echo -e "${YLW}Remove container \"${container_name}\"${NOC} ..."
    docker rm ${container_name} &>/dev/null
fi

# build an image from Dockerfile ------------------------
echo -e "${GRN}Build the image \"${image_name}\"${NOC} ..."
DOCKER_BUILDKIT=1 docker build \
    -t ${image_name} \
    -f docker/Dockerfile docker

# create a container and run it ------------------------
echo -e "${GRN}Run container \"${container_name}\" from image \"${image_name}\"${NOC} ..."
docker run -d -it --rm \
    --name ${container_name} \
    --mount type=bind,source="$(pwd)",target=${target_path} \
    ${image_name}

# build the project in the container ------------------------
# ${target_path} ${build_dir}: arguments passed into ./docker/build
echo -e "${GRN}Build the project${NOC} ..."
docker exec ${container_name} ${target_path}/docker/build \
    ${target_path}

# finish
echo -e "${GRN}Project is build successfully.${NOC}"
popd &>/dev/null

जो कॉल docker/build स्क्रिप्ट:

#!/bin/bash
set -eu -o pipefail

# project root directory, passed from ../build-in-docker
cd "$1"

/bin/bash -c "source /opt/ros/foxy/setup.bash"

colcon build

हालांकि, यह मुझे त्रुटि देता है:

Stop container "ros2-ws" ...
ros2-ws
Build the image "docker-build-ros2" ...
[+] Building 0.7s (18/18) FINISHED                                                     
 => [internal] load build definition from Dockerfile                              0.0s
 => => transferring dockerfile: 38B                                               0.0s
 => [internal] load .dockerignore                                                 0.0s
 => => transferring context: 2B                                                   0.0s
 => resolve image config for docker.io/docker/dockerfile:experimental             0.1s
 => CACHED docker-image://docker.io/docker/dockerfile:experimental@sha256:600e5c  0.0s
 => [internal] load metadata for docker.io/library/ubuntu:20.04                   0.1s
 => [stage-0  1/12] FROM docker.io/library/ubuntu:20.04@sha256:626ffe58f6e7566e0  0.0s
 => CACHED [stage-0  2/12] RUN rm -f /etc/apt/apt.conf.d/docker-clean     && ech  0.0s
 => CACHED [stage-0  3/12] RUN apt-get update && apt-get install -y locales       0.0s
 => CACHED [stage-0  4/12] RUN locale-gen en_US.UTF-8                             0.0s
 => CACHED [stage-0  5/12] RUN --mount=type=cache,target=/var/cache/apt,sharing=  0.0s
 => CACHED [stage-0  6/12] RUN export LANG=en_US.UTF-8                            0.0s
 => CACHED [stage-0  7/12] RUN curl -s https://raw.githubusercontent.com/ros/ros  0.0s
 => CACHED [stage-0  8/12] RUN sh -c 'echo "deb [arch=$(dpkg --print-architectur  0.0s
 => CACHED [stage-0  9/12] RUN --mount=type=cache,target=/var/cache/apt,sharing=  0.0s
 => CACHED [stage-0 10/12] RUN rosdep init || true     && rosdep update           0.0s
 => CACHED [stage-0 11/12] RUN echo "source /opt/ros/foxy/setup.bash" >> /etc/ba  0.0s
 => CACHED [stage-0 12/12] RUN echo "source /opt/ros/foxy/local_setup.bash" >> /  0.0s
 => exporting to image                                                            0.0s
 => => exporting layers                                                           0.0s
 => => writing image sha256:9af6dcfcf4fa94cec435a91fd48218c6b83c730aada6de85cc86  0.0s
 => => naming to docker.io/library/docker-build-ros2                              0.0s
Run container "ros2-ws" from image "docker-build-ros2" ...
ff1545051e411035142315215ab385d74627d7de65e79a22ec12b0c59f656790
Build the project ...
Starting >>> agv_interfaces
--- stderr: agv_interfaces
CMake Error at CMakeLists.txt:19 (find_package):
  By not providing "Findament_cmake.cmake" in CMAKE_MODULE_PATH this project
  has asked CMake to find a package configuration file provided by
  "ament_cmake", but CMake did not find one.

  Could not find a package configuration file provided by "ament_cmake" with
  any of the following names:

    ament_cmakeConfig.cmake
    ament_cmake-config.cmake

  Add the installation prefix of "ament_cmake" to CMAKE_PREFIX_PATH or set
  "ament_cmake_DIR" to a directory containing one of the above files.  If
  "ament_cmake" provides a separate development package or SDK, be sure it
  has been installed.


---
Failed   <<< agv_interfaces [0.07s, exited with code 1]

Summary: 0 packages finished [0.26s]
  1 package failed: agv_interfaces
  1 package had stderr output: agv_interfaces
  1 package not processed

हालांकि, यदि मैं मैन्युअल रूप से दर्ज कंटेनर का उपयोग कर docker attach आदेश और मैन्युअल रूप से दर्ज करें, निर्देशिका और फिर निर्माण कार्यस्थान का उपयोग करना colcon build, निर्माण सफल है । इस के बाद, अगर मैं फिर से चलाने ./build-in-docker natively, के worspace बनाया जा सकता है सफलतापूर्वक किया है.

मेरा सवाल है, क्या सेटिंग है, मैं गलत है कि मैं का निर्माण नहीं कर सकते कार्यक्षेत्र पहले से चल रहा है ./build-in-docker कमांड?

bash docker ros2 shell
2021-11-24 04:30:28
2

सबसे अच्छा जवाब

1

के रूप में बाहर की ओर इशारा में एक और जवाब आप की जरूरत करने के लिए का उपयोग करें source /opt/ros/foxy/setup.bash के बजाय. नई त्रुटि पैदा करता है, क्योंकि रेखा के set -eu -o pipefail में अपने build-in-docker फ़ाइल. के -u ध्वज का इलाज करेंगे हर unset चर के रूप में एक त्रुटि है. आप कर सकते हैं या तो झंडे को हटाने या सेट AMENT_TRACE_SETUP_FILES करने के लिए कुछ मूल्य है ।

2021-12-01 18:06:31

यह मेरी समस्या हल करती है. AMENT_TRACE_SETUP_FILES नहीं है पूर्व निर्धारित में environement, इसलिए set -eu -o pipefail देना होगा स्क्रिप्ट से बाहर निकलें.
zhoudingjiang
0

में अपने buildscript आप क्रियान्वित कर रहे हैं:

/bin/bash -c "source /opt/ros/foxy/setup.bash"

डाल /bin/bash के सामने अपने आदेश सिर्फ खोलता है एक नई commandline, आदेश निष्पादित करता है, और फिर बंद कर देता commandline. तो जो कुछ भी आप स्रोत में है कि आदेश में, यह तुरंत गायब हो जाएगा ।

इसलिए, बस इसे बदलने के लिए:

source /opt/ros/foxy/setup.bash
2021-11-30 09:22:47

मैं यह कोशिश की है । यह मुझे देता है एक अलग त्रुटि: /opt/क/वह/सेटअप.bash: लाइन 8: AMENT_TRACE_SETUP_FILES: अनबाउंड चर. मैं समझ में भाग आप कहते हैं कि यह "खोलता है एक नई commandline" महत्वपूर्ण है कि समस्या को मैं हल करने की जरूरत है यहाँ ।
zhoudingjiang

इस तरह लगता है एक आरओएस स्थापित मुद्दा है, स्थापना रद्द करने का प्रयास ROS लोमड़ी की तरह (डेस्कटॉप/आरओएस-बेस के साथ, पता नहीं है जो आप स्थापित), तो autoremove सभी संकुल है, तो पुन: स्थापित करें । देखें कि यदि समस्या हल करती है.
Xander

यह नहीं है आरओएस मुद्दा है, क्योंकि मैं का निर्माण कर सकते हैं कार्यक्षेत्र द्वारा मैन्युअल रूप से दर्ज करें (संलग्न) में कंटेनर, और फिर source और फिर colcon build.
zhoudingjiang

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में