Სარჩევი:
- ნაბიჯი 1: შეაგროვეთ თქვენი მასალები
- ნაბიჯი 2: ჩამოტვირთეთ Roomba Toolboxes MATLAB– ისთვის
- ნაბიჯი 3: დაუკავშირდით თქვენს Roomba- ს
- ნაბიჯი 4: შეარჩიეთ როგორ გსურთ გააკონტროლოთ თქვენი Roomba
- ნაბიჯი 5: მართეთ თქვენი Roomba
ვიდეო: თქვენი ოთახის გადაქცევა მარს როვერზე: 5 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:15
ნაბიჯი 1: შეაგროვეთ თქვენი მასალები
ამ პროექტის დასრულების მიზნით, თქვენ უნდა შეაგროვოთ შემდეგი მასალები:
1 Roomba Robot
1 ჟოლო პი ნაკრები
1 ვიდეო კამერა
წვდომა MATLAB– ზე
ნაბიჯი 2: ჩამოტვირთეთ Roomba Toolboxes MATLAB– ისთვის
გაუშვით შემდეგი კოდი, რათა დააინსტალიროთ საჭირო ინსტრუმენტები ამ პროექტის დასასრულებლად.
ფუნქცია roombaInstall
clc;
% სია ფაილების დასაყენებლად
ფაილი = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'};
% მდებარეობა ინსტალაციისთვის
პარამეტრები = weboptions ('CertificateFilename', ''); % უთხარით, რომ იგნორირება გაუკეთოს სერტიფიკატის მოთხოვნებს
სერვერი = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/';
dlgTitle = 'Roomba- ს ინსტალაცია/განახლება';
% ჩვენების მიზანი და მიიღეთ დადასტურება
მოთხოვნა = {
'ეს პროგრამა გადმოწერს ამ EF 230 Roomba ფაილებს:'
''
strjoin (ფაილები, '')
''
'ამ საქაღალდეში:'
''
cd
''
'Გინდა გააგრძელო? '
};
სიგნალი;
yn = questdlg (მოთხოვნა,…
dlg სათაური,…
"დიახ", "არა", "დიახ");
if ~ strcmp (yn, 'დიახ'), დაბრუნება; დასასრული
% მიიღეთ არსებული ფაილების სია
არსებული_ ფაილები = ფაილები (cellfun (@exist, files)> 0);
if ~ isempty (არსებული_ ფაილები)
დარწმუნდით, რომ ნამდვილად კარგია მათი შეცვლა
მოთხოვნა = {'თქვენ შეცვლით ამ ფაილებს (ფაილებს):'
''
strjoin (არსებული_ ფაილები, '')
''
'კარგი ჩანაცვლება?'
};
სიგნალი;
yn = questdlg (მოთხოვნა,…
dlg სათაური,…
"დიახ", "არა", "დიახ");
თუ ~ strcmp (yn, 'დიახ'), დაბრუნება; დასასრული
დასასრული
% ჩამოტვირთეთ ფაილები
cnt = 0;
for i = 1: სიგრძე (ფაილები)
f = ფაილები {i};
disp (['' გადმოტვირთვა 'f]);
სცადე
url = [სერვერი f];
websave (f, url, პარამეტრები); % დამატებულია პარამეტრები უსაფრთხოების შეცდომების თავიდან ასაცილებლად
cnt = cnt + 1;
დაჭერა
disp (['შეცდომა ჩამოტვირთვისას' f]);
დუმილი = [f '.html'];
თუ არსებობს (დუმილი, 'ფაილი') == 2
წაშლა (უგულო)
დასასრული
დასასრული
დასასრული
თუ cnt == სიგრძე (ფაილები)
msg = 'ინსტალაცია წარმატებულია';
waitfor (msgbox (msg, dlgTitle));
სხვა
msg = 'ინსტალაციის შეცდომა - იხილეთ ბრძანების ფანჯარა დეტალებისთვის';
waitfor (errordlg (msg, dlgTitle));
დასასრული
დასრულება %roombaInstall
ნაბიჯი 3: დაუკავშირდით თქვენს Roomba- ს
ახლა დროა დაუკავშირდეთ თქვენს Roomba– ს WiFi– ს გამოყენებით. 2 თითით დააჭირეთ ერთდროულად დოკის და წერტილის ღილაკებს, რომ ჩართოთ ან გადატვირთოთ თქვენი Roomba. შემდეგი, გაუშვით კოდი r = roomba (# თქვენი Roomba) MATLAB ბრძანების ფანჯარაში თქვენს რობოტთან დასაკავშირებლად. ამ ბრძანების შესრულების შემდეგ, თქვენი Roomba მზად იქნება წასასვლელად.
ნაბიჯი 4: შეარჩიეთ როგორ გსურთ გააკონტროლოთ თქვენი Roomba
არსებობს ორი გზა, რომლითაც შეგიძლიათ გააკონტროლოთ თქვენი Roomba: ავტონომიურად ან სმარტფონის გამოყენებით როგორც კონტროლერი.
თუ თქვენ აირჩევთ Roomba– ს ავტონომიურად მართვას, თქვენ დაგჭირდებათ სამი ჩაშენებული სენსორის გამოყენება: კლდის სენსორები, დარტყმის სენსორები და სინათლის სენსორები.
სმარტფონის გამოსაყენებლად, თქვენ ჯერ უნდა დაუკავშიროთ თქვენი სმარტფონი თქვენს კომპიუტერს ქვემოთ მოყვანილი ნაბიჯების დაცვით.
შენიშვნა: თქვენი კომპიუტერი და სმარტფონი უნდა იყოს ერთსა და იმავე WiFi ქსელში, რათა სწორად დააკავშიროთ!
1. ჩამოტვირთეთ MATLAB აპლიკაცია აპლიკაციის მაღაზიიდან თქვენს მოწყობილობაზე.
2. აკრიფეთ "კონექტორი ჩართული" თქვენი ბრძანების ფანჯარაში და დააყენეთ პაროლი, რომელიც უნდა შეიყვანოთ ორივე მოწყობილობაში.
3. ამის შემდეგ, MATLAB მოგცემთ თქვენს კომპიუტერებს IP მისამართს. თქვენ უნდა შეხვიდეთ პარამეტრების გვერდზე MATLAB აპლიკაციაში თქვენს სმარტფონზე და დაამატოთ კომპიუტერი მოცემული IP მისამართისა და ადრე შეყვანილი პაროლის გამოყენებით.
4. თქვენს კომპიუტერში ბრძანების ფანჯარაში ჩაწერეთ კოდი m = mobiledev და ეს უნდა იყოს თქვენი სმარტფონის ინიციალიზაცია როგორც Roomba– ს კონტროლერი.
5. თქვენი კომპიუტერი და სმარტფონი მზად უნდა იყოს წასასვლელად.
ნაბიჯი 5: მართეთ თქვენი Roomba
ახლა, როდესაც თქვენ გაქვთ ყველა საჭირო ინსტრუმენტი თქვენი მარს როვერის შესაქმნელად, თქვენ მზად ხართ შექმნათ თქვენი საკუთარი კოდი. ჩვენ ქვემოთ ვამაგრებთ მაგალითის კოდს როგორც ავტონომიური მართვისთვის, ასევე სმარტფონებით კონტროლირებადი მართვისთვის.
ავტონომიური მართვა
ფუნქცია Explore_modified (r)
%შეყვანის არგუმენტები: 1 roomba ობიექტი, r
%გამომავალი არგუმენტები: არცერთი
%აღწერა:
%ფუნქცია იყენებს უსასრულო ხოლო მარყუჟს ავტონომიის დასაშვებად
ბოტის შემოგარენის შესწავლა.
%
%funciton ასევე აძლევს მითითებებს roomba– ს რა უნდა გააკეთოს
შემდეგი სიტუაციები: ბორბალი (ები) კარგავს კონტაქტს მიწასთან, %ობიექტი აღმოჩენილია ბოტის წინ ან ორივე მხარეს და ა
%მოულოდნელი ვარდნა გამოვლენილია ბოტის წინ ან მის ორივე მხარეს.
%
ტიპიური ინსტრუქციები მოიცავს მოძრაობის ბრძანებებს, რომლებიც მიზნად ისახავს მაქსიმალურად გაზრდას
ძიება ან თავიდან აცილება გამოვლენილი საფრთხე და ბრძანებები დაუკავშირდეს
%ინფორმაცია ბოტების აღმოჩენებთან დაკავშირებით (სურათები), პოზიცია (გრაფიკი), %და მდგომარეობა (დაბლოკილი გაფრთხილება) მომხმარებელთან matlab და/ან ელ. რამდენიმე
%ხმოვანი ბრძანებები ემატება სიამოვნებისთვის.
%ელ.ფოსტის შესაძლებლობების დაყენება
ფოსტა = '[email protected]';
პაროლი = 'EF230Roomba';
setpref ("ინტერნეტი", "SMTP_Server", "smtp.gmail.com");
setpref ('ინტერნეტი', 'E_mail', ფოსტა);
setpref ("ინტერნეტი", "SMTP_Username", ფოსტა);
setpref ("ინტერნეტი", "SMTP_Password", პაროლი);
props = java.lang. System.getProperties;
props.setProperty ('mail.smtp.starttls.enable', 'true');
props.setProperty ('mail.smtp.auth', 'true');
props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory');
props.setProperty ('mail.smtp.socketFactory.port', '465');
% r = roomba (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;
ასახვა_დამონაცემები = 2700; კლდის სენსორების მითითებული მნიშვნელობა
lightBumper_datum = 200; %მითითებული სინათლის ბამპერის სენსორების საცნობარო მნიშვნელობა
pos = [0, 0]; %ცვლადი პოზიციის შესანახად მონაცემების ინიციალიზებით
კუთხე = 0; %მითითებული მითითების კუთხე
netangle = 0; %წმინდა კუთხის გადაადგილება
i = 2; %გამეორება სტრიქონების დასამატებლად საცავის ცვლადზე
dist = 0;
r.setDriveVelocity (v, v); დაიწყეთ ოთახის წინსვლა
მართალია
Cliff = r.getCliffSensors;
Bump = r.getBumpers;
მსუბუქი = r.getLightBumpers;
RandAngle = რანდი ([20, 60], 1); %წარმოქმნის 1 შემთხვევით კუთხეს 20 -დან 60 გრადუსამდე. გამოიყენება ბოტის მარყუჟში ჩარჩენის თავიდან ასაცილებლად
რა უნდა გააკეთოს, თუ ერთი ან მეტი ბორბალი კარგავს კონტაქტს მიწასთან:
%შეაჩერე მოძრაობა, გააგზავნეთ გამაფრთხილებელი ელ.წერილი გარემოს სურათებით, %და ჰკითხეთ მომხმარებელს გააგრძელოს თუ დაელოდოს დახმარებას
თუ Bump.rightWheelDrop == 1 || Bump.leftWheelDrop == 1
რ. გაჩერება
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %მიიღეთ x კოორდინატი
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %მიიღეთ y კოორდინატი
i = 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.getImage;
imwrite (img, 'stuck.png');
%--------------------------
imfile = 'stuck.png';
პოზიცია = savepos (pos);
%---------------------------
sendmail (ფოსტა, 'HELP!', 'მე კლდეზე ვარ ჩაძირული!', {imfile, position})
სია = {'გაგრძელება', 'გაჩერება'};
idx = მენიუ ("რა უნდა გავაკეთო?", სია);
თუ idx == 2
შესვენება
დასასრული
%რა უნდა გააკეთოს, თუ ობიექტი აღმოჩენილია ბოტის წინ:
%გაჩერება, გადაადგილება უკან, სურათის გადაღება, გაფრთხილება მომხმარებლის აღმოჩენის შესახებ
%ელექტრონული ფოსტით, გადაუხვიეთ 90 გრადუსს და განაგრძეთ გამოკვლევა
elseif Light.leftCenter> lightBumper_datum || Light.rightCenter> lightBumper_datum || Bump.front == 1
რ. გაჩერება;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %მიიღეთ x კოორდინატი
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %მიიღეთ y კოორდინატი
i = i+1;
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %მიიღეთ x კოორდინატი
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %მიიღეთ y კოორდინატი
i = i+1;
r.beep ('A1^, A1^, A4^, A2^, G2^, G2^, G4^, Bb2^, Bb2^, Bb3.5^, G1^, A8^')
img = r.getImage;
imwrite (img, 'FrontBump.png')
%--------------------------
imfile = 'FrontBump.png';
პოზიცია = savepos (pos);
%---------------------------
sendmail (ფოსტა, 'გაფრთხილება!', 'მე ვიპოვე რაღაც!', {imfile, position})
კუთხე = 90;
netangle = netangle+კუთხე;
r.turnAngle (კუთხე);
r.setDriveVelocity (v, v);
%რა უნდა გააკეთოს, თუ ობიექტი აღმოჩენილია ბოტის მარცხნივ:
%გაჩერება, შემობრუნება ობიექტისკენ, სარეზერვო ასლის გადაღება, სურათის გადაღება, გაფრთხილება
%აღმოჩენის მომხმარებელი ელექტრონული ფოსტით, გადაუხვიეთ 90 გრადუსს და განაგრძეთ გამოკვლევა
elseif Light.leftFront> lightBumper_datum || Light.left> lightBumper_datum || Bump.left == 1
რ. გაჩერება;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %მიიღეთ x კოორდინატი
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %მიიღეთ y კოორდინატი
i = i+1;
კუთხე = 30;
netangle = netangle+კუთხე;
r.turnAngle (კუთხე);
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %მიიღეთ x კოორდინატი
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %მიიღეთ y კოორდინატი
i = i+1;
r.beep ('A4^, A4^, G1^, E1^, C3.5^, C2 ^^, C1^, C1^, C2^, D2^, D2^, E8^')
img = r.getImage;
imwrite (img, 'LeftBump.png')
%--------------------------
imfile = 'LeftBump.png';
პოზიცია = savepos (pos);
%---------------------------
sendmail (ფოსტა, 'გაფრთხილება!', 'მე ვიპოვე რაღაც!', {imfile, position})
კუთხე = -90;
netangle = netangle+კუთხე;
r.turnAngle (კუთხე);
r.setDriveVelocity (v, v);
%რა უნდა გააკეთოს, თუ ობიექტი აღმოჩენილია ბოტის მარჯვნივ:
%გაჩერება, შემობრუნება ობიექტისკენ, სარეზერვო ასლის გადაღება, სურათის გადაღება, გაფრთხილება
%აღმოჩენის მომხმარებელი ელექტრონული ფოსტით, გადაუხვიეთ 90 გრადუსს და განაგრძეთ გამოკვლევა
elseif Light.rightFront> lightBumper_datum || Light.right> lightBumper_datum || Bump.right == 1
რ. გაჩერება;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %მიიღეთ x კოორდინატი
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %მიიღეთ y კოორდინატი
i = i+1;
კუთხე = -30;
netangle = netangle+კუთხე;
r.turnAngle (კუთხე);
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %მიიღეთ x კოორდინატი
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %მიიღეთ y კოორდინატი
i = i+1;
პაუზა (1.5);
r.beep ('C1^, C1^, C2^, D2^, D2^, C8^')
img = r.getImage;
imwrite (img, 'RightBump.png')
%--------------------------
imfile = 'RightBump.png';
პოზიცია = savepos (pos);
%---------------------------
sendmail (ფოსტა, 'გაფრთხილება!', 'მე ვიპოვე რაღაც!', {imfile, position});
კუთხე = 90;
netangle = netangle+კუთხე;
r.turnAngle (კუთხე);
r.setDriveVelocity (v, v);
%რა უნდა გააკეთოს, თუ კლდე აღმოჩენილია ბოტის მარცხნივ:
%გაჩერება, გადაადგილება უკან, მოუხვიეთ მარჯვნივ, განაგრძეთ გამოკვლევა
elseif Cliff.left <reflect_datum || Cliff.left წინა: <ასახვა_დანაწერი
რ. გაჩერება;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %მიიღეთ x კოორდინატი
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %მიიღეთ y კოორდინატი
i = i+1;
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %მიიღეთ x კოორდინატი
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %მიიღეთ y კოორდინატი
i = i+1;
კუთხე = -RandAngle;
netangle = netangle+კუთხე;
r.turnAngle (კუთხე);
r.setDriveVelocity (v, v);
%რა უნდა გააკეთოს, თუ კლდე აღმოჩენილია ბოტის მარჯვნივ:
%გაჩერება, გადაადგილება უკან, მოუხვიეთ მარცხნივ, განაგრძეთ გამოკვლევა
elseif Cliff.right <reflect_datum || Cliff.rightFront <ასახავს_დათუმს
რ. გაჩერება;
dist = r.getDistance;
pos (i, 1) = dist * sind (კუთხე); %მიიღეთ x კოორდინატი
pos (i, 2) = dist * cosd (კუთხე); %მიიღეთ y კოორდინატი
i = i+1;
r.moveDistance (-. 125);
კუთხე = RandAngle;
netangle = netangle+კუთხე;
r.turnAngle (კუთხე);
r.setDriveVelocity (v, v);
დასასრული
დასასრული
სმარტფონის კონტროლერი
პარამეტრები = {'ავტონომიური', 'ხელით კონტროლი'}
სწრაფი = მენიუ ("როგორ გსურთ როვერის კონტროლი?", პარამეტრები)
m = mobiledev
r = roomba (19)
თუ მოთხოვნა == 1
Მკვლევარი)
სხვა
მართალია
პაუზა (.5)
ტელეფონის მონაცემები = მ. ორიენტაცია;
Azi = PhoneData (1);
მოედანი = PhoneData (2);
გვერდი = PhoneData (3);
თუ გვერდი> 130 || გვერდი <-130 %თუ ტელეფონი გადატრიალებულია პირისპირ ქვემოთ, გააჩერეთ ოთახის ოთახი და დატოვეთ მარყუჟი
რ. გაჩერება
r.beep ('C, C, C, C')
შესვენება
elseif Side> 25 && Side <40 %თუ ტელეფონი არის გადახრილი გვერდულად 25 -დან 40 გრადუსამდე მოუხვიეთ მარცხნივ 5 გრადუსით
r.turnAngle (-5);
elseif გვერდი> 40 %თუ ტელეფონი გვერდულად გადააბრუნეს 40 გრადუსით მოუხვიეთ მარცხნივ 45 გრადუსი
r.turnAngle (-45)
elseif Side -40 %თუ ტელეფონი გადატრიალებულია -25 და -40 გრადუსს შორის მოუხვიეთ მარჯვნივ 5 გრადუსით
r.turnAngle (5);
elseif გვერდი <-40 %თუ ტელეფონი გვერდზეა გადახრილი -40 გრადუსზე ნაკლები მოუხვიეთ მარცხნივ 45 გრადუსით
r.turnAngle (45)
დასასრული
თუ ტელეფონი ტარდება ვერტიკალთან, აიღეთ სურათი და ჩაწერეთ იგი
თუ Pitch <-60 && სურათი <= 9
რ. ხმაური
img = r.getImage;
ქვეპლოტი (3, 3, სურათი)
ჩვენება (img)
დასასრული
%წინ და უკან წინ და უკან ორიენტირებაზე დაყრდნობით
თუ Pitch> 15 && Pitch <35 %თუ სიმაღლე 15 და 35 გრადუსს შორის წინ მიიწევს მოკლე მანძილზე
გადაადგილების წინ მიიღეთ მსუბუქი ბამპერის მონაცემები
litBump = r.getLightBumpers;
თუ litBump.left წინა> 500 || litBump.leftCenter> 500 || litBump.rightCenter> 500 || litBump.rightFront> 500 %თუ რამე არის ოთახის წინ და მოხვდება თუ ის წინ მიიწევს ხმაური და შეტყობინების ჩვენება
r.beep ('C ^^, F#^, C ^^, F#^')
სხვა %გადაადგილება
r.moveDistance (.03);
მიიღეთ ბამპერის მონაცემები გადაადგილების შემდეგ
Bump = r.getBumpers;
თუ Bump.right == 1 || Bump.left == 1 || Bump.front == 1
r.beep ('A, C, E')
r.moveDistance (-. 01)
დასასრული
%მიიღეთ კლდის სენსორის მონაცემები
Cliff = r.getCliffSensors;
თუ Cliff.left> 1500 || Cliff.left წინა> 1500 || Cliff.right წინა:> 1500 || Cliff.right> 1500 %თუ რამე იწვევს კლდის სენსორს განიხილეთ როგორც ლავა და დააბრუნეთ
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (-. 031)
დასასრული
დასასრული
elseif Pitch> 35 %თუ სიმაღლე 35 გრადუსით მეტი წინ მიიწევს უფრო დიდ მანძილზე
გადაადგილების წინ მიიღეთ მსუბუქი ბამპერის მონაცემები
litBump = r.getLightBumpers;
თუ litBump.left წინა> 15 || litBump.leftCenter> 15 || litBump.rightCenter> 15 || litBump.rightFront> 15 %თუ რამე არის ოთახის წინ და მოხვდება თუ წინ მიიწევს ხმაური და შეტყობინების ჩვენება
r.beep ('C ^^, F#^, C ^^, F#^')
სხვა %გადაადგილება
r.moveDistance (.3)
მიიღეთ ბამპერის მონაცემები გადაადგილების შემდეგ
Bump = r.getBumpers;
თუ Bump.right == 1 || Bump.left == 1 || Bump.front == 1 %თუ რამეს დაარტყამთ გააკეთეთ ხმაური, აჩვენეთ შეტყობინება და შექმენით სარეზერვო ასლი
r.beep ('A, C, E')
r.moveDistance (-. 01)
დასასრული
%იღებს კლდის სენსორის მონაცემებს გადაადგილების შემდეგ
Cliff = r.getCliffSensors;
თუ Cliff.left> 1500 || Cliff.left წინა> 1500 || Cliff.right წინა:> 1500 || Cliff.right> 1500 %თუ რამე იწვევს კლდის სენსორს განიხილეთ როგორც ლავა და დააბრუნეთ
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (-. 31)
დასასრული
დასასრული
elseif Pitch -35 %თუ მოედანზე -15 და -35 გრადუსი გადაადგილდება უკან მცირე მანძილზე
r.moveDistance (-. 03);
%იღებს კლდის სენსორის მონაცემებს გადაადგილების შემდეგ
Cliff = r.getCliffSensors;
თუ Cliff.left> 1500 || Cliff.left წინა> 1500 || Cliff.right წინა:> 1500 || Cliff.right> 1500 %თუ რამე იწვევს კლდის სენსორს განიხილეთ როგორც ლავა და დააბრუნეთ
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (.04)
დასასრული
elseif Pitch -60 %თუ სიმაღლე -35 -დან -60 გრადუსს შორის გადაადგილდება უფრო დიდ მანძილზე
r.moveDistance (-. 3)
%იღებს კლდის სენსორის მონაცემებს გადაადგილების შემდეგ
Cliff = r.getCliffSensors;
თუ Cliff.left> 1500 || Cliff.left წინა> 1500 || Cliff.right წინა:> 1500 || Cliff.right> 1500 %თუ რამე იწვევს კლდის სენსორს განიხილეთ როგორც ლავა და დააბრუნეთ
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (.31)
დასასრული
დასასრული
დასასრული
დასასრული
გირჩევთ:
მარს როვერი ჟოლოს პიის გამოყენებით: 5 ნაბიჯი
მარს როვერი ჟოლოს Pi გამოყენებით: ძვირფასო ყველასათვის, დიდი მცოდნე, მე ყოველთვის მაინტერესებს ვიცოდე მარს როვერის შესახებ, რომელსაც აქვს 6 ბორბალი, რომელსაც შეუძლია მარსის ყველა ზედაპირზე გასვლა და დედამიწის საგნების შესწავლა. მე ასევე მინდა რამის შესწავლა ჩემს ლეპტოპზე ჯდომით. ახლა მე ვხვდები, რომ ამის გაკეთების დროა და
სტეპერის თამაში თამაშებად გადაქცევა: 4 ნაბიჯი
სტეპერის გადაქცევა თამაშის მოძრაობებში: Intro ეს მოწყობილობა გარდაქმნის მოძრაობას სახლში დამზადებული სტეპერიდან (საფეხურიანი მანქანა) თამაშის მოძრაობად. ის იმუშავებს ნებისმიერ თამაშზე, რომელიც მიიღებს (" w ") წინსვლას. მას შეუძლია იმუშაოს VR თამაშებისთვისაც, თუ ისინი მიიღებენ კლავიატურის შეყვანას. ალბათ მოიგო
Raspberry Pi - ავტონომიური მარს როვერი OpenCV ობიექტების თვალყურით: 7 ნაბიჯი (სურათებით)
Raspberry Pi - ავტონომიური მარს როვერი OpenCV ობიექტების თვალყურის დევნებით: იკვებება ჟოლოს პი 3 -ით, ღია CV ობიექტების ამოცნობა, ულტრაბგერითი სენსორები და გადაცემული DC ძრავები. ამ როვერს შეუძლია თვალყური ადევნოს ნებისმიერ საგანს, რომლისთვისაც იგი ვარჯიშობს და გადაადგილდეს ნებისმიერ რელიეფზე
ნებისმიერი სატრანსპორტო/სატრანსპორტო მანქანის Bluetooth პროგრამად გადაქცევა კონტროლის მანქანა/მანქანა: 9 ნაბიჯი
ნებისმიერი სატრანსპორტო საშუალების გადაყვანა Bluetooth– ის აპლიკაციის მართვის რ/კ მანქანაში: ეს პროექტი აჩვენებს ნაბიჯებს ჩვეულებრივი დისტანციური მართვის მანქანის Bluetooth (BLE) საკონტროლო მანქანაზე Wombatics SAM01 რობოტების დაფით, ბლინკის აპლიკაციითა და MIT აპლიკაციის გამომგონებლით. არის ბევრი დაბალი ღირებულების RC მანქანა, რომელსაც აქვს მრავალი მახასიათებელი, როგორიცაა LED ფარები და
დაბრკოლების ზონდირება და თავიდან აცილება როვერზე: 3 ნაბიჯი
დაბრკოლების ზონდირება და თავიდან აცილება როვერზე: როვერი არის კოსმოსური საძიებო მანქანა, რომელიც შექმნილია პლანეტის ან სხვა ციური სხეულის ზედაპირზე გადასაადგილებლად. ზოგიერთი როვერი შექმნილია ადამიანის კოსმოსური ფრენის ეკიპაჟის წევრების გადასაყვანად; სხვები ნაწილობრივ ან სრულად ავტონომიური რობოტები იყვნენ. რ