Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Текущий план НАСА для марсохода состоит в том, чтобы он был сборщиком данных и странствовал по Марсу, собирая образцы почвы, чтобы вернуть их на Землю, чтобы ученые могли увидеть, были ли на планете какие-либо предыдущие формы жизни. Кроме того, марсоход отправляет изображения ученым, чтобы они могли помочь в навигации марсохода и исправить любые проблемы, которые могут возникнуть.
Идея нашей группы для нашего проекта заключается в том, чтобы марсоход делал то же самое, что и марсоход НАСА, который покинет Землю в 2020 году, но также для того, чтобы картографировать географию земли. Roomba сможет почувствовать обрыв и остановиться до того, как он упадет, а затем вернуться назад, повернуться и изменить свой курс, чтобы он не упал и не получил повреждений. Другая наша идея, интегрированная в наш проект, заключается в том, чтобы Roomba мог наносить на карту ориентиры, которые он видит, и показывать график каждый раз, когда цикл завершается и его курс завершается.
Это руководство предназначено для всех, кто хотел бы создать такой же тип кода для своего Roomba.
Шаг 1: Шаг 1: Необходимые материалы
Тебе понадобится:
- Roomba
- MATLAB
- Этот файл для запуска Roomba
- Плоская поверхность
- Поверхность стола, выступающая в роли "утеса"
Шаг 2: Шаг 2: Настройка / получение кода для Roomba
Ваш экран будет выглядеть так, как только вы введете файлы.
Шаг 3: Шаг 3: Настройка датчиков высоты / светодиодного освещения
Этот код сообщит вашей Roomba, на какой именно угол повернуть, проверит информацию о батарее, сообщит вашей Roomba, с какой скоростью двигаться, и будет проверять, нет ли человека через камеру Roomba. Он также издаст звуковой сигнал, если опознает человека, и остановится перед тем, как спуститься со скалы.
% попробуйте rob.setLEDDigits ('') x = 0; у = 0; тета = 0; препятствие = ; цикл = 1; AngCorr = @ (x) x + 3,059. * X. ^ 0,4205; % Функция для корректировки углов поворота, когда rob.getBatteryInfo.percent> 15 rob.setLEDDigits ('') rob.setDriveVelocity (0.1)% Go% Проверить наличие личности, если AA_checkperson (rob) rob.beep end% Проверить датчик высоты, если AA_cliffcheck (rob) rob.stop rob.setLEDDigits ('Обрыв') пауза (0,5) препятствие (цикл) = 2; AA_cliffbeep (rob)% Back Up And Turn rob.moveDistance (-. 15) rob.turnAngle (30) end
Шаг 4: Шаг 4: поиск препятствий
Этот код заставит Roomba проверить наличие предметов вокруг него и проверит датчик удара, чтобы убедиться, что он останавливается, прежде чем он повредит себя.
% Проверить датчик освещенности, если AA_lightcheck (rob) rob.stop rob.setLEDDigits ('Wall') pause (0.5) преграда (цикл) = 1; % Wall AA_wallbeep (rob)% Back Up And Turn rob.moveDistance (-. 15) rob.turnAngle (30) end% Проверить датчик удара, если AA_bumpcheck (rob) rob.stop rob.setLEDDigits ('Wall') pause (0.5) препятствие (цикл) = 1; % Wall AA_wallbeep (rob)% Back Up And Turn rob.moveDistance (-. 15) rob.turnAngle (30) end% Если нет, если isempty (препятствие) препятствие (цикл) = 0; elseif длина (препятствие) <цикл препятствие (цикл) = 0; конец
Шаг 5: Шаг 5: Построение графика
Этот код скажет вашей Roomba составить график того, с чем она сталкивается в своем путешествии. Подобный сюжет появится после того, как Roomba остановится.
% Получить позицию d = rob.getDistance; если цикл == 1 тета (цикл) = 0; х (цикл) = d. * cosd (тета (цикл)); % общего пройденного расстояния в x y (цикл) = d. * sind (theta (цикл)); % общего пройденного расстояния в y else theta (цикл) = theta (цикл-1) + rob.getAngle; х (цикл) = d. * cosd (тета (цикл)) + x (цикл-1); % общего пройденного расстояния в x y (цикл) = d. * sind (theta (цикл)). * d + y (цикл-1); % общего пройденного расстояния в конце y% Условие разрыва, если rob.getButtons.clean break end% Приращение цикла cycle = cycle + 1; end rob.stop for i = 1: цикл, если препятствие (i) == 1% График стены (x (i), y (i), 'Marker', 'square', 'MarkerEdgeColor', 'r') elseif препятствие (i) == 2% График обрыва (x (i), y (i), 'Marker', 'o', 'MarkerEdgeColor', 'k') конечный текст (.9, 0.9, sprintf ('Square = Wall / nCircle = Cliff '),' Units ',' normalized ') удерживать конец% сигнала бедствия, пока истина rob.beep pause (3) if rob.getButtons.clean break end end% catch% rob.stop% end