шесть、Воляприводи Датчик подключен робот-контроллер
В главе существования начальство мы обсуждали, что необходимо для Строитьроботизаппаратное компоненты обеспечения из подбора. Важные компоненты роботиздаприводидатчика. Привод для робота обеспечивает мобильность, а датчик предоставляет информацию об окружающей среде. В этой главе мы, Воля, сосредоточимся на нашей Волясуществовать Долженробот использоватьиз различных типов приводных датчиков, а также на том, как Воля их и Tiva C LaunchPad выполнить интерфейс,Tiva C LaunchPad даTexas Instruments (TI)из 32 Кусочек ARM плата микроконтроллера, существует 80MHz。 Начинается наша дискуссия о воляот приводе. Сначала мы обсудим энкодер привода мотор-редуктора постоянного тока. Мотор-редукторы постоянного тока работают на постоянном токе и понижаются с помощью шестерен, чтобы уменьшить скорость вала и увеличить конечный крутящий момент вала. Этот тип двигателя очень экономичен и может удовлетворить наши требования. нас Волясуществоватьроботпрототипсерединаспользовать Должен Мотор。
существуют Часть этой главы из Нет., мы Воля обсуждаем робот Система приводаиздизайн。 насизроботизСистема приводада Дифференциальная скоростьводить машинуустройство,Зависит от Два мотор-редуктора постоянного тока с энкодерами.Один привод двигателя. машинуустройствосостав. Драйвер двигателя состоит из Tiva C LaunchPad контроль. Мы с Воля изучаем электродвигатели привод машинуустройствои Интерфейс квадратурного энкодера с панелью запуска Tiva C。 После этого мы Воля представим некоторые из новейших приводов, эти приводы можно использовать с существующими мотор-редукторами постоянного тока с энкодерами. Если желаемый робот требует большей точности нагрузки и точности, нам придется переключить привод этого класса. Наконец, мы, Воля, представляем некоторые распространенные способы использования. дляроботиздругойдатчик.
В этой главе мы представляем:
ты Волянуждатьсясуществовать Ubuntu 16.04 LTS серединанастраиватьнуждатьсяизроботаппаратное обеспечениекомпонентыи Energia IDE。
существоватьначальствоодинглавасередина,Мы выбрали двигатель постоянного тока.,Долженэлектродвигатели Pololu из энкодера и встроенной платы Texas Instruments (TI), называемой для Tiva C LaunchPad。 Нам нужны компоненты ниже Воля мотори LaunchPad соединять:
На рисунке ниже показаноиспользовать Pololu H мостиздва Моторвнешняя схема:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-GdoGFEBb-1681873784538)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00077.jpeg)]
Схема интерфейса двигателя
Быть связанным с Launchpad Для взаимодействия у нас есть плата преобразователя уровней между этими двумя двигателями. Моторводить машинаиз рабочего напряжения для 5В, в то время как Launchpad из Рабочее напряжениедля 3,3В, поэтому нам нужно подключить преобразователь уровней, как показано на рисунке ниже:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-dTRDxKP2-1681873784539)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00078.gif)]
Схема преобразователя уровня
Два мотор-редуктора постоянного тока соответственно соединяютприезжать привод двигателя машинуустройствоиз OUT1A,OUT1B и OUT2A,OUT2B。 VIN(+) и GND(-) да двигатель от напряжения питания. Эти двигатели постоянного тока могут существовать 12V работает от электропитания, поэтому предлагаем 12V как входное напряжение. Моторводить машинуустройство Воляподдерживать 5.5V к 16V из Входное напряжение.
Моторводить машинуустройствоизсигнал управления/входитьприколотьсуществоватьводить Левая сторона устройства машины. Нет.одинприколотьда 1DIAG/EN; существоватьбольшинствослучай,нас Воля Долженприколотьотключиться。 Этиприколотьсуществоватьводить Само борт начальства машины вытянут наружу. Долженприколотьиз В основном используетсяспособдадавать возможностьили Запрещать H чип моста. этовозвращатьсяиспользуется длямонитор H мост IC из Винасостояние. приколоть 1INA и 1INB Используется для управления направлением вращения двигателя. 1PWM приколоть будет переключение мотора Воля для ON и OFF состояние. насиспользовать PWM приколотьвыполнитьскоростьконтроль. CS приколоть Волязондированиевыходтекущий。 на ампервыходтекущий Волявыход 0.13V。 VIN и GND Приколоть предлагает то же входное напряжение, что и наши двигатели для двигателей. нас Нетсуществоватьздесьиспользовать Этиприколоть。 +5V(IN) и GND приколотьда Моторводить машинуустройство IC из Электропитание. Моторводить Устройство машины и блок питания двигателя разные.
В следующей таблице показаны входные ивыходные комбинации таблицы:
INA | INB | DIAGA/ENA | DIAGB/ENB | OUTA | выход | CS | режим работы |
---|---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | H | H | Высокий Имп | приезжать VCC из автоматического выключателя |
1 | 0 | 1 | 1 | H | L | Isense = Iout / K | По часовой стрелке (CW) |
0 | 1 | 1 | 1 | L | H | Isense = Iout / K | Против часовой стрелки (CCW) |
0 | 0 | 1 | 1 | L | L | Высокий Имп | приезжать GND из автоматического выключателя |
ценить DIAG/EN приколотьвсегдадлявысокийуровень,потому чтодля Этиприколотьсуществоватьводить Сам борт машины вытянут снаружи высокий. использовать начальство Указывая комбинацию сигналов, мы можем существующее начальство двигаться в любом направлении роботом и проводить корректировку. PWM сигнал, мы также можем регулировать степень скорости двигателя. Это даиспользовать H мост Цепь управления DC Электродвигатель с базовой логикой.
существовать Воля Моторсоединятьприезжать Launchpad , нам может понадобиться преобразователь уровней. Эта доска для спуска и выходприкол может обеспечить только 3.3V напряжение, в то время как драйвер двигателя требует 5V может быть вызван; Потому что это мы должны Воля 3.3V соединятьприезжать 5V После этого преобразователь логических уровней может начать работу.
Два электродвигателя работают как дифференциальный привод. В следующем разделе обсуждаются дифференциальные приводы и их работа.
Мы проектируемизроботда дифференциала/привода машинуробот。 существовать Дифференциальный колесный роботсередина,Спорт на основа размещена робот существует по обе стороны корпуса из двух отдельных приводов машинуизколесо。 этоможет Для изменения направления изменяется относительная скорость вращения колес, поэтому для этого не требуется дополнительных рулевых движений. для балансового робота, можно добавить т.к. Зависит от поворота колес или роликов. На рисунке ниже показанодифференциалводить Типичное представление машиныустройствоиз:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-H4N7auKq-1681873784540)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00079.gif)]
Дифференциальный колесный робот
Если два двигателя имеют одинаковое направление,норобот Волявпередилиназаддвигаться。 Если один двигатель быстрее другого, робот повернет в сторону более медленного двигателя; в противном случае робот повернет в сторону более медленного двигателя; Итак, чтобы повернуть налево, остановите левый мотор и включите правый мотор. На рисунке ниже показали, как соединять робота из двух моторов. два Мотор Установитьсуществоватьбазадосказ Противоположная сторона,Мы, существующиероботизы, разместили два ролика спереди и сзади для баланса:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-sVrR3Uel-1681873784540)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00080.gif)]
база роботов вид сверху
Далее мы можем спрограммировать контроллер двигателя на основе реальной таблицы цен. программированиеиспользоватьсказатьдля Energia из IDE Заканчивать. настолькосуществоватьиспользовать C++ языковая пара Launchpad Программирование с Arduino развиватьтарелкаОченьсходство.
Мы можем найти ссылку для скачивания последней версии. Energia。
нас Воляосновнойсуществовать 64 Кусочек Ubuntu 16.04 LTS Процесс установки описан выше. Мы Воляиспользоватьиз Energia версия 0101E0018:
71-ti-permissions.rules
документ71-ti-permissions.rules
иот Текущее выполнение путиниже Заказ,Чтобы получить разрешение от правила Воля документировать приезжать в системную папку документов:$ sudo mv 71-ti-permissions.rules /etc/udev/rules.d/
$ sudo service udev restart
dmesg
Заказкпроверятьсмотреть Linux Журнал ядра. Если уже создан,Сообщение заканчивается устройством последовательного порта.,Как показано на скриншоте:[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-yVf9AAdT-1681873784540)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00081.jpeg)]
база роботов вид сверху
$./energia
На следующем снимке экрана показана Energia IDE:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-bNppjica-1681873784541)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00082.jpeg)]
Energia IDE
сейчассуществовать,насдолженсуществовать IDE доска выбора tm4c123 составить специфичный для Должен платы и зкод. дляэтот,насдолжен Установитьэтотдосказ Сумка. Вы можете выбрать опцию «Инструменты | доска | доска Трубкапричинаустройство”Установить Сумка.
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-V5GgVHJ2-1681873784541)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00083.jpeg)]
Энергия доска Менеджер
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-7j8StWCe-1681873784541)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00084.jpeg)]
Выбор энергетической панели
/dev/ttyACM0
”выбрать последовательный порт,Как показано на скриншоте:[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-yPtQKVHb-1681873784542)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00085.jpeg)]
Выбор последовательного порта Energia
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-aRdc7OgB-1681873784542)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00086.jpeg)]
Выбор последовательного порта Energia
доступниже Ссылка насуществовать Linux,macOS X и Windows Установить на Energia:
Energia серединазнижекод Можетиспользуется длятестдифференциалводить машина Конфигурация из двух электродвигателей. этот код перемещает робота вперед 5 секунд, двигаться назад 5 секунды. Затем Воляробот движется влево 5 секунды, двигайся вправо 5 секунды. После каждого хода робот Воля останавливается. 1 секунды.
существоватькодизначало,Мы для двух моторов от INA,INB и PWM определяют приколоть,Как показано ниже:
///Left Motor Pins
#define INA_1 12
#define INB_1 13
#define PWM_1 PC_6
///Right Motor Pins
#define INA_2 5
#define INB_2 6
#define PWM_2 PC_5
связанныйзапускатьдосказприколоть,пожалуйста Видетьэта страница。
нижекодпоказывать заставил робота двигаться вперед,назад,левыйи Квернодвигатьсяизпятьфункция. Нет. Пять функций остановки робота. Мы ВоляиспользоватьdigitalWrite()
функция Волячислоценитьписатьприколоть。 digitalWrite()
из Нет.одинпараметрдаприколоть Число,Нет.двапараметрдахотетьписатьприколотьизценить。 Долженценить МожетдаHIGH
илиLOW
。 Мы ВоляиспользоватьanalogWrite()
функция Воля PWM ценитьписатьприколоть。 Он должен работать в Net.oneparameterparameter, Net.Эркипараметр PWM ценить。 этотценитьизобъемда 0-255。 существоватьвысокий PWM Далее привод двигателя Машина Воля имеет быстрое переключение и более высокийизбыстрый уровень. существовать Низкий PWM Далее привод двигателя машина внутренняя из переключателя Воля тормозит, потому что этот мотор тоже Воля тормозит. В настоящее время мы полным ходом работаем над существованием:
void move_forward()
{
//Setting CW rotation to and Left Motor and CCW to Right Motor
//Left Motor
digitalWrite(INA_1,HIGH);
digitalWrite(INB_1,LOW);
analogWrite(PWM_1,255);
//Right Motor
digitalWrite(INA_2,LOW);
digitalWrite(INB_2,HIGH);
analogWrite(PWM_2,255);
}
///////////////////////////////////////////////////////
void move_left()
{
//Left Motor
digitalWrite(INA_1,HIGH);
digitalWrite(INB_1,HIGH);
analogWrite(PWM_1,0);
//Right Motor
digitalWrite(INA_2,LOW);
digitalWrite(INB_2,HIGH);
analogWrite(PWM_2,255);
}
//////////////////////////////////////////////////////
void move_right()
{
//Left Motor
digitalWrite(INA_1,HIGH);
digitalWrite(INB_1,LOW);
analogWrite(PWM_1,255);
//Right Motor
digitalWrite(INA_2,HIGH);
digitalWrite(INB_2,HIGH);
analogWrite(PWM_2,0);
}
////////////////////////////////////////////////////////
void stop()
{
//Left Motor
digitalWrite(INA_1,HIGH);
digitalWrite(INB_1,HIGH);
analogWrite(PWM_1,0);
//Right Motor
digitalWrite(INA_2,HIGH);
digitalWrite(INB_2,HIGH);
analogWrite(PWM_2,0);
}
/////////////////////////////////////////////////
void move_backward()
{
//Left Motor
digitalWrite(INA_1,LOW);
digitalWrite(INB_1,HIGH);
analogWrite(PWM_1,255);
//Right Motor
digitalWrite(INA_2,HIGH);
digitalWrite(INB_2,LOW);
analogWrite(PWM_2,255);
}
наспервый Волядва МоторизINA
иINB
приколотьнастраиватьдляOUTPUT
модель,так что Мы можем, ВоляHIGH
илиLOW
ценитьписать Этиприколоть。 pinMode()
функцияиспользуется длянастраивать I/O приколотьизмодель。 pinMode()
из Нет.одинпараметрдаприколоть Число,Нет.двапараметрдамодель。 Мы можем воляприколотьнастройкидля типа или выхода. хотеть Воляприколотьнастраиватьдлявыход,пожалуйста ДаватьOUTPUT
независимая переменнаядля Нет.дваспеременная。 хотеть Воля Чтонастраиватьдлявходить,пожалуйста ДаватьINPUT
делатьдля Нет.двапараметр,Как показано в нижекоде. Незачем Воля PWM приколотьнастраиватьдлявыход,потому чтодляanalogWrite()
НезачемнастраиватьpinMode()
Сразуписать PWM Сигнал:
void setup()
{
//Setting Left Motor pin as OUTPUT
pinMode(INA_1,OUTPUT);
pinMode(INB_1,OUTPUT);
pinMode(PWM_1,OUTPUT);
//Setting Right Motor pin as OUTPUT
pinMode(INA_2,OUTPUT);
pinMode(INB_2,OUTPUT);
pinMode(PWM_2,OUTPUT);
}
сегмент нижекода дакодиз основного цикла. это Волясуществовать5
Позвоните каждому в течение нескольких секундфункция,примернравитьсяmove forward()
,move_backward()
,move_left()
иmove_right(),
。 позвони каждомуфункцияназад,роботвстречасуществовать1
Остановитесь за несколько секунд:
void loop()
{
//Move forward for 5 sec
move_forward();
delay(5000);
//Stop for 1 sec
stop();
delay(1000);
//Move backward for 5 sec
move_backward();
delay(5000);
//Stop for 1 sec
stop();
delay(1000);
//Move left for 5 sec
move_left();
delay(5000);
//Stop for 1 sec
stop();
delay(1000);
//Move right for 5 sec
move_right();
delay(5000);
//Stop for 1 sec
stop();
delay(1000);
}
машинаколесокодердасоединятьприезжатьэлектродвигательиздатчик,используется для сенсорного колеса по числу оборотов. нравитьсяфруктынас Знатьизменятьчисло,Сразу Можетвычислить出машинаколесоизскоростьи Кусочексдвиг。
для Долженробот,насвыбирать Понятносвстроенныйкодериз Мотор。 Должен энкодер квадратурного типа, может одновременно определять направление и скорость двигателя. В энкодерах используются различные типы датчиков. (напр. оптический датчики датчик Холла), чтобы обнаружить эти параметры. Должен энкодер использовать эффект Холла для определения вращения. Ортогональныйкодер Имеет дваряд,Прямо сейчасКанал А иКанал Б。 Каждый ряд Воля генерирует 90 степень фазового сдвига цифрового сигнала. На рисунке ниже показанотипичный Ортогональныйкодеризформа волны:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-bNNyQ3SV-1681873784542)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00087.gif)]
Осциллограммы квадратурного энкодера
Если двигатель вращается по часовой стрелке,ноКанал А ВоляведущийКанал Б;нравитьсяфруктыэлектродвигательобеспечить регрессчас Иголкавращать,ноКанал Б ВоляведущийКанал А。 Показания Должена полезны для определения направления вращения двигателя. Внизодин节обсуждатьнравитьсячто Волякодервыход Конвертировать дляоно работаетиз Измерениеценить,примернравиться Кусочексдвигискоростьстепень.
кодерданныедадвухфазный импульс,Взаимно Кусочек Взаимно Разница 90 степень. использоватьэтотданные,Мы можем найти жильевращатьнаправлениекиэлектродвигательвращать Понятносколько кругов,от И ищуприезжать Понятно Кусочексдвигискоростьстепень.
обозначениекодерразрешениеизнекоторые терминыдаимпульсов на оборот(PPR)илиза изменение строки(LPR)исчитать за оборот(CPR)。 PPR Указывает, сколько электрических импульсов подается в Воля во время одного окончательного вращения вала двигателя (0 приезжать 1 переход). Некоторые производители используют названия CPR вместо ППР, потому что каждый импульс Воля Включать имеет два фронта (начальство нарастания и спада), а депозит существует имеет два фронта. 90 градус фазового сдвига из ряда импульсов (A и B)。 Общее количество ребер Воляда PPR Сосчитайте до четырёх раз. большинство квадратурных приемников используют так называемые из 4X Декодирование для подсчета от кодера A и B рядиз всех краев, оригинально PPR ценить, сравнивать, производить 4X разрешение.
существуют наши из электродвигателя Pololu Укажите вал двигателя из CPR для 64, что соответствует выходному валу коробки передач из 8,400 CPR。 Фактическое начальство, мы Воляот коробки передач начальство выходного вала получает, когда двигатель на конечном валу совершает один оборот. 8400 имеет значение. На следующем рисунке показано, как рассчитываются значения импульсов энкодера:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Предложение: я хотел бы сохранить изображения прямо ниже (img-wD7IkIUB-1681873784542) (https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py/img /00088.гиф)]
со счетомценитьизкодерпульс
существоватьэтоткодеррегулирование范середина,Давать出Понятносчитать за оборот。 itда Зависит от энкодера, расчет перехода края из. Один импульс энкодера соответствует четырем значение. Потому что для существования мы из двигателей получаем 8,400 считает, ППР Волядля8,400 / 4 = 2,100
。 По диаграмме начализма мы можем подсчитать количество отсчетов за один оборот, но нам также необходимо почувствовать направление движения. Это да, потому что независимо от того, движется ли робот вперед или назад, мы получаем, что количество посещений всегда одинаково; Следовательно, направление считывания важно для декодирования сигнала. На изображении ниже показано, как декодировать импульсы энкодера:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-VoAx2eyJ-1681873784543)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00089.gif)]
Определение направления двигателя по импульсам энкодера
Если мы посмотрим на образец кода, мы сможем понять, что он следует 2 Кусочексерыйкод。 Код Греяда цифр из кодировки, потому что эти соседние цифры представляют собой разницу цифр Кусочка. 1。Код Греяв целомсуществоватьвращатькодерсерединаспользуется длявысокий эффективная кодировка.
Мы можем преобразование прохождениясостояния для прогнозирования направления вращения двигателя. Таблица перехода состояний выглядит следующим образом:
состояние | Преобразование по часовой стрелке | Преобразование против часовой стрелки |
---|---|---|
0,0 | 0,1к0,0 | 1,0к0,0 |
1,0 | 0,0к1,0 | 1,1к1,0 |
1,1 | 1,0к1,1 | 0,1к1,1 |
0,1 | 1,1к0,1 | 0,0к0,1 |
Если существованиесостояние представляет это на диаграмме преобразования, то Воля удобнее:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-bwBx0dMJ-1681873784543)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00090.gif)]
кодерсостояние Конвертироватькартина
получатьприезжатьэтот Код После Греи мы можем использовать микроконтроллер для обработки импульсов. Двигатель должен быть остановлен микроконтроллером. Потому что, когда ряд имеет переход по краю, он генерирует прерывание или курок, и если До лженприколитьначальство имеет какое-либо прерывание приезда, затем выполняется программа микроконтроллера «Волясуществовать» обслуживания отключили просто из функции. Он может читать как приколотьиз текущего состояния. На основании приколотьиз текущего состояния и предыдущего изменения мы можем определить направление вращения и решить, хочет ли да увеличить или уменьшить счет. Дакодериметь дело сизбаза Эта логика。
После получения счета,Мы можем использоватьУгол = (колоценить/CPR) * 360
Приходитьвычислитьвращатьрогстепень(в градусахдляодин Кусочек)。 существоватьздесь, если использовать 8400 заменять CPR,нождатьизменение стилядляугол = 0,04285 * countценить
; То есть вращать 1 степень, необходимо принять 24 считать или должен произвести 6 Кодированный изряд импульса.
На рисунке ниже показан энкодер двигателя с Tiva C LaunchPad внешняя схема:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-NQT1Jg0e-1681873784543)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00091.gif)]
Волякодерсоединятьприезжатьзапускатьтарелка
существоватьначальствокартинасередина,Вы можете найти электродвигатель приколоть CH A и CH B., они имеют энкодер двигателя и выход. Этиприколотьсоединятьприезжать Tiva C Launchpad из PB2 и PB7 приколоть。 ENC VCC и ENC GND энкодер приколотьда из мощности приколоть, потому что у нас есть предложение для этих приколоть +5V и GND。 следующая группаприколотьиспользуется для источника питания электродвигателя. MOTOR VCC и MOTOR GND отметка для соответственно OUTA и OUTB, они идут прямо на привод двигателя Устройство машины для контроля степени скорости двигателя.
кодервыходпульсизмаксимум Напряжениеуровеньсуществовать 0V к 5V между. В этом случае мы можем напрямую кодер Воля и Launchpad Подключен, потому что для него можно получать высокие 5V из ввода, или мы можем использовать 3.3V к 5V из преобразователя уровней, как у нас раньше, используется для Моторводить То же самое, что и интерфейс машины.
существуют в следующей части,нас Волясуществовать Energia Начальное значение содержит код для проверки сигналов квадратурного энкодера. наснуждаться检проверятьданетоткодерполучатьпридется Понятнотолько确изсчитать。
Долженкод Воляпроходитьсериалпорт Распечататьо Моторкодеризсчитать。 Эти два кодера используют 2X Схема расшифровки, благодаря этому мы Воля получили 4,200 CPR。 существуюткодиз Нет. В одной части мы определили два кодировщика и объявили два кодировщика и два рядвыходизприколить. кодерпеременнаясуществоватьпеременнаяданныеперед вводомиспользоватьvolatile
Ключевые слова。 volatile
из В основном используетсяспособдасvolatile
Ключевые словаизпеременная Воляхранилищесуществовать RAM в памяти, а обычная переменная Кусочек находится в CPU в реестре. Кодировщик изценить Воля меняется очень быстро, поскольку этаиспользовать обычную переменную Воля неточно. для Понятнополучатьпридется Точность,нас Воляvolatile
используется длякодерпеременная,Как показано ниже:
//Encoder pins definition
// Left encoder
#define Left_Encoder_PinA 31
#define Left_Encoder_PinB 32
volatile long Left_Encoder_Ticks = 0;
//Variable to read current state of left encoder pin
volatile bool LeftEncoderBSet;
//Right Encoder
#define Right_Encoder_PinA 33
#define Right_Encoder_PinB 34
volatile long Right_Encoder_Ticks = 0;
//Variable to read current state of right encoder pin
volatile bool RightEncoderBSet;
нижекодчастьдаsetup()
функцияизопределение. существовать Energia середина,setup()
даодинвстроенныйфункция,используется для инициализации и однократного выполнения переменных функции. существоватьsetup()
внутренний,наск115200
из Серия инициализации скорости передачи данныхданныекоммуникация,ивызовпользовательопределениеизSetupEncoders()
функцияинициализироватькодеризприколоть。 сериалданныекоммуникацияосновнойиспользуется дляпроходитьсериал Терминал检проверятькодерсчитать:
void setup()
{
//Init Serial port with 115200 buad rate
Serial.begin(115200);
SetupEncoders();
}
SetupEncoders()
изопределениесуществоватьподизкодсередина Давать出。 Для приема импульсов энкодера нам понадобятся два прикола в плате как для входов. Волякодерприколоть Конфигурациядля Launchpad Подключите вход и активируйте его начальное сопротивление. attachInterrupt ()
функциявстреча Волякодерприколоть№1Конфигурациядлясерединаперерыв。 attachInterrupt ()
функцияимеет трипараметр。 Нет.одинпараметрдаприколоть Число,Нет.двапараметрдапроцедура обслуживания прерываний(ISR),Нет.Три параметра условия прерывания,Прямо сейчасдолженкурок ISR из Состояние прерывания. существоватьэтоткодсередина,нас ВоляокодерприколотьизPinA
Конфигурациядлясерединаперерыв; Когда пульс начальства поднимается, его зовет Воля ISR:
void SetupEncoders()
{
// Quadrature encoders
// Left encoder
pinMode(Left_Encoder_PinA, INPUT_PULLUP);
// sets pin A as input
pinMode(Left_Encoder_PinB, INPUT_PULLUP);
// sets pin B as input
attachInterrupt(Left_Encoder_PinA, do_Left_Encoder, RISING);
// Right encoder
pinMode(Right_Encoder_PinA, INPUT_PULLUP);
// sets pin A as input
pinMode(Right_Encoder_PinB, INPUT_PULLUP);
// sets pin B as input
attachInterrupt(Right_Encoder_PinA, do_Right_Encoder, RISING);
}
нижекодда Energia серединавстроенныйизloop()
функция. loop()
функциядаодинбесконечный цикл,нассуществовать Чтосерединапомещатьвходить Понятнохозяинкод。 существоватьэтоткодсередина,насвызовUpdate_Encoders()
функцияпроходитьсериал Терминалнепрерывный Распечататькодерценить:
void loop()
{
Update_Encoders();
}
нижекоддаUpdate_Encoders()
функцияиз Функцияопределение. этосуществоватьодин ХОРОШОсерединакстартовый персонажe
напечатайте двакодерценить,ии Этиценить Зависит от табуляции пространство разделено. Serial.print()
функциядаодинвстроенныйфункция,Он печатает Воля как параметр, указывающий символ/строку:
void Update_Encoders()
{
Serial.print("e");
Serial.print("t");
Serial.print(Left_Encoder_Ticks);
Serial.print("t");
Serial.print(Right_Encoder_Ticks);
Serial.print("n");
}
нижекоддалевый и правый энкодериз ISR определение. Воля звонит ISR。 текущийсерединаперерывприколотьдакаждыйкодеризPinA
。 получатьприезжатьсерединаперерывназад,нас Можетгипотезаначальство ПодниматьизPinA
Иметь относительновысокийизценитьсостояние,потому чтоэтот Незачемчитать Долженприколоть。 прочитать двакодеризPinB
и ВоляприколотьсостояниехранилищеприезжатьLeftEncoderBSet
илиRightEncoderBSet
。 ВолятекущийсостояниеиPinB
изранеесостояниесравнивать,И может определить направление в соответствии с таблицей преобразования состояний.,И определим, должно ли число да увеличиваться или уменьшаться:
void do_Left_Encoder()
{
LeftEncoderBSet = digitalRead(Left_Encoder_PinB);
// read the input pin
Left_Encoder_Ticks -= LeftEncoderBSet ? -1 : +1;
}
void do_Right_Encoder()
{
RightEncoderBSet = digitalRead(Right_Encoder_PinB);
// read the input pin
Right_Encoder_Ticks += RightEncoderBSet ? -1 : +1;
}
начальствонагрузка Травакартинаи яспользовать Energia Посмотреть в последовательном мониторе выход. навигацияприезжатьинструмент| Серийный монитор. Переместите оба мотора вручную, и вы увидите, как изменится счетчик приезжающих. существуют настройки скорости передачи данных в последовательном мониторе, Должен скорости передачи данных и код инициализации из скорости передачи данных тот же; существоватьэтотдобрыйслучай,этода115200
。 выход Воля Как показано ниже:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-82qBJrfd-1681873784543)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00092.gif)]
Волякодерсоединятьприезжатьзапускатьтарелка
Если вы хотите модернизировать Воляробот, приезжайтевысокая точность и полезная нагрузка,Необходимо учитывать качество использованиявысокого изпривода.,примернравиться Dynamixel。 Dynamixel Сервопривод да умный привод со встроенным PID Управление и мониторинг параметров сервопривода и энкодера (например, крутящего момента, настройки Кусочка, ожидания) из функций. существоватьэтотроботсередина,нас Нетиспользовать Dynamixel。
Dynamixel Является корейским производителем ROBOTIS Равиватиз зихтииспользуется дляроботизсетьпривод。 этоиметь Универсальныйиз Расширять Функция,Функция обратной связи по мощности,Кусочекнабор,скорость,внутренняя температура,Ожидание входного напряжения,Потому что это была компания,Университетское и любительское широкое использование.
Dynamixel Серверы могут быть подключены последовательно; Это устройство последовательно подключается, применяетсясоединятьиз устройства Воля устройства подключается Прижать другое устройство из метода и можно с одного контроллера управлять всеми подключенными сервоприводными устройствами. Dynamixel Сервер пройден RS485 или TTL общаться. доступный Dynamixel Сервоприводустройствосписоксуществоватьэта страницасередина Давать出。
Dynamixel Внешний интерфейс очень простой. Dynamixel имя для USB2Dyanmixel из контроллера, Должен контроллер будет Воля USB Конвертировать для Dynamixel совместимыйиз TTL/RS485 уровень. На рисунке ниже показано Dynamixel внешний интерфейс:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-ste2FJpA-1681873784544)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00093.jpeg)]
Dynamixel привод с PC изинтерфейс
ROBOTIS предоставил Dynamixel SDK,используется доступ к автомобильному реестру; Мы умеем Воляценить читать и писать Dynamixel отправлятьжитьустройство,и искать данные,Например, настройка Кусочек,температура,Ожидание напряжения.
настраивать USB2Dynamixel и Dynamixel SDK изиллюстрироватьсуществоватьэта страницасередина Давать出。
Dynamixel Можетиспользовать Python библиотека для программирования. используется дляиметь дело с Dynamixel Сервоприводустройствоиз Python Одна из библиотек находится Pydynamixel。 Должен Сумка Можетиспользуется для Windows и Linux。 Pydynamixel Воляподдерживать RX,MX и EX серверы серии.
нас Можетотэта страницаВнизнагрузка Pydynamixel Python Сумка.
Внизнагрузка Сумкаи Воля Что Разархивироватьприезжатьhome
документпапка。 Открыть терминалили DOS подсказку, а затем выполните следующую команду:
sudo python setup.py install
После установки Сумки мы можем попробовать следующее: Python Пример,Должен Пример Воля Обнаружениесоединятьприезжать USB2Dynamixel из Сервопривода и записывает некоторые настройки Следовать машины Кусочек в реализацию Должен Сервопривода. этот Примерподходящийиспользуется для RX и MX сервер:
#!/usr/bin/env python
нижекод Воля импортировать этот пример требуется из необходимости Python модуль. Это также включает в себя Dynamixel Python Модуль:
import os
import dynamixel
import time
import random
нижекод определен Dynamixel Параметр связи, необходимый из основного параметра. nServos
переменнаяповерхность Показыватьсоединятьприезжатьавтобусиз Dynamixel Сервоприводустройствоизколичество。 portName
переменнаяинструктировать Dynamixel Сервоприводустройствосоединятьприезжатьиз USB2Dynamixel из Последовательный порт. baudRate
переменнаяда USB2Dynamixel и Dynamixel изкоммуникацияскорость:
# The number of Dynamixels on our bus.
nServos = 1
# Set your serial port accordingly.
if os.name == "posix":
portName = "/dev/ttyUSB0"
else:
portName = "COM6"
# Default baud rate of the USB2Dynamixel device.
baudRate = 1000000
нижекоддасоединятьприезжать Dynamixel Сервоприводустройствоиз Dynamixel Python функция. Если соединить, то программа Воля распечатывает его и сканирует шину связи на наличие ID 1
приезжать255
начинатьиз Сервоприводчисло。 Сервопривод ID дакаждый логотип сервопривода. нас ВоляnServos
настраиватьдля1
,Прекратите сканирование, потому что это Волясуществовать начальное устройство шины получает сервопривод:
# Connect to the serial port
print "Connecting to serial port", portName, '...',
serial = dynamixel.serial_stream.SerialStream( port=portName, baudrate=baudRate, timeout=1)
print "Connected!"
net = dynamixel.dynamixel_network.DynamixelNetwork( serial )
net.scan( 1, nServos )
нижекодвстреча Воля Dynamixel ID и Сервоприводвложение объектаприезжатьmyActutors
списоксередина. Мы можем использовать Сервопривод ID Объект iServodrive Воля Сервоприводценить записывается в каждый сервопривод. Мы можем использоватьmyActutors
списокруководить进один步иметь дело с:
# A list to hold the dynamixels
myActuators = list()
print myActuators
This will create a list for storing dynamixel actuators details.
print "Scanning for Dynamixels...",
for dyn in net.get_dynamixels():
print dyn.id,
myActuators.append(net[dyn.id])
print "...Done"
нижекод Воля Кавтобусначальстводоступныйкаждый Dynamixel Исполнитель написать 450 к 600 из Следоватьмашина Кусочекнабор。 Dynamixel серединаз Кусочек объёма 0 приезжать 1,023。 этот Волянастраивать Сервоприводпараметр,примернравитьсяspeed
,torque,torque_limt
,max_torque
ждать:
# Set the default speed and torque
for actuator in myActuators:
actuator.moving_speed = 50
actuator.synchronized = True
actuator.torque_enable = True
actuator.torque_limit = 800
actuator.max_torque = 800
нижекод Воля печатает текущий приводиз текущей позиции Кусочка:
# Move the servos randomly and print out their current positions
while True:
for actuator in myActuators:
actuator.goal_position = random.randrange(450, 600)
net.synchronize()
нижекод Воляотприводпрочитать вседанные:
for actuator in myActuators:
actuator.read_all()
time.sleep(0.01)
for actuator in myActuators:
print actuator.cache[dynamixel.defs.REGISTER['Id']], actuator.cache[dynamixel.defs.REGISTER['CurrentPosition']]
time.sleep(2)
Навигация робота мобильного роботиз одна из важных функций. Идеальная навигация означает, что робот может планировать свой путь от текущего местоположения до места назначения и двигаться без каких-либо препятствий. нассуществовать Долженроботсерединаспользовать Понятно УЗИрасстояниедатчик,к Обнаружениеиспользовать Сенсор Кинект не может обнаружить объекты поблизости. Kinect и Ультразвуковые датчикизкомбинациядля Долженроботпредоставилидеальныйизизбежать столкновенияизметод。
Ультразвуковой датчик расстояния работает следующим образом. Передатчик «Воля» посылает приезжающим из дома ультразвуковые волны, неслышимые для человеческого уха. После отправки ультразвуковой волны он Воляждать ждет возвращения испускаемой волны. Если эха нет, значит, перед роботом нет препятствий. Если датчик-приемник принимает какое-либо эхо от приезжающего, то существование начального приемника генерирует импульс, и можно вычислить общее время, необходимое для распространения волны через приезжающий объект и возвращения к приемнику приезжающего датчика. Если у вас есть время, вы можете рассчитать расстояние до препятствия по формуле:
Скорость звука проходит вне времени/ 2 = Расстояние от объекта из
Существуют Здесь скорость звука можно принять за 340 м/с.
большинство ультразвуковых датчиков дальности для измерения расстояния и объема 2 смк 400 сантиметр. существоватьэтотроботсередина,насиспользовать Понятносказатьдля HC-SR04 издатчикмодуль. Мы, Воля, изучаем, как Воля HC-SR04 и Tiva C LaunchPad Выполните интерфейс, чтобы получить препятствие на расстоянии.
На рисунке ниже показано HC-SR04 Ультразвуковые датчики Tiva C LaunchPad внешняя схема:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-Dtt2qjIS-1681873784544)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00094.gif)]
Воля УЗИДатчик подключен к Launchpad
Ультразвуковые датчикиз Рабочее напряжениедля 5V,Должендатчикизвходить/выходтакжедля 5В, поэтому нам нужно Trig и Echo конвертер уровней приколотьначальствоиз для и 3.3V панель запуска уровня. Как показано на рисунке начальства, в преобразователе уровней существования нам необходимо применить 5V извысокий Напряжениеи 3.3V из низкого напряжения, чтобы с одного уровня переключения приезжать на другой уровень. Trig и Echo приколотьсоединятьсуществоватьуровень Конвертироватьустройствоизвысокий Сторона давления,Сторона низкого напряженияприколотьсоединятьприезжать Launchpad。 Trig приколотьи Echo соединятьприезжатьзапускатьдосказ Нет. 10 и Нет. 9 приколоть。 После подключения датчика мы сможем увидеть, как приезжать пары двух I/O приколотьпрограммировать.
На рисунке ниже Показано время каждого сигнала приколотьначальства. Нам нужно применить 10µs из короткого импульса начать дальность, затем Должен модуль Воля, чтобы 40KHz Частота передает восьмипериодный ультразвуковой импульс и обеспечивает его эхо. Эхо имеет расстояние от объекта, его ширину импульса и соотношение объема. Вы можете использоватьниже Расчет формулы отправлен.курокписьмо Числоиловитьполучать回波письмо Числомеждувременной интервалобъем:
объем = Эхо приколотьвыходизвысокий уровень времени * Скорость(340М/С)/ 2
Лучше всего задерживать каждый курок с задержкой в 60 мс перед каждым куроком, чтобы избежать перекрытия между эхо-сигналами куроки:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-UgDsufoq-1681873784544)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00095.gif)]
Ультразвуковые датчикизвходитьвыходформа волны
нижеиспользуется для Launchpad из Energia кодот Ультразвуковой датчикчитатьценить,И проводить мониторинг последовательного порта ценить.
нижекод определен Launchpad серединаспользуется для обработки ультразвукового эха икурокприколоти зприколоть, также определяет длительность импульса и расстояние (в см для одного кусочка) из переменных:
const int echo = 9, Trig = 10;
long duration, cm;
нижекодчастьдаsetup()
функция. программазапускатьчас Волявызовsetup()
функция. используйте его для инициализации переменных, режима приколоть, запуска использования Библиотекаждать. каждый раззапускатьили Тяжелыйнаборзапускатьтарелканазад,настраиватьфункция Воля Толькобегатьодин раз。 существоватьsetup()
середина,Инициализируем последовательную связь со скоростью 115200 бод.,ипроходитьвызовSetupUltrasonic();function:
настраивать УЗИиметь дело сприколотьизмодель
void setup()
{
//Init Serial port with 115200 baud rate
Serial.begin(115200);
SetupUltrasonic();
}
нижеда Ультразвуковые датчикизнастраиватьфункция; это ВоляTrigger
приколоть КонфигурациядляOUTPUT
,ВоляEcho
приколоть КонфигурациядляINPUT
。 pinMode()
функцияиспользуется для ВоляприколотьнастраиватьдляINPUT
илиOUTPUT
:
void SetupUltrasonic()
{
pinMode(Trig, OUTPUT);
pinMode(echo, INPUT);
}
создаватьиспользуется для Инициализацияинастраиватьисходныйценитьизsetup()
функцияназад,loop()
функция Воляв соответствии с В соответствии с Чтоимясказатьиз含义только确осуществлятьинепрерывный循环,кпозволятьтыизпрограммаруководить Дажеизменятьиответ。 использовать Речь идет об активном управлении запуском платы.
Ниже изкодда его основной цикл. Долженфункциядаодинбесконечный цикл,ивызовUpdate_Ultra_Sonic()
функцияпроходитьсериалпорт Даженовыйи Распечатать УЗИчитатьчисло:
void loop()
{
Update_Ultra_Sonic();
delay(200);
}
нижекоддаUpdate_Ultra_Sonic()
функцияизопределение. этотфункция Воляосуществлятьниже Держатьделать。 первый,это Волякурокприколотьнабор В2
микросекундыизLOW
состояние,иделать10
микросекундыизHIGH
состояние. существовать10
микросекундыназад,это Воляснова ВоляприколотьвосстанавливатьсядляLOW
состояние. Это основано на временной диаграмме. Мы рассмотрели ширину импульса для проживания. 10µs。
курок 10µs Наконец, мы должны начать с Echo приколоть Читать продолжительность. Продолжительность звука от датчика зависит от времени, необходимого для распространения сигнала приезжающего объекта и от объекта для распространения сигнала приезжающего датчика-приемника. Мы можем использоватьpulseIn()
функциячитатьпульспродолжениечасмежду。 придетсяприезжатьпродолжениечасмеждуназад,Мы можем использоватьmicrosecondsToCentimeters()
функция Волячасмежду Конвертировать для см,Как показано нижекодом:
void Update_Ultra_Sonic()
{
digitalWrite(Trig, LOW);
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
duration = pulseIn(echo, HIGH);
// convert the time into a distance
cm = microsecondsToCentimeters(duration);
//Sending through serial port
Serial.print("distance=");
Serial.print("t");
Serial.print(cm);
Serial.print("n");
}
нижекоддаот микросекунд преодолевать сантиметры на расстоянии с помощью функции преобразования. скорость звука для 340м/с, то есть каждый сантиметр 29 микросекунды. Поскольку это, мы делим проводим Воля на общее количество микросекунд. 29/2 Чтобы получить общее расстояние:
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}
начальствонагрузкакодназад,от“инструмент | инструмент”Внизиз“Energia”овощнойодин Открыть Серийный монитор. Последовательный монитор и изменение скорости передачи данных для 115200。Ультразвуковые датчикизценитьпоказыватьсуществоватьнижескриншотсередина:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-hMhqhsBE-1681873784545)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00096.gif)]
Energia сериалмониторустройствосерединаз УЗИрасстояниедатчикизвыход
существовать Этот разделсередина,Мы, Воля, изучаем, как Воля Tiva C LaunchPad и Python подключиться к из PC серединаз Launchpad Получите данные.
PySerial формакусок Можетиспользуется для Воля Launchpad и Python интерфейс。 связанный PySerial из Подробная документация и ее существование Windows,Linux и OS X начальствоиз Установитьпроцесс,пожалуйста Видетьэта страница。
PySerial существовать Ubuntu Доступно в Сумке Менеджере, вы можете существоватьв терминалеиспользоватьниже Заказ Воля Чтолегкий Установитьсуществовать Ubuntu середина:
$ sudo apt-get install python-serial
Установитьpython-serial
Сумканазад,нас Можетписать Python кодксоединять Launchpad。 интерфейссуществовать приведен в следующем разделе.
импорт нижекода Python изserial
модуль иsys
модуль. serial
формакусокиметь дело с Launchpad из последовательного порта и выполнять такие операции, как чтение, запись, ожидание. sys
формакусокпоставлятьобъяснениеустройствоиспользоватьилиподдерживатьизнекоторыйпеременнаякииобъяснятьустройство Сильное взаимодействиеиз Функцияиздоступ。 Всегда доступно:
#!/usr/bin/env python
import serial
import sys
Когда мы, Воля Launchpad в наличии компьютер, устройство существует OS начало Зарегистрируйтесь для виртуального последовательного порта. существовать Ubuntu середина,оборудованиеимясказатьдобрыйпохожий В/dev/ttyACMx
。 здесь,x
Можетдачисло; Если имеется только одно устройство, это возможно для 0。Быть связанным с Launchpad В интерактивном режиме нам нужно только обработать этот файл устройства.
нижекод Воляпытатьсяк115200
изскорость передачи данных включена Launchpad изсериалпорт/dev/ttyACM0
。 нравитьсяфрукты失败,ВоляпоказыватьUnable to open serial port
:
try:
ser = serial.Serial('/dev/ttyACM0',115200)
except:
print "Unable to open serial port"
нижекод Волячитатьсериалданные,прямойприезжатьсериалзамена персонажей ХОРОШО('n'
)и Воля Что Распечататьсуществовать Терминалначальстводляконец。 нравитьсяфруктынасв соответствии склавиатураначальствоизCtrl + C
комбинацияключкпокидатьпрограмма,это Воляпроходитьвызовsys.exit(0)
покидать:
while True:
try:
line = ser.readline()
print line
except:
print "Unable to read from device"
sys.exit(0)
держатьдокументназад,использоватьниже Заказ Волядокументиз Разрешения Дажеизменятьдля Можетосуществлятьдокумент:
$ sudo chmod +X script_name
$ ./ script_name
Скриптизвыход Воля Как показано ниже:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-4CU6YlaG-1681873784545)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00097.gif)]
Energia сериалмониторустройствосерединаз УЗИрасстояниедатчикизвыход
Инфракрасный датчик — еще один способ обнаружения препятствий и определения расстояния с помощью робота. Принцип действия инфракрасного датчика расстояния Когда основа сталкивается с препятствием, поверхность отражает инфракрасный свет. Инфракрасный приемник улавливает отраженный свет и измеряет напряжение в зависимости от количества полученного света.
острый GP2D12 да Один из самых популярных ИК-датчиков объёма. Ссылки на продукты можно найти здесь.。
На рисунке ниже показано Sharp GP2D12 датчик:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-XhyBYvij-1681873784545)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00098.gif)]
датчик излучает луч инфракрасного света,и яспользоватьтрирог Измерение Закон Измерениерасстояние。 GP2D12 из Обнаружениеобъемсуществовать 10 смк 80 сммежду. Луч 6 см шириной, врозь 80 сантиметр. На рисунке ниже Показаны датчики инфракрасного света по передаче и отражению:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-wtbRKI7G-1681873784549)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00099.gif)]
использовать датчик инфракрасного света для обнаружения препятствий
С левой стороны датчика находится инфракрасный передатчик, непрерывно излучающий инфракрасное излучение. При попадании на определенные объекты инфракрасный свет Воля отражается и становится инфракрасным. получает. инфракрасныйдатчикизинтерфейссхема Как показано ниже:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-PiT9VPHi-1681873784550)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00100.jpeg)]
острыйинфракрасныйдатчикизприколотьдоговоренность
Аналоговый выходприколоть Vo Можетсоединятьприезжать Launchpad из ADC приколоть。 В этом разделе Воля далее обсуждается Sharp расстояниедатчики Код интерфейса Tiva C Launchpad。 существоватьэтоткодсередина,насвыбирать Launchpad из Нет. 18 приколотьи Воля Чтонастраиватьдля ADC режим и из Sharp Датчик расстояния считывает напряжение уровень. GP2D12 Формула расстояния инфракрасного датчика выглядит следующим образом:
объем = (6,787 / (Volt - 3)) - 4
этотв,Напряжениедаот Напряжениеприколотьиз ADC изаналоговое напряжениеценить.
существоватькодиз Нет.одинчастьсередина,нас Воля Tiva C LaunchPad из Нет. 18 приколотьнастраиватьдлявходитьприколоть,ик 115200 скорость передачи данных для запуска последовательной связи:
int IR_SENSOR = 18; // Sensor is connected to the analog A3
int intSensorResult = 0; //Sensor result
float fltSensorCalc = 0; //Calculated value
void setup()
{
Serial.begin(115200); // Setup communication with computer
to present results serial monitor
}
существоватьподизкодчастьсередина,контрольустройство Нетперерывчитатьформа拟приколотьи Воля Что Конвертировать дляксантиметрдляодин Кусочекизрасстояниеценить:
void loop()
{
// read the value from the ir sensor
intSensorResult = analogRead(IR_SENSOR); //Get sensor value
//Calculate distance in cm according to the range equation
fltSensorCalc = (6787.0 / (intSensorResult - 3.0)) - 4.0;
Serial.print(fltSensorCalc); //Send distance to computer
Serial.println(" cm"); //Add cm to result
delay(200); //Wait
}
Это дасоединять датчик резкого расстояния с базовым кодом. Инфракрасные датчики имеют некоторые недостатки. Некоторые из них заключаются в следующем:
существуют в следующей части,нас Воляобсуждать IMU и это и Tiva C LaunchPad изинтерфейс。 IMU Может быть предусмотрен одометр, который можно использовать в качестве входных данных для навигационного алгоритма.
инерционная единица измерения(IMU)даэлектронное устройство,Можно комбинировать со счетчиком использования уверенности.,гироскопи Магнитометр Приходить Измерениескорость,Направление и гравитация. IMU В существовании робототехнической техники есть много приложений. Некоторыйприложениеодеялоиспользуется длябалансдрон(дрон)ироботнавигация。
существуют В этом разделе мы обсуждаем Воля IMU существуют роботы мобильной навигации в роли, а также некоторые новейшие разработки на рынке. IMU и это и Launchpad изинтерфейс。
IMU Обеспечивает относительно инерционное пространство и зускоряться степень и направление. Если вы знаете исходное положение, скорость и направление, то может пройти интеграцию индукции, чтобы получить скоряться степень, чтобы вычислить скорость, Нет.квадратичное интегрирование дает положение Кусочка. для Чтобы получить правильное направление изробота, вам необходимо определить направление робота. этотможет пройтиинтегралотгироскопиззондированиерогскорость Приходитьполучатьпридется。
На рисунке ниже показаноинерциальная навигациясистема,Долженсистемавстреча Воля IMU ценить Конвертировать дляодометрданные:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-is8UtHcX-1681873784550)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00101.gif)]
Блок-схема IMU
Мы используем уравнение навигации Воляот IMU серединаполучатьпридетсяизценить Конвертировать длянавигацияинформация,и Воля Чтовходитьприезжать Оценочная фильтрацияустройство(примернравиться Кальманфильтрустройство)середина. Кальманфильтрустройствода Что-то вродев соответствии с Измерениеданныеоцениватьсистемасостояниеизалгоритм。 Зависит от Вускорятьсяметригироскопизошибка,инерциальная навигациясистема(INS)изданныевстречаиметь Довольно красивосдвиг。 Чтобы ограничить дрейф, обычно применяют непосредственное измерение интегральной величины от других вспомогательных датчиков. INS。 на на основе модели ошибок измерения идатчика, фильтра Кальмана, оценивающего ошибки в навигационных уравнениях, а также ошибок всех цветных датчиков. На рисунке ниже показаноиспользовать Кальманфильтрустройствоиз Вспомогательныйинерциальная навигациясистема:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-kV1Zhgxu-1681873784550)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00102.gif)]
иметьинерциальная навигациясистемаиз IMU
и Моторкодер Вместе,от IMU изценить можно использовать в качестве одометра изценить и можно использовать в качестве дляплыть Кусочекэкстраполировать,Этот дапроходиспользовать ранее определенный из Кусочек из текущего Кусочек из процесса.
существуют В следующем разделе мы представим Воля InvenSense Самый популярный вид IMU,сказатьдля MPU 6050。
MPU-6000/MPU-6050 ряд Компонентда Первый в миретакжедатолькоизшесть Устройство отслеживания движения оси,Цель существования – встретить смартфоны,Таблетка,Носимый датчикроботиз с низким энергопотреблением,Низкая стоимость ивысокие требования к производительности.
MPU-6000/6050 Устройство существует на основе кремниевого чипа и сочетает в себе трехосный гироскоп и трехосный градусный измеритель с возможностью обработки сложных девятиосевых алгоритмов объединения движений на борту цифрового устройства. процессор движения。 На рисунке ниже показано MPU 6050 и MPU 6050 изсистемаблок-схема:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-0GMLqrML-1681873784550)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00103.gif)]
MPU 6050 изблок-схема
MPU 6050 из ответвительной платы показан на рисунке ниже.,Можно приобрести в отэтоте:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-7vCuMmYQ-1681873784551)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00104.gif)]
Плата адаптера MPU 6050
В следующей таблице перечислены Launchpad приезжать MPU 6050 изсоединять。 Что Оставатьсяприколоть Можетотключитьсясоединять:
Launchpad приколоть | MPU6050 приколоть |
---|---|
+3.3V | VCC/VDD |
GND | GND |
PD0 | SCL |
PD1 | SDA |
На рисунке ниже показано MPU 6050 и Tiva C Launchpad изинтерфейс:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-0JonGNs8-1681873784551)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00105.gif)]
Воля Плата адаптера MPU 6050соединятьприезжать Launchpad
MPU 6050 и Launchpad использовать I2C протоколобщаться. Напряжение питаниядля 3,3В, взято с панели запуска.
В этом разделе обсуждаются Energia изинтерфейскод。 интерфейскодиспользоватьэтотБиблиотекасоединять MPU 6050。
спереди из ссылки скачать ZIP файл,а затем выберите файл из «Файл | документ”навигацияприезжать“Energia Настройки», как показано на следующем снимке экрана:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-BFHb6AU9-1681873784551)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00106.jpeg)]
Воля Плата адаптера MPU 6050соединятьприезжать Launchpad
Как показано на скриншоте начальства,Перейдите в «Настройки» в разделе «Sketchbook Кусочек».,исоздаватьодинимядляlibraries
издокументпапка。 Воля ZIP в файле Arduino документпапкасерединаздокументизвлекатьприезжатьsketchbook/libraries
Кусочекнабор。 Долженхранилище Библиотекасерединаз Arduino Сумкатакжеи Launchpad совместимый. Извлечь издокумент Включить MPU 6050 датчикинтерфейснеобходимыйизI2Cdev
,Wire
иMPU6050
Сумка. libraries
документпапкасерединавозвращатьсяиметь Чтоондатчик Сумка,Но мы находим их несуществующими.
Переднийизпроцесссуществовать Ubuntu завершено в , но для Windows и macOS X то же самое.
этоткодиспользуется для Воля MPU 6050 изоригинальныйценитьчитатьприезжать Launchpad。 этоиспользовать Понятнои Energia IDE совместимыйиз MPU 6050 Нет.трехсторонний Библиотека。 нижедакаждыйкодкусокизиллюстрировать。
существоватькодиз Нет.одинчастьсередина,нас Сумкавключатьиспользуется для Воля MPU 6050 и Launchpad соединятьизнуждатьсяотметкаголова,примернравиться12C
,Wire
иMPU6050
Библиотека,исоздаватьимясказатьдляaccelgyro
изMPU6050
объект。 MPU6050.h
Библиотека ВключатьодинимядляMPU6050
издобрый,используется для Кдатчикотправлятьданныеиотдатчикловитьполучатьданные:
#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
MPU6050 accelgyro;
существуют В следующем разделе мы волязаемся I2C Последовательная связь с MPU 6050 Общайтесь и передайте отпечатки последовательного порта датчику ценить. сериалкоммуникацияскорость передачи данныхда115200
,Setup_MPU6050()
даиспользуется для Инициализация MPU 6050 Коммуникационная функция:
void setup()
{
//Init Serial port with 115200 buad rate
Serial.begin(115200);
Setup_MPU6050();
}
нижечастьдаSetup_MPU6050()
функцияизопределение. Wire
Библиотекапозволятьтыи I2C оборудованиеобщаться. MPU 6050 Можетиспользовать I2C общаться. Wire.begin()
функция Волязапускать MPU 6050 и Launchpad между I2C коммуникация; такой же,это ВоляиспользоватьMPU6050
добрыйсерединаопределениеизinitialize()
методисходныйизменять MPU 6050 оборудование. Если все прошло успешно, Воля печатает «Соединиться успешно»; в противном случае,Это Воля печать соединить не удалось:
void Setup_MPU6050()
{
Wire.begin();
// initialize device
Serial.println("Initializing I2C devices...");
accelgyro.initialize();
// verify connection
Serial.println("Testing device connections...");
Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
}
нижекоддаloop()
функция,Долженфункциянепрерывныйчитатьдатчикценитьипроходитьсериалпорт Распечатать Чтоценить:Update_MPU6050()
сопределениефункция Ответственныйот MPU 6050 Распечатать обновления
void loop()
{
//Update MPU 6050
Update_MPU6050();
}
Update_MPU6050()
изопределениенравиться Вниз。 Он объявляет шесть переменных для управления трехосным гирометром и гироскопом. MPU 6050 добрыйсерединазgetMotion6()
функция Ответственныйотдатчикчитатьновыйценить。 После их прочтения он выведет на последовательный порт Воляпроходить:
void Update_MPU6050()
{
int16_t ax, ay, az;
int16_t gx, gy, gz;
// read raw accel/gyro measurements from device
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
// display tab-separated accel/gyro x/y/z values
Serial.print("i");Serial.print("t");
Serial.print(ax); Serial.print("t");
Serial.print(ay); Serial.print("t");
Serial.print(az); Serial.print("t");
Serial.print(gx); Serial.print("t");
Serial.print(gy); Serial.print("t");
Serial.println(gz);
Serial.print("n");
}
сериалмониторустройствоизвыход Как показано ниже:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-AZUrpnyS-1681873784551)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00107.gif)]
MPU 6050 существоватьсериалмониторустройствосерединазвыход
Мы можем использоватьиспользуется для УЗИиз Python код прочтите эти ценить. Вот что мы запускаем Python Скриншот терминала во время выполнения скрипта:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-wFelYTBR-1681873784551)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00108.gif)]
Linux в терминале MPU 6050 извыход
существоватьэта главасередина,насобсуждать Понятносуществоватьроботсерединаспользоватьиз Моторинтерфейс。 Мы рассмотрели двигатели и энкодеры и для Tiva C Launchpad из платы контроллераиз интерфейса. Мы обсудили использование длясоединять двигатель и энкодер и код контроллера. Воля Давай, если роботу требуется высокая точность и высокий крутящий момент, мы, воля, исследуем, можем заменить текущий двигатель постоянного тока из Dynamixel Сервоприводустройство。 Мы также рассмотрели, что может существовать с нами, используяизроботдатчик. Обсуждаем издатчикультразвуковой датчик расстояния, ИК околодатчики IMU。 Эти три датчика помогают роботизировать навигацию. Также мы обсудили Воляэти Датчик подключен к Tiva C LaunchPad избазакнигакод。 существования В следующей главе мы, Воля, обсудим Долженробот исполь зоваиз Датчик. зрения.
проходитьниже Ссылка для чтениясвязанный Energia программированиеиз Дополнительная информация。
существоватьначальствоодинглавасередина,нас Исследовать Понятноприводки Как использовать Tiva-C LaunchPad тарелкасоединятьроботиздатчик. существоватьэта главасередина,нас Воляосновнойпредставлять Зрениедатчики это иробот Вместеиспользоватьизинтерфейс。
настолькосуществоватьдизайнизробот Воляиметь 3D Зрениедатчик,ии Мы можем, Воля Чтои Зрение Библиотека(примернравитьсяКомпьютерное зрение с открытым исходным кодом(OpenCV),Естественное взаимодействие с открытым исходным кодом(OpenNI)ибиблиотека облаков точек(PCL)。 3D Зрениедатчиксуществоватьнасизроботсерединазосновнойприложениедасхозяиннавигация。
Также мы Воля изучаем, как Воля визуальные датчики ROS интерфейссоединять,ки Как использовать Зрение Библиотека(примернравиться OpenCV) обрабатывает то, что чувствует. В последней части этой главы мы изучаем алгоритм отображения в существующем роботе, который называется для SLAM(Одновременное картографирование Кусочек),ки Как использовать 3D Датчик технического зрения,ROS иизображениеиметь дело с Библиотека。
В этой главе мы Воля представляем нижеследующие темы:
Вам потребуется Установить ROS Kinetic из системы Ubuntu 16.04 и Веб-камеру камеры глубины.,попробовать эту главусерединаз Пример。
Частично мы хотим представить лидирующие позиции на рынке робототехники, которые могут использовать 2D- и 3D-сенсоры зрения.
2D Датчики зрения Обычная камера фиксирует окружающую среду из 2D рамка изображения в то время как 3D Имеются датчики зрения. 2D кадр изображения и вызывается для глубины каждой точки изображения из дополнительных параметров. Мы можем найти жилье 3D датчикотносительнодатчикосьизкаждыйточкаизx
,y
иz
расстояние。
На рынке начальство имеет много датчиков зрения. В этой главе упоминаются некоторые вещи, которые могут существовать изроботсерединаспользовать. 2D и 3D Датчик зрения.
На рисунке ниже показаносказатьдля Pixy2/CMUcam5 издо настоящего времени 2D Датчик зрения, Должендатчик способен быстро и точно обнаруживать цветные объекты и может Arduino развиватьдоскантерфейс。 Pixy Можетиспользуется длябыстрыйскорость Обнаружение объектов, и пользователь может указать ему, какой объект отслеживать. Pixy Модуль имеет CMOS датчикина основе Arm Cortex M4/M0 Ядро из NXP LPC4330,используется ручка для изображения. На рисунке ниже показано Pixy/CMUcam5:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Картину Воля держать рекомендуется загружать непосредственно на начальство (img-kruRySQw-1681873784552)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00109.jpeg)]
Чаще всего используется из 2D Датчик зрения представляет собой веб-камеру. Они содержат CMOS датчики USB интерфейс, но ничего подобного Pixy Он также имеет встроенные возможности визуальной обработки.
На рисунке ниже показано Logitech Популярная веб-камера Должен может снимать крупным планом. 5 Мегапиксельное разрешение изображений ивысокий HD видео:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-bZVVF2lb-1681873784552)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00110.jpeg)]
сейчассуществовать,нас Волясмотретьодин Внизрынокначальство Некоторыйдоступный 3D Датчик зрения. Некоторые из наиболее популярных издатчиков Kinect,Intel RealSense D400 ряди Orbbec Astra。
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-vVGSyBJ6-1681873784552)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00111.gif)]
Сенсор Кинект
Kinect дапервыйдля Microsoft Xbox 360 игровая консоль 3D Датчик зрения. В основном он содержит RGB фотоаппарат, инфракрасный проектор, IR Камера глубины, микрофонная решетка и их использование. для изменения наклона двигателя. RGB Камера и камера глубины существуют 30Hz часк640 x 480
изразрешениезахватыватьизображение。 RGB захват камеры 2D Цветное изображение, а камера глубины фиксирует монохромное изображение глубины. Kinect изобъекта измерения глубиныдля 0.8m к 4m。
Kinect из некоторого приложения 3D-захвата движения,Отслеживание костей,Распознавание лиц и распознавание голоса.
Kinect Можетиспользовать USB 2.0 интерфейси PC подключен и можно использовать Kinect SDK,OpenNI и OpenCV программировать. Kinect SDK Подходит только дляиспользуется для Windows платформа и SDK Зависит от Microsoft обеспечение развития. Два других открыты в Библиотеке и их можно использовать. для Всех платформ. нассуществоватьздесьиспользоватьиз Kinect да Kinect из Нет.один Версия; до настоящего времени Версияиз Kinect толькосуществовать Windows Поддерживается только при запуске Kinect SDK(связанныйподробнее,пожалуйста Видетьэта страница) 。
Kinect Производство ряддатчиков прекращено, но да вы еще можете существовать Amazon и eBay начальствопопытаться найтиприезжать Должендатчик.
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-diPVIrYo-1681873784552)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00112.jpeg)]
Intel RealSense D400 Датчик инфракрасный проектор из стереокамеры, используется для Увеличьте глубинуданные(связанныйподробнее,пожалуйста Видетьэта страница), Как показано на картинке 4 показано. Д400 Самая популярная модель в рядуиздатчиков. D415 и D435。 существоватькартина 4 центральный левый издатчикдля D415, правый издатчикдля D435。 Каждый компонент Зависит от пары трехмерных камер, одна RGB камеры IR Состав проектора. Стереоскопическая камера глубокого уровня для вычислительных сред с помощью инфракрасных проекторов.
этотдобрыйглубинакамера изосновнойособенныйточкадаэто Можетсуществоватькрытыйиоткрытыйсреда Внизработаделать。 это может быть 90 fps изскоростьпоставлять1280 x 720
разрешениеизглубинаизображениепоток,и RGB Взаимномашина Можетпоставлятьвысокийдостигать1280 x 720
изразрешение.этоиметь USB-C интерфейс, обеспечивает быструю передачу данных между существующими компьютерами датчиков. 。 Он небольшой и легкий, что делает его идеальным для приложений машинного зрения.
Kinect и Intel RealSense То же, что и приложение, за исключением распознавания речи. Они Волясуществовать Windows,Linux и Mac беги дальше. Мы можем использовать ROS,OpenNI и OpenCV Разрабатывать приложения. На рисунке ниже показано D400 рядкамераизблок-схема:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-DhxRFdG2-1681873784553)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00113.jpeg)]
Intel RealSense серии D400изблок-схема
Ознакомиться с местом проживанияIntel можно по ссылке. RealSenseрядизданныеповерхность。
Вы можете найти место проживанияIntel по ссылке существующего уровня. RealSenseиз Датчик глубины。
ты Вы можете найти место проживанияIntel по ссылке существующего уровня. RealSense SDK。
Новый тип Orbbec Astra лидерство на рынке датчиков Kinect из Один из альтернативных продуктов. и Kinect Для сравнения, он имеет аналогичные характеристики и аналогичную технологию получения информации о глубине. и Kinect Похоже, он имеет IR Проектор, RGB камера и IR датчик. Он также оснащен микрофоном для помощи в приложениях распознавания голоса. На рисунке ниже показано Датчик глубины Orbbec Все части Астраиз:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-OWScN9Tw-1681873784553)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00114.jpeg)]
Astra Датчик доступен в двух моделях: Astra и AstraS。этотдвадобрыйформа Числомеждуосновнойразницадаглубинаобъем。 Astra изглубинаобъемдля 0,6-8м, при этом Astra S изобъемдля 0.4-2m。 Astra S наиболее подходящий 3D сканировать пока Astra Можетиспользуется дляроботприложение。 Астра по размерам и весу намного меньше, чем Kinect。 Обе модели могут обеспечить глубину 30 fps из640 x 480
разрешениеиз RGB изображение。 Вы можете использовать Дажевысокийизразрешение,примернравиться1280 x 960
,но Можетспособныйвстречауронить Низкийрамкаскорость Ставка。 У них также есть способность отслеживать кости, например. Kinect。
Этот датчик соответствует OpenNI Рамка, потому что этоиспользовать OpenNI Строитьизприложениетакже Можетиспользовать Должендатчик. нас Волясуществоватьроботсерединаспользоватьэтотдатчик.
Должен SDK и Windows,Совместимость с Linux и Mac OS X. Ссылка для получения дополнительной информации.,Вы можете получить доступ к веб-сайту «Датчикразвивать»。
Вы также можете обратиться к издатчику один да камера ЗЭД。 Это система стереоскопических камер, способная обеспечить высокое разрешение при хорошей частоте кадров. Цена примерно за 450 Доллар,высокий Вначальствоописыватьдатчик. Можетиспользуется для требуется датчик с хорошей точностью и высокий конец робота приложения.
нас Волясуществовать Следующийизчастьсерединасмотретьприезжать Должендатчикиз ROS интерфейс。
позволятьнассмотретьодин Внизнас Волясуществоватьроботсерединаспользоватьизпрограммная средаи Библиотека。 Во-первых, давайте посмотрим на OpenCV。 Данас Волясуществоватьэтотроботсерединаспользоватьиз Библиотека№1,используется для Обнаружение объекты и другие функции обработки изображений.
OpenCV да Открытый исходный код,BSD Лицензия библиотеки Computer Vision, которая включает в себя сотни реализаций алгоритмов компьютерного зрения. Должен Библиотекаосновнойиспользуется для Компьютерного зрения в реальном времени, да Зависит от Intel Russia из Исследоватьразвиватьиз,сейчассуществоватьпридетсяприезжать Itseez изпозитивныйподдерживать。 2016 В 2001 году Intel приобрела Itseez。
OpenCV В основном используется C и C++ писать,Чтоосновнойинтерфейсда C++。 у него также есть Python,Java и MATLAB/Octave из интерфейса, также доступен на других языках, таких как C# и Ruby)из Сумка Пакет。
существоватьдо настоящего времени Версияиз OpenCV середина,поддерживать CUDA и OpenCL чтобы включить GPU ускоряться。
OpenCV Платформа операционной системы «Волясуществоватьбольшинство» (например. Windows,Linux,Mac OS X,Android,FreeBSD,OpenBSD,iOS и BlackBerry)беги дальше.
существовать Ubuntu середина,Когда мы устанавливаемros-kinetic-desktop-full
илиros-melodic-desktop-full
Сумкачас,уже Установить Понятно OpenCV,Python Сумкаinstallerи ROS Программа упаковки. Следующие команды устанавливаются отдельно OpenCV-ROS Сумка.
существоватьдинамикасередина:
$ sudo apt-get install ros-kinetic-vision-opencv
существоватьмелодиясередина:
$ sudo apt-get install ros-melodic-vision-opencv
Если вы хотите убедиться, что он установлен в вашей системе OpenCV-Python формакусок,Пожалуйста, используйте терминал Linux,Затемвходитьpython
Заказ。 Тогда вам стоит посмотреть, куда приезжать. Python устный переводчик. пытатьсясуществовать Python в терминале Выполните команду ниже, чтобы проверить OpenCV Установить:
>>> import cv2
>>> cv2.__version__
нравитьсяфруктыэтот Заказуспех,но Волясуществоватьтыизсистема Установить наэтот Версияиз OpenCV。 Версия Можетспособныйда 3.3.x или 3.2.x。
нравитьсяфруктыхотетьсуществовать Windows пытаться OpenCV,Вы можете попробовать ссылку ниже。
ссылка ниже Воля проведет вас через Mac OS X начальство OpenCV из Установить процесс。
OpenCV изосновнойприложениесуществоватьнижеполе:
OpenCV Установить Можетсопределение. Если вы хотите настроить OpenCV Установить можно попробовать из исходного кода Установить. ты Можетсуществоватьэта страницасерединапопытаться найтиприезжатьнравитьсячторуководитьэтот Установитьизметод。
хотетьиспользоватьэта главасерединаз Пример,большинство Воля OpenCV и ROS Вместеиспользовать。
Нет. Пример Воля загружает изображение и Воля показывает его на экране в оттенках серого.
существоватьподизкодчастьсередина,нас Воляимпортироватьnumpy
формакусок Приходитьиметь дело сизображениечисло Группа。 cv2
формакусокда Python из OpenCV Сумка Пакетустройство,Мы можем использоватьэто Приходитьдоступ OpenCV Python API。 NumPy да Python программированиеязыкиз Расширять,Добавлена поддержка больших многомерных массивов и матриц.,киверно Этичисло Группаруководить Держатьделатьиз Большойвысокийсортчислоизучатьфункция Библиотека(пожалуйста Видетьэта страницаучиться Дополнительная информация):
#!/usr/bin/env python
import numpy as np
import cv2
нижефункция Волячитатьrobot.jpg
изображениеик Оттенки серогодобавлятьнагрузка Долженизображение。 cv2.imread()
функцияиз Нет.одинпараметрдаизображениеизимясказать,Внизодинпараметрдаобозначениедобавлятьнагрузкаизображениецветдобрыйформаизлоготип。 Если флаг Должен больше, чем 0, то Долженизображение возвращает три ряда RGB Цветное изображение; в противном случае возврат. 0。 Если знак для 0, затем загрузите изображение Волядля изображения в оттенках серого; Если флаг Должен меньше, чем 0, это Воля возвращает и загружает изображение то самое изображение:
img = cv2.imread('robot.jpg',0)
нижекодчасть Воляиспользоватьimshow()
функцияпоказыватьчитатьизизображение。 cv2.waitKey(0)
функциядаклавиатураобязательностьфункция. Его параметрда-время (для одного Кусочка в миллисекундах). Если для 0, это Воля ждать нажатия клавиш бесконечно:
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
функция Толькодаразрушать Понятнонассоздаватьизвсе окна:
cv2.destroyAllWindows()
Воля Переднийизкод Сохранить какдляimage_read.py
,Затемкопировать JPG документи Воля Чтожизньимядляrobot.jpg
。 используйте следующий код:
$python image_read.py
выход Воля загружает изображение в оттенках серого,потому чтодлянассуществоватьimread()
функциясерединаспользовать Понятно0
делатьдляценить:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-ZkF7zADO-1681873784553)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00115.jpeg)]
читатьизображениекодизвыход
Ниже Пример Воля попробуйте использовать открытую Веб-камеру. Когда пользователь нажимает любую кнопку, программа Воля завершает работу.
нижекод Воляиспользоватьоборудованиеимясказатьдля/dev/video0
или/dev/video1
из Веб-камеразахватыватьизображение。
наснуждатьсяимпортироватьnumpy
иcv2
формакусок,котзахват камерыизображение:
#!/usr/bin/env python
import numpy as np
import cv2
нижефункция ВолясоздаватьодинVideoCapture
объект。 VideoCapture
добрыйиспользуется дляот видео документиликамера захват видео. VideoCapture
добрыйизисходныйизменятьпараметрдакамераизиндексиливидеодокументизимясказать。 Используется только индекс устройства для указывает номер камерыиз. Нет.одинкамераиндексдля 0,оборудованиеимясказатьдля/dev/video0
-этот Сразудадля Чтонас Воля0
помещатьсуществоватьнижекодсерединаз Оригиналпотому что:
cap = cv2.VideoCapture(0)
Следующий раздел исходника выполняется в цикле,котVideoCapture
объектчитатьизображениерамка,И показывать каждый кадр. при нажатии любой клавиши,Это Воля выход:
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Display the resulting frame
cv2.imshow('frame', frame)
k = cv2.waitKey(30)
if k > 0:
break
Скриншот нижеда программы выход:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-8jRqPQTo-1681873784553)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00116.gif)]
Захват видео извыход
Вы можете просмотреть больше по существуниже Кусочек OpenCV-Python Учебное пособие。
существовать Внизодин节середина,нас Воля Исследовать OpenNI Библиотеки и их приложения.
OpenNI да Многоязычная, кроссплатформенная структура, определяющая API так чтоиспользоватьестественное взаимодействие(NI)писатьприложение(пожалуйста Видетьэта страница)。 естественное взаимодействиедаобращаться к людямпроходитьжест,Выражения и движения для естественного общения.,И смотрите вокруг и манипулируйте физическими объектами и материалами, чтобы открыть для себя мир.
OpenNI API Зависит отгруппаиспользуется дляписать NI приложениеизинтерфейссостав. На рисунке ниже показано OpenNI Библиотекаизтрислой Видетькартина:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-xSf57n0H-1681873784554)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00117.jpeg)]
Архитектура программного обеспечения платформы OpenNI
Реализация представления верхнего уровня основеестественное взаимодействиеизприложениеизприложениеслой。 средний слой да OpenNI Уровень, на котором Воля обеспечивает анализ датчиков, данные датчиков, взаимодействие компонентов промежуточного программного обеспечения с интерфейсом связи. Промежуточное программное обеспечение может использоваться для анализа всего тела, анализа точек рук, ожидания обнаружения жестов. Пример компонентов среднего уровня да NITE,Он может распознавать жесты и кости.
Включение захвата сцены с визуальными и звуковыми элементами и зааппаратное обеспечениеоборудование. оно может включать в себя 3D Датчик, RGB камера, ИК камера имикрофон。
OpenNI издо настоящего времениверсия OpenNI 2. Он поддерживает ASUS. Xtion Pro и Primesense Carmine ждатьдатчик. OpenNI из Нет.один Версияосновнойподдерживать Kinect 360 датчик.
OpenNI да кроссплатформенный и успешно существует Linux,Mac OS X и Windows начальство было составлено и развернуто.
В следующем разделе мы рассмотрим, как можно установить OpenNI в Ubuntu.
Мы можем, Воля OpenNI Библиотекаи ROS пакет установлен вместе. ROS Уже OpenNI реализован интерфейс, но да ROS Полная установка на рабочем столе может не установиться OpenNI Сумка. Если да так, то нам нужна от Сумка менеджера Установить в этом.
ниже Заказ Воля к существованию Kinetic и Melodic Установить в ROS-OpenNI Библиотека(основной Зависит от Kinect Xbox 360 Поддержка датчиков):
$ sudo apt-get install ros-<version>-openni-launch
ниже Заказ Воля Установить ROS-OpenNI 2 Библиотека (Асус Xtion Pro и Primesense Carmine Основная поддержка):
$ sudo apt-get install ros-<version>-openni2-launch
Можетсуществоватьэта страницаполучатьпридетсяподходящийиспользуется для Windows,Linux и MacOS X из OpenNI изисточниккодидо настоящего времени Версия。
существуют В следующем разделе мы Воля изучим как Установить PCL.
облако точекда空междусерединапоколениеповерхность 3D Объект или среда из набора точек данных. Обычно из чего-то вроде Kinect и LIDAR из Датчик глубиныгенерироватьоблако точек。 PCL(библиотека облаков точек)даиспользуется для 2D/3D изображениеиоблако точки занимается крупномасштабными открытыми проектами. PCL Платформа Включать выполняет фильтрацию, оценку признаков, реконструкцию поверхности, регистрацию, подгонку модели и сегментацию с помощью многочисленных алгоритмов. использовать эти методы мы можем Облака точек Процесс извлечения ключевых дескрипторов для идентификации объектов в мире на основе их геометрического внешнего вида. точкисоздавать поверхность и предварительный просмотр.
PCL дасогласно BSD Лицензия выдана из. Он имеет открытый исходный код и доступен бесплатно. для коммерческого использования, также используется бесплатно для исследовательских целей. PCL да кроссплатформенный из, успешно скомпилированный и развернутый существующий Linux,macOS X,Windows и Android/iOS начальство。
ты Можетотэта страницаВнизнагрузка PCL。
PCL Уже интегрировано приезжать ROS середина. ROS Включено в полную установку настольного компьютера PCL библиотека и ее ROS интерфейс。 PCL да ROS из 3D Обработать ствол. связанный ROS-PCL Сумкаиз Подробнее,пожалуйста Видетьэта страница。
Посмотрим, как существовать ROS середина Сенсор Кинект для взаимодействия ииспользовать. ROS и OpenNI водительпучоксуществовать Вместе,Долженводитель Можетполучать Kinect из RGB иглубинаизображение。 ROS серединаз OpenNI и OpenNI 2 Сумка Можетиспользуется дляи Microsoft Kinect,Primesense Carmine,Asus Xtion Pro и Pro Live интерфейс。
Когда мы устанавливаем ROS изopenni_launch
Сумкачас,этовозвращаться Воля Установить Чтоотрод Сумка,примернравитьсяopenni_camera
。 openni_camera
Сумкада Kinect водитель,используется длявыпускатьоригинальныйданныеидатчикинформация,иopenni_launch
Сумка Включать ROS Стартовый файл. Эти файлы запуска запускают несколько узлов одновременно и публикуют данные, такие как необработанная глубина,RGB и IR изображениекиоблако точек。
Вы можете использовать USB интерфейс Воля Kinect Датчик подключен компьютер и использоватьв терминалеизdmesg
Заказубеждаться PC начальствоуже Обнаружениеприезжать Сенсор Кинект。 настраивать Kinect После этого мы можем начать ROS из OpenNI Драйвер для получения данных с устройства.
ниже команда Воля открыть OpenNI устройство и загрузите все Nodelet(связанный Дополнительная информация,пожалуйста Видетьэта страница),к Воляоригинальныйглубинаили RGB/IR поток Конвертировать дляглубинаизображение,параллаксизображениеиоблако точек。 ROS nodelet
Сумкацельсуществоватьпоставлять Что-то вродесуществоватьтакой жеодинпроцесссерединабегатьнесколькоалгоритмизметод,ииалгоритммеждукопироватькопироватьдляноль:
$ roslaunch openni_launch openni.launch
После запуска водителя вы можете использовать команду для просмотра различных опубликованных тем водителя:
$ rostopic list
Вы можете использоватьимядляimage_view
из ROS Вид инструмента RGB изображение:
$ rosrun image_view image_view image:=/camera/rgb/image_color
В следующей части мы Воля узнаем, как Воля эти и зображи OpenCV Выполните обработку изображения.
OpenCV Также интегрировано проживание ROS середина,основнойиспользуется ручка для изображения. vision_opencv
ROS Стек Сумкаinclude Completeиз OpenCV Библиотекаии ROS изинтерфейс。
vision_opencv
meta Сумка Зависит от Каждая Сумка состоит из:
cv_bridge
:ВключатьCvBridge
добрый. этотдобрый Воля ROS изображениеинформация Конвертировать для OpenCV изображенные типа и наоборот.image_geometry
:Включатьиметь дело сизображениеи Пиксельная геометрияизметодизсобирать。На рисунке ниже показано OpenCV Как и ROS интерфейс:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Предложение: я хотел бы сохранить изображения прямо ниже (img-N6pA4xaa-1681873784554) (https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py/img /00118.гиф)]
OpenCV-ROS интерфейс
OpenCV изизображениеданныедобрыйформадляIplImage
иMat
。 нравитьсяфруктыхотетьсуществовать ROS серединаспользовать OpenCV,нодолжен ВоляIplImage
илиMat
Конвертировать для ROS изображениеинформация. ROS Сумкаvision_opencv
иметьCvBridge
добрый; этотдобрый Может ВоляIplImage
Конвертировать для ROS изображение и наоборот. После получения от любого датчика технического зрения ROS тема изображения, вы можете использовать ROS CvBridge Приходить Воля Чтоот ROS тема Конвертировать дляMat
илиIplImage
Формат。
В следующем разделе Воля покажет вам, как создавать ROS Сумка. этот Сумка Включатьодинузел,используется для Подписаться RGB глубина изображения, ручка RGB изображениек Обнаружениекрайисуществовать Волявсеизображение Конвертировать дляи OpenCV ждатьэффектизизображениедобрыйформаназадпоказыватьвсеизображение。
Мы можем создатьодинимядляsample_opencv_pkg
из Сумка,Должен Сумкаиметьниже Зависимости:sensor_msgs
,cv_bridge
,rospy
иstd_msgs
。 sensor_msgs
Зависимостиопределение Понятно Обычно используетсядатчик(Сумкавключать В соответствии скамера сканирующий лазерный дальномер)из ROS информация. cv_bridge
Зависимостида ROS из OpenCV интерфейс。
Ниже приведена команда для включения ROS Bag без каких-либо зависимостей:
$ catkin-create-pkg sample_opencv_pkg sensor_msgs cv_bridge
rospy std_msgs
создавать Сумканазад,существовать Сумка Внутрисоздаватьодинscripts
документпапка; У Воля, который используется как позиция держатькодиз Кусочек, следующая часть Воля приезжает Долженкод.
cv_bridge
показывать Kinect изображениенижекод абзаца дает Python кодиз Нет.Часть. этоосновной涉иимпортироватьrospy
,sys
,cv2
,sensor_msgs
,cv_bridge,
иnumpy
модуль. sensor_msgs
Зависимостиимпортироватьизображениеи Взаимномашинаинформациядобрыйформаиз ROS Тип данных. cv_bridge
формакусокимпортировать ПонятноCvBridge
добрый,используется для Воля ROS изображениеданныедобрыйформа Конвертировать для OpenCV тип данных и наоборот:
import rospy
import sys
import cv2
from sensor_msgs.msg import Image, CameraInfo
from cv_bridge import CvBridge, CvBridgeError
from std_msgs.msg import String
import numpy as np
ниже в разделе Python серединаздобрыйопределение,Мы Воляиспользоватьэтоих Приходить演ПоказыватьCvBridge
функция. ДолжендобрыйсказатьдляcvBridgeDemo
:
class cvBridgeDemo():
def __init__(self):
self.node_name = "cv_bridge_demo"
#Initialize the ros node
rospy.init_node(self.node_name)
# What we do during shutdown
rospy.on_shutdown(self.cleanup)
# Create the cv_bridge object
self.bridge = CvBridge()
# Subscribe to the camera image and depth topics and set
# the appropriate callbacks
self.image_sub =
rospy.Subscriber("/camera/rgb/image_raw", Image,
self.image_callback) self.depth_sub =
rospy.Subscriber("/camera/depth/image_raw", Image,
self.depth_callback)
#Callback executed when the timer timeout
rospy.Timer(rospy.Duration(0.03), self.show_img_cb)
rospy.loginfo("Waiting for image topics...")
Эта визуализация на самом деле RGB изображение, обработанное RGB изображениеиглубина изображенияиз Обратный звонок:
def show_img_cb(self,event):
try:
cv2.namedWindow("RGB_Image", cv2.WINDOW_NORMAL)
cv2.moveWindow("RGB_Image", 25, 75)
cv2.namedWindow("Processed_Image", cv2.WINDOW_NORMAL)
cv2.moveWindow("Processed_Image", 500, 75)
# And one for the depth image
cv2.moveWindow("Depth_Image", 950, 75)
cv2.namedWindow("Depth_Image", cv2.WINDOW_NORMAL)
cv2.imshow("RGB_Image",self.frame)
cv2.imshow("Processed_Image",self.display_image)
cv2.imshow("Depth_Image",self.depth_display_image)
cv2.waitKey(3)
except:
pass
нижекодпредоставил Kinect Цветное изображение с функцией обратного вызова. когдасуществовать/camera/rgb/image_raw
теманачальствополучатьприезжатьцветизображениечас,это Волявызовэтот。 этотфункция Воляиметь дело сиспользуется для обнаружения края и цветного поля, а также обнаружения появления края, исходного цвета и отражения:
def image_callback(self, ros_image):
# Use cv_bridge() to convert the ROS image to OpenCV format
try:
self.frame = self.bridge.imgmsg_to_cv2(ros_image, "bgr8")
except CvBridgeError, e:
print e
pass
# Convert the image to a Numpy array since most cv2 functions
# require Numpy arrays.
frame = np.array(self.frame, dtype=np.uint8)
# Process the frame using the process_image() function
self.display_image = self.process_image(frame)
нижекодпредоставил Kinect Изображение средней глубины с функцией отката. существовать/camera/depth/raw_image
теманачальствополучатьприезжатьглубинаизображениечас,это Волявызовэтотфункция. этотфункция Воляпоказыватьоригинальныйглубинаизображение:
def depth_callback(self, ros_image):
# Use cv_bridge() to convert the ROS image to OpenCV format
try:
# The depth image is a single-channel float32 image
depth_image = self.bridge.imgmsg_to_cv2(ros_image, "32FC1")
except CvBridgeError, e:
print e
pass
# Convert the depth image to a Numpy array since most cv2 functions
# require Numpy arrays.
depth_array = np.array(depth_image, dtype=np.float32)
# Normalize the depth image to fall between 0 (black) and 1 (white)
cv2.normalize(depth_array, depth_array, 0, 1, cv2.NORM_MINMAX)
# Process the depth image
self.depth_display_image = self.process_depth_image(depth_array)
нижефункциясказатьдляprocess_image(),
,это Воляцветизображение Конвертировать для Оттенки серого,Затем сделайте изображение размытым.,и яспользовать Canny Фильтр краев для поиска краев:
def process_image(self, frame):
# Convert to grayscale
grey = cv2.cvtColor(frame, cv.CV_BGR2GRAY)
# Blur the image
grey = cv2.blur(grey, (7, 7))
# Compute edges using the Canny edge filter
edges = cv2.Canny(grey, 15.0, 30.0)
return edges
нижефункциясказатьдляprocess_depth_image()
。 Он возвращает только кадр глубины:
def process_depth_image(self, frame):
# Just return the raw image for this demo
return frame
При закрытии узла нижефункция Воля закрывает окно изображения:
def cleanup(self):
print "Shutting down vision node."
cv2.destroyAllWindows()
нижекоддаmain()
функция. это ВоляисходныйизменятьcvBridgeDemo()
добрыйивызовrospy.spin()
функция:
def main(args):
try:
cvBridgeDemo()
rospy.spin()
except KeyboardInterrupt:
print "Shutting down vision node."
cv.DestroyAllWindows()
if __name__ == '__main__':
main(sys.argv)
Воля Переднийизкод Сохранить какдляcv_bridge_demo.py
,и яспользоватьниже Заказ Дажеизменятьузелиз Разрешения。 толькокогданас Грантrosrun
Заказ Можетосуществлять Разрешениячас,Видны только эти узлы:
$ chmod +X cv_bridge_demo.py
нижедазапускатьводительиузелиз Заказ。 использоватьниже Заказзапускать Kinect Водитель:
$ roslaunch openni_launch openni.launch
использоватьниже Заказбегатьузел:
$ rosrun sample_opencv_pkg cv_bridge_demo.py
Скриншот нижедавыходиз:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-5RTRNrQZ-1681873784554)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00119.jpeg)]
RGB, Depth и Edge и зображение
Kinect из Одна из альтернативда Orbbec Astra。 иметьиспользуется для Astra из ROS водитель,мы видим как приезжать на благоустройство Должен водитель и от Должендатчикполучить изображение,глубину и облако точек。
существоватьэта страницаиэта страницасерединанестиприезжать Понятносуществовать Ubuntu серединанастраивать Astra-ROS водительиз полное описание. Установитьводительназад,Можетиспользоватьниже Заказзапускатьэто:
$ roslaunch astra_launch astra.launch
Вы также можете выбрать из ROS Установка репозитория пакетов Astra водитель. Да Установить Эти Сумкаиз Заказ:
$ sudo apt-get install ros-kinetic-astra-camera
$ sudo apt-get install ros-kinetic-astra-launch
Установить Эти Сумканазад,У вас должны быть настройки устройства и разрешение на использование устройства Должен.,нравитьсяэта страницаМестоописывать。 Вы можете использоватьв терминалеизrostopic list
Заказ检проверятьот Долженводитель Генерировать ROS тема. кроме того,Мы можем использоватьначальствоодин节серединанестиприезжатьиз Взаимнотакой жеиз Python код Выполните обработку изображения.
3D облако точекда Воля 3D Окружающая среда 3D Объект представляет собой вдоль x,y и z Ось сбора точек в одну сторону. Мы можем из разных источников облако точек:хотеть Что?может пройтиписатьпрограмма Приходитьсоздаватьоблако точек,хотеть Что?может пройти Датчик лазерный сканер документаили его генерирует.
PCL Встроенная поддержка OpenNI 3D интерфейс。 Поэтому его можно загрузить с такого устройства, как Prime Sensor из 3D Камера, Майкрософт Kinect или Asus Xtion Pro)серединаполучатьииметь дело сданные.
PCL Воля Включатьсуществовать ROS полный рабочий стол Установитьсередина. Посмотрим, как существовать RViz(ROS серединазданные Может Видетьизменятьинструмент)серединагенерироватьи Может Видетьизменятьоблако точек。
Используйте следующую команду, чтобы открыть новый терминал и запустить драйвер узла ROS-OpenNI и генератор облаков точек:
$ roslaunch openni_launch openni.launch
этот Заказ Воляактивация Kinect водительи Воляоригинальныйданныеиметь дело сдляудобныйизвыход,примернравитьсяоблако точек。
Если у вас есть Орббек Астра, вы можете командовать:
$ roslaunch astra_launch astra.launch
Мы Воляиспользовать RViz 3D Инструмент визуализации, чтобы увидеть нас изоблако точек。
ниже Заказ Волязапускать RViz инструмент:
$ rosrun rviz rviz
Воля фиксированная рама из RViz Параметры (существовать «Глобальные параметры» на панели «показывать» вверху) camera_link。
существовать RViz Панель из левой панели нажмите кнопку «Добавить» и выберите PointCloud2 Параметры отображения. Воля Чтотеманастраиватьдля/camera/depth/points
(Да Kinect из Темы другие датчики Воли различаются)
Воля PointCloud2 изColor Converter Change для AxisColor。
На следующем скриншоте показано RViz облако точечныеиз Скриншота. Вы можете видеть, что самые близкие объекты отмечены красным, а самые дальние объекты отмечены фиолетовым и синим. Kinect Предыдущий объект представляет собой цилиндр и куб:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-E4lxIchR-1681873784554)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00120.jpeg)]
существовать Rviz Визуализация данных облака точек
нассуществовать Долженроботсерединаспользовать Astra Приходите копировать дорогой лазерный дальномер по характеристикам. использовать ROS изdepthimage_to_laserscan
Сумкаиметь дело сглубинаизображениеи Воля Что Конвертировать длялазерный сканеризждатьэффектданные(связанный Дополнительная информация,пожалуйста Видетьэта страница)。
ты Можетотисточниккод Установитьэтот Сумка,также Можетиспользовать Ubuntu Менеджер пакетов. этот даот Ubuntu Сумка Трубкапричинаустройство Установитьэтот Сумкаиз Заказ
$ sudo apt-get install ros-<version>-depthimage-to-laserscan
Должен Сумкаизосновной Функциядаверноглубинаизображениеизодинчастьруководитькусочеки Воля Что Конвертировать дляждатьэффектизлазерное сканирование Тип данных. ROS sensor_msgs/LaserScan
информациядобрыйформаиспользуется для выпуска данных лазерного сканирования. этотdepthimage_to_laserscan
Сумка Воляосуществлятьэтот Конвертироватьиподделкалазерный сканерданные. Можетиспользовать RViz Ознакомьтесь с результатами лазерного сканера. Чтобы преобразовать для запуска, мы должны запустить Волю, чтобы выполнить эту операцию из узла конвертера. для того, чтобы начать конверсию, мы должны существоватьзабывающиесяв файле это указывает. нижедазапускатьв файлезапускатьdepthimage_to_laserscan
Конвертироватьнеобходимыйизкод:
<!-- Fake laser -->
<node pkg="nodelet" type="nodelet"
name="laserscan_nodelet_manager" args="manager"/> <node pkg="nodelet" type="nodelet"
name="depthimage_to_laserscan" args="load depthimage_to_laserscan/DepthImageToLaserScanNodelet
laserscan_nodelet_manager">
<param name="scan_height" value="10"/>
<param name="output_frame_id" value="/camera_depth_frame"/>
<param name="range_min" value="0.45"/>
<remap from="image" to="/camera/depth/image_raw"/>
<remap from="scan" to="/scan"/>
</node>
Глубина изображения темы может быть изменена в каждом существующем датчике. Вы должны изменить название темы в соответствии с вашей темой глубины изображения.
Помимо начала Nodelet Кроме того, нам также нужны настройки Nodelet из Некоторые параметры для лучшей конверсии. связанныйкаждыйпараметризподробныйиллюстрировать,пожалуйста Видетьэта страница。
Предыдущий вид лазерного сканирования приведен на существующем скриншоте. Для просмотра лазерного сканирования добавьте LaserScan параметры. Это похоже на то, когда мы добавляем PointCloud2 Опции и Воля LaserSan из Topic ценить Дажеизменятьдля/ scan из режима:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-7bM5NzFX-1681873784554)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00121.jpeg)]
существовать Rviz Визуализация данных лазерного сканирования в
Мы изроботировали основную цель использования видения датчикизда для обнаружения объектов и навигации робота в существующей среде. SLAM используется своего рода алгоритм для Мобильный роботсередина,кпроходитьотслеживатьроботизтекущий Кусочекнабор Приходить Строитьнеизвестный Окружающая средазземлякартинаилисуществоватьуже Знатьсредасередина Даженовыйкарта.
землякартинаиспользуется для планирования роботизации отслеживания и навигации по существующему пути. использоватьземлякартина,робот Воляучиться окружающая среда. Мобильный роботнавигацияиздваосновнойиспытаниедакартографированиеилокализация。
Картирование включает в себя создание контуров препятствий вокруг существующего робота. проходитькартографирование,робот Воляучитьсямириз Появление。 Конечно Кусочек оценка роботонотосительно уз Строитиз из мапуз Кусочек путизиз процесса.
SLAM отдругойиздатчикполучатьданныеи яспользоватьэто Приходить Строитькарта. 2D/3D Зрениедатчик Можетиспользуется для Воляданные входы SLAM。 2D Зрениедатчики (напр.Веб-камера)и 3D датчики (напр. Kinect)В основном используетсяделать SLAM Алгоритм ввода.
имядля OpenSlam из SLAM Библиотекаи ROS Интегрировать в имя для Gmapping из Сумка. gmapping
Сумкапредоставилодинузел Приходитьосуществлятьна на основе лазеров SLAM иметь дело с,сказатьдляslam_gmapping
。 Это можно сделать по лазерному и мобильному роботу сбора из Кусочек размещения данныесоздавать 2D карта.
gmapping
Сумка Можетотэта страницаполучатьпридется。
хотетьиспользоватьslam_gmapping
узел,насдолжен Введите уровень данных роботаизпробег Установитьсуществоватьроботначальствоизлазерного дальномера излазера выход сканирования.
slam_gmapping
узелподпискаsensor_msgs/LaserScan
информацияиnav_msgs/Odometry
информацияк Строитькартографирование(nav_msgs/OccupancyGrid
)。 может пройти ROS темаили Поиск услуг Генерироватькарта.
насужеиспользоватьнижезапускатьдокументсуществовать Chefbot серединаспользовать SLAM。 Должензапускатьдокумент Волязапускатьslam_gmapping
узел,И роботу Включать необходимо начать отображение параметра среды:
$ roslaunch chefbot_gazebo gmapping_demo.launch
существование В этой главе мы представляем существование Chefbot серединаспользоватьиз Различный Датчик зрения. нассуществоватьроботсерединаспользовать Понятно Kinect и Астра и узнал о OpenCV,OpenNI,PCL и его приложения. насвозвращатьсяобсуждать Понятно Зрениедатчиксуществоватьроботнавигациясерединазделатьиспользовать,поток ХОРОШОиз SLAM Технология и ее существование ROS серединазприложение。 существовать Внизодинглавасередина,Мы, Воля, следим за прибытием роботов с полным интерфейсом.,иизучать Как использовать Chefbot Осуществлять автономную навигацию.
тыможет пройтиниже Ссылка для чтениясвязанный ROS серединазробот Зрение Сумкаиз Дополнительная информация:
существовать Нет. 3 глава“использовать ROS и URDF В «Моделировании дифференциальных роботов» мы изучали ChefBot Издизайн шасси. существоватьэта главасередина,нас Воляизучать Как использовать Эти Компонент Группа Пакет Долженробот。 Мы также Воля исследуем Долженроботи Tiva-C LaunchPad издатчики и другие электронные компоненты с окончательным интерфейсом. После соединения мы Воля научимся Воляроботи. PC соединять,кинравитьсячтосуществоватьдействительныйроботсерединаспользовать SLAM и AMCL Осуществлять автономную навигацию.
В этой главе Воля рассматриваются следующие темы:
хотетьтестэта главасерединазприложениеикод,ты Волянуждаться Установить ROS Kinetic из Ubuntu 16.04 LTS PC или Ноутбук.
Для сборки робота вам также потребуется собрать компоненты шасси изробота.
тыотвечать Должендержатьиметь Можетинтегрированныйсуществоватьроботсерединазвседатчики Чтоонаппаратное обеспечениекомпоненты.
Мы обсудили различные компоненты робота Воляидатчики. Launchpad соединятьизметод。 существоватьэта главасередина,нас Воляпытатьсясоединять ChefBot Из необходимого компонента манипулятора идатчика запрограммируйте его так, чтобы он мог получать ценовые сигналы от всех датчиков и от датчиков. PC контрольная информация. Launchpad Воляпроходитьсериалпорт Волявседатчикценитьотправлятьприезжать ПК и из PC Получать управляющую информацию (например, команды сброса, данные о скорости и т. д.).
от Tiva C Launchpad После получения данных последовательного порта ROS Python узел Воляловитьполучатьсериалценитьи Воля Что Конвертировать для ROS тема. PC Есть и другие в ROS узлы, которые подписываются на эти темы датчиков и вычисляют роботизированные одометры. От изданных Wheel Encoder IMU ценить в сочетании для расчета роботиз одометра. роботпроходить Подписаться на тему Ультразвуковой датчик и Лазерное сканирование для обнаружения препятствий и их использования PID Узел управления колесом двигателя изспидстепень. Долженузел Воля Проволокаскорость Заказ Конвертировать для Дифференциальная скоростьколесоскорость Заказ。 После запуска этих узлов мы можем запустить SLAM Чтобы нарисовать карту местности, запустите SLAM После этого мы можем запустить AMCL узлы локализации и автономной навигации.
существоватьэта главаиз Нет.одинчасть“Сборка оборудования ChefBot”середина,нас Воляизучать Как использоватьроботизчасть тела Кусочекиэлектронныйкомпоненты Группа Пакет ChefBot аппаратное обеспечение.
Требуется Конфигурацияроботиз Нет. Деталь базовой пластины. В состав опорной плиты входят два двигателя и их колеса, ролики и кронштейны опорной плиты. На рисунке ниже показаноконецдосказ俯Видетькартинаи仰Видетькартина:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Предложение: я хотел бы сохранить изображения прямо ниже (img-dAXa8Z8i-1681873784555) (https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py/img /00122.jpeg)]
с Мотор, колесо и ролик из опорной плиты
базадосказрадиусдля 15 В сантиметрах от базовой плиты были вырезаны две детали, двигатель Воля и его соединять колеса Установитьсуществовать плиту с противоположных сторон. Два резиновых ролика Установить опорную пластину с противоположных сторон для достижения хорошего баланса и поддержки роботизации. Мы можем для этоготробот выбрать шариковые или резиновые ролики. Два провода двигателя проходят через отверстия в центре опорной плиты, ведущие к верхней части опорной плиты. Для расширения роботизации каждого слоя мы помещаем кронштейн подложки для соединения каждого слоя. Теперь давайте посмотрим на среднюю панель и соединим трубу со следующим слоем. Имеются полые трубки, соединяющие опорную и среднюю пластины. Полую трубку можно использовать в качестве подложки.
На рисунке ниже показаносерединамеждудоскасоединять Трубка:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-HfsTILRD-1681873784555)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00123.jpeg)]
приноситьсоединять Трубкаизсерединатарелка
соединять Трубка Волясоединятьконецдоскасерединамеждутарелка。 Есть четыре полые трубки, используется для Воляконецтарелкасоединятьприезжатьсерединамеждутарелка。 Эти трубки полые на одном конце, который может поддерживаться опорной плитой, и имеют на другом конце жесткий пластиковый фитинг. Средняя пластина не имеет опор, но есть четыре отверстия для соединительных трубок:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-R7pik1D6-1681873784555)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00124.jpeg)]
Полностью собранный изроботный корпус
серединамеждутарелкамужскойсоединятьустройствоиметьпомощь Всоединятьсерединамеждудоскаконецтарелка Трубкаизвершина。 Мы можем использоватьвершинатарелканазадлапшаиз Четыре кронштейна Волявершинатарелка Установитьсуществоватьсерединамеждутарелка Трубкаизвершина。 Мы можем подключить верхнюю пластину от матери к кронштейну верхней пластины. Сейчас у нас существует полная сборка роботиз.
Манипуляторизконецслой Можетиспользуется дляпомещатьнаборпечатная плата(PCB)и Батарея。 существует средний слой, где мы можем разместить Kinect/Orbecc и Intel NUC。 При необходимости можем разместить колонки и микрофоны. Мы можем использовать верхнюю доску для перевозки еды. На рисунке ниже показанороботиз PCB прототип; это Зависит от Tiva-C LaunchPad,Моторводить преобразователь машины, преобразователь уровня изоединять два мотора, ультразвуковые датчики IMU Состав оборудования:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Предложение: я хотел бы сохранить изображения прямо ниже (img-BP6jcqim-1681873784555) (https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py/img /00125.jpeg)]
Прототип печатной платы ChefBot
Должентарелка Зависит отпомещатьнаборсуществоватьбазатарелканачальствоиз 12V Питание от аккумулятора. Эти два двигателя могут напрямую соединятьприезжать. M1 и M2 Разъем «папа». NUC PC и Kinect помещатьсуществоватьсерединамеждутарелканачальство。 LaunchPad доска Kinect отвечать Долженпроходить USB соединятьприезжать NUC PC。 PC и Kinect самиспользовать Взаимнотакой жеиз 12V Питание от аккумулятора. Мы можем использоватьсвинцово-кислотныйили Литий-полимерный Батарея。 существоватьздесь,нас Волясвинцово-кислотный Батареяиспользуется для тестового объекта из. Позже мы, Воля, перешли на литий-полимерную батарею, чтобы улучшить производительность и улучшить резервное копирование. На рисунке ниже показановесьиз ChefBot Сборочный чертеж:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-T2fVGhKE-1681873784555)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00126.jpeg)]
Полностью собранный изроботный корпус
Группа Пакетхорошийроботизвсе Компонент После этого мы, Воляначинатьиспользоватьроботпрограммное обеспечение。 Встроенный код для ChefBotи ROS Сумкасуществоватьchapter_8
Внизизкод Доступен в формате . Давайте получим Долженкод и начнем использовать программное обеспечение Должен.
существовать ChefBot середина,насиспользовать Intel из NUC PC Подойди и возьми роботодатчиковыеидные ручки. существовать Купить NUC PC После этого нам нужно установить Ubuntu 16.04 LTS。 Установить Ubuntu После этого, пожалуйста, завершите нашу жизнь, упомянутую в предыдущих главах. ROS И это Сумка. Мы можем настроить это индивидуально ПК, после завершения всех настроек конфигурации, вы сможете воля его в роботсередина. нижедасуществовать NUC PC Установить на ChefBot Процесс сумкаиз.
использоватьниже Заказот GitHub клонировать ChefBot из Сумка:
$ git clone https://github.com/qboticslabs/learning_robotics_2nd_ed
Мы можем существовать на ноутбуке в клонированииэтоткода.,Затем ВоляChefBot
документпапкакопироватьприезжать Интелиз NUC PC。 ChefBot
документпапка Зависит от ChefBot аппаратное обеспечениеиз ROS Состав упаковки. существовать NUC PC , создайте ROS catkin работаделатьокруг,копироватьChefBot
документпапка,Затем Воля Чтодвигатьсяприезжать catkin работаделатьокругизsrc
Оглавлениесередина.
Тольконуждатьсяиспользоватьниже Заказ Прямо сейчас Может Строитьи Установить ChefBot изисточниккод。 этототвечать Долженсуществоватьнассоздаватьизcatkin
работаделать空между Внутриосуществлять:
$ catkin_make
Если все зависимости верны, установитьсуществовать NUC посередине, затем ChefBot Сумка Волясуществоватьэтотсистемасерединагенерироватьи Установить。 существовать NUC PC начальствонастраивать ChefBot После Сумки мы можем сменить место жительства. Встроенный код для ChefBot。 сейчассуществовать,нас Можетсоединять LaunchPad серединазвседатчик. Волякодначальствопроходитьприезжать LaunchPad После этого мы можем проверить еще раз ROS пакеты и как их запускать. от GitHub клонироватьизкод Включать Tiva-C LaunchPad код, Волясуществовать Это объясняется в следующем разделе.
Мы изучили Волясуществовать ChefBot серединаспользоватьизкаждыйдатчикизинтерфейс。 В этом разделе мы Воля узнаем, как Волядатчик интегрировать приезжать LaunchPad тарелканачальство。 GitHub начальствоизклонироватьв файлепредоставилиспользуется дляпрограммирование Tiva-C LaunchPad из Energia код。 показывать Tiva-C LaunchPad Картина идатчикизсоединятьизсоединять следующая. проходитьэтоткартина,насучитьсядатчик Как и LaunchPad взаимосвязь:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-5vtS5fY7-1681873784556)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00127.jpeg)]
Издатчик интерфейса ChefBot
M1 и M2 данассуществоватьэтотроботсерединаспользоватьиздвадифференциалводить мотор машины. Мы волясуществоватьздесьиспользоватьиз электродвигателя дас Pololu Энкодер мотор-редуктора постоянного тока. Мотор Терминалconnectcome Pololu изпара VNH2SP30 Водитель мотора. Один из двигателей имеет противоположную полярность, поскольку при дифференциальном рулевом управлении один двигатель вращается в направлении, противоположном другому. Если мы подадим один и тот же управляющий сигнал на оба двигателя, каждый двигатель будет вращаться в противоположном направлении. Чтобы избежать этой ситуации, мы Воля заменяем двигатель из кабеля. Проходит водитель мотора 3.3V-5V Двунаправленный преобразователь уровня соединятьприезжать Tiva-C LaunchPad。 нас Волясуществоватьэтотвиспользоватьизуровень Конвертироватьустройство№1Можетсуществоватьэта страницаначальствопопытаться найтиприезжать。
каждыйкодериздварядиспользоватьуровень Конвертироватьустройствосоединятьприезжать LaunchPad。 В настоящее время мы проводим обнаружение препятствий с помощью ультразвукового датчика расстояния. Воля приезжайте, если нужно, можем увеличить количество датчиков. для Получите точную оценку пробега у нас Воля IMU датчик MPU 6050 проходить I2C интерфейспомещатьнабор。 Этиприколотьпрямойловитьсоединятьприезжать LaunchPad,потому чтодля MPU6050 совместимый 3.3V。 для Понятноот ROS Сброс узла LaunchPad, мы назначили прикол для выхода и Воля его соединять приезжать LaunchPad из Тяжелыйнаборприколоть。 Когда отправляются определенные символы приезжать LaunchPad час,это Волявыходприколотьнастраиватьдлявысокийуровеньи Тяжелыйнабороборудование. существуют В некоторых случаях ошибки вычислений могут накапливаться и влиять на навигацию робота. Мы сбрасываем LaunchPad чтобы сбросить эту ошибку. для Чтобы следить за уровнем заряда батареи, мы назначили еще один прикол для считывания цены батареи. Energia Эта функциональность в настоящее время не реализована в коде.
Ты от GitHub Загрузите изкод Включайте встроенные коды, необходимые для компиляции этого кода из Библиотеки. Мы можем существовать здесь, чтобы увидеть основную часть кода проживания и зависит. Нет необходимости объяснять все части, поскольку мы их все уже рассмотрели.
Обсуждение в этом разделе Воля LaunchPad кодиз основной части. нижедакодсерединаспользоватьизголовадокумент:
//Library to communicate with I2C devices
#include "Wire.h"
//I2C communication library for MPU6050
#include "I2Cdev.h"
//MPU6050 interfacing library
#include "MPU6050_6Axis_MotionApps20.h"
//Processing incoming serial data
#include <Messenger.h>
//Contain definition of maximum limits of various data type
#include <limits.h>
Долженкодсерединаспользоватьизосновной Библиотекаиспользуется дляи MPU 6050 Общаться и обрабатывать ввод данных о прибытии LaunchPad изсериалданные. MPU 6050 Можетиспользоватьвстроенныйизцифровой процессор движения(DMP)поставлятьчетыре юанячислоили Эйлерценитьизнаправление。 доступ DMP из Функция ПисатьсуществоватьMPU6050_6Axis_MotionApps20.h
середина. Должен БиблиотекаиметьразличныйнравитьсяI2Cdev.h
иWire.h
Издобрыйиз Зависимости; Вот почему нам нужен заголовок «Включатьэтот». Обе библиотеки используются для I2C коммуникация. Messenger.h
Библиотека Можетпозволятьтыиметь дело сот任что Приходитьисточникизтекстданныепоток,и Воляпомощь Ты отсерединаизвлекатьданные. limits.h
отметкаголова Включать Различныйданныедобрыйформаизмаксимумпределизопределение.
После включения файла заголовка нам нужно создать объект для обработки MPU6050,и яспользоватьMessenger
добрыйиметь дело спроходитьвходитьизсериалданные:
//Creating MPU6050 Object
MPU6050 accelgyro(0x68);
//Messenger object
Messenger Messenger_Handler = Messenger();
заявление ПонятноMessenger
объектназад,основнойчастьиметь дело с Понятно Моторводить машина, энкодер, ультразвуковой датчик, МПУ 6050,Комплекс Кусочки батарея приколотьиз раздача приколоть. После назначения приколоть,нас Можетпроверятьсмотретькодизsetup()
функция. setup()
функцияизопределениесуществоватьнижекодсередина Давать出:
//Setup serial, encoders, ultrasonic, MPU6050 and Reset functions
void setup()
{
//Init Serial port with 115200 baud rate
Serial.begin(115200);
//Setup Encoders
SetupEncoders();
//Setup Motors
SetupMotors();
//Setup Ultrasonic
SetupUltrasonic();
//Setup MPU 6050
Setup_MPU6050();
//Setup Reset pins
SetupReset();
//Set up Messenger object handler
Messenger_Handler.attach(OnMssageCompleted);
}
Передняя функция Включение пользовательской процедуры, используется для Конфигурацияираспространятьвседатчикизприколоть。 эта функция Воля с 115,200 из скорости передачи данных инициализируется последовательная связь и настраивается энкодер, привод двигателя машинуустройство,Ультразвуковой датчики MPU6050 изприколоть。 SetupReset()
функция Воляраспространятьодинприколотьксложный Кусочекоборудование,нравиться Переднийизсоединятькартинапоказано。 В предыдущей главе мы уже рассмотрели каждую процедуру настройки датчика, поэтому нет необходимости объяснять определение каждой функции. Messenger
добрыйиметь дело сустройствоприкрепилдобавлятьприезжатьимядляOnMssageCompleted()
изфункция,Долженфункция Волясуществовать ВоляданныевходитьMessenger_Handler
часвызов。
нижедакодизосновнойloop()
функция. Долженфункцияизосновнойглазиздачитатьииметь дело ссериалданные,киотправлятьдоступныйдатчикценить:
void loop()
{
//Read from Serial port
Read_From_Serial();
//Send time information through serial port
Update_Time();
//Send encoders values through serial port
Update_Encoders();
//Send ultrasonic values through serial port
Update_Ultra_Sonic();
//Update motor speed values with corresponding speed received from PC and send speed values through serial port
Update_Motors();
//Send MPU 6050 values through serial port
Update_MPU6050();
//Send battery values through serial port
Update_Battery();
}
Read_From_Serial()
функция Воляот PC читатьсериалданные,и ВоляданныекормитьприезжатьMessenger_Handler
иметь дело сустройствокруководитьиметь дело с。 Update_Time()
функция Волясуществовать Встроенныйтарелканачальствоизкаждый раз Держатьделатьназад Даженовыйчасмежду。 Мы можем Воляэтот разценитьсуществовать PC Обработка в , вы также можете использовать PC из времени.
Мы можем существовать Energia из IDE серединакомпилироватькод,исуществовать LaunchPad Записать код. начальство После передачи кода мы можем просмотреть используемые дляиметь дело с LaunchPad датчикценитьиз ROS узел.
Воля Встроенныйкодначальствопроходитьприезжать LaunchPad После этого следующим этапом будет обработка. LaunchPad начальствоизсериалданные,и Воля Что Конвертировать для ROS тема для дальнейшей обработки. launchpad_node.py
ROS Python водительузел Воля Tiva-C LaunchPad и ROS интерфейс。 launchpad_node.py
документ Кусочек ВChefBot_bringup
Сумкасерединазscript
документпапкасередина. нижедаlaunchpad_node.py
Тяжелыйхотетькодчастьизиллюстрировать:
#ROS Python client
import rospy
import sys
import time
import math
#This python module helps to receive values from serial port which execute in a thread
from SerialDataGateway import SerialDataGateway
#Importing required ROS data types for the code
from std_msgs.msg import Int16,Int32, Int64, Float32,
String, Header, UInt64
#Importing ROS data type for IMU
from sensor_msgs.msg import Imu
launchpad_node.py
документимпортировать Переднийизмодуль. нас МожетсмотретьприезжатьизосновнойформакусокдаSerialDataGateway
。 Это пользовательский модуль, модуль «Должен написать» может использовать поток от LaunchPad Плата получает последовательные данные. нам все еще нужно немного ROS тип данных — обработка данных. нижекод абзаца даетузелизmain
функция:
if __name__ =='__main__':
rospy.init_node('launchpad_ros',anonymous=True)
launchpad = Launchpad_Class()
try:
launchpad.Start()
rospy.spin()
except rospy.ROSInterruptException:
rospy.logwarn("Error in main function")
launchpad.Reset_Launchpad()
launchpad.Stop()
Долженузелизосновнойдобрый НедляLaunchpad_Class()
。 этотдобрый Включатьзапускать,останавливатьсяконецсериалданныеи Воля Что Конвертировать для ROS Тема из всех методов. существовать main функциясередина,нас ВолясоздаватьLaunchpad_Class()
изобъект。 создаватьобъектназад,нас ВолявызовStart()
метод,Долженметод Волязапускать Tiva-C LaunchPad и PC междусериалкоммуникация. нравитьсяфруктынаспроходитьтипCtrl + C
Приходитьсерединаперерывводительузел,это Воля Тяжелыйнабор LaunchPad и остановись PC и LaunchPad междусериалкоммуникация.
нижекодчастьотLaunchpad_Class()
изструктураустройство。 существоватьнижекодчастьсередина,Мы Воляот ROS Поиск по параметрам LaunchPad досказпортискорость передачи данных,и яспользовать ЭтипараметрисходныйизменятьSerialDateGateway
объект。 когда任чтопроходитьвходитьизсериалданныеприезжатьдостигатьсериалпортчас,SerialDataGateway
объект Волясуществоватьэтотдобрый Внутривызов_HandleReceivedLine()
функция. эта функция Воля обрабатывает каждую строку последовательных данных, а Воля извлекает, преобразует и вставляет каждую ROS Тип данных темы из соответствующего заголовка середина:
#Get serial port and baud rate of Tiva C Launchpad
port = rospy.get_param("~port", "/dev/ttyACM0")
baudRate = int(rospy.get_param("~baudRate", 115200))
#################################################################
rospy.loginfo("Starting with serial port:
" + port + ", baud rate: " + str(baudRate))#Initializing SerialDataGateway object with serial port, baud
rate and callback function to handle incoming serial dataself._SerialDataGateway = SerialDataGateway(port,
baudRate, self._HandleReceivedLine)
rospy.loginfo("Started serial communication")
###################################################################Subscribers and Publishers
#Publisher for left and right wheel encoder values
self._Left_Encoder = rospy.Publisher('lwheel',Int64,queue_size
= 10)self._Right_Encoder = rospy.Publisher('rwheel',Int64,queue_size
= 10)
#Publisher for Battery level(for upgrade purpose)
self._Battery_Level =
rospy.Publisher('battery_level',Float32,queue_size = 10)
#Publisher for Ultrasonic distance sensor
self._Ultrasonic_Value =
rospy.Publisher('ultrasonic_distance',Float32,queue_size = 10)
#Publisher for IMU rotation quaternion values
self._qx_ = rospy.Publisher('qx',Float32,queue_size = 10)
self._qy_ = rospy.Publisher('qy',Float32,queue_size = 10)
self._qz_ = rospy.Publisher('qz',Float32,queue_size = 10)
self._qw_ = rospy.Publisher('qw',Float32,queue_size = 10)
#Publisher for entire serial data
self._SerialPublisher = rospy.Publisher('serial',
String,queue_size=10)
Мы Волядлядатчики (напр. энкодер, IMU ультразвуковой датчик), а также все серийные данные (используется дляотлаживать)создавать ROS Объект издатель. Еще мы Воля поставили подписку на команду скорости приезжатьроботиз левого руля и правого руля. Когда команда скорости приезжать достигает темы, Воля вызывает соответствующий обратный вызов, чтобы отправить команду скорости прибытияроботиз. LaunchPad:
self._left_motor_speed = rospy.Subscriber('left_wheel_speed',Float32,self._Update_Left_Speed)
self._right_motor_speed = rospy.Subscriber('right_wheel_speed',Float32,self._Update_Right_Speed)
настраиватьнад ChefBot После узла водитель нам понадобится Воляроботи. ROS Навигационный стек подключается для автономной навигации. Основные требования к автономному навигационному изда, узлу роботоводителя от ROS Стек навигации получает команды скорости. Им можно управлять удаленно. В дополнение к этим функциям робот также должен иметь возможность рассчитывать данные о пробеге Кусочекили и генерировать навигационный стек для отправки приезжим. TF данные. Должен быть один PID Контроллер для управления степенью скорости двигателя. ниже ROS Пакеты помогают нам выполнять эти функции. differential_drive
Сумка Включатьосуществлять Переднийиз Держатьделатьизузел. Мы повторно используем эти узлы в Волясуществовать Сумка для реализации этих функций. ты Можетсуществоватьэта страницаиз ROS серединапопытаться найтиприезжатьdifferential_drive
Сумка.
На рисунке ниже показано, как эти узлы взаимодействуют друг с другом:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-jwCp3aId-1681873784556)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00128.jpeg)]
показывать ROS узелиз Манипуляторблок-схема
ChefBot_bringup
Сумкасерединакаждыйузелизиспользоватьспособнравиться Вниз:
twist_to_motors.py
:этотузелвстреча Воля ROS Twist
Заказили Проволокаскоростьирогскорость Конвертировать дляодининдивидуальныйэлектродвигательскорость Цель。 Цельскоростьк~rate
(кгерцдляодин Кусочек)изскорость Ставкавыпускать,иисуществоватьTwist
информацияостанавливатьсяконецназадвыпускатьtimeout_ticks
часмеждуизскоростьстепень. Нижедаэтот узел Воля публиковать и подписываться и по теме и параметру:
Опубликовать тему:
lwheel_vtarget(std_msgs/Float32)
:Далевыйколесоиз Цельскорость(к m/s дляодин Кусочек)。
rwheel_vtarget
(std_msgs
/Float32
):Даверноколесоиз Цельскорость(к m/s дляодин Кусочек)。
Подписаться на тему:
Twist
(geometry_msgs
/Twist
):Дароботиз ЦельTwist
Заказ。 Долженроботиспользовать x направление линейной скорости и Twist информацияизрогскоростьθ
。
Важный ROS параметр:
~base_width
(float, default: 0.1
):Дароботдваколесоребенокмеждурасстояние,крисдляодин Кусочек。
~rate
(int, default: 50
):Давыпускатьскорость Цельизскорость Ставка(герц)。
~timeout_ticks
(int, default:2
):Даостанавливатьсяконец Twist информацияназадвыпускатьизскорость Цельинформацияизкомпилировать Число。
pid_velocity.py
:Даодинпростойодиниз PID Контроллер может получать обратную связь от энкодера колеса для управления скоростью каждого двигателя. существоватьдифференциал Система В приводе на каждое колесо требуется один PID контроллер. это Воляоткаждыймашинаколесочитатькодерданныеиконтролькаждыймашинаколесоизскоростьстепень.
Опубликовать тему:
motor_cmd
(Float32
):Да PID Выход контроллераприжимез двигателя на конечном выходе. Мы можем использоватьout_min
иout_max
ROS Изменения параметров PID выходизобъем。
wheel_vel
(Float32
):Да Манипуляторколесоизтекущийскорость,один Кусочекдля m/s。
Подписаться на тему:
wheel
(Int16
):книгатемадавращатькодеризвыход。 роботизкаждыйкодер Всеиметькаждыйсизтема.
wheel_vtarget
(Float32
):Да Цельскорость,один Кусочекдля m/s。
Тяжелыйхотетьпараметр:
~Kp
(float
,default: 10
):Долженпараметрда PID Контроллер пропорционального усиления.
~Ki
(float, default: 10
):Долженпараметрда PID Контроллер интегрального усиления.
~Kd
(float, default: 0.001
):Долженпараметрда PID Контроллер дифференциального усиления.
~out_min
(float, default: 255
):Да Моторскоростьценитьизминимальный лимит。 этотпараметр Воляскоростьценитьпределдлясказатьдляwheel_vel
темаизэлектродвигатель。
~out_max
(float, default: 255
):Даwheel_vel
темаизмаксимумпредел(кгерцдляодин Кусочек)。
~rate
(float, default: 20
):Давыпускатьwheel_vel
темаизсоотношение。
ticks_meter
(float, default: 20
):Даза метризмашинаколесокодервырезатьстепеньчисло。 Даодинобщая ситуацияпараметр,потому чтодляэтотакжесуществовать Чтоонузелсерединаспользовать。
vel_threshold
(float, default: 0.001
):нравитьсяфруктыроботскоростьуронитьк Долженпараметрниже,нас Волямашинаколесо Видетьдлятихийконец。 нравитьсяфруктымашинаколесоизскорость Маленький Вvel_threshold
,Мы Воля это трактуем за ноль.
encoder_min
(int, default: 32768
):Дакодерчитатьчислоизсамый маленькийценить。
encoder_max
(int, default: 32768
):Дакодерчитатьчислоизмаксимумценить。
wheel_low_wrap
(int, default: 0.3 * (encoder_max - encoder_min) + encoder_min
):Этиценитьрешать Конечноодометрдав Вгрузнаправлениевозвращатьсядатольконаправление。
wheel_high_wrap
(int, default: 0.7 * (encoder_max - encoder_min) + encoder_min
):Этиценитьрешать Конечноодометрдав Вгрузнаправлениевозвращатьсядатольконаправление。
diff_tf.py
:этотузелвычислитьодометриз Конвертироватьисуществоватьодометррамкаироботизбазафундаментрамка Измежду广播。
Опубликовать тему:
odom
(nav_msgs
/odometry
):выпускатьодометр(роботизтекущийпозаиискажение)。
tf
:этотпредоставилодометррамкаироботбазафундамент Связьмежду Конвертировать。
Подписаться на тему:
lwheel
(std_msgs
/Int16
),rwheel
(std_msgs
/Int16
):Этидароботокодеризвыходценить。
ChefBot_keyboard_teleop.py
:этотузелиспользоватьклавиатураначальствоиз КонтрольотправлятьTwist
Заказ。Опубликовать тему:
cmd_vel_mux
/input
/teleop
(geometry_msgs
/Twist
):этот Воляиспользоватьклавиатура Заказвыпускать Twist информация.
сейчассуществовать,насуже Исследовать ПонятноChefBot_bringup
Сумкасерединазузел,Наши исследования Воля запускают документирование функциональности.
сейчассуществовать,нас Воля ИсследоватьChefBot_bringup
Сумкаизкаждыйзапускатьдокументиз Функция:
robot_standalone.launch
:этотзапускатьдокументизосновной Функциядазапускатьlaunchpad_node
,pid_velocity
,diff_tf,
иtwist_to_motor
Издобрыйизузел,котроботполучатьдатчикценитьи Воля Заказскоростьотправлять Даватьробот。keyboard_teleop.launch
:этотзапускатьдокумент Воляиспользоватьклавиатураначинать遥控Держатьделать。 этозапускатьChefBot_keyboard_teleop.py
узелкосуществлятьклавиатура遥控Держатьделать。3dsensor.launch
:этотдокумент Волязапускать Kinect OpenNI драйвер и начать публикацию RGB Глубинный поток. Это также волязающий узел лазерного сканера глубины, узел Должен будет Воляоблако. точекданные Конвертировать длялазерное сканированиеданные.gmapping_demo.launch
:этотзапускатьдокумент Волязапускать SLAM Узлы карты, чтобы нанести на карту окружающую территорию робота.amcl_demo.launch
:использовать AMCL, робот может определить местонахождение Кусочка и предсказать его существование на карте «начальствоиз Кусочек». После установки карты существования начальства в Кусочекробот, мы можем дать команду роботу, чтобы переместить карту начальство в определенное место Кусочек. Затем,Робот может самостоятельно перемещаться со своей текущей позиции Кусочка и приезжать к целевой позиции Кусочка.view_robot.launch
:этотзапускатьдокументпоказывать RViz серединаз Манипулятор URDF Модель.view_navigation.launch
:этотзапускатьдокументпоказыватьроботнавигациянеобходимыйизвседатчик.У нас существует Интелиз NUC PC серединанастраивать Понятно ChefBot ROS Сумка,и Воля Встроенныйкодначальствопроходитьприезжать LaunchPad тарелканачальство。 Следующий шагда Воля NUC PC Разместите существующее робототехническое учреждение, Конфигурация ноутбука, позволяющего удаленно подключаться к роботу, протестировать каждый узел и использовать его. ChefBot иззапускдокумента осуществляет автономную навигацию.
и ChefBot Прежде чем мы соберемся, нам нужно подготовить основное оборудование беспроводной линии. отустройство。 роботи Удаленный ноутбук должен находиться в одной сети для подключения. Если бы манипулятор PC использовать, если удаленный компьютер находится в той же сети. IP адреспроходить SSH проходить SSH от удаленного ноутбука, подключающегосяприез Магнипулятор PC。 существовать Воляробот PC Прежде чем ставить робота нам следует Должен Воляробот PC подключатьприезжать к беспроводной сети, чтобы после подключения Воля к беспроводной сети он запомнил детали подключения. После включения робота компьютер Должно автоматически подключатьсяприезжать к беспроводной сети. Однажды робот PC Соединяяприжазез беспроводной сети, мы можем воля превратить ее в настоящего изроботсередина. На рисунке ниже показанороботудаленный PC изоединять картинку:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-XzHYut2n-1681873784556)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00129.jpeg)]
роботудаленный PC изникто Проволокасоединятькартина
начальствокартинапредполагалось ChefBot из IP для192.168.1.106
,удаленный PC из IP для192.168.1.101
。
Мы можем использовать SSH Удаленный доступ ChefBot Терминал. Мы можем использоватьниже Заказ Авторизоваться ChefBot,Чтосерединаrobot
да ChefBot PC из Имя пользователя:
$ ssh robot@192.168.1.106
Авторизоваться ChefBot PC когда это Воля просит Введите робота PC пароль. Введите робота PC После ввода пароля мы можем получить доступ кроботу PC Терминал. Авторизоватьсяприезжатьробот PC Наконец-то мы можем начать тестирование ChefBot из ROS узел и тест да НОот ChefBot Внутренний из LaunchPad тарелканачальстволовитьполучатьприезжатьсериалценить。 Обратите внимание, что при использовании нового терминала вам следует SSH снова Авторизоваться ChefBot PC。
нравитьсяфруктыChefBot_bringup
Сумка Уже правильно Установитьсуществовать PC начальство,и установил плату LaunchPad,носуществоватьбегать ROS водительузел До,нас Можетбегатьminiterm.py
инструмент Приходить检проверятьсериалценитьданетпроходить USB Правильное размещение PC 。 Мы можем использоватьdmesg
Заказпопытаться найтиприезжатьсериалоборудованиеимясказать。 Мы можем использоватьниже Заказбегатьminiterm.py
:
$ miniterm.py /dev/ttyACM0 115200
Если отображается сообщение об отказе в разрешении,пожалуйстасуществоватьudev
документпапкасерединаписатьрегулированиено,кнастраивать USB Оборудование по лицензии, данное существует Нет. 6 глава“Воляприводидатчикироботконтрольустройствоинтерфейс”,или ВОЗМы можем использоватьниже Заказ Прочас Дажеизменять Разрешения。 существоватьздесь,насгипотезаttyACM0
да LaunchPad из Имя устройства. Если ты PC серединазоборудованиеимясказатьдругой,нодолжениспользовать ДолженимясказатьзаменятьttyACM0
:
$ sudo chmod 777 /dev/ttyACM0
Если все в порядке, то мы получим Волю ниже, как показано на скриншоте:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-XFdVdxiD-1681873784556)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00130.jpeg)]
miniterm.py
извыход
письмоb
используется для роботизированного отображения показаний батареи; В настоящее время оно не реализовано. Долженценитьсейчассуществоватьнастраиватьдляноль。 Эти ценить происходят от Tiva C Launchpad。 Существуют различные методы измерения напряжения на плате микроконтроллера. Ниже приведен метод。 письмоt
поверхность Показыватьроботначинатьбегать Встроенныйкодназадпройтиизобщийчасмежду(кмикросекундыдляодин Кусочек)。 Нет.дваценитьдасуществовать LaunchPad Время, необходимое для выполнения полной операции в секундах (в секундах). Если мы выполняем расчеты роботапараметров в реальном времени, мы можем использовать этотценить. В настоящее время у нас нет возможности использовать этотценить, но Воля, вероятно, будет использовать это в будущем. письмоe
Соответственно указать левуюивернокодеризценить。 Оба ценить равны нулю, потому что дляробот не сдвинулся с места. письмоu
поверхность Показывать УЗИрасстояниедатчикизценить。 Получаем расстояние ценить в сантиметрах для одного Кусочка. письмоs
поверхность Показыватьроботизтекущийколесоскорость。 Долженценитьиспользуется для объекта досмотраиз. Фактическое начальство, скорость да PC Сам из контрольного выхода.
хотеть Волясериалданные Конвертировать для ROS тема,насдолженбегатьимядляlaunchpad_node.py
изводить машинуустройствоузел. Нижекодпоказать, как выполнить этот узел.
первый,насдолженсуществоватьзапускать任чтоузел Добегатьroscore
:
$ roscore
использоватьниже Заказбегатьlaunchpad_node.py
:
$ rosrun ChefBot_bringup launchpad_node.py
Если все в порядке, получаем нижевыход в терминале из узла:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-q21mr0CN-1681873784557)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00131.jpeg)]
launchpad_node.py
извыход
бегатьlaunchpad_node.py
После этого мы, Волясмотретьприезжатьгенерироватьнижетема,Как показано на скриншоте:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-PQUy5vMM-1681873784557)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00132.gif)]
launchpad_node.py
Генерироватьтема
Мы можем пройтиподписка/serial
тема Приходитьпроверятьсмотретьводительузелловитьполучатьизсериалданные. Мы можем использовать Волю для отладки цели из. нравитьсяфруктысериалтемапоказыватьизданныеиminiterm.py
серединазданные Взаимнотакой же,но Можетподтверждатьузелбегатьнормальный。 Ниже Скриншотда/serial
темаизвыход:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-MAe2DSQ4-1681873784557)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00133.gif)]
LaunchPad узелвыпускатьиз/serial
темаизвыход
настраиватьChefBot_bringup
Сумканазад,нас Сразу Можетначинатьиспользовать ChefBot из Навигация автономна. В настоящее время у нас есть только доступ ChefBot PC из Терминал. для визуализированной модели робота, датчиковые, карты ожидания, мы должны существовать из пользователя PC серединаспользовать RViz。 Мы должны существовать PC Для этого требуется некоторая настройка. Внимание Долженизда, пользователи из PC Должен был и ChefBot PC То же самое из настройки программного обеспечения.
Нам нужно сделать одно дело да Воля ChefBot PC настраиватьдля ROS хозяиноборудование. Мы можем пройтинастраиватьROS_MASTER_URI
ценить Воля ChefBot PC настраиватьдля ROS хозяиноборудование. ROS_MASTER_URI
настраиватьданеобходимыйнастраивать; Он уведомляет узел ROS хозяинстоятьизЕдиный идентификатор ресурса(URI)。 Когда ты для ChefBot PC удаленный PC настраивать Взаимнотакой жеизROS_MASTER_URI
час,Мы можем существовать на удаленном компьютере с доступом к компьютеру ChefBot изтема.,нравитьсяфруктынассуществоватьместныйбегать РВиз, это Воля визуализация ChefBot PC середина Генерироватьтема.
предполагалось ChefBot PC IP для192.168.1.106
,удаленный PC IP для192.168.1.10
。 Вы можете для Chefbot PC удаленный PC настройки статики ИП, чтобы существовал во всех тестах Должен IP Всегда одно и то же, иначе, если это произойдет автоматически, то в каждом тесте вы можете получить разные результаты. IP。 хотетьсуществоватькаждыйсистемасерединанастраиватьROS_MASTER_URI
,отвечатьсуществоватьhome
документпапкасерединаз.bashrc
в файле Включатьниже Заказ。 На рисунке ниже показаносуществоватькаждыйсистемасередина Включать.bashrc
документнеобходимыйизнастраивать:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-Slnpzn9Y-1681873784557)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00134.jpeg)]
ChefBot изсеть Конфигурация
существоватьза единицу PC из.bashrc
конецотделениедобавить в Эти ХОРОШО,Затемв соответствии стыизсеть Дажеизменять IP адрес.
После создания этих настроек нам остаётся только существовать. ChefBot PC Терминалначальствозапускатьroscore
,Затемсуществоватьудаленный PC начальствоосуществлятьrostopic list
Заказ。
Если вы посмотрите на любую тему,Затем настройки Заканчиваем. Сначала мы можем использовать клавиатуру для дистанционного управления роботом.,чтобы проверить функцию роботизации и подтвердить, получил ли датчик цену.
Мы можем использоватьниже Заказзапускатьроботводительи Чтоонузел. пожалуйста Уведомление,этототвечать Долженсуществоватьиспользовать SSH Авторизоватьсяназадсуществовать ChefBot в терминале Выполнение:
$ roslaunch ChefBot_bringup robot_standalone.launch
запускать Манипуляторводительиузелназад,использоватьниже Заказзапускатьклавиатура遥控Держатьделать。 Это также должно существовать ChefBot PC из Новое начало терминала завершено:
$ roslaunch ChefBot_bringup keyboard_teleop.launch
Чтобы активировать Kinect, пожалуйста, выполните команду. этот Заказтакжесуществовать ChefBot Терминальное начальство выполняет:
$roslaunch ChefBot_bringup 3dsensor_kinect.launch
Если вы используетеизда Orbecc Astra,пожалуйстаиспользоватьнижезапускатьдокументзапускатьдатчик:
$ roslaunch ChefBot_bringup 3d_sensor_astra.launch
Чтобы просмотреть датчикданные, мы можем выполнить команду ниже. Это Волясуществовать RViz Посмотреть модель Манипулятора в существующем состоянии удаленно PC начальствоосуществлять。 Если существуют отдаленные PC начальствонастраиватьChefBot_bringup
Сумка,Вы можете использовать команду доступниже,ипроходить ChefBot PC Визуализируйте данные модели робота:
$ roslaunch ChefBot_bringup view_robot.launch
Ниже Скриншотда RViz извыход。 Мы можем видеть проживание на скриншоте. LaserScan и PointCloud картографированиеизданные:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-iq194UTZ-1681873784557)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00135.jpeg)]
RViz серединаз ChefBot LaserScan данные
начальстволапшаиз Скриншотыпоказывать RViz серединаз LaserScan。 наснуждатьсясуществовать RViz из Левая партия исполняется начальством LaserScan Тема для отображения данных лазерного сканирования. лазерное сканированиеданныеотметкасуществоватьобласть просмотраначальство。 Если вы хотите просмотреть Kinect/Astra серединазоблако точечные, нажмите пожалуйста RViz из кнопки «Добавить» слева и затем выберите во всплывающем окне PointCloud2。 выбиратьтема,отсписоксерединаодинударять/camera/depth_registered
,Ваш Воля выглядит так, как показано ниже на скриншоте: изображение:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Предложение: Я хочу сохранить изображения прямо ниже (img-l16ZJJRQ-1681873784558) (https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py/img/00136. JPEG)]
с PointCloud данныеиз ChefBot
После использования датчика мы можем выполнить SLAM Гостиная изкарта. нижепроцесс Можетпомощьнассуществоватьэтотроботначальствозапускать SLAM。
Чтобы выполнить сопоставление, мы должны выполнить команду ниже.
ниже Заказсуществовать ChefBot в терминалезапускатьробот Водитель:
$ roslaunch ChefBot_bringup robot_standalone.launch
Ниже команда Волязания прерывания процесса отображения. Обратите внимание, что это должно быть Долженсуществовать. ChefBot Терминальное начальство выполняет:
$ roslaunch ChefBot_bringup gmapping_demo.launch
Составление карты возможно только в том случае, если показания одометра верны. Если отробот получает «приехать оценить одометр», мы Воля получает «приехать» вя занный предыдущей командой изнижеинформацию. Если вы получите сообщение о прибытии, мы можем подтвердить Gmapping который работает нормально:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-tEB2AhrZ-1681873784558)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00137.jpeg)]
с PointCloud данныеиз ChefBot
Чтобы начать работу пульта дистанционного управления с клавиатуры, введите команду:
$ roslaunch ChefBot_bringup keyboard_teleop.launch
Чтобы просмотреть реальную карту существованиясоздаватьиз, нам понадобится использовать команду существования Remote System начальствозапуска. RViz:
$ roslaunch ChefBot_bringup view_navigation.launch
существовать RViz После просмотра робота в использовании клавиатуры вы можете переместить робота и просмотреть исходное существованиесоздаватьизкарта. Нарисовав всю область на карте, мы можем существовать ChefBot PC Терминалначальствоиспользоватьниже Заказдержатьземлякартина:
$rosrun map_server map_saver -f ~/test_map
существовать Переднийизкодсередина,test_map
дахотетьхранилищесуществоватьhome
документпапкасерединазземлякартинаизимясказать。 ниже Скриншотпоказывать Понятно Зависит отроботсоздаватьизкомнатизкарта:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-sOVatgje-1681873784558)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00138.jpeg)]
комната с картами
После сохранения карты,Мы можем использовать ROS Управляет функцией автономной навигации.
Строить пост на карте,Закрыть все приложение,Затемиспользоватьниже Заказсновабегатьробот Водитель:
$ roslaunch ChefBot_bringup robot_standalone.launch
использоватьниже Заказсуществоватьхранилищеизземлякартинаначальствозапускатьлокализацияинавигация:
$ roslaunch ChefBot_bringup amcl_demo.launch map_file:=~/test_map.yaml
существоватьудаленный PC начальствоиспользоватьниже Заказначинатьпроверятьсмотретьробот:
$ roslaunch ChefBot_bringup view_navigation.launch
существовать RViz , нам может понадобитьсяиспользовать 2D Кнопка оценки позы указывает начальную позу. Мы можем использоватьэтоткнопкасуществоватьземлякартинаначальство Дажеизменятьроботпоза。 нравитьсяфруктыроботможетдоступземлякартина,Так Мы можем использовать 2D Nav Goal кнопка, чтобы дать команду роботу переместить Кусочек в нужную позицию. Начиная заказывать Кусочек, вы можете использовать AMCL Алгоритм смотрит на облако частиц вокруг приезжающегоробота:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-bZK5JdYB-1681873784558)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00139.gif)]
использовать AMCL робот локализации
Нижедароботот Текущие настройки Кусочка Автоматическая навигация по прибытию Целевой Настройки Кусочка на снимке экрана. Гол Кусочек отмечен черным пятном:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-yWp2WHHq-1681873784558)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00140.jpeg)]
сипользовать карту для автономной навигации
отроботприезжать черную точку из черной линии дароботприезжать достигает цели Кусочек из запланированного пути. нравитьсяфруктыроботникто Законпопытаться найтиприезжатьземлякартина,но Можетспособныйнуждатьсятонкая настройкаChefBot_bringup
param
документпапкасерединазпараметрдокумент. связанный Даже多тонкая настройкаиз Подробности,Можетсуществоватьэта страницаначальствопроверятьсмотреть ROS начальствоиз AMCL Сумка.
В этой главе рассматривается сборка ChefBot изаппаратное программное обеспечение и встроенные коды Воли ROS Код интегрирован в приезжающийробот для выполнения автономной навигации. нассмотретьприезжать Понятноиспользовать Нет. 6 глава,“Воляприводи Датчик подключен кробот КОНТРОЛЛЕР" дизайн изроботааппаратное обеспечение Компонент。 Мы собрали роботиз различных частей и соединили наши Созданы. для роботовизпрототип PCB。 это Зависит от LaunchPad Плата, привод двигателя машинуустройство,Сдвиг влево Кусочек устройства,Ультразвуковые датчики IMU состав. LaunchPad тарелканачальствомигающий новыйиз Встроенныйкод,Долженкод Можетироботсерединазвседатчиквыполнить интерфейс,и Можетот PC Отправить или Получите данные.
смотретьнад Встроенныйкод После этого мы, Воля ROS Python водительузел Конфигурациядляи LaunchPad тарелканачальствоизсериалданныеинтерфейс。 и LaunchPad доскантерфейсназад,насиспользовать ROS хранилище Библиотекасерединаdifferential_drive
Сумкасерединазузелвычислить Понятноодометрданныеиразницаводить машинуустройствоконтроль. Мы Воляроботи ROS Соединение с навигационным стеком. Это позволяет нам SLAM и AMCL Осуществлять автономную навигацию. Мы также посмотрели SLAM и AMCL создал карту и приказал роботу двигаться автономно.
Вы можете отниже ссылку в разделе учитьсясвязанный ROS серединазробот Зрение Сумкаиз Дополнительная информация:
существоватьначальствоодинглавасередина,насобсуждать Понятноиспользуется для автономной навигации и зроботаппаратное компоненты программного обеспечения и Сумкаизинтегрированы. После интеграции следующий шаг да Строить GUI для управления роботом. настолькосуществовать Строитьодин GUI,Должен GUI Может служить нижним слоем ROS Команда изкурок. Пользователи могут использовать GUI кнопка Приходитьзаменятьсуществовать Терминалначальствобегатьвсе Заказ。 Мы хотим дизайниз GUI да предназначен для типичного гостиничного номера с девятью столиками. Пользователь может создать гостиничный номер из карты начальства настройки таблицы местоположения Кусочек и заказать роботу, чтобы перейти к определенному столу начальства для доставки еды. После доставки еды пользователь может дать команду роботу переместить приезжать в исходное место Кусочка.
В этой главе Воля рассматриваются следующие темы:
хотетьсуществоватьэта главасерединатестприложениеикод,тынуждаться Установить Понятно ROS Kinetic из Ubuntu 16.04 LTS PC /ноутбук.
тынуждатьсяучитьсяуже Установитьиз Qt,PyQt и RQT。
текущийдоступныйдвасамый популярныйиз GUI Рамда Qt и GTK+。 и GTK+ да открытый исходный код, кроссплатформенный инструмент пользовательского интерфейса Сумкаиразвивать платформу. Эти две программные платформы были GNOME и KDE ждать Linux Среды рабочего стола широко доступны.
существоватьэта главасередина,Мы Воляиспользовать Qt Кадр из Python обязательность Приходитьвыполнить GUI, потому что дляи по сравнению с другими методами Qt из Python обязательность Дажелегкийразвивать。 Мы, Воля, изучаем, как начать развивать GUI и яспользовать Python верно Чтопрограммировать. существоватьобсуждать Понятнобазакнигаиз Python и Qt После программирования мы с Волей обсудили Qt и Python из ROS интерфейс,этоихужесуществовать ROS Доступен в формате . Мы, Воля, сначала изучим, что да Qt UI Фреймы и как мы существуем из PC Установить на это.
Qt кросс-платформенная и прикладная среда, широко используемая дляразвивать имеет GUI Интерфейс и инструмент командной строки, программное обеспечение. Qt почти Можетиспользуется для всех операционных систем, таких как Windows,macOS X,Android ждать。 используется дляразвивать Qt приложениеизосновнойпрограммированиеязыкда C++,нодажитьсуществоватьразличныйнравиться Python,Ruby,Java ждатьязыкизобязательность。 Посмотрим, как существовать Ubuntu 16.04 Установить на Qt SDK。 Мы Воляот Ubuntu серединазвысокий Уровень борьбы Сумкаинструмент(APT)Установить Qt。 APT Уже подписано Ubuntu Установить Предоставляются вместе. потому чтоэтот,для Установить Qt/Qt SDK, мы можем просто использовать команду Должен, команду Воляот Ubuntu Сумкахранилище Библиотека Установить в Qt SDK и его необходимые зависимости. Мы можем использоватьниже Заказ Установить Qt Версия 4:
$ sudo apt-get install qt-sdk
этот Заказ Воля Установить整индивидуальный Qt SDK И его проекты требовали из Библиотеки. Ubuntu хранилище Библиотекасерединадоступный Сумка Можетспособный Нетдадо настоящего времени Версия。 Чтобы получить последнюю версию Qt,Мы можем найти ссылку для скачивания подходящих применений. для различных OS Платформа из Qt изсуществовать Проволокаили Оставлять Проволока Установитьпрограмма。
существоватьсистема Установить на Qt После этого мы, Волясмотретьприезжать Как использовать Qt развивать GUI и я Python Взаимодействие.
Давайте посмотрим, как подключить Python и Qt。 Обычно Питон В использовании доступны два модуля. длясоединятьприезжать Qt пользовательский интерфейс. Два самых популярныхиз Рамда:
PyQt да Qt Самый популярный на всех платформах Python обязательность№1。 PyQt Зависит от Riverbank Computing Limited сопровождение разработки. этодля Qt Версия 4 и Qt Версия 5 поставлятьобязательность,и Следоватьприкрепил GPL(Версия 2 или 3) и коммерческая лицензия. PyQt Можетиспользуется для Qt Версия 4 и 5, соответственно названные для PyQt4 и PyQt5。 Эти два модуля и Python Версия 2 и 3 совместимый.PyQt Включать 620 Несколько классов, охватывающих пользовательский интерфейс, XML, сетевую связь, Интернет. ждать。
PyQt существовать Windows,Linux и macOS X Доступен в формате .Это да Установить Qt SDK и Python так что Установить PyQt из Предпосылки. Windows и macOS X из двоичного документа Кусочек по ссылке ниже。
нас Волясмотретьприезжать Как использовать Python 2.7 существовать Ubuntu 16.04 Установить на PyQt4。
нравитьсяфруктыхотетьсуществовать Ubuntu/Linux Установить на PyQt, который можно использовать ниже. этот Заказ Воля Установить PyQt библиотека, ее зависимости и некоторые Qt инструмент:
$ sudo apt-get install python-qt4 pyqt4-dev-tools
PySide проект программного обеспечения с открытым исходным кодом, для Qt Структура обеспечивает Python обязательность。 PySide проект Зависит от запуска Nokia, для нескольких платформ. Qt обязательность。 PySide серединаспользуется для Сумкаattire Qt Библиотека технологий PyQt Разные, но оба API сходство. Qt 5 В настоящее время не поддерживается PySide。PySide Можетиспользуется для Windows,Linux и macOSX。ниже Связь Волягидтысуществовать Windows и macOS X начальствонастраивать PySide。
PySide изпредпосылок PyQt такой же. Давайте посмотрим, как установить PySide в Ubuntu 16.04 LTS.。
PySide Сумкасуществовать Ubuntu Сумкахранилище Библиотека Доступен в формате . ниже Заказ Воля к существованию Ubuntu Установить на PySide модуль и Qt инструмент:
$ sudo apt-get install python-pyside pyside-tools
Давайте использовать эти два модуля,смотретьсмотретьдва ВОЗмеждуразница。
Установить PyQt и PySide Сумканазад,нас Воля Исследовать Как использовать PyQt и PySide писать Hello World GUI。 PyQt и PySide междуосновнойразницатолькосуществовать Внекоторый Заказ。 большинствошагда Взаимнотакой жеиз。 Давайте посмотрим, как сделать Qt GUI и Воля Что Конвертировать для Python код。
Qt Designer даиспользуется для Воляконтрольдизайнивставлятьприезжать Qt GUI серединазинструмент. Qt GUI базовое начальство а XML документ, который включает его компоненты и управляет информацией. использовать GUI из Нет. Один шаг включает в себя его дизайн. Qt Designer инструмент предлагает различные варианты выполнения GUI。
проходитьсуществовать Терминалначальствовходитьdesigner-qt4
Заказ Приходитьзапускать Qt Designer。 На следующем скриншоте Английский Можетзапускназадназад Волясмотретьpriezzatiz Внутри Позволять:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-0aga92Kl-1681873784559)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00141.jpeg)]
Qt 4 Designer
начальстволапшаиз Скриншотпоказывать Понятно Qt Designer интерфейс. от В окне «Новая форма» выберите опцию «Виджеты» и нажмите кнопку «создавать». Этот виджет «Волясоздывать» является пустым; Мы можем Воля разные GUI Элементы управления Qt 4 Designer Перетащите пустой виджет «Приехать» влево. Qt Виджетда Qt GUI избазакнига Строитькусок。 Ниже на скриншоте показано Qt Designer излевыйсторонаокнотащить ПонятноPushButton
изповерхностьодин:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-PNrZvGBg-1681873784559)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00142.jpeg)]
Форма виджета Qt Designer
нас Воляхотеть СтроитьизHello World
приложение ВоляиметьодинPushButton
。 когданасодинударятькнопкачас,Hello World
информация Воляодеяло Распечататьсуществовать Терминалначальство。 существовать СтроитьHello World
приложение До,Что нам нужно изучитьда Qt Signal и Slot,потому чтодлянасдолжениспользовать Эти Функция Приходить СтроитьHello World
приложение。
существовать Qt Использование обработки сигналов и слотов GUI событие. Когда событие произойдет, оно будет GUI Отправьте сигнал. Qt Виджет имеет множество предопределенных сигналов, которые пользователь может использовать. GUI Добавляйте пользовательские сигналы к событиям. Слот да вызывается в ответ на конкретную сигнальную функцию. существоватьэтот Примерсередина,насиспользоватьPushButton
изclicked()
письмо Числоидляэтотписьмо Числосоздаватьодинсопределениеслот。
Мы можем существоватьэтотсопределениефункциясерединаписать Собственныйизкод。 Давайте посмотрим, как создается кнопка, сигнал Воля, соединяющий слот прибытия, а также Воля в целом. GUI Конвертировать для Python。 нижедасоздавать Hello World GUI Шаги, включенные в приложение:
PushButton
приезжатьпустая форма。clicked()
изписьмо Число。.ui
Расширятьимясередина.Hello World
информация.У нас есть Воля кнопка от Qt Designer Перетащите «Приехать» в пустое окно «середина». в соответствии сF4
ключсуществоватькнопканачальствовставлятьодинслот。 когданасв соответствии с ВнизF4
ключчас,PushButton
покраснеть,нас Можетоткнопканачальствотащитьодин条Проволокаи Воляземлялапшасимвол Числопомещатьнаборсуществоватьхозяинокносередина. существование на скриншоте ниже показано содержание Должена:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-bKg8dCGv-1681873784559)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00143.jpeg)]
существуют Назначение слотов и сигналов в Qt 4 Designer
от Выберите слеваclicked()
письмо Число,Затемодинударять“редактировать”кнопкаксоздаватьодинновыйизсопределениеслот。 Когда мы нажимаем кнопку «Редактировать», у Воля появляется еще одно окно для настройки функции. тыможет пройти Нажмите символ +, чтобы создать функцию настройки. нассоздавать Понятноодинимядляmessage()
изсопределениеслот,Как показано на скриншоте:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-memiWzz5-1681873784559)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00144.jpeg)]
существуют Назначение слотов и сигналов в Qt 4 Designer
Нажмите кнопку ОК, Воля UI документ Сохранить какдляhello_world.ui
,Затемпокидать Qt Designer。 держать UI После документа посмотрим, как Воля Qt UI файл конвертирован в Python документ.
отниже Связьсерединаучитьсясвязанный Сигналы и слоты Qtиз Дополнительная информация
https://doc.qt.io/qt-5/signalsandslots.html
дизайн UI После документа мы можем Воля UI файл конвертирован в Чтождатьэффектиз Python код。 использоватьpyuic
компилироватьустройствонадстановиться Конвертировать。 нассуществовать Установить PyQt/PySide часуже Установить Понятноэтотинструмент. нижеда Воля Qt UI файл конвертирован в Python документиз Заказ。
мы должны PyQt и PySide использоватьдругойиз Заказ。 ниже Заказ Воля UI Конвертировать для Чтождатьэффектиз PyQt документ:
$ pyuic4 -x hello_world.ui -o hello_world.py
pyuic4
даодин UI Компилятор используется для Воля UI файл конвертирован в Чтождатьэффектиз Python код。 наснуждатьсясуществовать-x
параметрназаднестии UI документимя,исуществовать-o
параметрназаднестиивыходдокументимя。
PySide Команда практически не изменилась. PySide использоватьpyside-uic
заменятьpyuic4
Воля UI файл конвертирован в Python документ. Остальные параметры те же:
$ pyside-uic -x hello_world.ui -o hello_world.py
Фронт командования Волядля UI документгенерироватьждатьэффектиз Python код。 Это Волясоздывать есть GUI Компоненты Python добрый. Генерировать Скрипт Волябезиметьсопределениефункцияmessage()
изопределение. Нам следует добавить эту специальную функцию для генерации кода. Ниже процесс Воля поможет вам добавить пользовательскую функцию; потому чтоэтот,когда вы нажимаете кнопку,Воляосуществлятьсопределениефункцияmessage()
。
от приведено здесь PyQt Генерировать Python код。 pyuic4
иpyside-uic
Генерироватькодда Взаимнотакой жеиз,Толькодаимпортироватьформакусокимясказатьдругой。 Все остальные детали такие же. использовать PyQt Генерироватькодизиллюстрироватьтакжеподходящийиспользуется для PySide код。 от Переднийиз Конвертировать Генерироватькоднравиться Вниз。 Кодовая структура и параметр могут быть настроены в соответствии с вашим дизайном. UI Изменения в файлах:
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(514, 355)
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(150, 80, 191, 61))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.retranslateUi(Form)
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), Form.message)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText( QtGui.QApplication.translate("Form", "Press", None, QtGui.QApplication.UnicodeUTF8))
#This following code should be added manually
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
Переднийизкодданассуществовать Qt Designer приложениесерединадизайниз Qt UI документизждатьэффект Python Скрипт. Эта работа даэтоткода, состоящая из пошагового процесса:
if __name__ == "__main__":
начинатьосуществлять。 PyQt кодсерединаз Нет.одна вещьдасоздаватьодинQApplication
объект。 QApplication
добрый Трубкапричина GUI приложениеизконтрольпотокиосновнойнастраивать。 QApplication
добрый Включатьхозяинцикл событий,Чтосередина Воляиметь дело си Планирование Windows Система и другие источники обо всех событиях. Он также обрабатывает инициализацию приложения и заканчивает. QApplication
добрый Кусочек ВQtGui
формакусоквнутренний。 этоткодсоздаватьимядляapp
изQApplication
объект。 Нам придется добавить основной код вручную.
Form = QtGui.QWidget()
ХОРОШОВолясоздаватьодинQWidget
добрыйизимядляForm
изобъект,Долженобъектжитьсуществовать ВQtGui
формакусоквнутренний。 QWidget
добрыйда Qt Все объекты пользовательского интерфейса основаны на добром. это может быть из основного Windows Система получает событие мыши и клавиатуры.
ui = Ui_Form()
ХОРОШОсоздаватьодинсуществоватькодсерединаопределениеизUi_Form()
добрыйизимядляui
изобъект。 Ui_Form()
объект Можетловить受нассуществоватьначальствоодин ХОРОШОсерединасоздаватьизQWidget
добрый,ии МожетсуществоватьэтотQWidget
объектсерединадобавить вкнопка,текст,кнопкаконтрольи Чтоон UI компоненты. Ui_Form()
добрый Включатьдвафункция:setupUi()
иretranslateUi()
。 Мы можем, ВоляQWidget
объектпроходить递ДаватьsetupUi()
функция. этотфункция Волясуществоватьэтот Маленькийотделение件объектначальстводобавить в UI Такие компоненты, как кнопки, для слотов распределения сигнала ждут. если необходимо,retranslateUi()
функциявстреча Воля UI из языкового перевода на другие языки. Например, если вам нужен английский перевод «Воля» на испанский, вы можете упомянуть соответствующее испанское слово в «существуетэтфункция».
Form.show()
ХОРОШОпоказыватьскнопкаитекстизпоследнее окно。
Следующийдасоздаватьслотфункция,Долженфункция Воля РаспечататьHello World
информация. слотопределениесуществоватьUi_Form()
добрыйвнутреннийсоздавать。 нижешаг Воляимядляmessage()
изслотвставлятьUi_Form()
добрый.
message()
функцияопределениенравиться Вниз:
def message(self):
print "Hello World"
этототвечать ДолженделатьдляфункциявставлятьприезжатьUi_Form()
добрыйсередина. кроме того,существоватьUi_Form()
добрый ВнутриизsetupUi()
функциясередина Дажеизменятьниже ХОРОШО:
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), Form.message)
Form.message
параметротвечатьзаменятьдляself.message
параметр。 前один ХОРОШОВоляPushBbutton
письмо Числоclicked(),
соединятьприезжатьнасужесуществоватьUi_Form()
добрыйсерединавставлятьизself.message()
слот。
ВоляForm.message
параметрзаменятьдляself.message
параметрназад,Мы можем выполнить код,выход Воля Как показано ниже:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-Fc9mc0Ge-1681873784560)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00145.jpeg)]
Запустите приложение Pyqt4
Когда нажимаем кнопку "Нажали" Воля печатает Hello world информация. Это дапроходить Python и Qt настраиватьсопределение GUI из Весь контент.
существуют В следующем разделе мы, воля, посмотрим на то, как приезжать в наши Создан. для роботовизактуальный GUI。
существовать PyQt серединанадстановитьсяHello World
приложение Изназад,нассейчассуществовать Воляобсуждатьиспользуется дляControl ChefBot из GUI。 Строить GUI из В основном используетсядорога дасоздавать Более простой способ для управления роботом. Например, если «Воляробот» используется в существующем отеле для подачи еды, лицу, управляющему «Долженроботизом», не нужно учиться запускать сложные команды «Долженроботиз»; потому чтоэтот,для ChefBot Строить GUI Можетуронить Низкийсложный杂секси яспользоватьсемья Дажелегкий。 Мы планируем использовать PyQt,ROS и Python интерфейс Строить GUI。 Можетсуществовать GitHub начальствоизниже Связьначальствополучатьпридется ChefBot ROS Сумка。
Если вы еще не клонировали код, вы можете клонировать его с помощью команды «Использовать»:
$ git clone https://github.com/qboticslabs/learning_robotics_2nd_ed.git
GUI кодrobot_gui.py
помещатьнаборсуществоватьchefbot_bringup
Сумка Внутриизscripts
документпапкасередина.
На следующем скриншоте показанонасдля ChefBot дизайниз GUI:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-I93PsrBv-1681873784560)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00146.jpeg)]
Запустите приложение Pyqt4
Графический интерфейс имеет следующие функции:
Когда нам придется развернуться в существующем отеле ChefBot Когда мы сделаем из Нет шаг дасоздавать карту номера. После того, как правильно нарисуем карту всей комнаты, мы должны Воля карту держатьсуществоваробот. PC начальство。 Робот выполняет картографирование только один раз. После рисования карты мы можем определить процедуру навигации и дать команду роботу для ввода определенного места на карте. ChefBot ROS Сумка Следоватьприкрепилдобрыйпохожий酒店Окружающая средазземлякартинаимоделирование Модель. Теперь мы можем реализовать эту эмуляцию и локализацию для тестирования. GUI,существовать Внизодинглавасередина,нас Воляобсуждать Как использовать GUI контрольаппаратное обеспечение. Если у вас существует локальная система, установите на ChefBot ROS пакет, мы можем смоделировать среду отеля и протестировать GUI。
При заказе аналогичного отеля из механизмов запускаем моделирование ChefBot:
$roslaunch chefbot_gazebo chefbot_hotel_world.launch
запустить ChefBot после моделирования,Мы можем использоватьуже Строитьизземлякартинабегать Конечно Кусочекинавигацияпримерстепень。 Долженземлякартинапомещатьнаборсуществоватьchefbot_bringup
Сумкасередина. Мы можем существовать Должен Сумкасерединасмотретьприезжатьодинmap
документпапка。 существоватьздесь,Мы Воляиспользоватьэтотземлякартинаосуществлятьэтоттест。 Мы можем использоватьниже Заказдобавлятьнагрузкалокализацияинавигацияпримерстепень:
$ roslaunch chefbot_gazebo amcl_demo.launch
map_file:=/home/<user_name>/catkin_ws/src/chefbot/chefbot_bringup/map/hotel1.yaml
Сопоставление путей документирования может быть изменено в различных существующих системах.,потому чтоэтотпожалуйстаиспользоватьсистемасерединазпутьвместоэтотпуть。
Если путь прибытия правильный, Воля начинает проектировать. ROS Навигационный стек. нравитьсяфруктыхотетьсуществоватьземлякартинаначальствопроверятьсмотретьроботиз Кусочекнаборили Руководствонастраиватьроботизисходный Кусочекнабор,Можетиспользоватьниже Заказиспользовать RViz:
$ roslaunch chefbot_bringup view_navigation.launch
существовать RViz середина,Мы можем использовать 2D Команда навигационной кнопки «Поворот» приехать к любым координатам карты.
Мы также можем использовать команду программирования robot для перехода к любым координатам карты. ROS навигациякучаиспользовать ROS actionlib
Библиотекаработаделать。 ROS actionlib
Библиотекаиспользуется для выполнения вытесняемых задач; Это похоже на ROS Служить. относительно ROS Сервисиз Преимуществасуществовать В,Если мы не хотим отменить запрос в это время,Вы можете отменить это.
существовать GUI , мы можем приказывать роботиспользовать Python actionlib
Библиотекаизменятьприезжатьземлякартина坐отметка。 Мы можем использоватьнижетехнология Приходитьполучатьпридется桌ребеноксуществоватьземлякартинаначальствоиз Кусочекнабор。
запускатьформа拟устройствои AMCL После узла запустите клавиатурный пульт и Воляробот переместите приезжать возле каждого стола. Используемая команда для перевода и вращения робота:
$ rosrun tf tf_echo /map /base_link
когданасодинударятьGo
кнопкачас,Должен КусочекSET Воля получает стек навигации «приехать»,ииробот Волярегулирование划Чтопутьидостигатьприезжать Что Цель。 Мы даже можем отменить задачу в любой момент. Поэтому Шеф Бот GUI заряжатькогдаactionlib
клиент,Долженклиент Воляземлякартина坐отметкаотправлятьприезжатьactionlib
Служитьустройство; Прямо сейчас Навигационный стек.
сейчассуществовать,Мы можем использоватьниже Заказбегатьробот GUI Для управления роботом:
$ rosrun chefbot_bringup robot_gui.py
нас Может Выберите номер стола,Затем нажмите кнопку «Выполнить»к Воляроботсдвигккаждыйповерхность。
гипотезатыклонировать Понятнодокументиполучатьпридется Понятноrobot_gui.py
документ,нас Воляобсуждатьдляactionlib
клиентдобавить вприезжатьUi_Form()
добрыйсерединазосновнойслот,И достаньте батарею и Манипуляторсостояниеизценить.
наснуждатьсядляэтот GUI приложениеимпортироватьниже Python Модуль:
import rospy
import actionlib
from move_base_msgs.msg import *
import time
from PyQt4 import QtCore, QtGui
Нам нужны другие модули ROS Python клиентrospy
иactionlib
формакусок,используется для Воляценитьотправлятьприезжать Навигационный стек. move_base_msgs
формакусок Включатьнуждатьсяотправлятьприезжатьнавигациякучаиз Цельизинформацияопределение.
Python В словаре упоминается, что слово «приехать» стоит возле каждого стола. Нижекодпоказывать имеет жестко запрограммированное местоположение возле каждой таблицы:
table_position = dict()
table_position[0] = (-0.465, 0.37, 0.010, 0, 0, 0.998, 0.069)
table_position[1] = (0.599, 1.03, 0.010, 0, 0, 1.00, -0.020)
table_position[2] = (4.415, 0.645, 0.010, 0, 0, -0.034, 0.999)
table_position[3] = (7.409, 0.812, 0.010, 0, 0, -0.119, 0.993)
table_position[4] = (1.757, 4.377, 0.010, 0, 0, -0.040, 0.999)
table_position[5] = (1.757, 4.377, 0.010, 0, 0, -0.040, 0.999)
table_position[6] = (1.757, 4.377, 0.010, 0, 0, -0.040, 0.999)
table_position[7] = (1.757, 4.377, 0.010, 0, 0, -0.040, 0.999)
table_position[8] = (1.757, 4.377, 0.010, 0, 0, -0.040, 0.999)
table_position[9] = (1.757, 4.377, 0.010, 0, 0, -0.040, 0.999)
обеспечить доступэтот словарь, который мы можем разместить доступроботсуществовать из Кусочек возле каждого стола.
В настоящее время у нас есть только четыре цены для демонстрационных целей. Найдите другие таблицы, чтобы добавить больше.
настолькосуществоватьраспространять Некоторыйпеременная Приходитьиметь дело сUi_Form()
добрыйсерединазповерхность Число,Манипуляториз Кусочекнаборкиactionlib
клиент:
#Handle table number from spin box
self.table_no = 0
#Stores current table robot position
self.current_table_position = 0
#Creating Actionlib client
self.client = actionlib.SimpleActionClient('move_base',MoveBaseAction)
#Creating goal message definition
self.goal = MoveBaseGoal()
#Start this function for updating battery and robot status
self.update_values()
нижекодпоказывать Понятноэтоткодсерединакнопкаивращатькоробка Маленькийотделение件из Сигнал и слотраспространять:
#Handle spinbox signal and assign to slot set_table_number()
QtCore.QObject.connect(self.spinBox, QtCore.SIGNAL(_fromUtf8("valueChanged(int)")), self.set_table_number)
#Handle Home button signal and assign to slot Home()
QtCore.QObject.connect(self.pushButton_3, QtCore.SIGNAL(_fromUtf8("clicked()")), self.Home)
#Handle Go button signal and assign to slot Go()
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.Go)
#Handle Cancel button signal and assign to slot Cancel()
QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL(_fromUtf8("clicked()")), self.Cancel)
обработка нижнего слота UI серединазвращатькоробкаценитьираспространятьодинповерхность Число。 такой же,это Воляповерхность Число Конвертировать для Взаимноотвечатьизробот Кусочекнабор:
def set_table_number(self):
self.table_no = self.spinBox.value()
self.current_table_position = table_position[self.table_no]
Эта кнопка «Поворот приехать» находится в слоте «Поворот приехать» и определении. Эта функция будет отображать выбранную форму из Манипулятор Кусочек, установленную в заголовке целевого сообщения, и Воля будет отправлена в стек навигации середина:
def Go(self):
#Assigning x,y,z pose and orientation to target_pose message
self.goal.target_pose.pose.position.x=float(self.current_table _position[0])
self.goal.target_pose.pose.position.y=float(self.current_table _position[1])
self.goal.target_pose.pose.position.z=float(self.current_table _position[2])
self.goal.target_pose.pose.orientation.x = float(self.current_table_position[3])
self.goal.target_pose.pose.orientation.y= float(self.current_table_position[4])
self.goal.target_pose.pose.orientation.z= float(self.current_table_position[5])
#Frame id
self.goal.target_pose.header.frame_id= 'map'
#Time stamp
self.goal.target_pose.header.stamp = rospy.Time.now()
#Sending goal to navigation stack
self.client.send_goal(self.goal)
нижекоддаCancel()
слотопределение. Эта Воля отменяет все запланированные на тот момент пути Манипулятора:
def Cancel(self):
self.client.cancel_all_goals()
нижекоддаHome()
изопределение. этотвстреча Воляповерхностьсетка Кусочекнаборнастраиватьдляноль,ивызовGo()
функция. Кусочекнабордлянольизповерхностьсеткадароботизоригинальный Кусочекнабор:
def Home(self):
self.current_table_position = table_position[0]
self.Go()
применяется приведенное ниже определение дляupdate_values()
иadd()
функция. update_values()
метод Воляначинатьсуществовать Проволокастепеньсередина Даженовый Батарея Властьироботсостояние. add()
функция Воля Поиск Батареясостояниеироботсостояниеиз ROS Параметр и Воля — это соответственно настройки для индикатора выполнения и метки:
def update_values(self):
self.thread = WorkThread()
QtCore.QObject.connect( self.thread, QtCore.SIGNAL("update(QString)"), self.add )
self.thread.start()
def add(self,text):
battery_value = rospy.get_param("battery_value")
robot_status = rospy.get_param("robot_status")
self.progressBar.setProperty("value", battery_value)
self.label_4.setText(_fromUtf8(robot_status))
этотвпредоставилранеефункциясерединаспользоватьизWorkThread()
добрый. WorkThread()
добрыйнаследоватьс Qt поставлятьизиспользуется для ПроволокастепеньизменятьизQThread
。 Проволокастепеньтолькокособенный Конечноиз Задерживатьпроблемаписьмо Числоupdate(Qstring)
。 существоватьранееизфункцияupdate_values()
середина,update(QString)
письмо Числосоединятьприезжатьself.add()
слот; потому чтоэтот,от Проволокастепеньпроблемаписьмо Числоupdate(QString)
час,это Волявызовadd()
слоти Даженовый Батареяисостояниеценить:
class WorkThread(QtCore.QThread):
def __init__(self):
QtCore.QThread.__init__(self)
def __del__(self):
self.wait()
def run(self):
while True:
time.sleep(0.3) # artificial time delay
self.emit( QtCore.SIGNAL('update(QString)'), " " )
return
Мы обсудили, как для ChefBot делать GUI, но да Должен GUI Подходит только дляиспользуется дляControl ChefBot изпользователь. Если кто-то хочет отладить и проверить роботданные, может понадобиться другой инструмент. ROS Датчики Отличный инструмент отладки, который можно визуализировать с помощью роботизированных изображений.
RQT инструмент популярный из ROS инструмент. это на основеиспользуется для ROS из GUI развиватьизна основе Qt изFrame. давайте обсудим RQT инструмент,Установитьпроцесскинравитьсячто检проверятьроботсерединаздатчикданные.
RQT да ROS серединазпрограммная среда,этокплагинизформавыполнить Различный GUI инструмент. Можем добавить для с помощью плагина Воля RQT серединаз Можетдококно。
Можетиспользоватьниже Заказсуществовать Ubuntu 16.04 Установить в RQT。 существовать Установить RQT Прежде чем убедиться, что вы завершили установку ROS Indigo。
$ sudo apt-get install ros-<ros_version>-rqt
Установить RQT После Сумки мы можем получить доступ RQT из GUI выполнить,сказатьдляrqt_gui
,существовать Чтосередина Мы можем, Воляrqt plugins
доксуществоватьодининдивидуальныйокносередина.
позволятьнасначинатьиспользоватьrqt_gui
。
существоватьбегатьrqt_gui
До,пожалуйстабегатьroscore
Заказ:
$ roscore
бегатьниже Заказкзапускатьrqt_gui
:
$ rosrun rqt_gui rqt_gui
Если команда проект работает нормально, мы Воля получим следующее окно:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-NHHDyGI7-1681873784560)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00147.jpeg)]
бегать RQT
Мы можем существоватьбегатьчасдобавлятьнагрузкаиразгружатьнагрузкаплагин. анализировать ROS Журнал сообщений мы можем от "плагина | Загрузить» для загрузки Console плагин. существоватьниже Примерсередина,насдобавлятьнагрузкаконтрольбашняплагинисуществоватьrospy_tutorials
Внутрибегатьодинверно话устройствоузел,Долженузел Воля Кодинимядля/chatter
изтемаотправлятьHello World
информация.
бегатьниже Заказкзапускатьузелtalker.py
:
$rosrun rospy_tutorials talker.py
существуюже Скриншот,rqt_gui
Пакетиметьдваимядля Console и Topic Monitor изплагин. Плагины монитора тем можно загрузить в разделе Плагины | Плагины. Темы| Тематический монитор. Плагин консоли отслеживает отправку сообщений каждого узла и их серьезность. Этот объект для отладки очень полезен. существуюже Скриншот,rqt_gui
излевыйстороначасть Пакетиметьконтрольбашняплагин,иверносторонано Пакетиметь Тематический монитор. темамониторустройство Волясписокдоступныйтема,и Волямонитор Чтоценить。
существуюже Скриншот,контрольбашняплагинмониторtalker.py
узелизинформацияи Что严Тяжелыйсекссорт Не,темамониторустройствомонитор/chatter
тема Внутриизценить:
[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-i11pOAgz-1681873784560)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00148.jpeg)]
использоватьдругойизплагинбегать RQT
насвозвращаться Можетсуществоватьrqt_gui
начальство Может Видетьизменятьданные,примернравитьсяизображениеипесня Проволокакартина。 дляроботиз Навигация проверьте, есть несколько доступных плагинов. длясуществоватьrqt_gui
начальство嵌входить RViz。 навигацияпроверятьсмотретьустройствоплагинот/map
темаиз Видетькартина。 Доступен плагин визуализации «Существующий плагин» | Найдите место проживания в разделе «Плагины». Визуализация.
Мы также можем использовать RQT создавать GUI。 создавать Можетдобавлятьнагрузкаприезжатьrqt_gui
из RQT плагинизиллюстрировать Можетсуществоватьниже Кусочекнаборпопытаться найтиприезжать。
существуют В этой главе мы обсудили ChefBot создавать GUI из метода, метод Должен доступен обычным пользователям без внутренней разработки обучающего робота. насиспользоватьсказатьдля PyQt из Qt из Python обязательность Приходитьсоздаватьэтот GUI。 существовать Исследоватьосновнойиз GUI дизайн До,нас Исследовать ПонятноHello World
приложение,чтобы легче понять PyQt. Полный дизайн пользовательского интерфейса Qt Designer,иииспользовать Python UI Составитель Воля UI файл конвертирован вждатьэффектиз Python Скрипт. существовать Qt Designer дизайн победил мастера GUI После этого мы, Воля UI файл конвертирован в Python Скрипт,исуществовать Генерировать Скриптсерединавставлять Понятнонуждатьсяизслот。 ChefBot GUI Вы можете запустить робот, выбрать номер стола и дать команду роботу, чтобы войти в настройки Должен Кусочек. каждыйповерхностьиз Кусочекнабор Всеот Генерироватьземлякартина,существоватьэтотнассуществоватьэтот Python Настройки Кусочек жестко запрограммированы в Скрипте в целях тестирования. После выбора таблицы мы сопоставляем начальствонастройки целевой настройки Кусочка, а затем нажимаем кнопку «Выполнить», чтобы переместить нужную настройку Кусочка. Пользователи могут отменить операцию, когда Следовать, и вернуться к приезду исходного робота Кусочек. GUI Также можно получать информацию о состоянии робота в реальном времени и состоянии его батареи. существоватьобсуждать Понятноробот GUI После этого мы смотрели ROS серединазотлаживать GUI инструмент RQT。 Мы смотрели, как приезжать, некоторые используют дляотлаживатьроботданныеизплагин. В следующей главе мы рассмотрим полный тест и калибровку приезжающего робота.
существоватьниже Связьсерединаучитьсясвязанный ROS серединазробот Зрение Сумкаиз Дополнительная информация:
<inertia>
,<collision>
и<gazebo>
。Move_base
узелиметьиметь дело сроботсередина Различныйнавигацияребеноксистемаиз Функция。 Он имеет возможность работать с глобальным и локальным планировщиком, а также с роботизированной картой. один旦узелполучатьприезжать Цель Кусочекнабор,Должен целевой кусочек настройки подаются в подсистему навигации,кприезжатьдостигать Должен Цель Кусочекнабор。объем = Эхо-стрелка выходизвысокий уровень времени * Скорость(340М/С)/ 2
。объем = (6787 / (V - 3)) - 4
click
да Можетвызовимядляhello()
изфункцияизписьмо Число。