สร้าง ROS2 ขอบเขตสีใน docker ตู้คอนเทนเนอร์--ไม่สามารถหา 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 ธงจะทำกับทุกยกเลิกตั้งค่าตัวแปรเป็นข้อผิดพลาด คุณสามารถเหมือนกัเอาธงหรือตั้งค่า 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,executes คำสั่งและจากนั้นก็ปิดค commandline. ดังนั้นอะไรก็ตามที่คุณแหล่งข่าวในกคำสั่งมันจะหายตัวไปโดยทันที

ดังนั้นแค่เปลี่ยนเป็น:

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

ฉันพยายามมัน มันทำให้ฉันเปลี่ยนข้อผิดพลาดคือ:/opt/ros/foxy/นีมากอน.มันเหมือนกับ....ตบ:เส้น 8:AMENT_TRACE_SETUP_FILES:unbound องตัวแปร ฉันเข้าใจว่าคนส่วนหนึ่งคุณพูดมันออก"เปิดใหม่ commandline"นั่นคือกุญแจสำคัญปัญหาฉันต้องการที่จะแก้ปัญหาอยู่ที่นี่
zhoudingjiang

มันฟังดูเหมือนเป็น ROS ปัญหาติดตั้ง,ลองกำลังถอนการติดตั้ง ROS Foxy(พื้นที่ทำงาน/ros-เรียกฐานฉันไม่รู้จักซึ่งคุณติดตั้งแล้ว)ก็ autoremove ทุกแพกเกจแล้ว reinstall. ดูว่ารอก่อนรอก่อปัญหา
Xander

มันไม่ใช่ ROS ปัญหาเพราะฉันสามารถสร้างขอบเขตสีโดยด้วยตนเองป้อน(ให้แนบเป็นสิ่งที่แนบมาด้วย)ไปที่ตู้คอนเทนเนอร์แล้ว source และจากนั้น colcon build.
zhoudingjiang

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่