Daftar Isi:
- Langkah 1: Kumpulkan Bahan Anda
- Langkah 2: Unduh Toolbox Roomba untuk MATLAB
- Langkah 3: Hubungkan ke Roomba Anda
- Langkah 4: Pilih Bagaimana Anda Ingin Mengontrol Roomba Anda
- Langkah 5: Kendarai Roomba Anda
Video: Mengubah Roomba Anda Menjadi Mars Rover: 5 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:53
Langkah 1: Kumpulkan Bahan Anda
Untuk menyelesaikan proyek ini, Anda perlu mengumpulkan bahan-bahan berikut:
1 Robot Roomba
1 Kit Raspberry Pi
1 Kamera Video
Akses ke MATLAB
Langkah 2: Unduh Toolbox Roomba untuk MATLAB
Jalankan kode berikut untuk menginstal kotak alat yang diperlukan untuk menyelesaikan proyek ini.
fungsi roombaInstal
kl;
% daftar file yang akan diinstal
file = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'};
% lokasi untuk menginstal dari
opsi = weboptions('NamaFileSertifikat', ''); % katakan untuk mengabaikan persyaratan sertifikat
server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/';
dlgTitle = 'Instal/Perbarui Roomba';
% tujuan tampilan dan dapatkan konfirmasi
cepat = {
'Program ini akan mengunduh file EF 230 Roomba ini:'
''
strjoin(file, ' ')
''
'ke folder ini:'
''
CD
''
'Apakah Anda ingin melanjutkan? '
};
berbunyi;
yn = questdlg(prompt, …
dlgJudul,…
'Ya', 'Tidak', 'Ya');
jika ~strcmp(yn, 'Ya'), kembalikan; akhir
% dapatkan daftar file yang ada
existing_files = files(cellfun(@exist, files) > 0);
jika ~kosong(file_yang ada)
% pastikan tidak apa-apa untuk menggantinya
prompt = {'Anda sedang mengganti file ini: '
''
strjoin(file_yang ada, ' ')
''
'Oke untuk menggantikannya?'
};
berbunyi;
yn = questdlg(prompt, …
dlgJudul,…
'Ya', 'Tidak', 'Ya');
jika ~strcmp(yn, 'Ya'), kembalikan; akhir
akhir
% unduh file
cnt = 0;
untuk i=1:panjang(berkas)
f=file{i};
disp(['Mengunduh ' f]);
mencoba
url = [server f];
websave(f, url, opsi); % opsi tambahan untuk menghindari kesalahan keamanan
cnt = cnt + 1;
menangkap
disp(['Kesalahan mengunduh ' f]);
dummy = [f '.html'];
jika ada(dummy, 'file')==2
hapus (bodoh)
akhir
akhir
akhir
jika cnt == panjang (file)
msg = 'Instalasi Berhasil';
tunggu(kotak pesan(pesan, dlgTitle));
lain
msg = 'Kesalahan Instalasi - lihat jendela perintah untuk detailnya';
tunggu(errordlg(pesan, dlgTitle));
akhir
akhir %roombaInstal
Langkah 3: Hubungkan ke Roomba Anda
Sekarang saatnya untuk terhubung ke Roomba Anda menggunakan WiFi. Menggunakan 2 jari, tekan tombol Dock dan Spot secara bersamaan untuk menghidupkan atau mengatur ulang Roomba Anda. Selanjutnya, Jalankan kode r=roomba(# dari Roomba Anda) di jendela perintah MATLAB untuk terhubung ke robot Anda. Setelah Anda menjalankan perintah ini, Roomba Anda harus siap digunakan.
Langkah 4: Pilih Bagaimana Anda Ingin Mengontrol Roomba Anda
Ada dua cara untuk mengontrol Roomba Anda: secara mandiri atau menggunakan smartphone sebagai pengontrol.
Jika Anda memilih untuk mengemudikan Roomba secara mandiri, Anda harus menggunakan tiga sensor bawaan: sensor tebing, sensor benturan, dan sensor cahaya.
Untuk menggunakan ponsel cerdas, Anda harus terlebih dahulu menghubungkan ponsel cerdas Anda ke komputer dengan mengikuti langkah-langkah di bawah ini.
CATATAN: Komputer dan ponsel cerdas Anda harus berada di jaringan WiFi yang sama agar dapat terhubung dengan benar!
1. Unduh aplikasi MATLAB dari app store di perangkat Anda.
2. Ketik "connector on" ke jendela perintah Anda dan atur kata sandi yang perlu dimasukkan ke kedua perangkat.
3. Setelah melakukannya, MATLAB akan memberikan alamat IP komputer Anda. Anda harus masuk ke halaman pengaturan di aplikasi MATLAB pada ponsel cerdas Anda dan menambahkan komputer menggunakan alamat IP yang diberikan dan kata sandi yang Anda masukkan sebelumnya.
4. Di jendela perintah di komputer Anda, ketik kode m=mobiledev dan ini akan menginisialisasi ponsel cerdas Anda sebagai pengontrol untuk Roomba Anda.
5. Komputer dan ponsel cerdas Anda seharusnya sudah siap digunakan sekarang.
Langkah 5: Kendarai Roomba Anda
Sekarang Anda memiliki semua alat yang diperlukan untuk membuat Mars Rover Anda, Anda siap untuk membuat kode Anda sendiri. Kami telah melampirkan contoh kode di bawah ini untuk mengemudi otonom dan mengemudi yang dikendalikan smartphone.
Mengemudi Otonom
fungsi Jelajahi_modifikasi(r)
%argumen masukan: 1 objek roomba, r
%argumen keluaran: tidak ada
%keterangan:
%fungsi menggunakan loop while tak terbatas untuk memungkinkan otonomi
%eksplorasi lingkungan bot.
%
%funciton juga memberikan instruksi kepada roomba tentang apa yang harus dilakukan di
%situasi berikut: Roda kehilangan kontak dengan tanah, dan
%objek terdeteksi di depan atau di kedua sisi bot, dan a
% penurunan tiba-tiba terdeteksi di depan atau di kedua sisi bot.
%
%instruksi tipikal termasuk perintah gerakan yang dimaksudkan untuk memaksimalkan
%eksplorasi atau hindari bahaya yang terdeteksi dan perintah untuk berkomunikasi
%informasi mengenai penemuan bot (gambar), posisi (grafik), %dan status (peringatan terdampar) dengan pengguna melalui matlab dan/atau email. Beberapa
%perintah suara ditambahkan untuk kesenangan.
%setup kemampuan email
mail = '[email protected]';
kata sandi = 'EF230Roomba';
setpref('Internet', 'SMTP_Server', 'smtp.gmail.com');
setpref('Internet', 'E_mail', surat);
setpref('Internet', 'SMTP_Username', email);
setpref('Internet', 'SMTP_Password', kata sandi);
props = java.lang. System.getProperties;
props.setProperty('mail.smtp.starttls.enable', 'true');
props.setProperty('mail.smtp.auth', 'benar');
props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory');
props.setProperty('mail.smtp.socketFactory.port', '465');
% r=ruangan(19)
r.beep('G2^^, G2^^, G2^^, G2^^, A2^^, A2^^, G1^^, E1^^, C2^^, C2^^, C1^^, C1 ^^, D1^^, C1^^, D2^^, E4^^, G2^^, G2^^, G2^^, G2^^, A2^^, A2^^, G1^^, E1^^, C2^^, C2^^, C2^^, E1^^, E1^^, E1^^, D1^^, C4^^');
v =.1;
mencerminkan_datum=2700; %set nilai referensi sensor tebing
lightBumper_datum = 200; %set nilai referensi sensor Bumper cahaya
pos=[0, 0]; %variabel untuk penyimpanan posisi dengan datum diinisialisasi
sudut=0; %set sudut referensi
jaring = 0; % perpindahan sudut bersih
saya=2; %iterator untuk menambahkan baris ke variabel penyimpanan posisi
jarak = 0;
r.setDriveVelocity(v, v); %mulai roomba bergerak maju
sementara benar
Tebing = r.getCliffSensors;
Bump = r.getBumper;
Cahaya = r.getLightBumpers;
RandAngle = randi([20, 60], 1); % menghasilkan 1 sudut acak antara 20 dan 60 derajat. Digunakan untuk mencegah bot terjebak dalam satu lingkaran
%Apa yang harus dilakukan jika satu atau lebih roda kehilangan kontak dengan tanah:
%hentikan gerakan, kirim email peringatan dengan gambar sekitar, %dan tanyakan pengguna apakah akan melanjutkan atau menunggu bantuan
if Bump.rightWheelDrop == 1 || Bump.leftWheelDrop == 1
r.stop
dist = r.getJarak;
pos(i, 1)= pos(i-1, 1) + dist * sind(jejaring); %dapatkan koordinat x
pos(i, 2)= pos(i-1, 2) + dist * cosd(jaring); %dapatkan koordinat y
saya=i+1;
r.beep('F#1^^, C1^^, F#1^^, C1^^, F#1^^, C1^^, F#1^^, C1^^, F#1^^, C1^^, F#1^^, C1^^, F#1^^, C1^^, F#1^^, C1^^')
img = r.getGambar;
imwrite(img, 'macet.png');
%--------------------------
imfile='macet.png';
posisi=savepos(pos);
%---------------------------
sendmail(mail, 'HELP!', 'Saya terdampar di tebing!', {imfile, position})
list = {'Lanjutkan', 'Berhenti'};
idx = menu('Apa yang harus saya lakukan?', daftar);
jika idx == 2
merusak
akhir
%Apa yang harus dilakukan jika objek terdeteksi di depan bot:
%berhenti, mundur, ambil gambar, beri tahu pengguna tentang penemuan
%melalui email, putar 90 derajat, dan terus menjelajah
elseif Light.leftCenter > lightBumper_datum || Light.rightCenter > lightBumper_datum || Bump.depan == 1
r.berhenti;
dist = r.getJarak;
pos(i, 1)= pos(i-1, 1) + dist * sind(jejaring); %dapatkan koordinat x
pos(i, 2)= pos(i-1, 2) + dist * cosd(jaring); %dapatkan koordinat y
saya=i+1;
r.moveDistance(-.125);
dist = r.getJarak;
pos(i, 1)= pos(i-1, 1) + dist * sind(jejaring); %dapatkan koordinat x
pos(i, 2)= pos(i-1, 2) + dist * cosd(jaring); %dapatkan koordinat y
saya=i+1;
r.beep('A1^, A1^, A4^, A2^, G2^, G2^, G4^, Bb2^, Bb2^, Bb3.5^, G1^, A8^')
img = r.getGambar;
imwrite(img, 'FrontBump.png')
%--------------------------
imfile='FrontBump.png';
posisi=savepos(pos);
%---------------------------
sendmail(mail, 'Alert!', 'Saya menemukan sesuatu!', {imfile, position})
sudut = 90;
netangle=jejaring+sudut;
r.turnAngle(sudut);
r.setDriveVelocity(v, v);
%Apa yang harus dilakukan jika objek terdeteksi di sebelah kiri bot:
%berhenti, putar ke arah objek, mundur, ambil gambar, waspada
%pengguna penemuan melalui email, putar 90 derajat dan terus menjelajah
elseif Light.leftFront > lightBumper_datum || Light.left > lightBumper_datum || Bump.kiri == 1
r.berhenti;
dist = r.getJarak;
pos(i, 1)= pos(i-1, 1) + dist * sind(jejaring); %dapatkan koordinat x
pos(i, 2)= pos(i-1, 2) + dist * cosd(jaring); %dapatkan koordinat y
saya=i+1;
sudut = 30;
netangle=jejaring+sudut;
r.turnAngle(sudut);
r.moveDistance(-.125);
dist = r.getJarak;
pos(i, 1)= pos(i-1, 1) + dist * sind(jejaring); %dapatkan koordinat x
pos(i, 2)= pos(i-1, 2) + dist * cosd(jaring); %dapatkan koordinat y
saya=i+1;
r.beep('A4^, A4^, G1^, E1^, C3.5^, C2^^, C1^, C1^, C2^, D2^, D2^, E8^')
img = r.getGambar;
imwrite(img, 'LeftBump.png')
%--------------------------
imfile='LeftBump.png';
posisi=savepos(pos);
%---------------------------
sendmail(mail, 'Alert!', 'Saya menemukan sesuatu!', {imfile, position})
sudut=-90;
netangle=jejaring+sudut;
r.turnAngle(sudut);
r.setDriveVelocity(v, v);
%Apa yang harus dilakukan jika objek terdeteksi di sebelah kanan bot:
%berhenti, putar ke arah objek, mundur, ambil gambar, waspada
%pengguna penemuan melalui email, putar 90 derajat dan terus menjelajah
elseif Light.rightFront > lightBumper_datum || Light.right > lightBumper_datum || Benjolan.kanan == 1
r.berhenti;
dist = r.getJarak;
pos(i, 1)= pos(i-1, 1) + dist * sind(jejaring); %dapatkan koordinat x
pos(i, 2)= pos(i-1, 2) + dist * cosd(jaring); %dapatkan koordinat y
saya=i+1;
sudut=-30;
netangle=jejaring+sudut;
r.turnAngle(sudut);
r.moveDistance(-.125);
dist = r.getJarak;
pos(i, 1)= pos(i-1, 1) + dist * sind(jejaring); %dapatkan koordinat x
pos(i, 2)= pos(i-1, 2) + dist * cosd(jaring); %dapatkan koordinat y
saya=i+1;
jeda(1.5);
r.bip('C1^, C1^, C2^, D2^, D2^, C8^')
img = r.getGambar;
imwrite(img, 'RightBump.png')
%--------------------------
imfile='RightBump.png';
posisi=savepos(pos);
%---------------------------
sendmail(mail, 'Alert!', 'Saya menemukan sesuatu!', {imfile, position});
sudut = 90;
netangle=jejaring+sudut;
r.turnAngle(sudut);
r.setDriveVelocity(v, v);
%Apa yang harus dilakukan jika tebing terdeteksi di sebelah kiri bot:
%berhenti, mundur, belok kanan, lanjutkan penjelajahan
elseif Tebing.kiri < reflect_datum || Tebing.kiriDepan < reflect_datum
r.berhenti;
dist = r.getJarak;
pos(i, 1)= pos(i-1, 1) + dist * sind(jejaring); %dapatkan koordinat x
pos(i, 2)= pos(i-1, 2) + dist * cosd(jaring); %dapatkan koordinat y
saya=i+1;
r.moveDistance(-.125);
dist = r.getJarak;
pos(i, 1)= pos(i-1, 1) + dist * sind(jejaring); %dapatkan koordinat x
pos(i, 2)= pos(i-1, 2) + dist * cosd(jaring); %dapatkan koordinat y
saya=i+1;
sudut=-RandAngle;
netangle=jejaring+sudut;
r.turnAngle(sudut);
r.setDriveVelocity(v, v);
%Apa yang harus dilakukan jika tebing terdeteksi di sebelah kanan bot:
%berhenti, mundur, belok kiri, lanjutkan penjelajahan
elseif Tebing.kanan < reflect_datum || Tebing.kananFront < reflect_datum
r.berhenti;
dist = r.getJarak;
pos(i, 1)= dist * sind(sudut); %dapatkan koordinat x
pos(i, 2)= dist * cosd(sudut); %dapatkan koordinat y
saya=i+1;
r.moveDistance(-.125);
sudut=RandAngle;
netangle=jejaring+sudut;
r.turnAngle(sudut);
r.setDriveVelocity(v, v);
akhir
akhir
Pengontrol Ponsel Cerdas
Opsi = {'Otonomis', 'Kontrol Manual'}
Prompt = menu('Bagaimana Anda ingin mengontrol penjelajah?', Opsi)
m = mobiledev
r = kamarba(19)
jika Prompt == 1
Penjelajah)
lain
sementara benar
jeda(.5)
PhoneData=m. Orientasi;
Azi=DataTelepon(1);
Pitch=DataTelepon(2);
Sisi=DataTelepon(3);
jika Sisi>130 || Samping<-130 %jika ponsel dibalik menghadap ke bawah hentikan roomba dan keluar dari loop
r.stop
r.bip('C, C, C, C')
merusak
elseif Sisi>25 && Sisi<40 %jika ponsel diputar ke samping antara 25 dan 40 derajat belok kiri 5 derajat
r.turnAngle(-5);
elseif Sisi>40 %jika ponsel diputar ke samping lebih dari 40 derajat belok kiri 45 derajat
r.turnAngle (-45)
elseif Sisi-40 %jika ponsel diputar menyamping antara -25 dan -40 derajat belok kanan 5 derajat
r.turnAngle(5);
elseif Sisi<-40 %jika ponsel diputar ke samping kurang dari -40 derajat belok kiri 45 derajat
r.turnAngle(45)
akhir
%Jika ponsel dipegang dekat verticle ambil gambar dan plot itu
jika Pitch<-60 && gambar<=9
r.bip
img=r.getGambar;
subplot(3, 3, gambar)
tampilkan (img)
akhir
%bergerak maju dan mundur berdasarkan orientasi depan dan belakang
jika Pitch>15 && Pitch<35 %jika pitch antara 15 dan 35 derajat bergerak maju jarak pendek
%dapatkan data bumper ringan sebelum pindah
litBump=r.getLightBumpers;
jika litBump.leftFront>500 || litBump.leftCenter>500 || litBump.rightCenter>500 || litBump.rightFront>500 %jika ada sesuatu di depan roomba dan akan mengenai jika bergerak maju membuat kebisingan dan menampilkan pesan
r.beep('C^^, F#^, C^^, F#^')
lain %bergerak
r.moveDistance(.03);
%Dapatkan data bumper setelah pindah
Bump=r.getBumper;
jika Bump.right==1 || Bump.kiri==1 || Bump.depan = 1
r.bip('A,C,E')
r.moveDistance(-.01)
akhir
%mendapatkan data sensor tebing
Tebing=r.getCliffSensors;
jika Tebing.kiri>1500 || Tebing.kiriDepan>1500 || Tebing.kananDepan>1500 || Tebing.kanan>1500 %jika sesuatu memicu sensor tebing memperlakukannya sebagai lava dan kembali ke atas
r.beep('C^^, C, C^^, C, C^^, C, C^^, C, C^^, C, C^^, C')
r.moveDistance(-.031)
akhir
akhir
elseif Pitch>35 %jika pitch lebih besar 35 derajat bergerak maju dengan jarak yang lebih jauh
%dapatkan data bumper ringan sebelum pindah
litBump=r.getLightBumpers;
jika litBump.leftFront>15 || litBump.leftCenter>15 || litBump.rightCenter>15 || litBump.rightFront>15 %jika ada sesuatu di depan roomba dan akan mengenai jika bergerak maju membuat kebisingan dan menampilkan pesan
r.beep('C^^, F#^, C^^, F#^')
lain %bergerak
r.moveDistance(.3)
%Dapatkan data bumper setelah pindah
Bump=r.getBumper;
jika Bump.right==1 || Bump.kiri==1 || Bump.front==1 %jika Anda menekan sesuatu membuat suara, menampilkan pesan, dan membuat cadangan
r.bip('A, C, E')
r.moveDistance(-.01)
akhir
%dapatkan data sensor tebing setelah pindah
Tebing=r.getCliffSensors;
jika Tebing.kiri>1500 || Tebing.kiriDepan>1500 || Tebing.kananDepan>1500 || Tebing.kanan>1500 %jika sesuatu memicu sensor tebing memperlakukannya sebagai lava dan kembali ke atas
r.beep('C^^, C, C^^, C, C^^, C, C^^, C, C^^, C, C^^, C')
r.moveDistance(-.31)
akhir
akhir
elseif Pitch-35 %jika pitch antara -15 dan -35 deg mundur jarak pendek
r.moveDistance(-.03);
%dapatkan data sensor tebing setelah pindah
Tebing=r.getCliffSensors;
jika Tebing.kiri>1500 || Tebing.kiriDepan>1500 || Tebing.kananDepan>1500 || Tebing.kanan>1500 %jika sesuatu memicu sensor tebing memperlakukannya sebagai lava dan kembali ke atas
r.beep('C^^, C, C^^, C, C^^, C, C^^, C, C^^, C, C^^, C')
r.moveDistance(.04)
akhir
elseif Pitch-60 %jika pitch antara -35 dan -60 deg mundur lebih jauh
r.moveDistance(-.3)
%dapatkan data sensor tebing setelah pindah
Tebing=r.getCliffSensors;
jika Tebing.kiri>1500 || Tebing.kiriDepan>1500 || Tebing.kananDepan>1500 || Tebing.kanan>1500 %jika sesuatu memicu sensor tebing memperlakukannya sebagai lava dan kembali ke atas
r.beep('C^^, C, C^^, C, C^^, C, C^^, C, C^^, C, C^^, C')
r.moveDistance(.31)
akhir
akhir
akhir
akhir
Direkomendasikan:
Cara Mengubah Raspberry Pi Anda Menjadi Gerbang Akses Jarak Jauh: 6 Langkah
Cara Mengubah Raspberry Pi Anda Menjadi Gerbang Akses Jarak Jauh: Hai teman-teman! Mengingat kejadian baru-baru ini, tim kami di remote.telah bekerja keras untuk melakukan brainstorming ide untuk membuat pekerjaan jarak jauh tidak menyakitkan dan dapat diakses. Kami telah membuat Gambar Kartu SD remote.itPi, yang merupakan kartu SD yang dapat Anda masukkan ke
Cara Mengubah Ponsel Anda Menjadi Kartu Kredit/Debit: 5 Langkah
Cara Mengubah Ponsel Anda Menjadi Kartu Kredit/Debit: Mod yang mudah dilakukan untuk kartu kredit/debit tambahan dengan chip RFID (yaitu Paypass). Dengan menggunakan metode ini, Anda akan dapat menemukan dan mengekstrak chip RFID di kartu berkemampuan Paypass cadangan Anda dan meletakkannya di ponsel Anda. Ini akan memungkinkan Anda untuk mempresentasikan
Cara Mengubah Desain Anda Menjadi Papan PCB Profesional - Pendekatan Saya: 9 Langkah
Cara Mengubah Desain Anda Menjadi Papan PCB Profesional | Pendekatan Saya: Dalam posting ini saya akan membagikan pendekatan saya untuk membangun papan PCB profesional dalam beberapa langkah terperinci. Saya juga telah menyematkan video yang sama, Anda dapat menontonnya atau melanjutkan membaca posting untuk penjelasan terperinci. Jadi mari kita mulai dengan
Cara Mengubah Ponsel LG EnV 2 Anda Menjadi Modem Dial Up Portabel untuk Laptop (atau Desktop) Anda: 7 Langkah
Cara Mengubah Ponsel LG EnV 2 Anda Menjadi Modem Dial Up Portabel untuk Laptop (atau Desktop) Anda: Kita semua pernah memiliki kebutuhan untuk menggunakan Internet di tempat yang tidak memungkinkan, seperti di dalam mobil , atau saat liburan, di mana mereka membebankan sejumlah uang yang mahal per jam untuk menggunakan wifi mereka. akhirnya, saya menemukan cara sederhana untuk mendapatkan
Mengubah Windows XP atau Vista Anda Menjadi Mac dan Linux: 10 Langkah
Mengubah Windows XP atau Vista Anda Menjadi Mac dan Linux: Instruksi ini akan menunjukkan kepada Anda cara mengubah pc windows Anda menjadi mac dan pc, serta menjalankan Linux.- Saya sarankan Anda memiliki setidaknya 2 GB RAM -dan lebih dari 10GB ruang hard disk (jika Anda ingin linux) vista atau XP direkomendasikan - Saya melakukan ini di