Bagaimana saya membuat setelan tangkap gerak
Kata Pengantar
Di kota kecil saya, saya terlibat dalam memecahkan masalah teknis yang tidak sepele. Jadi kali ini, penyelenggara satu pertunjukan, di mana pesenam seharusnya tampil dengan programnya, memutuskan untuk menambahkan beberapa "highlight" untuk penampilannya. Yaitu, untuk menampilkan siluet pesenam di layar, yang akan mengulangi gerakannya dan entah bagaimana berinteraksi dengan efek lain, sehingga semuanya interaktif. Itu tidak mungkin untuk memecahkan masalah "dahi". Kinect jelas tidak bisa mengatasi tugasnya dan tidak mampu menangkap gerakan seseorang yang setidaknya 10 meter darinya, juga dalam kegelapan. Jadi diputuskan untuk melakukan sesuatu "milik mereka." Ke depan, saya akan mengatakan bahwa pertunjukan itu tidak terjadi, tetapi saya sangat bersemangat dengan gagasan itu sehingga saya melanjutkan eksperimen saya sebagai proyek terpisah, yang kemudian disebutdorongan hati .Memulai
Saya mulai membuat prototipe perangkat masa depan segera setelah saya menerima komponen yang diperlukan. Yaitu:- Arduino UNO adalah pengontrol-desainer terkenal, yang memungkinkan Anda untuk mengembangkan prototipe dalam waktu singkat.
- HC-06 - modul bluetooth, akan berfungsi sebagai sarana komunikasi nirkabel. Modul ini sangat sederhana, memiliki antarmuka UART.
- MPU-6050 - satu-satunya sensor inersia yang tersedia untuk saya saat itu. Saya segera membeli 2 untuk memeriksa bagaimana mereka bekerja berpasangan, karena di masa depan perlu menggunakan hingga 15 sensor dalam satu sistem. Sensor ini menggabungkan accelerometer dan giroskop, serta sensor suhu untuk menyesuaikan output.
Setelah menerima semuanya dari daftar ini, saya sudah bersemangat untuk melihat mpu beraksi. Di forum resmi Arduino, ada beberapa contoh menggunakan sensor ini, dan saya menggunakan salah satunya. Untuk menghubungkan sensor, 5 pin (kontak) digunakan:- VCC, GND - semuanya jelas, kekuatan dan bumi Perlu dicatat bahwa tegangan kerja sensor adalah 3.3V, tetapi pada 5v rasanya enak. Konsumsi Daya Kurang dari 0,05Ah
- SCL, SDA - sebenarnya pin yang melaluinya ada "komunikasi" dengan sensor. Pin ini bertanggung jawab untuk antarmuka i2c. Antarmuka ini mengimplementasikan pergantian antar perangkat di bus yang sama, dengan kata lain, bus adalah jalan, dan rumah di dalamnya adalah perangkat.
- INT - pin untuk interupsi. Segera setelah data pada sensor siap, pengontrol utama akan menghentikannya.
Namun, contoh ini hanya menampilkan nilai "mentah" dari accelerometer di terminal, dan kode ditulis untuk dikonversi ke sudut yang sudah dikenal, dan kemudian Filter Kalman diimplementasikan, dan semua ini bersama-sama sudah menghabiskan sekitar 70% sumber daya Arduino UNO. Namun demikian, nilai sudut yang agak halus sudah tiba di terminal, perangkat ini cukup cepat di ruang, meskipun hanya beberapa menit, setelah itu buffer FIFO penuh. Tapi itu berhasil!
Stabilkan!
Secara bertahap, kegembiraan sensor yang bekerja dibayangi oleh durasi seluruh sistem. Sebanyak yang saya tidak berjuang dengan buffer FIFO, itu meluap. Perlu dicatat bahwa pada saat itu hanya ada sedikit informasi tentang sensor-sensor ini dan sistem yang umumnya serupa, dan itu harus dikumpulkan secara harfiah sedikit demi sedikit. Setelah memutuskan bahwa masalahnya terletak pada implementasi antarmuka i2c, saya mulai googling ke arah ini dan menemukan perpustakaan pengguna I2Cdev, yang dirancang untuk menggantikan perpustakaan kawat standar untuk arduino. Kejutan yang menyenangkan adalah contoh bersarang menggunakan perpustakaan ini bersama dengan mpu-6050. Setelah membangun kembali proyek di perpustakaan ini, saya juga menerima data mentah dan mengubahnya menjadi sudut-sudut dengan kode saya, tetapi tidak ada lagi luapan. Ini adalah kemenangan kecil. Kemudian, ketika mempelajari bagian dalam perpustakaan, saya menemukan banyak hal berguna. Jadi misalnyasekarang menggunakan data dari kedua sensor - dan akselerometer dan giroskop. Faktanya adalah bahwa accelerometer memungkinkan Anda untuk menentukan sudut kemiringan yang tepat dari perangkat hanya pada posisi diam sampai kekuatan eksternal bertindak di atasnya, dan giroskop dirancang untuk mengimbangi kekuatan yang sama ini. Penggunaan data dari kedua sensor menjadi jelas, dan di sini filter pelengkap menemukan aplikasi. Namun, ada masalah zero drift, tetapi lebih dari itu nanti.!
Dan lagi-lagi karang. Kali ini masalah yang datang sebelum saya adalah menggunakan sensor mpu-6050 kedua. Saya sudah memberikan analogi antarmuka i2c dalam artikel ini, di mana bus adalah jalan dan perangkat di rumah. Bayangkan bahwa paket data yang harus menjangkau perangkat tertentu adalah tukang pos. Tukang pos membutuhkan 2 hal - paket dan alamat, dan setiap rumah memiliki alamat uniknya sendiri, dan perangkat harus memiliki alamatnya sendiri. Masalahnya justru di alamat sensor mpu-6050, itu adalah satu untuk semua sensor tersebut - 0x68. Alamat ini dimasukkan ke pengontrol sensor di pabrik, tetapi tidak mungkin untuk menemukan firmware dan mengubah alamat untuk setiap sensor. Forum asing memberikan satu solusi: menghubungkan sensor satu demi satu, satu kaki dari sensor pertama terhubung ke pin AD0 yang kedua,dan menjadi tersedia pada 0x69, tetapi metode ini melibatkan penggunaan tidak lebih dari 2 mpu dan saya segera menjatuhkannya.Solusinya adalah transistor. Idenya adalah untuk menempatkan sepasang transistor pada pin i2c di depan setiap sensor dan membukanya secara bergantian. Algoritma ini sederhana - perlu membaca data dari sensor ke-5, menutup semua gerbang kecuali gerbang ke-5 (atau membukanya jika perlu) dan membaca, lalu dengan cara yang sama kita mendapatkan data dari yang lain. Hasilnya bisa dilihat pada foto pertama di artikel ini, dan itu cukup bisa diterapkan. Dengan cara yang sama, saya berhasil menghubungkan 4 sensor, ini tidak mempengaruhi stabilitas dengan cara terbaik, dan ketika saya kehabisan transistor saya memutuskan untuk menggunakan microcircuits yang lebih kompak dan stabil.Satu-satunya foto yang selamat dari tahap itu (saya minta maaf atas kualitasnya):
Kontroler gerbang
Perangkat yang akan menggabungkan sirkuit mikro ini dan memungkinkan Anda untuk berkomunikasi dengan banyak sensor mpu, saya disebut gerbang controller. Saya dibantu oleh seorang teman baik yang sudah memiliki pengalaman dengan papan etsa, tetapi saya membutuhkan kualitas yang tidak dimiliki upaya etsa sebelumnya. Karena banyak trek berpotongan, papan dua lapisan diperlukan, tetapi yang multi-level juga cocok sebagai prototipe. Hasil karya ini adalah papan yang tidak biasa:Sekarang tinggal memeriksa perangkat yang sedang beraksi. Setelah menghubungkan 10 sensor sekaligus, pesan menyenangkan yang persis sama tentang inisialisasi yang berhasil muncul di monitor - perangkat berfungsi!
Gimble Lock, Quaternions, visualisasi
Gimble lock, dalam kunci berengsel Rusia atau bingkai lipat - sebuah fenomena yang tidak menyenangkan di bidang giroskop dan, dalam beberapa kasus, orientasi dalam ruang. Tanpa penjelasan panjang tentang fenomena ini (ada video penjelas dan visual yang bagus tentang topik ini) Saya hanya akan mengatakan bahwa kunci berengsel ini tidak memungkinkan sensor untuk berputar 360 derajat. Sumbu XZ (penyimpangan dari bidang horizontal) dibatasi sekitar -45 hingga 45 derajat, dan tidak didefinisikan dengan benar di luar batas ini. Setelah mempelajari topik ini lebih terinci, ternyata solusinya ada di bawah hidung saya. MPU-6050 adalah sensor enam sumbu, dan mereka memiliki dmp di papan. Dmp (DIgital Motion Processor) melakukan semua yang saya tulis dalam kode utama untuk menginstal controller utama begitu lama, dan bahkan menyaring nilainya. Selain itu, dmp dapat menampilkan data dalam bentuk angka empat,yang memungkinkan Anda untuk memotong kunci engsel, serta memungkinkan Anda untuk mengurangi ukuran paket yang diteruskan. Pada titik ini, kenalan saya dengan angka empat berlanjut, sebelumnya saya bekerja dengan mereka di Unity3D dan punya beberapa ide. Dalam istilah sederhana, angka empat adalah sistem angka (4 angka) yang menggambarkan rotasi sesuatu dalam ruang. Hanya mengingat Unity, saya mencoba menggambarkan sesuatu seperti ini:
Pengendali
Arduino dan pengontrol gerbang telah membenarkan diri mereka sendiri, tetapi penggunaannya dalam versi final tidak dimaksudkan. Sudah waktunya untuk membuat controller spesifik dan dirancang untuk tugas tertentu. Pada saat itu, saya cukup banyak memodifikasi firmware untuk pengontrol masa depan, mengkonfigurasi dmp dengan cara yang optimal, yang memungkinkan saya untuk menolak menggunakan interupsi. Dengan demikian, setiap sensor dihubungkan oleh empat pin, dan bukan lima, seperti sebelumnya. Juga, tidak perlu untuk dua dari enam chip di controller gerbang. Semua peningkatan ini mengarah pada kenyataan bahwa papan untuk perangkat masa depan dirancang dalam dua arah, dan tidak ada lagi "over-the-top" yang diperlukan.
Perumahan
Perangkat secara bertahap mengambil bentuk terakhirnya, dan langkah selanjutnya adalah membuat kasus itu logis. Solusi yang jelas adalah memesan atau beralih ke layanan pencetakan 3D. Tapi ini semua sederhana dan tidak menarik, jadi kami membeli printer 3D kami sendiri untuk beberapa hal. Dengan tidak adanya instruksi, mereka menyusunnya pada tingkat intuitif, tetapi semuanya berhasil. Secara umum, perakitan, konfigurasi, dan persiapan untuk mencetak sendiri pantas mendapatkan artikel terpisah, tetapi ini bukan tentang itu. Dengan menggunakan semua bahan uji, yang tersisa adalah menunggu sampai plastik ABS tiba.Untuk simulasi, program 123D-Design dipilih. Program ini intuitif, dan siapa pun yang memiliki setidaknya sedikit pengalaman dalam editor grafis 3D akan segera menguasainya.
Lalu ia mencetak semua kasing, menghubungkan sensor ke controller melalui kabel 4-pin tipis, membuat pemasangan untuk sensor, menyatukan semuanya dan mendapatkan setelan yang siap pakai, berdiri sendiri, dan dapat dipakai. Untuk prototipe pertama cukup cocok.


Perangkat lunak
Karena beberapa keadaan, saya menunda Unity3D "untuk nanti", tenggat waktu habis dan saya harus segera menulis program untuk visualisasi. Saya telah bekerja dengan mesin grafis Xors3D untuk waktu yang lama (Mungkin seseorang tahu ini) dan kali ini tidak mengecewakan saya. Namun, setelah dia membayar, saya tidak kembali ke Unity, tetapi terus mengembangkan lingkungan visual untuk kostum pada mesin khusus ini.
Daftar fitur saat ini:- Visualisasi - program menampilkan model seseorang, yang secara real time mengulangi semua gerakan seseorang yang mengenakan jas
- Auto Calibration - Memungkinkan Anda untuk segera mengkalibrasi setelan Anda kapan saja
- Posisi - model juga bergerak di ruang seperti seseorang, dapat berjongkok, berjalan, dll.
- Perekaman / Putar - Semua gerakan dapat direkam dan diputar ulang.
- Mode tampilan orang pertama - output gambar untuk keretakan oculus dan helm realitas virtual lainnya disediakan.
- Interaktivitas - seseorang yang mengenakan jas dapat mempengaruhi dunia virtual. Menendang bola, membuka pintu, memutar korsel, dll. (mesin fisik)
Kesimpulan
Saat ini, proyek ini memiliki 1 prototipe yang berfungsi penuh, otonom, dapat dipakai, dan nirkabel serta semua perangkat lunak yang diperlukan. Butuh waktu 8 bulan untuk mengembangkan kostum ini (2 di antaranya saya istirahat, total 6), tetapi bagi saya ini adalah era keseluruhan. Selama proyek, saya memompa keterampilan saya, mencoba dan melakukan banyak hal yang sebelumnya hanya sedikit saya ketahui, saya bisa mendapat sedikit.Ketika saya mulai, hanya ada minat pada "bagaimana cara kerjanya?" dan keberadaan kostum seperti itu saya belum tahu. Namun, selama periode pengembangan, setidaknya 3 proyek seperti itu datang ke situs crowdfunding, dan saya ingin entah bagaimana mengembangkan impuls sebagai proyek komersial, tetapi sangat sulit untuk mengekspresikan diri ketika saya berada di Wilayah Trans-Baikal. Sekarang tidak ada motivasi yang cukup untuk duduk untuk prototipe kedua, sudah nirkabel dan didasarkan pada sensor 9-sumbu, sehingga kemungkinan besar proyek ini akan tetap bagi saya hanya pengalaman besar dan bermanfaat. Dalam artikel ini saya ingin merangkum semua pekerjaan yang dilakukan, meskipun tidak ditampilkan di sini dan 20% dari itu. Tidak semua orang akan tertarik pada banyak kode dan jam penyolderan, pencetakan 3d, banyak trial and error, banyak bahan habis, tetapi saya akan mencoba menjawab pertanyaan seperti itu di komentar.Source: https://habr.com/ru/post/id392353/
All Articles