Saat ini kami menyalahgunakan sensor laser Gazebo dan menyebutnya sonar.
Simulasi sensor sonar yang lebih realistis ( sonar pemindaian samping dan multibeam ) akan menambah banyak nilai pada uuv_simulator dan membuatnya lebih menarik untuk komunitas baru yang lebih besar.
Hai, kami juga sedang mengerjakan simulasi sensor di uuv_simulator
. Saat ini, kami memiliki sesuatu yang mirip dengan pemindaian samping, yang memberi kami gambar air terjun. Lebih penting lagi, kami sedang bekerja menuju sensor FLS yang bagus di sini: https://github.com/smarc-project/smarc_simulations/blob/master/smarc_gazebo_plugins/smarc_gazebo_ros_plugins/src/gazebo_ros_image_sonar.cpp . Itu dibangun di atas sim yang dijelaskan dalam makalah "Simulator sonar berbasis GPU baru untuk aplikasi waktu nyata". Gazebo membuatnya agak sulit, jadi itu bergantung pada penyalahgunaan kamera kedalaman yang disimulasikan, tetapi masih cukup efisien.
Jika masih ada minat dalam hal ini, saya akan memberikan beberapa contoh tentang bagaimana sonar terlihat dan mungkin bekerja untuk menyelesaikan semuanya dan membuat PR untuk repo ini.
@nilsbore beberapa contoh akan sangat bagus. Saya juga sangat tertarik dengan ini.
Hai @nilsbore , semua kontribusi sangat diterima :) Jika Anda ingin membuat permintaan tarik, saya akan dengan senang hati meninjaunya. Solusi lain adalah menambahkan informasi tentang dokumentasi simulator UUV bagaimana mengintegrasikan plugin Anda juga, sehingga lebih banyak orang dapat menggunakannya :)
Hai @musamarcusso , dan terima kasih atas kerja keras Anda di simulator ini! Saya akan melihat berapa banyak yang diperlukan untuk membuat PR bersih ke repo ini, dan ikuti salah satu jalur yang diusulkan, terima kasih!
Hai @nilsbore ,
Saya menantikan kemajuan Anda dalam mengadaptasi sonar ke simulator UUV. Tolong beritahu kami! =D
Apakah ada kemajuan yang dibuat di FLS? Saya juga ingin memanfaatkan.
Halo @nilsbore! Sudah lama thread ini dimulai, namun bolehkah saya tahu bagaimana perkembangan simulasi FLS sejauh ini? Saya berharap dapat memanfaatkan simulasi sonar yang sedang Anda kerjakan di Gazebo juga dan semoga Anda memiliki lebih banyak kemajuan setelah itu
* setelah pembaruan terakhir yang Anda miliki di sini.
Hai semua, maaf saya belum bisa membuat banyak kemajuan dalam topik ini. Simulasi sensor bersifat open source dan tersedia di sini: https://github.com/smarc-project/smarc_simulations/tree/master/smarc_gazebo_plugins/smarc_gazebo_ros_plugins . Ini disebut gazebo_ros_image_sonar
. Meskipun kami menggunakan versi uuv_simulator yang agak ketinggalan zaman, plugin ini hanya bergantung pada gazebo dan seharusnya berfungsi di mana saja. Di uuv_simulator, Anda dapat memasukkannya dengan memasukkan urdf ini: https://github.com/smarc-project/smarc_simulations/blob/master/smarc_sensor_plugins/smarc_sensor_plugins_ros/urdf/sonar_snippets.xacro , dan menambahkan sesuatu seperti cuplikan ini di urdf kendaraan Anda :
<xacro:forward_looking_sonar
namespace="${namespace}"
suffix="down"
parent_link="${namespace}/base_link"
topic="forward_sonar"
mass="0.015"
update_rate="10"
samples="100"
fov="1.54719755"
width="260"
height="120">
<inertia ixx="0.00001" ixy="0.0" ixz="0.0" iyy="0.00001" iyz="0.0" izz="0.00001" />
<origin xyz="0.83 0 -0.22" rpy="0 ${0.2*pi} 0" />
<visual>
</visual>
</xacro:forward_looking_sonar>
Anda kemudian akan dapat melihat sesuatu seperti gambar ini pada topik ros: video .
Ketika waktu memungkinkan (setelah tenggat waktu), saya akan mencoba memecah sensor ini ke dalam paketnya sendiri yang dapat digunakan oleh siapa saja yang ingin menggunakan sim FLS dan tidak ada yang lain.
Terbaik,
nihil
Tercatat @nilsbore ! Terima kasih banyak atas pembaruannya. Saya akan mencoba dan melakukan perbaikan untuk sensor ini juga sehingga kinerjanya dapat ditingkatkan.
Pembaruan dan kemajuan yang sangat bagus sejauh ini! Menantikan pembaruan lebih lanjut tentang proyek ini dan pekerjaan yang sangat bagus @nilsbore!
Saya telah memilih dari @NickSadjoli dan @nilsbore untuk mencoba dan mendapatkan FF sesuatu dari master. Sepertinya Anda berdua telah menyimpang dengan cara yang berbeda.
Akan menyenangkan jika kalian melihat dan berkomentar/komit sehingga ini dapat digunakan oleh orang lain.
Maaf atas keterlambatan balasan @willcbaker ! Saya menyimpang dari @nilsbore karena saya mencoba mengimplementasikan kodenya ke dalam proyek saya sendiri yang tampaknya memiliki parameter berbeda di lingkungan. Namun, kodenya bekerja dengan sempurna di lingkungan saya, meskipun dengan beberapa perbaikan yang dapat diterapkan untuk membuatnya lebih mirip dengan implementasi yang disebutkan dalam makalah "Simulator sonar berbasis GPU baru untuk aplikasi waktu nyata".
Sayangnya saya belum membuat banyak kemajuan dalam membuat perbaikan pada kode karena masalah lain, tetapi saya akan memastikan untuk memposting pembaruan ketika saya punya waktu untuk melakukannya.
Dalam hal komit yang Anda buat, saya dapat dengan aman mengatakan bahwa tambahan yang Anda buat persis sama dengan yang saya lakukan untuk cabang saya. Seharusnya bekerja sempurna dengan Gazebo sekarang dan Anda bisa mendapatkan gambar sonar dari topik "rexrov/depth/image_sonar".
Saya harus mencatat bahwa saat ini namanya terkait erat dengan topik "/ kedalaman" karena implementasi sensor memerlukan penggunaan kamera kedalaman untuk saat ini. Kita harus melihat apakah ini dapat ditingkatkan untuk menghindari kemungkinan kebingungan dan semoga pembaruan lebih lanjut dapat segera menyusul.
Hai @NickSadjoli , bisakah Anda menautkan ke repositori tempat sonar ini diimplementasikan, jika ada?
@musamarcusso Mohon maaf karena tidak memberikan tautan sebelumnya. Saya memiliki cabang yang berfungsi yang memiliki contoh kerja sonar ini ke UUV Rexrov, tetapi harap perhatikan bahwa cabang ini berisi kode eksperimental lain yang tidak berfungsi yang saya coba sebelumnya untuk membuat ulang FLS yang disebutkan dalam makalah yang dirujuk. Cabang terhubung di bawah ini:
https://github.com/NickSadjoli/uuv_simulator/tree/realistic-sonar-sim-48
Hal-hal lain atau perubahan yang perlu diperhatikan yang ditambahkan atau digunakan di cabang ini:
Jika organisasi file di cabang saat ini terlalu membingungkan, harap berikan umpan balik kepada saya di utas ini, sehingga saya dapat membuat versi yang lebih bersih dari cabang ini untuk Anda tarik.
Terima kasih dan nantikan tanggapan/pendapat Anda
EDIT: Lupa melampirkan tautan repositori
Hai, @NickSadjoli
Saya mencoba uuv_simulator-realistic-sonar-sim-48 Anda. Kesalahan pertama yang saya dapatkan adalah "missing uuv_laser_to_sonar/launch" selama instalasi catkin_make. Saya membuat folder peluncuran kosong sebagai solusi. Kemudian saya menjalankan "roslaunch uuv_gazebo_worlds test_turbid_water.launch" dan mendapatkan beberapa kesalahan, termasuk
Hai, @NickSadjoli
Setelah melacak kesalahan, ternyata lib opencv tidak ditautkan dengan benar. Sebagai solusi, saya menambahkan lib opencv yang diperlukan secara eksplisit ke image_sonar_ros_plugin. Tolong beri tahu saya jika ada cara yang lebih baik untuk memperbaiki kesalahan asli.
Saya juga memperhatikan my_frame (dan peta) tidak ditentukan atau tidak mendapatkan tf dari dunia. Adakah ide bagaimana cara memperbaiki masalah? Terima kasih atas kontribusi Anda. C. Chien
Halo @chyphen777!
Mohon maaf bahwa ini adalah jawaban yang sangat terlambat untuk pertanyaan Anda.
Kesalahan pada file peluncuran yang hilang kemungkinan disebabkan karena saya memasukkan beberapa direktori yang tidak digunakan dalam simulasi FLS, menyebabkan CMake-s berantakan. Saya telah memperbarui cabang saya untuk membersihkan ini, yang seharusnya memperbaiki kesalahan seperti itu sekarang. Namun sayangnya sepertinya saya tidak sengaja menghapus beberapa file yang diperlukan di cabang ini yang menyebabkan GUI Gazebo diluncurkan dengan kesalahan dan kesalahan segmentasi. Namun perhatikan bahwa topik gazebo yang sebenarnya masih diluncurkan dan RViz terkadang masih dapat diluncurkan dengan benar, jadi belum sepenuhnya rusak.
Saya akan mencoba memperbaiki masalah ini dengan cabang, dan mengembalikannya ke komit sebelumnya jika masalah masih berlanjut. Perhatikan bahwa ini mungkin memakan waktu cukup lama karena saya juga mengurus hal-hal lain di pekerjaan saya, jadi saya mungkin tidak punya banyak waktu.
Adapun kesalahan "Kami tidak memiliki klip" dan "Konversi tipe sensor [kedalaman] tidak didukung", saya tidak yakin apakah itu kemungkinan penyebab gambar sonar tidak muncul di RViz, karena saya masih bisa memiliki gambar yang ditampilkan di RViz saya bahkan dengan kesalahan yang muncul. Saya pikir itu kemungkinan besar dikaitkan dengan kesalahan pencarian simbol yang sayangnya belum saya temui di repo lokal saya.
Pada catatan terkait, saya tidak yakin apakah lib opencv perlu ditautkan secara eksplisit ke CMakeLists juga karena saya dapat meluncurkan dunia dengan baik tanpa memerlukannya. Saya akan mencoba untuk melihat ke dalam ini juga namun. Terima kasih telah memberikan kesalahan band-aid juga untuk pengguna lain yang mungkin mengalami masalah serupa.
Hai @chyphen777 ,
Saya baru saja membuat beberapa modifikasi kecil pada cabang saat ini dan tampaknya berfungsi dengan baik di mesin saya sekarang, jadi Anda seharusnya dapat beralih ke cabang ini dan semuanya dikompilasi dengan catkin_make install.
Namun, perlu dicatat bahwa cabang terkadang tidak stabil dan Anda mungkin mengalami jenis kesalahan berikut:
Jika Anda menemukan kesalahan seperti itu, Anda harus dapat menutup dan meluncurkan kembali file peluncuran untuk mengaktifkan dan menjalankan Gazebo dan RViz (setidaknya itulah yang dapat saya lakukan). Ketidakstabilan ini tentu sangat mengganggu dan saya akan coba mencari tahu lebih dalam apa penyebabnya agar cabang bisa lebih stabil.
Juga, sayangnya saya juga belum melihat lebih dekat sehubungan dengan my_frame dan peta untuk tidak didefinisikan atau tidak diperbarui dari tf. Saya menduga itu mungkin karena sisa dari upaya saya sebelumnya menggunakan solusi FLS lain yang belum berhasil. Sekali lagi, saya akan mencoba melihat ini setelah saya memiliki lebih banyak waktu dan kembali kepada Anda setelah saya memiliki lebih banyak pembaruan.
Semangat dan terima kasih atas tanggapan Anda C. Chien! -Nicholas S
Hai, @NickSadjoli :
Terima kasih atas balasan, perbaikan, dan informasi yang bermanfaat. Saya dapat menjalankan simulator sonar Anda. Maaf karena terlambat membalas. Saya dilacak ke proyek lain. Harap beri tahu kami tentang pembaruan apa pun.
Salam, C.Chien.
@NickSadjoli
Pertama, kerja bagus dengan implementasi FLS untuk simulator UUV ini, ini adalah aset besar bagi komunitas! Saya punya beberapa pertanyaan tentang itu karena saya berencana untuk membuat beberapa perubahan kecil agar FLS cocok dengan perangkat keras yang biasanya saya gunakan di lapangan.
Bagaimana saya bisa menambahkan sonar lain, misalnya, satu melihat ke depan dan satu melihat ke belakang? Sepertinya ada banyak ketergantungan pada kamera sehubungan dengan pembuatan gambar FLS, mohon bimbingannya.
Ini didasarkan pada sonar apa dan bukaan vertikalnya apa? Jika saya ingin bagaimana cara mengubah aperture vertikal sonar?
Berapa kisaran maksimal sensor dan bagaimana saya mengubahnya jika saya mau?
Dalam file rexrov_test.xacro, di blok untuk memulai FLS apa yang dimaksud dengan "sampel = 100"?
John
@NickSadjoli
Mencari untuk mengutip ini dengan benar dalam beberapa pekerjaan yang akan datang. Saya akan menggunakan kutipan simulator UUV tetapi apakah ada karya lain yang perlu dikutip? Mungkin "Simulator sonar berbasis GPU baru untuk aplikasi waktu nyata?"
@ jake3991 Setidaknya implementasi asli saya didasarkan pada makalah yang Anda maksud. Saya tidak tahu apakah @NickSadjoli telah menambahkan konsep dari karya lain.
Kerja bagus!
@nilsbore Saya mencoba memahami implementasi Anda dan pembentukan gambar sonar pencitraan. Bisakah Anda mengarahkan saya ke persamaan yang digunakan untuk mengimplementasikan ConstructSonarImage
dan ConstructScanImage
? Misalnya, mengapa SNR
dihitung sebagai cv::Mat SNR = SL - 2.0*TL - (NL-DI) + TS;
?
cv::Mat GazeboRosImageSonar::ConstructSonarImage(cv::Mat& depth, cv::Mat& normals)
{
std::vector<cv::Mat> images(3);
cv::split(normals, images);
float intensity = 100.; // target strength
float SL = 200.; // source level
float NL = 30; // noise level
float DI = 0.0; // directivity index
if (dist_matrix_.empty()) {
// Compute dist_matrix_ once
// ...
}
cv::Mat TS = intensity*images[2]; // target strength, probably dir should be DI
cv::Mat TL = 5*depth; // transmission loss
cv::multiply(TL, dist_matrix_, TL);
cv::Mat SNR = SL - 2.0*TL - (NL-DI) + TS;
SNR.setTo(0., SNR < 0.);
// ...
@witignite Kode ini berasal dari beberapa waktu yang lalu dan saya tidak ingat persis di mana saya mendapatkan persamaan itu. Sejujurnya, fokus saat menerapkan ini lebih pada menciptakan gambar yang tampak realistis daripada model sonar yang sepenuhnya benar. Awal yang baik mungkin dengan melihat makalah yang dirujuk @jake3991 .
Bagi mereka yang tertarik dengan Multibeam Sonar di Gazebo, saya telah membuat plugin Sonar Multibeam di proyek Dave yang juga menyertakan uuv_simulator. Ini menggunakan perpustakaan Nvidia Cuda dan menghitung data intensitas/rentang hingga kecepatan refresh 10 Hz dengan frekuensi 900 kHz, rentang 10 m. Untuk detail lebih lanjut, https://github.com/Field-Robotics-Lab/dave/wiki/Multibeam-Forward-Looking-Sonar
Hai, Saya sangat menyesal baru membalas utas ini setelah waktu yang sangat lama, karena saya sedang menangani bagian/komponen besar lainnya untuk proyek saya.
Ini secara efektif juga berarti bahwa saya tidak lagi sepenuhnya mengerjakan pengembangan simulator karena saya telah menyerahkan beban kerja ini kepada rekan saya yang telah menanganinya sejak tahun lalu. Sayangnya saya lupa menyebutkan utas ini kepadanya jika ada pertanyaan yang diposting mengenai perkembangan apa pun.
Juga untuk klarifikasi: selama saya menangani model sonar, saya tidak melakukan kode tingkat yang lebih rendah (yaitu kode sumber C) yang ditulis oleh @nilsbore untuk sonar. Namun, rekan saya mungkin telah melakukan beberapa penyesuaian kecil untuk mengubah beberapa perilakunya agar lebih realistis mensimulasikan perilaku FLS di lingkungan bawah air yang keruh.
@jake3991 Untuk menjawab pertanyaan Anda:
Harap perhatikan juga bahwa rekan saya berencana untuk menerbitkan makalah tentang simulator berbasis uuv_simulator yang sedang dia kerjakan. Jadi rincian lebih lanjut tentang implementasi saat ini untuk proyek kami perlu diarahkan kepadanya. Saya akan mencoba menghubungkannya ke utas ini jika perlu untuk menjawab pertanyaan lebih lanjut tentang implementasi proyek kami.
Sehubungan dengan model sonar yang sebenarnya "akurat", tampaknya pekerjaan yang ditautkan oleh @woensug-choi mungkin merupakan model yang lebih "akurat" karena menggunakan implementasi ray-traced yang lebih langsung. Meskipun saya sendiri tidak sepenuhnya yakin seberapa baik ini untuk pengembangan berbasis simulasi secara keseluruhan.
Apakah rekan saya akan memeriksa implementasi dan melihat seberapa baik itu dapat diintegrasikan ke simulator proyek saya.
Sekali lagi permintaan maaf yang sebesar-besarnya kepada semua orang yang terlambat membalas utas ini.
@jake3991 Juga untuk klarifikasi mengenai kutipan simulator proyek kami: Karena kami belum mendapatkan publikasi makalah yang benar-benar berhasil pada simulator, saya sarankan Anda tetap menggunakan makalah yang Anda tautkan serta
Setelah publikasi kami pada publikasi diterima atau dilakukan, maka kutipan untuk makalah kami mungkin juga dapat digunakan.
Bagi yang berminat silahkan cek https://github.com/Field-Robotics-Lab/dave/wiki/Multibeam-Forward-Looking-Sonar .
Perhatikan bahwa saya menggunakan https://github.com/uuvsimulator/uuv_simulator dari @musamarcusso yang telah mengintegrasikan modul sonar @nilsbore .
Untuk memperjelas @NickSadjoli pada pertanyaan @jake3991 :
2.Seperti yang dikatakan @NickSadjoli , kami merujuk dari sonar Blueprint.
Untuk men-tweet VFOV sonar:
Dalam file xacro URDF sonar, Anda diminta untuk menentukan HFOV, lebar dan tinggi gambar. Gazebo kemudian menghitung Focal length berdasarkan lebar gambar dan HFOV. Menggunakan panjang fokus yang sama, mereka menghitung mundur VFOV menggunakan ketinggian gambar. Jadi untuk menentukan VFOV yang Anda inginkan, Anda perlu menghitung tinggi gambar.
Panjang fokus = (Lebar/2) / tan( deg2rad(HFOV)/2) atau Panjang fokus = (Tinggi/2) / tan( deg2rad(VFOV)/2)
3.Anda diminta untuk men-tweet kode C++ dari sonar. Dalam kode C++ sonar oleh @nilsbore , saya menambahkan pelanggan ke nilai "Range" alih-alih memiliki Range konstan seperti karya asli
Semoga ini membantu.
@nilsbore dan @NickSadjoli ,
@Jenanaputra Silakan lihat komentar saya di atas.....
@loguna123 Terima kasih atas replay Anda. Apakah Anda tahu cara mendapatkan / mengetahui nilai kedalaman yang digunakan dalam plugin fls ini?
Komentar yang paling membantu
Hai, kami juga sedang mengerjakan simulasi sensor di
uuv_simulator
. Saat ini, kami memiliki sesuatu yang mirip dengan pemindaian samping, yang memberi kami gambar air terjun. Lebih penting lagi, kami sedang bekerja menuju sensor FLS yang bagus di sini: https://github.com/smarc-project/smarc_simulations/blob/master/smarc_gazebo_plugins/smarc_gazebo_ros_plugins/src/gazebo_ros_image_sonar.cpp . Itu dibangun di atas sim yang dijelaskan dalam makalah "Simulator sonar berbasis GPU baru untuk aplikasi waktu nyata". Gazebo membuatnya agak sulit, jadi itu bergantung pada penyalahgunaan kamera kedalaman yang disimulasikan, tetapi masih cukup efisien.Jika masih ada minat dalam hal ini, saya akan memberikan beberapa contoh tentang bagaimana sonar terlihat dan mungkin bekerja untuk menyelesaikan semuanya dan membuat PR untuk repo ini.