Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Лекция



Сразу хочу сказать, что здесь никакой воды про задачи для робота, и только нужная информация. Для того чтобы лучше понимать что такое задачи для робота, обратная связь, датчики для роботов, путешествие по комнате в робототехнике , настоятельно рекомендую прочитать все из категории Робототехника.

обратная связь . Путешествие по комнате. Защита от застреваний. Практическое применения движения по комнате- роботы пылесосы

Управление без обратной связи

В задачах управления обычно существуют два объекта: управляющий и управляемый. В простейшем варианте от управляющего объекта поступает команда и управляемый выполняет ее, ничего не сообщая о результате или об изменившихся условиях работы. В этом суть прямой связи (рис. 8.1).

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.1. Прямая связь в управлении.

С точки зрения мобильного робота управляющий объект — это его контроллер с запущенной программой, объект управления — это его колеса и корпус (шасси). Управляющие команды контроллер подает на моторы, при прямой связи руководствуясь показаниями своих внутренних часов — таймера.

Первый класс задач, с которых начинается программирование, — это управление перемещениями робота. Рассмотрим их по порядку. В качестве сред программирования используем Robolab 2.9.4 для начинающих и RobotC для подготовленных программистов. В качестве модели робота — любую двухмоторную тележку.

Движение в течение заданного времени вперед и назад

Для движения вперед используются команды управления моторами. Эти команды просто включают моторы. Особенность NXT заключается в том, что после окончания выполнения программы сохраняются все установки в поведении робота, но на моторы перестает подаваться напряжение. Таким образом, просходит пуск и сразу плавное торможение (рис. 8.2).

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.2. Включение моторов.

Task main()

{

motor[motorB] = 100; // моторы вперед с motor[motorC] = 100; // максимальной мощностью

}

Обе команды выполняются практически мгновенно. Если сразу следом за ними выключить моторы, то тележка просто дернется и останется стоять на месте (рис. 8.3):

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.3. Остановка при попытке начать движение.

     Task main()          { motor[motorB] = 100; motor[motorC] = 100; motor[motorB] = 0; // стоп мотор motor[motorC] = 0;          }

Таким образом, для осуществления движения требуется некоторая задержка перед выключением моторов. Команды ожидания не производят никаких конкретных действий, зато дают возможность моторам выполнить свою часть работы (рис. 8.4):

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.4. Правильный порядок управления моторами.

     Task main()          {      motor[motorB] = 100; motor[motorC] = 100; wait1Msec(1000); // Ждать 1000 мс motor[motorB] = 0; motor[motorC] = 0;      }

Движение вперед или назад, очевидно, определяется направлением вращения моторов (рис. 8.5). Для смены направления не требуется остановка:

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.5. Проехать секунду вперед, секунду назад и остановиться.

     Task main()          { motor[motorB] = 100; motor[motorC] = 100; wait1Msec(1000);          motor[motorB] = -100; // «Полный назад» motor[motorC] = -100; wait1Msec(1000); motor[motorB] = 0; motor[motorC] = 0;          }

В момент смены направления на высокой скорости возможен занос. Плавное торможение возможно. Для этого перед подачей команды «назад» с моторов снимается напряжение и робот некоторое время едет по инерции (рис. 8.6).

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.6. Перед сменой направления полсекунды ехать по инерции.

Более краткий промежуток, чем 1 секунда, задается с помощью команды «N/100» и модификатора. В Robolab 2.9.4 можно задавать время в миллисекундах командой «N/1000»:

     Task main()          { motor[motorB] = 100; motor[motorC] = 100; wait1Msec(1000);          // Включить плавающий режим управления моторами bFloatDuringInactiveMotorPWM = true; motor[motorB] = 0; motor[motorC] = 0; wait1Msec(500); motor[motorB] = -100; motor[motorC] = -100; wait1Msec(1000);          // Включить режим «торможения» bFloatDuringInactiveMotorPWM = false; motor[motorB] = 0; motor[motorC] = 0;          }

В Robolab обычными командами моторы включаются в плавающем режиме, а в RobotC по умолчанию используется режим «торможения», который позволяет достичь более точного управления. Но и в Robolab существуют «продвинутые» команды управления моторами в режиме торможения да еще с диапазоном мощностей –100...100.

Повороты

Для выполнения поворота на месте достаточно включить моторы в разные стороны. Тогда робот будет вращаться приблизительно вокруг центра оси ведущих колес со смещением в сторону центра тяжести. Для более точного поворота надо подбирать время в сотых долях секунды (рис. 8.7). Однако при изменении заряда батареек придется вводить новые параметры поворота:

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.7. Поворот на месте.

     Task main()          { motor[motorB] = 100; // Моторы в разные motor[motorC] = -100; // стороны wait1Msec(300); motor[motorB] = 0; motor[motorC] = 0;          }

Существует другой тип поворотов. Если один из моторов остановить, а другой включить, то вращение будет происходить вокруг стоящего мотора. Поворот получится более плавным (рис. 8.8):

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.8. Плавный поворот.

     Task main()          { motor[motorB] = 100; motor[motorC] = 0;          wait1Msec(1000); // вращается только мотор B motor[motorB] = 0;          }

Движение по квадрату

Используя полученные знания управления моторами, можно запрограммировать движение по квадрату или другому многоугольнику с помощью цикла или безусловного перехода (рис. 8.9):

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.9. Движение по многоугольнику с плавными поворотами.

Task main()

{ while (true){ motor[motorB] = 100; motor[motorC] = 100; wait1Msec(1000); motor[motorC] = 0; wait1Msec(1000); motor[motorB] = 0;

}

}

Уточнив длительность поворотов и число повторений, научим тележку объезжать квадрат по периметру 1 раз (рис. 8.10). Для точности поворотов снизим мощность моторов примерно вдвое. Задержки придется подобрать самостоятельно:

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.10. Для поворота на 90 градусов длительность придется подобрать самостоятельно.

     Task main()          { for(int i=0;i<4;i++){ // Цикл выполняется 4 раза motor[motorB] = 50; motor[motorC] = 50; wait1Msec(1000); motor[motorC] = -50; wait1Msec(400); motor[motorB] = 0;          }          }

Управление с обратной связью

Обратная связь

Появление обратной связи в системе означает то, что управляющий объект начинает получать информацию об объекте управления

(рис. 8.11).

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.11. Управление с обратной связью.

Обратная связь осуществляется с помощью датчиков, прикрепленных, например, на корпус робота. Данные поступают в контроллер, который является управляющим объектом.

Точные перемещения

Чтобы поворот не зависел от заряда батареек, можно воспользоваться встроенным в двигатели датчиком оборотов, «энкодером», который позволяет делать измерения с точностью до 1 градуса. Для более эффективного управления задействуем в Robolab «продвинутые» команды, считая что при повороте тележки на 90 градусов левое колесо поворачивается на 250 градусов вокруг своей оси (рис. 8.12):

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.12. Точный поворот на месте.

     task main() {          nMotorEncoder[motorB]=0; // Инициализация энкодера motor[motorB] = 100; motor[motorC] = -100;          // Пустой цикл ожидания показаний энкодера while(nMotorEncoder[motorB]<250); motor[motorB] = 0; motor[motorC] = 0;          }

Движение вдоль линии

Один датчик

Для первого опыта подойдут робот, созданный для задания «Танец в круге», и то же поле — черная окружность на белом фоне. Если уже все готово для изготовления полноценного поля для траектории, можно обратиться к разделу «Поле» в конце этой части. Единственная поправка: датчик освещенности следует выдвинуть немного вперед, чтобы он образовывал вместе с ведущими колесами равносторонний или хотя бы равнобедренный прямоугольный треугольник (рис. 8.32).

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.32. Варианты расположения датчика освещенности относительно ведущих колес.

Задача такова: двигаться вдоль окружности по границе черного и белого. Решается элементарно применением релейного (или пропорционального) регулятора, который рассмотрен в главе «Алгоритмы управления». Только алгоритм будет записан не в виде ветвления, а с использованием блоков «Жди темнее» и «Жди светлее». Базовая конструкиця приведена на рис. 8.33—8.35, а простейшая программа для начинающих — на рис. 8.36. Без модификаторов предполагается, что датчик освещенности подключен к первому порту, а на моторы подается максимальная мощность.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.33. Крепление датчика освещенности к трехколесной тележке.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.34. Ось для регулировки высоты датчика может быть любой длины.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.35. Высота датчика над поверхностью поля — от 5 до 10 мм.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.36. Алгоритм движения по линии с одним датчиком освещенности.

Перед стартом ставим робота на линию так, чтобы датчик был чуть слева. По алгоритму робот плавно поворачивает направо, пока освещенность не понизится на 5 пунктов (по умолчанию). Затем поворачивает налево, пока освещенность не повысится на 5 пунктов. Движение получается похожим на «змейку».

Возможные проблемы

Перечислим трудности, которые могут возникнуть:

— робот крутится на месте, не заезжая на линию. В этом случае следует либо стартовать с другой стороны линии, либо поменять подключения моторов к контроллеру местами;

— робот проскакивает линию, не успевая среагировать. Следует понизить мощность моторов;

— робот реагирует на мелкие помехи на белом, не доезжая до черного. Надо увеличить порог чувствительности датчика (например, не на 5, а на 8 пунктов). Вообще говоря, это число можно рассчитать. Для этого следует снять показания датчика на белом, затем на черном, вычесть одно из другого и поделить пополам. Например, (56 – 40) / 2 = 8.

Усовершенствованная программа показана на рис. 8.37.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.37. Алгоритм движения по линии с одним датчиком освещенности: понижена скорость, увеличена разность между черным и белым.

Более устойчиво алгоритм работает, если использовать моторы с управлением скоростью –100...100. В этом случае есть возможность отрегулировать плавность поворота в соответствии с кривизной линии

(рис. 8.38).

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.38. Алгоритм движения по линии с одним датчиком освещенности: улучшено управление моторами.

В этом алгоритме притормаживающие моторы на повороте не останавливаются полностью, а лишь понижают скорость до 20 пунктов. Это делает поворот более плавным, но может привести и к потере линии на резком повороте. Поэтому числа 80 и 20 поставлены условно, их стоит подобрать самостоятельно.

П-регулятор

И, наконец, для сравнения надо посмотреть, как будет работать П-регулятор для одного датчика. Этот пример уже приводился в главе 7. Но его стоит повторить с некоторыми дополнениями (рис. 8.39).

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.39. Алгоритм движения по линии с одним датчиком освещенности на пропорциональном регуляторе.

Число 48, использованное в формуле управления u, — это среднее арифметическое показаний датчика освещенности на черном и на белом, например (40 + 56) / 2 = 48. Однако показания датчиков часто меняются по разным причинам: другая поверхность, изменение общей освещенности в помещении, небольшая модификация конструкции и т.п. Поэтому имеет смысл научить робота самостоятельно вычислять среднее арифметическое, т. е. значение границы белого и черного.

Есть несколько способов выполнить калибровку датчика. В простейшем случае вместо вычисления среднего арифметического просто понижается значение белого. Смысл способа в том, что робот снимает показания на белом, вычитает из него некоторое предполагаемое значение и полученное число считает границей белого и черного. Например, 56 – 7 = 49 можно считать значением серого (рис. 8.40).

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.40. Алгоритм движения по линии с одним датчиком освещенности на пропорциональном регуляторе с предварительной калибровкой (определением значения серого).

     task main() { int u, v=50; float k=2; int red=SensorValue[S1]-7; while(true) {          u=k*(SensorValue[s1]-red); motor[motorB]=v+u; motor[motorC]=v-u; wait1Msec(1);          }          }

По умолчанию значение освещенности с датчика на порту 1 считывается в красный контейнер, после чего оно уменьшается на число 7, и в формуле управления u используется уже измененное значение красного контейнера red. Если указывать все модификаторы, программа будет выглядеть так, как показано на рис. 8.41.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.41. Алгоритм движения по линии с одним датчиком освещенности на пропорциональном регуляторе — с модификаторами.

Надо иметь ввиду, что такой способ калибровки не учитывает все возможные варианты, а только экономит время на программирование и отладку. Если же времени достаточно, есть другой способ, при котором действительно производится расчет среднего арифметического показаний датчика освещенности на черном и на белом (рис. 8.42).

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.42. Алгоритм движения по линии с одним датчиком освещенности на пропорциональном регуляторе с расчетом значения серого.

     task main() { int u, v=50; float k=2;      int c4=SensorValue[S1];      PlaySound(soundBeepBeep);      wait1Msec(2000); int c5=SensorValue[S1];      PlaySound(soundBeepBeep);      int grey=(c4+c5)/2; while(true) {          u=k*(SensorValue[S1]-grey); motor[motorB]=v+u; motor[motorC]=v-u; wait1Msec(1);          }          }

Предложенный алгоритм обладает некоторым неудобством: при запуске потребуется быть внимательным и не пропустить звукового сигнала, после которого робота надо переместить так, чтобы датчик освещенности оказался над белым полем. Об этом говорит сайт https://intellect.icu . Понятно, что в начале следует поместить робота точно над черной линией. В контейнере с номером 4 (обозначается c4) будет сохранено значение черного, в контейнере с номером 5 (c5) — значение белого. В переменную grey помещается значение серого, которое используется в регуляторе. Сразу после второго звукового сигнала робот начнет движение.

Калибровку можно сделать более управляемой. Для этого после каждого считывания данных необходимо вставить ожидание какоголибо внешнего события, например нажатия на датчик касания, уменьшения расстояния на ультразвуковом датчике или просто нажатия на кнопку NXT.

Рассмотрим простейший пример с дополнительным датчиком касания, подсоединенным ко второму порту. Запустить программу имеет смысл, аккуратно установив тележку датчиком освещенности над черной линией (рис. 8.43).

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.43. Калибровка датчика освещенности с ожиданием касания.

     task main() { int u, v=50; float k=2; int c4=SensorValue[S1]; PlaySound(soundBeepBeep);          while(SensorValue[S2]==0); // Жди, пока не нажато wait1Msec(100);        // Защита от залипаний while(SensorValue[S2]==1); // Жди, пока нажато wait1Msec(100); int c5=SensorValue[S1]; PlaySound(soundBeepBeep);      int grey=(c4+c5)/2;           while(SensorValue[S2]==0); wait1Msec(100); while(SensorValue[S2]==1);           while(true)          {          u=k*(SensorValue[S1]-grey); motor[motorB]=v+u; motor[motorC]=v-u; wait1Msec(1);          }          }

После первого звукового сигнала нужно переставить тележку так, чтобы датчик освещенности оказался над белым. После второго сигнала подготовиться к старту (датчик освещенности на границе между черным и белым) и по нажатию кнопки стартовать.

Аналогичный опыт можно провести, используя датчик расстояния вместо датчика нажатия. Преимущество здесь в том, что старт робота будет осуществляться бесконтактно. Это поможет стартовать в точно выбранном положении. Только надо быть внимательным и несвоевременно не провести рукой возле датчика расстояния (рис. 8.44).

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.44. Калибровка датчика освещенности с ожиданием объекта (руки).

В примере использованы именованные контейнеры (black и white), которые по сути являются переменными, как в обычном языке программирования. Обратите внимание, что звуковой сигнал между двумя ожиданиями изменения расстояния способствует тому, чтобы робот не среагировал дважды подряд на одно приближение руки.

Полученный опыт стоит применить для окончательного выталкивания кеглей из круга, если таковые еще остались на границе. Доработайте самостоятельно алгоритм, приведенный на рис. 8.31.

Поле для следования по линии

Более интересную траекторию, чем окружность, стоит сделать самостоятельно на светлой поверхности достаточно большой площади с помощью той же черной изоленты. В качестве поверхности подойдет лист фанеры или оргалита, обратная сторона листа линолеума, белая клеенка и многое другое. Размеры поля желательно делать не меньше, чем 100 · 150 см. При разметке траектории следует учесть отступ от линии до края поля не менее 20 см, чтобы колеса робота не съезжали с трассы во время движения.

Имея определенный навык, можно наклеить изоленту так, что получится замкнутая кривая. Если не получается с одним куском изоленты, смело пользуйтесь ножницами, чтобы изгибы с малым радиусом кривизны составить из нескольких кусочков. Для начала не стоит рисовать слишком резких поворотов. Линию можно составить как из одной, так и из двух и даже трех полос изоленты. Тогда роботу будет легче ориентироваться и не съехать с курса. Помимо изоленты может быть использована матовая черная самоклеющаяся пленка. И, наконец, оптимальное решение печать графического файла на баннерной ткани. Стоимость такой печати обычно не превосходит 400 руб. за 1 м2. Небольшое поле для движения по линии приведено на рис. 8.45.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.45. Пример самодельного поля для движения по линии.

На рис. 8.46 приведен пример траектории для состязаний по правилам Открытого турнира на кубок Политехнического музея (г. Москва). Ширина линии составляет 5 см, а минимальный радиус кривизны 30 см. Актуальные регламенты состязаний размещены на сайте http://railab.ru. Регламент состязаний «Гонки по линии» и само поле в векторном формате можно найти на сайте http://myrobot.ru[11].

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.46. Поле для состязаний «Гонки по линии».

Навигация и система датчиков используемая при движении по комнате

От качества и типа системы навигации для роботизированного средства зависит, насколько быстро робот будет ориентироваться в пространстве и как хорошо исполнять свои обязанности.

Система датчиков подразделяется на следующие типы

  • внешние датчики;
  • лазерная навигация;
  • видеонаблюдение;
  • специализированные датчики.

Внешние датчики

Внешние датчики нужны, чтобы сканировать пространство, избегать помех и выстраивать оптимальный маршрут для передвижения.

Тип датчика

Для чего нужен
Контактный Для обхода препятствий при столкновении.
Бесконтактный Регистрирует препятствие и позволяет остановиться до столкновения.
Ультразвуковой дальномер Работает по принципу эхолокации и исключает возможность удара о стены и мебель.

Внешние датчики позволяют сохранить робота в целостности и уберечь его от столкновений с мебелью или стенами.

Лазерная навигация

Самый продвинутый тип ориентирования в пространстве, предполагает возможность построения карты помещения. Специальные лазерные дальномеры фиксируют расстояние до стен, мебели и сохраняют данные в памяти устройства.

Еще они помогают выстраивать виртуальные стены. Виртуальная стена ー это способ разделения пространства на зоны, где нужна выполнять особенные работы, например уборка или покраска и противоположные зоны, где нет необходимости посещать роботы.

Видеокамеры

Камера устанавливается в верхней, самой высокой точке панели и сканирует информацию со стен, пола, потолка и мебели. Двигается такой прибор по прямым линиям и поочередно переходит от комнаты к комнате. При этом могут исползоваться алгоритмы компьютерного зрения и распознавания образов

Теория путешествия по комнате в робототехнике

Естественно, нормальная среда обитания для робота, построенного из специалного конструктора, — это комната с мебелью.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Вначале научимся путешествовать по ней, по возможности не натыкаясь на предметы и не застревая.

Подходящая конструкция для такого робота — это трехколесная тележка с установленным ультразвуковым датчиком наверху (рис. 8.78). Данный датчик следует расположить строго горизонтально относительно пола, иначе любая соринка может быть воспринята как непреодолимое

препятствие или, наоборот, что-то серьезное не будет замечено.

Рис. 8.78. Маленький исследователь из набора 9797 с ультразвуковым датчиком.

Более простой вариант конструкции (рис. 8.79) можно построить на основе тележки, которая рассматривалась в главе 3. Программа очень похожа алгоритм на путешествия в круге. Меняется лишь датчик (рис. 8.80).

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.79. Датчик, прикрепленный к корпусу тележки, должен смотреть строго горизонтально.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.80. Алгоритм путешествия по комнате.

Можно сделать несколько короче, если заменить отъезд назад с поворотом на месте одним действием: плавным поворотом задним ходом

(рис. 8.81).

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.81. Алгоритм путешествия по комнате с поворотом задним ходом.

Правда, в некоторых условиях такой поворот может привести к небольшой аварии, так что будьте с ним осторожнее. Кстати, и в первой и во второй программах следует подобрать свои параметры для расстояния до предметов и длительности поворотов.

Защита от застреваний

Присмортревшись к поведению робота повнимательнее, можно заметить, что не все предметы на пути попадают в его поле зрения. Например, если препятствие достаточно низкое, то ультразвуковой датчик его может не заметить. Или покрытая тканевой обивкой поверхность вовсе поглощает ультразвуковые сигналы, т. е. не отражает их на чувствительный элемент.

Не увидев препятствие (тапок или ножку стула), робот может застрять и будет бесконечно пытаться продолжать движение вперед. Однако если поразмыслить, можно прийти к выводу, что в комнате движение не должно быть бесконечным. Скажем, от одной стенки до другой робот может доехать за 10 с. Если за это время он не увидит ни одного препятствия, можно с уверенностью утверждать, что произошло застревание и надо предпринять экстренные меры. Что же делать? Ничего особенного. Просто отъехать назад и развернуться. Поможет в этом «сторожевой таймер» (рис. 8.82). Такие устройства применяются в микроконтроллерах и защищают их от зависаний.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.82. Если на сторожевом таймере «натикает» 10 с, включается защита от застреваний.

Можно заметить в нашей программе повторяющиеся группы блоков. Их стоит объединить в подпрограмму, которая будет осуществлять отъезд назад с разворотом (рис. 8.83). Таким образом, подпрограмма отъезда будет вызываться в двух случаях: 1) при наличии препятствия, 2) при срабатывании сторожевого таймера.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.83. Защита от застреваний с использованием подпрограмм.

Но в этой программе есть один существенный недостаток. Из двух параллельных задач происходит обращение к одним и тем же моторам. Если эти обращения совпадут во времени, может возникнуть непредвиденное поведение робота. В чем-то это даже интересно. Но наиболее корректная программа описана в следующем разделе.

Объезд предметов. Новая конструкция

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.89. Датчик расстояния устанавливается под острым углом к направлению движения.

Первые шаги к объезду предметов сделаны в главе «Алгоритмы управления». Движение вдоль стены с небольшими отклонениями возможно с помощью ПД-регулятора. Однако описанный робот сможет объезжать стены только при малых отклонениях от прямой линии. При резких изгибах робот может потерять контакт со стеной и начать крутиться на месте. Эту проблему можно отчасти разрешить конструктивно.

Рассмотрим вариант, при котором на пути движения будут возникать серьезные повороты, вплоть до прямых углов. Потребуется внести модификации и в конструкцию, и в программу.

Во-первых, робот должен будет смотреть не только направо, но и вперед. Ставить второй дальномер довольно затратно. Однако можно воспользоваться эффектом того, что ультразвуковой датчик имеет расширяющуюся область видимости

(рис. 8.89). Это напоминает периферийное зрение человека: кое-что он может увидеть краем глаза. Учитывая это свойство, разместим датчик расстояния не перпендикулярно курсу движения, а под острым углом (рис. 8.90 8.91). Так можно «убить сразу двух зайцев». Во-первых, робот будет видеть препятствия спереди; во-вторых, более стабильно будет придерживаться курса вдоль стены, постоянно находясь на грани видимости. Таким образом без добавления новых устройств можно более эффективно использовать возможности дальномера.

Важное замечание. При старте робота его надо будет направлять датчиком строго на стену, чтобы считывание начального значения прошло без помех.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.90. Крепление размещается на левой стороне. Как и в первой конструкции, датчик располагается вертикально.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.91. Увеличенное за счет корпуса робота расстояние до стены способствует расширению области обзора.

Очевидно, что изменение конструкции влечет изменение коэффициентов регулятора k1 и k2. Обычно подбор начинается с пропорционального коэффициента при нулевом дифференциальном. Когда достигнута некоторая стабильность на небольших отклонениях, добавляется дифференциальная составляющая.

Поворот за угол

Следующим шагом необходимо ограничить реакцию робота на «бесконечность». Как известно, когда в поле видимости нет объекта, показания датчика расстояния NXT равны 250 или 255 см. Если это число попадает на пропорциональный регулятор, робот начинает крутиться на месте. А в ситуации, когда роботу следует завернуть за угол, именно это и произойдет.

Для объезда предметов потребуется ввести контроль показаний датчика расстояния: при резком изменении робот должен делать вывод о возможном повороте, который надо будет производить с другими коэффициентами или просто с постоянным значением управляющего воздействия.

Рассмотрим пример поворота направо «за угол» (рис. 8.92). Если робот движется на расстоянии L от стены, то и поворот, очевидно, он будет выполнять по окружности с радиусом L.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.92. Выполнение поворота при потере контакта со стенкой.

Нетрудно рассчитать, каким должно быть отношение скоростей колес, чтобы радиус поворота оказался равен L. Для этого достаточно измерить расстояние между передними колесами. Пусть в нашем роботе оно будет равно k = 16 см, а его половина d = 16 / 2 = 8 см. Тогда левое и правое колеса движутся по окружностям радиусов, соответственно, R1 = L + d и R2 = L d. Пройденные ими пути за единицу времени должны быть пропорциональны радиусам, следовательно, скорости точек крепления колес v1 и v2 связаны следующим отношением:

v1 = R1 . v2 R2

Выражая скорости перемещения колес через базовую скорость v и неизвестную x, а радиусы через L, получаем следующее: v + x L+d

= , vL+xL-vd-xd =vL+vd-xL-xd , 2xL=2vd , v - x L-d x = vd, v1 = v + vd= v(1+ d), v2 = v - vd= v(1- d).

L L L L L

Линейная скорость v пропорциональнаугловой скорости колеса ω, которая в свою очередь пропорциональна мощности, подаваемой на моторы (в режиме торможения). Мы привели закон управления к стандартному виду, что позволяет задать управляющее воздействие на время поворота за угол. Таким образом, получаем расчет для управления моторами нашего робота.

u=v*8/L; motor[motorB]=v+u; motor[motorC]=v-u;

Когда расстояние до стены становится больше 2L (используем такой порог видимости), т. е. открывается поворот за угол, управляющее воздействие начинает вычисляться по приведенным формулам

(рис. 8.93).

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рис. 8.93. Объезд предметов на заданном расстоянии по правилу правой руки.

     task main() {          float u, k1=2, k2=10; int v=50, d=8, Sold, L, Snew;          Sold=L=SensorValue[S1]; // Запомнили начальное состояние while(true) {          Snew=SensorValue[S1]; // Получили показания датчика if (Snew>L*2) {  u=v*d/L;  Sold=L*2; } else {          u = k1*(Snew-L) + k2*(Snew-Sold);          Sold=Snew;          } motor[motorB]=v+u; motor[motorC]=v-u; wait1Msec(1); }          }                          task main() {          float u, k1=2, k2=10, a=0.2, Snew;   int v=50, d=8, Sold, L; Snew=Sold=L=SensorValue[S1]; while(true)          {          Snew=(1-a)*Snew+a*SensorValue[S1]; if (Snew>L*2) {  u=v*d/L;  Sold=L*2; } else {          u = k1*(Snew-L) + k2*(Snew-Sold);          Sold=Snew;          }   motor[motorB]=v+u; motor[motorC]=v-u; wait1Msec(1);          }          }

Фильтрация данных становится особенно актуальной, если на их основе требуется принимать решение о дальнейших действиях в долгосрочной перспективе. Например, увидев проем, остановиться или повернуть назад. Достаточно одной помехи, чтобы робот остановился не в том месте. Поэтому фильтры, хоть и затормаживают реакцию робота, но делают ее более стабильной и предсказуемой.

Практические коммерческое применение роботизированного движения по комнате

Робот-пылесос — пылесос, оснащенный искусственным интеллектом (обычный, не мыслящий автомат) и предназначенный для автоматической уборки помещений. Относится к классу бытовых роботов и интеллектуальной бытовой технике для умного дома.

С начала 2000-х годов многие компании стали производить «роботизированные пылесосы», такие как Electrolux Trilobite (англ.), Roomba, Samsung Navibot , Okami и др.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Рисунок Фотосъемка на длинной выдержке, показывающая алгоритм передвижения робота-пылесоса

Современное устройство чаще всего представляет собой диск диаметром 28-35 см и высотой 9-13 см. В передней части робота обычно находится «бампер» — большой контактный сенсор, с помощью которого робот определяет столкновение с препятствиями. Внутри «бампера» обычно находятся бесконтактные датчики определения препятствий (состоящие из источника инфракрасного излучения и измерителя величины отраженного сигнала).

Для защиты от падения с лестниц, на днище робота возле колес обычно установлены 4 или 6 бесконтактных датчиков (состоящие из источника инфракрасного излучения и измерителя величины отраженного сигнала) направленных вниз, и располагаемых рядом с колесами робота. Из-за особенностей работы данных датчиков, роботы воспринимают черные поверхности (чаще всего — резиновые коврики) как непреодолимое препятствие (думая, что перед ними пропасть).

Для работы робот-пылесос использует внутренние аккумуляторы (Ni-MH, Li-ion и LiFePo4 ) и нуждается в регулярной подзарядке от специального модуля — «Базы» (также часто на роботе присутствует гнездо для ручной зарядки — но данная возможность обычно не используется). Большинство моделей умеют самостоятельно находить «Базу» и подключаться к ней по завершению уборки. Зарядка занимает порядка 2-5 часов (в зависимости от типа и емкости аккумуляторов).

Во время уборки робот самостоятельно движется по заданной поверхности, убирая с нее мусор. Встретив на пути препятствие, робот принимает решение о способе его преодоления на основе специальных алгоритмов.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Робот пылесос - Механика

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Наверное, каждый, кто только начинает по-настоящему увлекаться робототехникой, электроникой или программирование, проходя сложный путь изучения сопутствующих технологий, надеется в будущем применить накопленные знания для работы над серьезным и интересным проектом.

Я вот, например, почитав робофорум, решил собрать робот пылесос. Причина такого выбора не столько в полезности данного устройства, сколько в том что, разрабатывая его, можно сконцентрироваться на конкретной задаче: робот способный автономно убирать мусор при минимальном обслуживании.

Данная статья не является подробным описанием по сборке и настройке робота. В ней я, главным образом, хотел бы изложить свой опыт, полученный во время выполнения данной работы.

Механика:
Из всей механики робота пылесоса особую сложность в проектировании и изготовлении представляет мусороуборочный узел.

Он должен:
-Занимать как можно меньше места, но при этом иметь вместительный контейнер для мусора.
-Хорошо убирать загрязнения на любых поверхностях, но при этом обладать низким энергопотреблением и уровнем шума.

Прежде чем удалось добиться выполнения всех этих запросов, было перепробовано множество различных вариаций компоновки узла.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Макеты мусороуборочных узлов.

В конце — концов, остановился на схеме: широкая боковая щетка + пылесос. Радиальная щетка, расположенная с правой стороны, загребает мусор к жерлу пылесоса, расположенному по центру. Горизонтально-цилиндрическую щетку, как у Румбы, решил не ставить, так – как она лишь незначительно увеличивает качество уборки, но при этом сильно осложняет конструкцию жерла пылесоса. Устройство пылесосящего узла представлено на фото ниже.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Снаружи.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Внутри.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Контейнер.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Фильтр.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Сборка.

Однако возникает вопрос: Где взять турбину и двигатель для пылесоса?

Можно спаять турбину из стеклотекстолита и жести;

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Турбина из жести.

Можно взять готовую турбину от большого пылесоса, предварительно обрезав ее на токарном станке.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Готовая турбина, обрезанная на токарном станке до нужного диаметра(вентилятор от компьютера для сравнения).

А еще ее можно купить, в виде дешевого китайского автомобильного пылесоса.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Пылесос.

Не сочтите за рекламу, но рекомендую брать именно этот пылесос(kioki), так как в нем гарантировано правильная турбина с мощным двигателем и удобным краплением (при цене, в среднем, 500р). Хотя, что касается двигателя – то его лучше заменить. У стандартного потребление порядка 3А, при замене на двигатель QX-RS-385-2073 с потреблением 1.2А, мощность всасывания падает незначительно, зато робот начинает меньше шуметь и дольше бегает без подзарядки. Что касается самодельных турбин, они хоть и хорошо всасывают, но их довольно сложно отцентрировать так чтобы не было вибрации.

Боковая щетка собрана из двигателя от магнитофона, подключенного к оси с трещоткой (вынул из игрушечного шуруповерта) через червячную передачу. Кисточки вынуты из половой швабры, и закреплены на диске из стеклотекстолита с помощью секундного клея.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Радиальная щетка.

В качестве приводных моторов служат два 25милиметровых моторредуктора, наверное, здесь нужно что-то более подходящее, например переделанные под постоянное вращение сервоприводы, но я поставил то что было под рукой.
Готовых колес нужного размера не нашлось, поэтому пришлось вырезать их 10милеметровой фанеры и обклеить теплоизоляционной лентой, для лучшего сцепления с поверхностью. Отверстия в колесе – для энкодеров, хотя в конечном счете я отказался от их применения из-за низкой точности.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Мотоблок.

Мотоблоки желательно ставить на независимую подвеску. В данной модификации робота я решил проверить, действительно ли она нужна, установив двигатели без подвески, в результате возникли проблемы при заезде на толстый ковер. Оси двигателей должны совпадать диаметром окружности робота, так будет проще реализовать развороты на месте.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Подруливающее колесико.

Датчик соударений(далее бампер), сделан из двух переключателей и подвешенной на них полоске из пластмассы согнутой полукругом.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Переключатели

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Бампер.

По нормальному бампер должен закрывать собой всю морду робота снизу доверху, но так-так вся мебель у меня одной высоты, то я с этим заморачиваться не стал.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Механика робота в собранном виде.

Для проверки механической части робота была собрана следующая, простая, схема управления:
Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Схема управления.

Проверка механики на простом алгоритме уборки:


Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Контейнер после уборки.

Как видно, мусороуборочный узел хорошо справляется со своей работой, но при использовании простого алгоритма уклонения от препятствий, робот ходит по одной и той же траектории, оставляя много пропусков.

Робот пылесос - Электроника и программа

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

В конце первой части статьи была представлена электронная схема простого управляющего алгоритма. В этой части будет рассмотрена электронная и программная составляющая системы управления робота, на основе микроконтроллера.
Электроника:
Плата управления построена на микроконтроллере atmega16, изначально она разрабатывалась, как универсальный модуль, поэтому оказалось плохо защищена от помех электродвигателя турбины. Проблема решилась экранированием проводов двигателя и установкой на него конденсатора в 0.1мкф, также необходимо кинуть вывод RESET контроллера прямо (без резистора) на +5v, это позволяет избавиться от произвольно сброса.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Плата контроллера.

Драйвер двигателей собран на микросхеме L298, по стандартной схеме.
Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Плата драйвера двигателей.

Остальная электроника и органы управления собраны на макетной плате.
Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Макетная плата.

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Общая электронная схема.

Как вы можете видеть, на схеме нет устройства для контроля заряда аккумулятора и сенсоров для поиска зарядной станции. Все это было в прошлой модификации робота и достаточно неплохо работало, но так-так получилось все немного кривовато и требует доработки, то описывать в данной статье эти недостающие элементы я не буду. Однако, чтобы не быть голословным, вот вам видео поиска ЗС, роботом прошлой модификации.


Поиск зарядной станции

Программа:
Наверное, самая интересная часть всей работы – это создание алгоритма и написание программы управления роботом.
Алгоритм уборки разделен на 4 режима:
•Режим ожидания
•Спираль
•Движение вдоль стены
•“Газонокосилка”

Разберем каждый из них по отдельности.

Режим ожидания
Здесь все просто, приводные двигатели выключены, турбина и щетка тоже, индикатор мигает с низкой частотой, никакой реакции на срабатывание бампера, по нажатию кнопки — переход на следующий режим.

Спираль
Данный алгоритм хорош для комнат с минимальным количеством мебели. После обнаружения препятствия робот переходит на следующий режим, так как этим препятствием, скорее всего, окажется стена, логично было бы сделать переход на режим движения вдоль стены.
Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

На блок-схеме, проверка наличия препятствий дана условно, в программе же она производится постоянно, а не один раз за итерацию.

Движение вдоль стены
По-моему это самый нужный алгоритм в роботе уборщике, так как большая часть мусора и пыли скапливается именно около стен. На первом этапе робот двигается вперед, до тех пор, пока не обнаружит препятствие, а затем переходит к движению возле него. Так как этим препятствием может оказаться не только стена, а вообще что угодно (например ножка стула), то работа режима, дабы исключить зацикливание, должна быть ограничена по времени.
Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

“Газонокосилка”
Алгоритм был предложен на робофоруме и опробован в среде logo. Является хорошей заменой случайному блужданию, в чем можно убедиться, прогнав алгоитм в logo на модели своей комнаты:

Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Конечно, в реальных условиях все не так идеально, но зато из сенсоров, для данного алгоритма уборки, нужны только датчики соударений.
Приводить блок-схему этого алгоритма не буду, на робофоруме, есть код на logo.

Программа писалась на чистом С без asm вставок.
Код распилен на несколько частей:
main.c -документ с main функцией и главным циклом.
Periphery.с -аппаратные зависимости, настройка периферии контролера.
Action.c -функциональная часть программы
util/drivers.c -функции управления устройствами
util/timer.c -служба таймеров

Periphery.c
Содержит только одну функцию — Periphery() в которой прописывается настройка периферии контроллера. Функция вызывается единожды, из главной функции программы.

util/drivers.c
Содержит макросы для управления уборочным узлом:

     #define ON_Cleaner PORTC |= (1<<4)     #define OFF_Cleaner PORTC &= ~(1<<4)



А также функцию управления приводными двигателями:

     void M_drive(signed char l_vector, char l_speed, signed char r_vector, char r_speed);


*_vector – направление вращение двигателя: 1-вперед, 0-стоп, -1-назад
*_speed – скорость вращения, число от 0 до 10

util/timer.c
Внутри две функции:

     void Timer_ControlTimer(void); //служба таймеров


Функция управления временными задержками. Вызывается только по прерыванию с таймера-счетчика2, каждую 1/1000сек.

     void Timer_Task(int *Time);	//установка задач в очередь таймеров


Единственным параметром передается указатель на переменную, от которой будет отсчитываться время. Переменная должна быть заранее инициализирована некоторым, отличным от нуля значением. Как только значение переменной станет равно нулю указатель на нее будет удален из очереди таймеров. Длину очереди таймеров можно задать с помощью макроса SIZE_ARRAY_HOURS. Обратите внимание что функция Timer_Task не является аналогом функции _delay(), так-как отдает управление сразу же, проверять дотикал ли таймер необходимо вручную. Например, вот так выглядит организация задержек в функции управления индикатором:

     void led()     	{     
	if(led_time!=0)		           
    //если время не пришло     		
{     		
return;     
		}     		  
   	if(Mode>0)			   
    //если уборка     	
	{     	
	if(PORTC & (1<<5))     	
		{     			
PORTC &= ~(1<<5);     		
	     			led_time=300;	  
     //тушим на 0.3 сек      		
	Timer_Task(&led_time);     		
	}     		else     			{     			PORTC |= (1<<5);     			     			led_time=200;	       //включаем на 0.2 сек     			Timer_Task(&led_time);     			}     		}     	else			               //если режим ожидания     		{     		if(PORTC & (1<<5))     			{     			PORTC &= ~(1<<5);     			     			led_time=1000;     			Timer_Task(&led_time);	//тушим на 2.5 сек      			}     		else     			{     			PORTC |= (1<<5);     			     			led_time=1000;     			Timer_Task(&led_time);	//включаем на 1 сек     			}     		}     	}



Action.c
Функциональная часть кода разбита на модули, для каждого физического или программного устройства пишется свой модуль. Физические устройства:
-Привод
-Кнопка управления
-Индикатор
-Пылесос

Программное устройство:
-Управление циклом уборки.

Модули выполняют разную работу в зависимости от текущего режима. Программа внутри них организована по типу конечного автомата, с помощью конструкции switch – case. Модули могут взаимодействовать с помощью глобальных переменных или изменяя счетчики конечного автомата друг друга.

Вызов функций модулей производится из главного цикла программы:

     int main(void)     
	{     
	Periphery();			
//настройка периферии           
	//главный цикл программы      
	while(1)     		
{      	
	button();      
   //обработчик кнопки mode     	
	cycle();        
  //управление циклом уборки     	
	drive();        
  //привод     		
cleaner();       
 //уборочный узел     	
	bumper();       
  //бампер     	
led();          
  //индикатор режима работы     
		}     
	}



Не буду описывать работу каждого модуля, в коде достаточно комментариев, кто захочет тот разберется.

В Action.c так же есть функция util_mode(char _mode), она используется для смены режима работы. Помимо присваивания нового значения переменной Mode, в определении функции прописано обнуление счетчиков конечных автоматов и переменных-таймеров.

     void util_mode(char _mode)     
	{     
	if(_mode>=AMOUNT_MODE)	
//если такого режима не существует     
 		{     		
Mode=0;     	
	}     	
else     		
{     	
	Mode=_mode;   
  		}     	     	
//сброс переменных и счетчиков    
 	drive_counter=0;     	
bumper_counter=0;     	 

    	drive_time=0;     
	led_time=0;     	
}



Исходники https://github.com/IvanFeofanov/robot_cleaner/
Проект собирается с помощью компилятора avrGCC, Makefile присутствует.

Заключение:
Робот в собранном виде:
Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос
Задачи для робота. Обратная связь .Датчики. Путешествие по комнате в робототехнике, робот пылесос

Испытания:


Как вы можете видеть, робот вполне хорошо справляется со своей работой. Способ организации программы позволяет с легкостью расширить функционал устройства, добавив недостающие модули: контроль заряда аккумулятора и поиск зарядной станции.В остальном робот уже вполне подходит для каждодневной уборки комнат.

Вау!! 😲 Ты еще не читал? Это зря!

Датчики , сенсоры

А как ты думаешь, при улучшении задачи для робота, будет лучше нам? Надеюсь, что теперь ты понял что такое задачи для робота, обратная связь, датчики для роботов, путешествие по комнате в робототехнике и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Робототехника

создано: 2014-08-18
обновлено: 2021-05-01
132465



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Робототехника

Термины: Робототехника