| CI 상태 |
|---|
CCWS 는 ROS의 개발 환경으로, (교차) 컴파일, 테스트, 라인팅, 닥터 미팅 및 이진 패키지 생성을 촉진하기 위해 전통적인 catkin 작업 공간 및 CI 파이프 라인의 기능을 통합합니다. CI/CD 백본과 개발자를위한 작업 환경으로 사용됩니다. CCWS 완전한 솔루션이 아니라 공급 업체 별 워크 플로의 개발을위한 기초가됩니다.
CCWS 는 ROS 버전의 AGNOSTIC이며 대부분의 경우 ROS1 및 ROS2 모두에서 작동해야합니다.
빌드 프로파일 - 빌드 프로세스를위한 구성 세트 (예 : CMake Toolchain, Colcon 구성, 환경 변수 등) 프로파일은 서로 충돌하지 않으며 작업 영역 및 패키지의 별도의 클론을 사용하지 않고 병렬로 사용할 수 있습니다.
실행 프로파일 - 런타임 환경을 수정하기위한 간단한 쉘 믹스 인 (예 : valgrind 에서 노드 실행, Alter Node Crash Handling 등) 등.
빌드 프로파일을 통해 구현 된 여러 기능 :
여러 공통 플랫폼으로의 교차 편집.
https://github.com/mikepurvis/catkin_tools_document와 유사한 doxygen 사용하여 전체 작업 공간 또는 선택된 패키지에 대한 문서 생성.
clang-tidy 및 scan_build 로 줄을 섰습니다.
https://github.com/sscpac/statick에서와 같이 다양한 정적 검사 : 특히
cppcheckcatkin_lint https://github.com/fkie/catkin_lintyamllintshellcheck이진 데비안 패키지 생성.
일부 기능을 사용하는 방법을 보여주는 패키지 템플릿.
RAM이 제한 계수 일 가능성이 높기 때문에 CPU 코어 대신 사용 가능한 RAM을 기반으로 병렬 작업의 수를 선택할 수 있습니다.
전적으로 make and Shell Scripts를 기반으로합니다. 모든 스크립트와 구성은 작업 공간에 보관되어 있으며 특정 요구에 맞게 조정하기 쉽습니다.
프로파일 구성은 ccws/profiles/build 에 있으며, common 하위 디렉토리는 기본 매개 변수를 포함하며 특정 프로파일에 의해 재정의 할 수 있습니다.
reldebug 기본 컴파일러, CMake 빌드 유형은 RelWithDebInfo 입니다.scan_build scan_build 및 clang-tidy 로 정적 검사. clang-tidy 매개 변수는 CMAKE 툴체인에서 정의되며 패키지 템플릿 CMakeLists 에 표시된 것처럼 패키지에서 활성화되어야합니다. 이 프로파일은 clang 컴파일러도 사용합니다.thread_sanitizer 스레드 소독제와의 컴파일.addr_undef_sanitizers 주소 및 정의되지 않은 동작 소독제와의 편집.static_checks 정적 체커 및 구성.doxygen 독소 및 그 구성.cross_raspberry_pi 라즈베리 파이를위한 교차 컴파일.cross_jetson_xavier Jetson Xavier를위한 교차 컴파일.cross_jetson_nano Jetson Nano의 교차 컴파일.clangd 주어진 BASE_BUILD_PROFILE 대한 컴파일 명령을 수집하고 작업 영역 루트에서 clangd 구성 파일을 생성합니다.deb -Debian 패키지 생성 (아래 참조). 실행 프로파일은 ccws/pkg_template/catkin/launch/bringup.launch 에서 시연 된대로 실행 시간 동작을 변경하기 위해 런칭 스크립트에서 사용할 수있는 환경 변수를 설정합니다. 현재 사용 가능한 프로파일은 다음과 같습니다.
common - 공통 ROS 매개 변수 세트 (예 : ROS_HOME )는 이진 패키지에 자동으로 포함됩니다.test - CCWS_NODE_CRASH_ACTION 변수를 설정하여 필요한 노드가 required 합니다. 즉, 이러한 노드의 종료는 테스트 스크립트의 충돌로 이어질 수 있으므로 쉽게 감지 할 수 있습니다.valgrind CCWS_NODE_LAUNCH_PREFIX valgrind 로 설정하고 valgrind 의 동작을 제어하는 일부 변수를 설정합니다.core_pattern 아티팩트 디렉토리에 코어 파일을 저장하기 위해 핵심 패턴을 설정합니다.address_sanitizer addr_undef_sanitizers 프로파일의 도우미. 실행 프로파일은 빌드 프로세스에 영향을 미치지 않으며 *test* 대상 또는 데비안 패키지에서 고려됩니다. test 실행 프로파일은 항상 테스트에 사용되며 EXEC_PROFILE="<profile1> <profile2>" 와 함께 추가 프로파일을 제공 할 수 있습니다. 이 대상은 CCWS 의 루트 폴더에 위치한 setup.bash 스크립트를 사용하여로드 프로파일을로드합니다. 예를 들어, source setup.bash [<build_profile> [<exec_profile1> ...]] . 설정 스크립트에는 항상 common 프로파일이 포함되며 다른 실행 프로파일이 지정되지 않은 경우 test 실행 프로파일을 사용합니다.
make bp_install_build BUILD_PROFILE=<profile> 사용하여 종속성을 설치할 수 있으며, 다음 도구 및 프로파일 특정 종속성을 설치합니다.
colconyq https://github.com/asherikov/wshandler 종속성cmakeccache CMAKE 툴 체인에서 비활성화 할 수 있습니다wget 명령 사용 힌트는 .ccws/test_main.mk 참조하십시오.
make/config.mk 에 추가하여 개발자 및 공급 업체 특정 매개 변수를 재정의하면 Makefile 의 상단 섹션에서 사용 가능한 매개 변수를 찾을 수 있습니다.make bp_install_build BUILD_PROFILE=<profile> 대상을 사용하여 종속성을 설치하십시오. 대상, 교차 편집 프로파일에는 다음과 같은 추가 단계가 필요합니다. 일부 미니멀리즘 환경에서는 bp_install_build 대상을 사용하여 make 및 기타 유틸리티를 설치하기 전에 ./ccws/scripts/bootstrap.sh 실행해야 할 수도 있습니다.src 서브 디렉토리의 클론 패키지 또는 make new PKG=<pkg> 사용하여 새로 생성하십시오. make build PKG="<pkg>" <pkg> 이상의 공간 분리 패키지 이름입니다.make <pkg> - make build 위한 바로 가기를 만들지 만 <pkg> 는 패키지 이름의 하위 스트링 일 수 있습니다. 주어진 부분 문자열과 일치하는 모든 패키지가 구축됩니다.JOBS=X 매개 변수로 재정의 할 수 있습니다.make build PKG=<pkg> BUILD_PROFILE=scan_build 기본 프로파일을 재정의합니다. setup.bash <profile> 패키지를 사용할 수 있습니다. colcon 에서 생성 한 설정 스크립트 (예 : install/<profile>/local_setup.sh )는 직접 사용할 수 있지만이 경우 일부 CCWS 기능을 사용할 수 없습니다. colcon 으로 make test PKG=<pkg> 테스트를하거나 모든 것을 테스트하기 위해 make wstest .make ctest PKG=<pkg> colcon 우회하고 ctest 직접 실행하거나 make wsctest 모든 것을 테스트하십시오. make BUILD_PROFILE=doxygen , firefox artifacts/doxygen/index.html 만들기 CCWS 는 전통적인 ROS (1 pack bloom CCWS 먼저 소스 패키지를 생성하는 대신 바이너리 패키지를 생성합니다.
바이너리 패키지 생성은 임의의 빌드 프로파일 위에 오버레이 될 수있는 빌드 프로파일 믹스로 구현됩니다. make <pkg> BUILD_PROFILE=deb BASE_BUILD_PROFILE=reldebug .
CCWS 접근에는 여러 가지 장점이 있습니다.
이진 호환성 문제는 전통적인 ROS 접근법에 비해 최소화됩니다.
여러 독립형 바이너리 패키지 사이의 호환성에 대해 걱정할 필요가 없습니다.
기본 ROS 패키지가 포함되어 있으면 동일한 ROS 릴리스의 동기화 (실제로 발생) 사이의 이진 비 호환성을 피할 수도 있습니다.
패키지 저장소 관리는 태그, 버전, GIT 하위 모듈 등과 관련하여 ROS와 비교하여 더 칙칙할 수 있습니다.
Debian 'Superpackages'는 독립형 패키지와 Docker 컨테이너보다 다루기가 더 쉽습니다. 예를 들어, 작업 지점에서 개발자가 생성하고 대상에 쉽게 복사 및 설치할 수 있습니다.
데비안 패키지는 일반적으로 도커 컨테이너보다 몇 가지 장점이 있습니다.
실행 중 오버 헤드가 0입니다.
하드웨어에 대한 간단한 액세스.
시스템 서비스, UDEV 규칙, 구성 등의 쉬운 설치.
다른 버전의 이진 패키지는 다른 VERSION 매개 변수를 사용하여 구축 된 경우 동시에 설치할 수 있습니다.
일반적으로 catkin cmake 파일에서 모든 경로를 바로 가져오고 시스템 파일을 올바르게 설치하려면 컴파일 중에 파일 시스템 루트에 패키지를 설치해야합니다. CCWS 크로스 컴파일 프로파일과 유사하게 proot 사용하여이를 피합니다.
여기 <profile> 은 cross_raspberry_pi , cross_jetson_xavier , cross_jetson_nano 를 나타냅니다. 크로스 컴파일 메이드 대상은 ccws/make/cross.mk 및 ccws/profiles/<profile>/targets.mk 에서 찾을 수 있습니다.
cross_jetson_xavier 및 cross_jetson_nano 에 대한 참고 사항 :이 프로파일에는 Ubuntu 18.04 / ROS Melodic이 필요하고 nvcc 설치해야합니다. 컨테이너에서이를 수행 할 수 있습니다.
일반적인 워크 플로는 아래에 문서화되어 있습니다. 더 많은 기술적 인 세부 사항은 ccws/doc/cross-compilation.md 및 CCWS CI 테스트의 .ccws/test_cross.mk :
make bp_install_build BUILD_PROFILE=<profile> 로 프로필 종속성을 설치하십시오cross_raspberry_pi bp_install_build 대상은 표준 이미지를 자동으로 다운로드합니다.cross_jetson_xavier , cross_jetson_nano CCWS 이러한 이미지를 자동으로 얻지 못하며 ccws/profiles/cross_jetson_xavier/system.img 에 대한 수동 시스템 파티션 이미지를 수동으로해야합니다.make wsinit REPOS="https://github.com/asherikov/staticoma.git"make dep_to_repolist ROS_DISTRO=melodic 또는 특정 패키지 make dep_to_repolist PKG=<pkg> ROS_DISTRO=melodic ;make wsupdate .make cross_install PKG=staticoma BUILD_PROFILE=<profile> ROS_DISTRO=<distro>make cross_mount BUILD_PROFILE=<profile> 마운트 sysrootmake staticoma BUILD_PROFILE=<profile> 또는 Deb 패키지 빌드 및 생성 make deb PKG=staticoma BUILD_PROFILE=<profile>make cross_umount BUILD_PROFILE=<profile> 로 완료되면 sysroot를 마운트하지 않습니다CCWS Docker 사용 사전 설치된 CCWS 및 종속성이있는 Docker 이미지는 테스트 할 수 있지만 ccws/examples/Dockerfile 사용하여 맞춤형 이미지를 구축하는 것이 좋습니다.
이미지는 다음과 같은 방식으로 사용할 수 있습니다.
docker pull asherikov/ccwsmkdir tmp_ws # 소스, 빌드, 설치, 캐시는 여기로 이동합니다.docker run --rm -ti -v ./tmp_ws:/ccws/workspace asherikov/ccws bashmake wsinit REPOS="https://github.com/asherikov/qpmad.git"...CCWS 확장 CCWS 기능은 여러 가지 방법으로 확장 될 수 있습니다.
make bp_new BUILD_PROFILE=vendor_static_checks BASE_BUILD_PROFILE=static_checks vendor 접두사로 시작하는 모든 프로파일은 GIT에 의해 무시됩니다.ccws/profiles/build/vendor/<filename>.mk 파일을 만들어 대상을 추가 make 수 있습니다.ccws/profiles/build/vendor/toolchain_suffix.cmake 에 일반적인 cmake 도구 체인 접미사를 추가 할 수 있습니다. 크로스 컴파일 또는 데비안 패키지 생성 Indside Docker Containers (모두 proot 필요) 중 Segmentation Fault : 아마도 seccomp Linux 기능으로 인해 --security-opt seccomp:unconfined Docker 매개 변수로 비활성화 될 수 있습니다. PROOT_NO_SECCOMP=1 사용하여 proot 에 대한 seccomp 비활성화하는 것은 불필요한 것 같습니다.
소독제 ( addr_undef_sanitizers 또는 thread_sanitizer 빌드 프로파일) 출력 2: AddressSanitizer:DEADLYSIGNAL 또는 FATAL: ThreadSanitizer: unexpected memory mapping : 현대적인 Linux kernels에서 ASLR (주소 공간 무작위 화)을 사용하여 Google/Sanitizer#1614를 참조하십시오. sudo sysctl vm.mmap_rnd_bits=28 설정하면 문제가 완화 될 수 있습니다.
CMAKE 오용으로 인해 ROS2 코어 패키지 중 일부는 CCWS 로 구축 할 수 없습니다.
Debian 패키지를 구축하는 동안 Ubuntu 22의 ARM64를 구축하는 동안 Segfault를 proot . proot 의 최신 버전을 사용해야합니다. Proot-Me/Proot#312를 참조하십시오.
CCWS 기능을 다루는 github 작업.ccache https://github.com/mbitsnbites/buildcache로 교체하십시오.clang-tidy 실행을 캐시하는 데 사용할 수 있습니다.scan_build https://github.com/ericsson/codechecker에 대한 잠재적 교체.dpkg-deb 의 잠재적 교체.catkin_make 빌드 환경에 문제가있을 수 있습니다.guestfs 실용적 이기에는 너무 느립니다.valgrind 의 대안으로 gcc 현재 지원하지 않습니다.valgrind 실행 프로파일의 대안으로서 https://github.com/yugr/valgrind-preload- 일반적인 경우 과잉.CodeQL 프로파일 (https://github.com/github/codeql)을 추가하십시오.