Artikel ini akan membahas contoh proyek yang menampilkan dasbor yang melaporkan status komunikasi robot ke robot menggunakan VEXlink dan juga status ke Jetson. Proyek ai_demo dihosting di Github kami. Proyek demo ini mengumpulkan data dari prosesor Jetson melalui koneksi serial USB. Setelah data diterima, data tersebut ditampilkan di layar V5 Brain dan juga dikirimkan ke robot mitra V5 yang terhubung melalui VEXlink.
Catatan: Proyek ini memerlukan versi terbaru dari Ekstensi VS Code untuk V5. Unduh Ekstensi VS Code untuk V5 di sini.
Komunikasi Otak NVIDIA Jetson Nano ke VEX V5
Prosesor Jetson berisi aplikasi yang mengumpulkan data berikut dari perangkat lunak VEX AI:
Data Lokasi Robot:
- Lokasi X,Y robot dalam meter dari pusat lapangan.
- Azimuth (Heading), Elevation (Pitch), Rotation (Roll) Robot semuanya dalam radian.
Data Deteksi Objek (tiga jenis):
- Data ini mewakili objek yang terdeteksi oleh VEX AI Intel Camera.
- Data ini mendeskripsikan objek dengan mengacu pada gambar kamera.
- Nilai untuk X, Y, lebar, dan tinggi dalam satuan piksel. Nilai piksel mengacu pada sudut kiri atas kotak deteksi gambar dan objek. Resolusi gambar 640x480.
Deteksi Peta (tipe dua):
- Data ini menunjukkan lokasi objek di lapangan dalam sistem koordinat yang sama dengan Sensor GPS, dilaporkan dalam meter.
- Setiap objek juga berisi lokasi objek relatif terhadap pusat bidang. Nilai untuk X dan Y dalam satuan meter dari pusat lapangan pada sumbu masing-masing. Nilai Z adalah meter dari petak lapangan (ketinggian).
Objek Deteksi (tipe tiga):
- Ini merangkum semua informasi tentang objek yang terdeteksi.
- Setiap objek berisi nilai yang mewakili klasifikasi objek yang terdeteksi. (ID Kelas: 0 = GreenTriball, 1 = RedTriBall, 2 = BlueTriBall)
- Setiap objek juga mengandung probabilitas yang mewakili keyakinan VEX AI dalam deteksi. Ini setelah filter dalam model.py yang menghilangkan deteksi probabilitas rendah.
- Selain itu, kedalaman objek dilaporkan dalam meter dari Kamera VEX AI Intel.
- Deteksi Gambar dan Deteksi Peta dilampirkan ke setiap objek untuk mewakili koordinat objek pada gambar dan dunia nyata.
Rincian program ai_demo:
Utama.cpp
Standar mencakup untuk proyek VEX:
Nyatakan contoh kelas Jetson. Kelas ini digunakan untuk mengirim permintaan data ke Jetson serta menerima data melalui koneksi serial USB.
#definisikan MANAJER_ROBOT 1
Nyatakan contoh kelas robot_link. Objek ini akan digunakan untuk menghubungkan dan mentransfer data antara robot ini dan robot mitra. Proyek yang sama dapat diunduh ke dua robot terpisah. Satu robot harus memiliki garis:
//#definisikan MANAJER_ROBOT 1
Sebelum Anda memuat kode ke robot kedua, Anda perlu mengomentari baris tersebut:
Kelas robot_link menyiapkan VEXlink robot dan menangani pengiriman dan penerimaan data antara kedua robot. Kami tidak akan membahas secara rinci dalam artikel ini tentang cara kerja kelas tersebut. Ada baiknya untuk memahami terlebih dahulu cara kerja VEXlink. Untuk informasi lebih rinci tentang penggunaan V5 VEXlink API, ini pustaka baru dan cara menggunakannya secara efektif untuk komunikasi robot-ke-robot.
-
Penanganan Acara Kompetisi
Salah satu perbedaan terbesar antara VAIC dan VRC adalah tidak adanya periode kontrol pengemudi. Sebaliknya ada dua periode otonomi, periode isolasi dan periode interaksi. Dalam contoh ini, ada rutinitas terpisah untuk setiap periode otonomi. Karena VEX API tidak mendukung dua panggilan balik yang berbeda, harus ada tanda dalam program untuk menentukan rutin mana yang akan dieksekusi. Dalam program contoh ini, "firstAutoFlag" digunakan untuk memanggil fungsi Isolasi saat otonomi diaktifkan untuk pertama kalinya, dan fungsi interaksi saat otonomi diaktifkan untuk kedua kalinya. Satu hal yang perlu diperhatikan adalah jika karena alasan tertentu pertandingan perlu diatur ulang, program demo perlu dimulai ulang agar firstAutoFlag dapat diatur ulang.
-
Utama()
Ini adalah tugas utama untuk proyek ini. Dimulainya dengan memanggil vexcodeInit() untuk menyiapkan lingkungan VEXcode dengan benar. Berikutnya, objek AI_RECORD lokal dideklarasikan untuk menyimpan data yang kami terima dari Jetson. Tugas terpisah juga disiapkan untuk menangani pembaruan layar dengan data terkini. Kode untuk tugas tersebut terdapat dalam berkas dashboard.cpp. Panggilan balik otonom juga didaftarkan untuk menangani kapan periode otonom dimulai.
Perulangan while() utama dimulai dengan menyalin data terkini dari objek jetson_comms ke objek AI_RECORD lokal kita. Kemudian, ia meneruskan informasi lokasi robot ke objek tautan sehingga dapat dikirimkan ke robot mitra kami. Setelah selesai memproses data, ia meminta lebih banyak data dari Jetson dan tidur selama 66 milidetik. Laju polling untuk data ini adalah 15Hz. Tidak ada alasan untuk melakukan polling lebih cepat karena data sistem AI diperbarui pada sekitar 15Hz.
Catatan: data peta Jetson hanya perlu diminta oleh satu tugas.