| Status CI |
|---|
CCWS adalah lingkungan pengembangan untuk ROS, yang mengintegrasikan fungsionalitas ruang kerja catkin tradisional dan saluran pipa CI untuk memfasilitasi kompilasi, pengujian, pengujian, linting, dokumen dan pembuatan paket biner. Ini dimaksudkan untuk digunakan baik sebagai tulang punggung CI/CD dan lingkungan kerja untuk pengembang. Perhatikan bahwa CCWS tidak dimaksudkan untuk menjadi solusi yang lengkap, tetapi lebih merupakan dasar untuk pengembangan alur kerja khusus vendor.
CCWS adalah ROS versi agnostik, dan harus bekerja dalam banyak kasus untuk ROS1 dan ROS2.
Profil Bangun - Set konfigurasi untuk proses pembuatan, misalnya, CMake toolchain, konfigurasi colcon, variabel lingkungan, dll. Profil tidak bertentangan satu sama lain dan dapat digunakan secara paralel tanpa menggunakan klon terpisah dari ruang kerja dan paket.
Profil Eksekusi - Mixin shell sederhana yang dimaksudkan untuk memodifikasi lingkungan waktu lari, misalnya, menjalankan node di valgrind , mengubah penanganan crash node, dll.
Sejumlah fitur yang diimplementasikan melalui profil build:
Kompilasi silang ke beberapa platform umum.
Generasi dokumentasi untuk seluruh ruang kerja atau paket yang dipilih menggunakan doxygen , mirip dengan https://github.com/mikepurvis/catkin_tools_document.
Berbaris dengan clang-tidy dan scan_build .
Berbagai cek statis seperti di https://github.com/sscpac/statick, khususnya:
cppcheckcatkin_lint https://github.com/fkie/catkin_lintyamllintshellcheckPembuatan Paket Debian Biner.
Template paket yang menunjukkan cara menggunakan beberapa fitur.
Jumlah pekerjaan paralel dapat dipilih berdasarkan RAM yang tersedia alih -alih core CPU, karena RAM kemungkinan menjadi faktor pembatas.
Didasarkan sepenuhnya pada skrip make and Shell. Semua skrip dan konfigurasi disimpan di ruang kerja dan mudah disesuaikan dengan kebutuhan spesifik.
Konfigurasi profil terletak di ccws/profiles/build , subdirektori common berisi parameter default, yang dapat ditimpa dengan profil spesifik:
reldebug - kompiler default, tipe build cmake adalah RelWithDebInfoscan_build -Pemeriksaan statis dengan scan_build dan clang-tidy . Parameter clang-tidy didefinisikan dalam cmake toolchain dan harus diaktifkan dalam paket seperti yang ditunjukkan dalam templat paket CMakeLists . Profil ini juga menggunakan clang Compiler.thread_sanitizer - Kompilasi dengan Sanitizer Thread.addr_undef_sanitizers - Kompilasi dengan alamat dan pembersih perilaku yang tidak ditentukan.static_checks - Pemeriksa statis dan konfigurasinya.doxygen - Doxygen dan konfigurasinya.cross_raspberry_pi -Kompilasi silang untuk Raspberry Pi.cross_jetson_xavier -Kompilasi silang untuk Jetson Xavier.cross_jetson_nano -Kompilasi silang untuk Jetson Nano.clangd - Mengumpulkan perintah kompilasi untuk BASE_BUILD_PROFILE yang diberikan dan menghasilkan file konfigurasi klangd di root ruang kerja.deb - Generasi Paket Debian (lihat di bawah). Profil Eksekusi Menetapkan variabel lingkungan yang dapat digunakan dalam skrip peluncuran untuk mengubah perilaku waktu yang dijalankan seperti yang ditunjukkan dalam ccws/pkg_template/catkin/launch/bringup.launch , profil yang tersedia saat ini adalah:
common - Satu set parameter ROS umum, misalnya, ROS_HOME , secara otomatis termasuk dalam paket biner.test - Mengatur variabel CCWS_NODE_CRASH_ACTION sehingga node yang menghormati itu required , yaitu, penghentian node tersebut akan mengakibatkan kerusakan skrip uji dan dengan demikian dapat dengan mudah dideteksi.valgrind - SET CCWS_NODE_LAUNCH_PREFIX ke valgrind dan beberapa variabel yang mengontrol perilaku valgrind .core_pattern - Mengatur pola inti untuk menyimpan file inti di direktori artefak.address_sanitizer - penolong untuk profil addr_undef_sanitizers . Profil eksekusi tidak berpengaruh pada proses pembangunan dan diperhitungkan dalam target *test* atau paket Debian. Profil Eksekusi test selalu digunakan dalam tes dan profil tambahan dapat disediakan dengan EXEC_PROFILE="<profile1> <profile2>" . Target -target ini memuat profil menggunakan setup.bash skrip yang terletak di folder root CCWS , yang juga dapat digunakan secara manual, misalnya, source setup.bash [<build_profile> [<exec_profile1> ...]] . Perhatikan bahwa skrip pengaturan selalu mencakup profil common , dan menggunakan profil eksekusi test jika tidak ada profil eksekusi lain yang ditentukan.
Ketergantungan dapat diinstal menggunakan make bp_install_build BUILD_PROFILE=<profile> , yang akan menginstal alat berikut dan dependensi spesifik profil:
colconyq - https://github.com/asherikov/wshandler ketergantungancmakeccache - dapat dinonaktifkan di cmake toolchainswget Lihat .ccws/test_main.mk untuk petunjuk penggunaan perintah.
make/config.mk , parameter yang tersedia dapat ditemukan di bagian atas Makefile .make bp_install_build BUILD_PROFILE=<profile> target, profil kompilasi silang akan memerlukan beberapa langkah tambahan seperti yang dijelaskan di bawah ini. Di beberapa lingkungan minimalis Anda mungkin perlu menjalankan ./ccws/scripts/bootstrap.sh sebelum menggunakan target bp_install_build untuk menginstal make dan util lainnya.src Subdirektori, atau Buat Baru Menggunakan make new PKG=<pkg> . make build PKG="<pkg>" di mana <pkg> adalah satu atau lebih nama paket yang dipisahkan ruang.make <pkg> - pintasan untuk make build , tetapi <pkg> bisa menjadi substring nama paket. Semua paket yang cocok dengan substring yang diberikan akan dibangun.JOBS=X .make build PKG=<pkg> BUILD_PROFILE=scan_build menimpa profil default. setup.bash <profile> Untuk dapat menggunakan paket. Skrip Pengaturan yang dihasilkan oleh colcon juga dapat digunakan secara langsung, misalnya, install/<profile>/local_setup.sh , tetapi dalam hal ini beberapa fungsionalitas CCWS tidak akan tersedia. make test PKG=<pkg> tes dengan colcon , atau make wstest untuk menguji semuanya.make ctest PKG=<pkg> bypass colcon dan jalankan ctest secara langsung atau make wsctest untuk menguji semua. make BUILD_PROFILE=doxygen , firefox artifacts/doxygen/index.html CCWS mengambil pendekatan yang agak tidak umum untuk pembuatan paket biner yang merupakan jalan tengah antara ROS tradisional (1 paket = 1 deb) dan wadah Docker: Semua paket yang dibangun di ruang kerja dikemas bersama menjadi 'superpackage' Debian tunggal. Tidak seperti bloom CCWS menghasilkan paket biner secara langsung alih -alih menghasilkan paket sumber terlebih dahulu.
Pembuatan paket biner diimplementasikan sebagai mixin profil build yang dapat diaplikasikan di atas profil build yang sewenang -wenang: make <pkg> BUILD_PROFILE=deb BASE_BUILD_PROFILE=reldebug .
Pendekatan CCWS memiliki sejumlah keunggulan:
Masalah kompatibilitas biner diminimalkan dibandingkan dengan pendekatan ROS tradisional:
Tidak perlu khawatir tentang kompatibilitas antara beberapa paket biner mandiri dan melakukan pemeriksaan ABI;
Jika paket ROS base disertakan, dimungkinkan juga untuk menghindari ketidakcocokan biner antara sinkronisasi rilis ROS yang sama (itu sebenarnya terjadi).
Manajemen Repositori Paket dapat lebih sederhana dibandingkan dengan ROS ketika datang ke tag, versi, submodul GIT, dll, misalnya, tidak perlu mempertahankan repo rilis untuk semua paket.
'Superpackages' Debian lebih mudah ditangani daripada paket mandiri dan wadah Docker, misalnya, mereka dapat dihasilkan oleh pengembang dari cabang kerja mereka dan dengan mudah disalin dan dipasang pada target.
Paket Debian memiliki beberapa keunggulan dibandingkan wadah Docker secara umum:
Nol overhead selama eksekusi.
Akses langsung ke perangkat keras.
Instalasi Layanan Sistem yang Mudah, Aturan Udev, Konfigurasi, dll.
Versi paket biner yang berbeda dapat diinstal secara bersamaan, jika dibangun menggunakan parameter VERSION yang berbeda.
Secara umum, perlu untuk menginstal paket ke root sistem file selama kompilasi untuk mendapatkan semua jalur yang tepat di file catkin cmake dan menginstal file sistem dengan benar. CCWS menghindari ini menggunakan proot mirip dengan profil kompilasi silang.
Di sini <profile> singkatan dari cross_raspberry_pi , cross_jetson_xavier , cross_jetson_nano . Kompilasi silang membuat target dapat ditemukan di ccws/make/cross.mk dan ccws/profiles/<profile>/targets.mk
Catatan di cross_jetson_xavier dan cross_jetson_nano : Profil ini memerlukan ubuntu 18.04 / ROS melodik dan instal nvcc , Anda mungkin ingin melakukan ini dalam wadah.
Alur kerja umum didokumentasikan di bawah ini, untuk detail teknis lebih lanjut lihat ccws/doc/cross-compilation.md dan CCWS CI tes di .ccws/test_cross.mk :
make bp_install_build BUILD_PROFILE=<profile>cross_raspberry_pi - bp_install_build target secara otomatis mengunduh gambar standar;cross_jetson_xavier , cross_jetson_nano - CCWS tidak memperoleh gambar ini secara otomatis, Anda harus manual menyalin gambar partisi sistem ke ccws/profiles/cross_jetson_xavier/system.img .make wsinit REPOS="https://github.com/asherikov/staticoma.git"make dep_to_repolist ROS_DISTRO=melodic , atau paket spesifik 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>make staticoma BUILD_PROFILE=<profile> atau Bangun dan Hasilkan Paket make deb PKG=staticoma BUILD_PROFILE=<profile>make cross_umount BUILD_PROFILE=<profile>CCWS Docker Gambar Docker dengan CCWS yang diinstal sebelumnya dan dependensi tersedia untuk pengujian, tetapi disarankan untuk membangun gambar yang disesuaikan menggunakan ccws/examples/Dockerfile sebagai contoh.
Gambar dapat digunakan dengan cara berikut:
docker pull asherikov/ccwsmkdir tmp_ws # sumber, build, instal, cache akan pergi ke sinidocker run --rm -ti -v ./tmp_ws:/ccws/workspace asherikov/ccws bashmake wsinit REPOS="https://github.com/asherikov/qpmad.git"...CCWS Fungsionalitas CCWS dapat diperluas dalam berbagai cara:
make bp_new BUILD_PROFILE=vendor_static_checks BASE_BUILD_PROFILE=static_checks , semua profil yang dimulai dengan awalan vendor diabaikan oleh git;make target dapat ditambahkan dengan membuat file ccws/profiles/build/vendor/<filename>.mk ;cmake Toolchain yang umum dapat ditambahkan ke ccws/profiles/build/vendor/toolchain_suffix.cmake . Kesalahan Segmentasi Selama kompilasi silang atau wadah docker pembuatan paket Debian (keduanya memerlukan proot ): mungkin karena fitur seccomp Linux, yang dapat dinonaktifkan dengan --security-opt seccomp:unconfined . Menonaktifkan seccomp untuk proot dengan PROOT_NO_SECCOMP=1 tampaknya tidak perlu.
Program yang dikompilasi dengan sanitizers ( addr_undef_sanitizers atau thread_sanitizer Profil Bangun) Output 2: AddressSanitizer:DEADLYSIGNAL atau FATAL: ThreadSanitizer: unexpected memory mapping Saat Dieksekusi: Alasannya Kekencang Keamanan Memori dengan Sanit (Alamat Layout Space#. Masalah ini dapat dikurangi dengan mengatur sudo sysctl vm.mmap_rnd_bits=28 .
Beberapa paket inti ROS2 tidak dapat dibangun dengan CCWS karena penyalahgunaan CMake, misalnya, lihat AMENT/Google_BENCHMARCE_VENDOR#17.
proot Segfault saat membangun ARM64 di Ubuntu 22, misalnya, sambil membangun paket Debian. Versi proot yang lebih baru harus digunakan, lihat Proot-Me/Proot#312.
github yang mencakup beberapa fungsionalitas CCWS .ccache dengan https://github.com/mbitsnbites/buildcache.clang-tidy run.scan_build https://github.com/ericsson/codechecker dengan pemeriksaan dan caching tambahan.dpkg-deb .catkin_make .guestfs terlalu lambat untuk menjadi praktis.valgrind , gcc tidak mendukungnya saat ini.valgrind -overkill dalam kasus umum.CodeQL (https://github.com/github/codeql).