Cara membuat snap menggunakan ROS 2 Humble

Ubuntu


Kami baru-baru ini merayakan rilis ROS 2 Humble Hawksbill dengan postingan tentang cara mulai mengembangkan versi baru dalam container. Selain itu, kami membagikan gambaran umum tentang fitur-fitur baru yang ditawarkan dalam versi baru ini, terutama fitur keamanan lanjutannya.

Minggu ini kami mengambil langkah logis berikutnya dalam pengembangan perangkat lunak: pengemasan. Faktanya, setelah kami selesai mengembangkan aplikasi ROS 2 Humble yang sangat keren, kami masih perlu mengeluarkannya kepada pengguna kami.

Dalam posting ini, kita akan melihat cara mengemas aplikasi ROS 2 Humble dengan contoh seperti “Hello World” di Snap.

ROS 2 Rendah hati katamu?

Snaps adalah paket aplikasi untuk desktop, cloud, dan IoT yang mudah dipasang, aman, lintas platform, dan bebas ketergantungan.


Snaps adalah solusi ideal untuk menerapkan aplikasi berbasis ROS karena merupakan solusi pengemasan kotak pasir yang terdistribusi silang dan berdiri sendiri. Belum lagi, mereka secara asli mendukung ROS untuk mempermudah perjalanan pengemasan Anda. Anda dapat mengetahui lebih lanjut tentang semua fitur yang mereka tawarkan di halaman robotika khusus mereka!

Luncurkan snapcraft

Pertama, mari dapatkan alat yang memungkinkan kita membuat snap: snapcraft.

sudo snap install --classic snapcraft

Kami juga akan menginstal LXD, yang digunakan snapcraft sebagai backend untuk kemasan yang bersih, terbatas, dan dapat direproduksi.

sudo snap install lxd
sudo lxd init --minimal

Perhatikan bahwa kami telah menginisialisasi LXD dengan sejumlah parameter default. Jika Anda lebih suka menentukan sendiri beberapa parameter tersebut, buka dokumentasi LXD.

Kita sudah siap untuk mengemas sampel pertama kita, jadi mari kita lakukan.

Contoh pembicara-pendengar

Untuk contoh ini, kita akan santai saja karena kita bahkan tidak perlu menulis kode apa pun. Sebagai gantinya, kami menggabungkan salah satu demo ROS 2 dari repositori GitHub. Saya telah memilih versi demo dari paket ‘demo_nodes_cpp’, lebih khusus lagi, demo ‘talker_listener.launch.py’.

Seperti namanya, demo ini memulai “percakapan” yang memublikasikan pesan berulir tentang topik ROS 2. bersama dengan “pendengar” yang membaca pesan tersebut. Keduanya mencetak pesan yang dikirim/diterima ke konsol untuk memudahkan pelacakan. Dan tentu saja keduanya diluncurkan sekaligus dari file startup yang sama.

Meskipun contoh ini mungkin tampak sedikit terlalu sederhana, ini adalah kontak pertama yang ideal dengan Snap. Kita akan melihat betapa mudahnya mengemas aplikasi ROS 2 dengan Snap.

file snapcraft.yaml

Snapcraft mengandalkan file konfigurasi ‘snapcraft.yaml’ untuk memandu proses pengemasan. Jadi, mari kita buat satu,

mkdir -p ~/ros2_ws/first_snap/
cd ~/ros2_ws/first_snap/
touch snapcraft.yaml

Dan kemudian isi seperti di bawah ini

name: ros2-talker-listener
version: '0.1'
summary: ROS 2 Humble talker/listener example
description: |
This example launches a ROS 2 Humble talker and listener.

base: core22
confinement: strict

apps:
ros2-talker-listener:
command: opt/ros/humble/bin/ros2 launch demo_nodes_cpp talker_listener.launch.py
plugs: [network, network-bind]
extensions: [ros2-humble]

parts:
ros-demos:
plugin: colcon
source: https://github.com/ros2/demos.git
source-branch: humble
source-subdir: demo_nodes_cpp
stage-packages: [ros-humble-ros2launch]

Percaya atau tidak, itu saja yang kita butuhkan untuk membuat foto kita. Tapi mari kita periksa file ini lebih dekat.

Hancurkan semuanya

Kami dapat mengidentifikasi 3 blok berbeda di atas snapcraft.yaml mengajukan.

Di bagian atas file adalah pelat boiler, umum untuk sebagian besar terkunci. Jepret name, version Dll. Tidak ada yang tidak biasa di sini. kemudian datang base: core22 yang merupakan snap dasar yang menyediakan lingkungan runtime untuk aplikasi kami berdasarkan Ubuntu 22.04. Ini adalah entri terakhir di blok ini confinement: strict Yang menyatakan bahwa program kami sangat terbatas. Dengan kata lain, ia tidak dapat mengakses sumber daya apa pun di mesin host.

Blok kedua apps, menentukan aplikasi yang akan diekspos dari snap. Di sini, satu program terdaftar bahwa command Ini sangat akrab. Selain itu, aplikasi kami juga mencantumkan beberapa di antaranya interfaces Pada plugs bagian. Perhatikan bahwa antarmuka memungkinkan aplikasi terbatas kami untuk mengakses sumber daya tertentu dari mesin host. Dalam hal ini, snap kami akan memiliki akses ke antarmuka jaringan yang memungkinkan aliran utas ROS 2. Pada akhirnya, extensions: [ros2-humble] Ini secara otomatis mengisi beberapa bidang lain yang umum untuk bidikan ROS 2 Humble. Jika Anda ingin tahu tentang apa yang dilakukan ekstensi, perhatikan bahwa Anda dapat memperpanjangnya. Ungkapkan semua rahasianya dengan perintah di bawah ini

SNAPCRAFT_ENABLE_EXPERIMENTAL_EXTENSIONS=1 snapcraft expand-extensions

Akhirnya, kita lihat blok ketiga: parts. ini parts Tag mendefinisikan berbagai bagian yang membentuk aplikasi akhir kita. Mereka termasuk source Masukan untuk kode sumber seperti file lokal, tarball, atau seperti dalam contoh ini, repositori GitHub di cabang tertentu. Selain itu, “bagian” dapat dimasukkan build-packagesyang sebaliknya hanya diperlukan pada waktu pembuatan stage-packages yang hanya dibutuhkan pada saat runtime. Yang paling penting, setiap bagian didefinisikan oleh plugin. Dari sini kami berasal colcon Plugin yang menggunakan alat pembuatan ROS 2 yang sudah dikenal. Kemudian lagi plugin ini memiliki opsi sendiri yang dapat Anda periksa dengan perintah

snapcraft help colcon

Anda dapat menemukan informasi lebih lanjut tentang metadata global, komponen dan metadata Anda, plugin colcon, ekstensi, dan lainnya di dokumentasi.

sekarang itu snapcraft.yaml File sudah ditentukan, saatnya membuat snap.

Membuat ROS 2 Humble snap

Untuk membuat snap, berikan perintah snapcraft di sebuah terminal,

$ SNAPCRAFT_ENABLE_EXPERIMENTAL_EXTENSIONS=1 snapcraft
Starting Snapcraft

* metallic sound of software being forged *

Created snap package

serang, ungkapkan dirimu,

$ ls
ros2-talker-listener_0.1_amd64.snap snapcraft.yaml

Benar saja, itu dia!
Bagaimana kalau menginstalnya sekarang? Untuk melakukan ini, ketik

$ sudo snap install --dangerous ros2-talker-listener_0.1_amd64.snap
ros2-talker-listener 0.1 installed

menggunakan --dangerous Tandai karena kami memasang Snap dari disk alih-alih menggunakan toko.

Oke, tapi dia melakukannya Menggigit Kerja?

$ ros2-talker-listener
[INFO] [launch]: All log files can be found below /home/ubuntu/snap/ros2-talker-listener/x6/ros/log/2022-05-24-15-24-50-823207-localhost-24895
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [talker-1]: process started with pid [24944]
[INFO] [listener-2]: process started with pid [24946]
[talker-1] 2022-05-24 15:24:51.341 [RTPS_TRANSPORT_SHM Error] Failed to create segment ac1bbb6c86049e8a: Permission denied -> Function compute_per_allocation_extra_size
[listener-2] 2022-05-24 15:24:51.346 [RTPS_TRANSPORT_SHM Error] Failed to create segment e75bbd4ac39608ab: Permission denied -> Function compute_per_allocation_extra_size
[talker-1] 2022-05-24 15:24:51.348 [RTPS_MSG_OUT Error] Permission denied -> Function init
[listener-2] 2022-05-24 15:24:51.348 [RTPS_MSG_OUT Error] Permission denied -> Function init
[talker-1] [INFO] [1653420292.379305200] [talker]: Publishing: 'Hello World: 1'
[listener-2] [INFO] [1653420292.380423139] [listener]: I heard: [Hello World: 1]
[talker-1] [INFO] [1653420293.379072149] [talker]: Publishing: 'Hello World: 2'
[listener-2] [INFO] [1653420293.379286698] [listener]: I heard: [Hello World: 2]
[talker-1] [INFO] [1653420294.379120962] [talker]: Publishing: 'Hello World: 3'
[listener-2] [INFO] [1653420294.379682258] [listener]: I heard: [Hello World: 3]
...

Ya itu betul! Seberapa baik.
Lebih penting lagi, Anda dapat menginstal dan menjalankan snap ini di komputer lain, meskipun tidak ada ROS 2 yang terinstal! Heck, Anda dapat menginstal dan menjalankan snap ini pada distribusi Linux lain dari 4 tahun yang lalu!

Perhatikan bahwa pesan kesalahan dari FastDDS, pustaka DDS yang mendasarinya, tidak mencegah program berjalan. Dengan kata lain, kita dapat dengan aman mengabaikannya untuk saat ini. Jika Anda ingin mempelajari lebih lanjut tentang cara kerja memori bersama dengan Snap, kami telah membahas ini sepenuhnya di blog khusus: Cara Menggunakan Memori Bersama ROS 2 di Foto.

lalu bagaimana?

Dalam posting ini kita melihat cara membuat snap untuk aplikasi ROS 2 Humble. Meskipun demo ini cukup sepele, mengemas tumpukan ROS yang lebih kompleks tidak terlalu rumit. Untuk mendemonstrasikannya, lihat seri “Cara menyiapkan TurtleBot3 dalam hitungan menit dengan snap”.

Selain itu, kami telah melihat bagaimana Anda dapat secara efektif dan mudah mengemas aplikasi ROS 2 Anda. Bagaimana distribusinya sekarang? Lihatlah bagaimana melakukan ini dengan toko di sini.

Terakhir, ajukan pertanyaan apa pun di forum snapcraft atau ROS Answers. Saya akan senang mendengar umpan balik yang Anda miliki.



Source link

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.