Руководство по обучению роботов Python: 6–10
Руководство по обучению роботов Python: 6–10

шесть、Воляприводи Датчик подключен робот-контроллер

В главе существования начальство мы обсуждали, что необходимо для Строитьроботизаппаратное компоненты обеспечения из подбора. Важные компоненты роботиздаприводидатчика. Привод для робота обеспечивает мобильность, а датчик предоставляет информацию об окружающей среде. В этой главе мы, Воля, сосредоточимся на нашей Волясуществовать Долженробот использоватьиз различных типов приводных датчиков, а также на том, как Воля их и Tiva C LaunchPad выполнить интерфейс,Tiva C LaunchPad даTexas Instruments (TI)из 32 Кусочек ARM плата микроконтроллера, существует 80MHz。 Начинается наша дискуссия о воляот приводе. Сначала мы обсудим энкодер привода мотор-редуктора постоянного тока. Мотор-редукторы постоянного тока работают на постоянном токе и понижаются с помощью шестерен, чтобы уменьшить скорость вала и увеличить конечный крутящий момент вала. Этот тип двигателя очень экономичен и может удовлетворить наши требования. нас Волясуществоватьроботпрототипсерединаспользовать Должен Мотор。

существуют Часть этой главы из Нет., мы Воля обсуждаем робот Система приводаиздизайн。 насизроботизСистема приводада Дифференциальная скоростьводить машинуустройство,Зависит от Два мотор-редуктора постоянного тока с энкодерами.Один привод двигателя. машинуустройствосостав. Драйвер двигателя состоит из Tiva C LaunchPad контроль. Мы с Воля изучаем электродвигатели привод машинуустройствои Интерфейс квадратурного энкодера с панелью запуска Tiva C。 После этого мы Воля представим некоторые из новейших приводов, эти приводы можно использовать с существующими мотор-редукторами постоянного тока с энкодерами. Если желаемый робот требует большей точности нагрузки и точности, нам придется переключить привод этого класса. Наконец, мы, Воля, представляем некоторые распространенные способы использования. дляроботиздругойдатчик.

В этой главе мы представляем:

  • ВоляDC мотор-редукторы Tiva C LaunchPad соединять
  • Ортогональныйкодери Tiva C LaunchPad изинтерфейс
  • интерфейскодизиллюстрировать
  • соединять Dynamixel привод
  • соединять Ультразвуковые датчикиинфракрасная близостьдатчик
  • интерфейсинерционная единица измерения(IMU)

Технические требования

ты Волянуждатьсясуществовать Ubuntu 16.04 LTS серединанастраиватьнуждатьсяизроботаппаратное обеспечениекомпонентыи Energia IDE。

Интерфейс мотор-редуктора постоянного тока с Tiva C LaunchPad

существоватьначальствоодинглавасередина,Мы выбрали двигатель постоянного тока.,Долженэлектродвигатели Pololu из энкодера и встроенной платы Texas Instruments (TI), называемой для Tiva C LaunchPad。 Нам нужны компоненты ниже Воля мотори LaunchPad соединять:

  • Два Pololu Металлический мотор-редуктор, размер для 37Dx73Lmm, энкодер считает за оборот 64
  • Pololu Колеса, 90х10мм и один из колес в тон
  • Кронштейн привода двойного двигателя Pololu VNH2SP30, MD03A
  • Герметичная свинцово-кислотная/литий-ионная батарея 12 В.
  • 3.3V к 5V преобразователь логических уровней; пожалуйстадоступэта страница
  • Tiva C 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,OUT2BVIN(+) и 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 развиватьтарелкаОченьсходство.

Установите Energy IDE

Мы можем найти ссылку для скачивания последней версии. Energia

нас Воляосновнойсуществовать 64 Кусочек Ubuntu 16.04 LTS Процесс установки описан выше. Мы Воляиспользоватьиз Energia версия 0101E0018:

  1. по ссылке на фронтиз скачать подходящее использование для Linux из 64 Кусочек Energia。
  2. Воля Energia Сжать документ. Разархивировать Home документпапкасередина.
  3. нижессылка дает настройку Tiva C Launchpad досказиллюстрировать
  4. тыдолженотниже Ссылка для скачивания71-ti-permissions.rulesдокумент
  5. регулированиенодокумент Воля Разрешить пользователю читатьиписатьзапускатьдосказ Разрешения。 тыдолжен Волядокумент Сохранить какдля71-ti-permissions.rulesиот Текущее выполнение путиниже Заказ,Чтобы получить разрешение от правила Воля документировать приезжать в системную папку документов:
код Язык:javascript
копировать
$ sudo mv 71-ti-permissions.rules /etc/udev/rules.d/
  1. После копирования документа выполните команду ниже, чтобы активировать правила:
код Язык:javascript
копировать
$ sudo service udev restart
  1. тысейчассуществовать Может Воля Tiva C Launchpad вставлять PC исуществовать Linux в терминалеосуществлятьdmesgЗаказкпроверятьсмотреть Linux Журнал ядра. Если уже создан,Сообщение заканчивается устройством последовательного порта.,Как показано на скриншоте:

[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-yVf9AAdT-1681873784540)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00081.jpeg)]

база роботов вид сверху

  1. Если вы видите устройство последовательного порта прибытия,пожалуйстаиспользоватьдокументпапкасерединазниже Заказзапускать Energia:
код Язык:javascript
копировать
    $./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)]

Энергия доска Менеджер

  1. Установить Сумку,может пройти Навигацию приезжать"инструмент | tm4c123 (80MHz) иззапуская плату (Tiva) C)», чтобы выбрать доску, как показано на скриншоте ниже:

[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-7j8StWCe-1681873784541)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00084.jpeg)]

Выбор энергетической панели

  1. Затем,проходитьнавигацияприезжать“инструмент | последовательный порт/dev/ttyACM0”выбрать последовательный порт,Как показано на скриншоте:

[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-yPtQKVHb-1681873784542)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00085.jpeg)]

Выбор последовательного порта Energia

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

[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (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 определяют приколоть,Как показано ниже:

код Язык:javascript
копировать
///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 Далее привод двигателя машина внутренняя из переключателя Воля тормозит, потому что этот мотор тоже Воля тормозит. В настоящее время мы полным ходом работаем над существованием:

код Язык:javascript
копировать
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 Сигнал:

код Язык:javascript
копировать
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Остановитесь за несколько секунд:

код Язык:javascript
копировать
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); 
} 

Интерфейс квадратурного энкодера с панелью запуска Tiva C

машинаколесокодердасоединятьприезжатьэлектродвигательиздатчик,используется для сенсорного колеса по числу оборотов. нравитьсяфруктынас Знатьизменятьчисло,Сразу Можетвычислить出машинаколесоизскоростьи Кусочексдвиг。

для Долженробот,насвыбирать Понятносвстроенныйкодериз Мотор。 Должен энкодер квадратурного типа, может одновременно определять направление и скорость двигателя. В энкодерах используются различные типы датчиков. (напр. оптический датчики датчик Холла), чтобы обнаружить эти параметры. Должен энкодер использовать эффект Холла для определения вращения. Ортогональныйкодер Имеет дваряд,Прямо сейчасКанал А иКанал Б。 Каждый ряд Воля генерирует 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используется длякодерпеременная,Как показано ниже:

код Язык:javascript
копировать
//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()функцияинициализироватькодеризприколоть。 сериалданныекоммуникацияосновнойиспользуется дляпроходитьсериал Терминал检проверятькодерсчитать:

код Язык:javascript
копировать
void setup() 
{ 
    //Init Serial port with 115200 buad rate 
  Serial.begin(115200);   
  SetupEncoders(); 
} 

SetupEncoders()изопределениесуществоватьподизкодсередина Давать出。 Для приема импульсов энкодера нам понадобятся два прикола в плате как для входов. Волякодерприколоть Конфигурациядля Launchpad Подключите вход и активируйте его начальное сопротивление. attachInterrupt ()функциявстреча Волякодерприколоть№1Конфигурациядлясерединаперерыв。 attachInterrupt ()функцияимеет трипараметр。 Нет.одинпараметрдаприколоть Число,Нет.двапараметрдапроцедура обслуживания прерыванийISR),Нет.Три параметра условия прерывания,Прямо сейчасдолженкурок ISR из Состояние прерывания. существоватьэтоткодсередина,нас ВоляокодерприколотьизPinAКонфигурациядлясерединаперерыв; Когда пульс начальства поднимается, его зовет Воля ISR:

код Язык:javascript
копировать
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()функцияпроходитьсериал Терминалнепрерывный Распечататькодерценить:

код Язык:javascript
копировать
void loop() 
{ 
  Update_Encoders();                        
} 

нижекоддаUpdate_Encoders()функцияиз Функцияопределение. этосуществоватьодин ХОРОШОсерединакстартовый персонажeнапечатайте двакодерценить,ии Этиценить Зависит от табуляции пространство разделено. Serial.print()функциядаодинвстроенныйфункция,Он печатает Воля как параметр, указывающий символ/строку:

код Язык:javascript
копировать
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изранеесостояниесравнивать,И может определить направление в соответствии с таблицей преобразования состояний.,И определим, должно ли число да увеличиваться или уменьшаться:

код Язык:javascript
копировать
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

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 подсказку, а затем выполните следующую команду:

код Язык:javascript
копировать
    sudo python setup.py install   

После установки Сумки мы можем попробовать следующее: Python Пример,Должен Пример Воля Обнаружениесоединятьприезжать USB2Dynamixel из Сервопривода и записывает некоторые настройки Следовать машины Кусочек в реализацию Должен Сервопривода. этот Примерподходящийиспользуется для RX и MX сервер:

код Язык:javascript
копировать
#!/usr/bin/env python 

нижекод Воля импортировать этот пример требуется из необходимости Python модуль. Это также включает в себя Dynamixel Python Модуль:

код Язык:javascript
копировать
import os 
import dynamixel 
import time 
import random 

нижекод определен Dynamixel Параметр связи, необходимый из основного параметра. nServosпеременнаяповерхность Показыватьсоединятьприезжатьавтобусиз Dynamixel Сервоприводустройствоизколичество。 portNameпеременнаяинструктировать Dynamixel Сервоприводустройствосоединятьприезжатьиз USB2Dynamixel из Последовательный порт. baudRateпеременнаяда USB2Dynamixel и Dynamixel изкоммуникацияскорость:

код Язык:javascript
копировать
# 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,Прекратите сканирование, потому что это Волясуществовать начальное устройство шины получает сервопривод:

код Язык:javascript
копировать
# 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списокруководить进один步иметь дело с:

код Язык:javascript
копировать
# 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ждать:

код Язык:javascript
копировать
# 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 

нижекод Воля печатает текущий приводиз текущей позиции Кусочка:

код Язык:javascript
копировать
# 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() 

нижекод Воляотприводпрочитать вседанные:

код Язык:javascript
копировать
    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 и Ультразвуковые датчикизкомбинациядля Долженроботпредоставилидеальныйизизбежать столкновенияизметод。

Ультразвуковой датчик расстояния работает следующим образом. Передатчик «Воля» посылает приезжающим из дома ультразвуковые волны, неслышимые для человеческого уха. После отправки ультразвуковой волны он Воляждать ждет возвращения испускаемой волны. Если эха нет, значит, перед роботом нет препятствий. Если датчик-приемник принимает какое-либо эхо от приезжающего, то существование начального приемника генерирует импульс, и можно вычислить общее время, необходимое для распространения волны через приезжающий объект и возвращения к приемнику приезжающего датчика. Если у вас есть время, вы можете рассчитать расстояние до препятствия по формуле:

код Язык:javascript
копировать
Скорость звука проходит вне времени/ 2 = Расстояние от объекта из

Существуют Здесь скорость звука можно принять за 340 м/с.

большинство ультразвуковых датчиков дальности для измерения расстояния и объема 2 смк 400 сантиметр. существоватьэтотроботсередина,насиспользовать Понятносказатьдля HC-SR04 издатчикмодуль. Мы, Воля, изучаем, как Воля HC-SR04 и Tiva C LaunchPad Выполните интерфейс, чтобы получить препятствие на расстоянии.

Интерфейс 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 приколотьпрограммировать.

HC-SR04 работает

На рисунке ниже Показано время каждого сигнала приколотьначальства. Нам нужно применить 10µs из короткого импульса начать дальность, затем Должен модуль Воля, чтобы 40KHz Частота передает восьмипериодный ультразвуковой импульс и обеспечивает его эхо. Эхо имеет расстояние от объекта, его ширину импульса и соотношение объема. Вы можете использоватьниже Расчет формулы отправлен.курокписьмо Числоиловитьполучать回波письмо Числомеждувременной интервалобъем:

код Язык:javascript
копировать
объем = Эхо приколотьвыходизвысокий уровень времени * Скорость(340М/С)/ 2

Лучше всего задерживать каждый курок с задержкой в ​​60 мс перед каждым куроком, чтобы избежать перекрытия между эхо-сигналами куроки:

[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-UgDsufoq-1681873784544)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00095.gif)]

Ультразвуковые датчикизвходитьвыходформа волны

Код интерфейса Tiva C Launchpad

нижеиспользуется для Launchpad из Energia кодот Ультразвуковой датчикчитатьценить,И проводить мониторинг последовательного порта ценить.

нижекод определен Launchpad серединаспользуется для обработки ультразвукового эха икурокприколоти зприколоть, также определяет длительность импульса и расстояние (в см для одного кусочка) из переменных:

код Язык:javascript
копировать
const int echo = 9, Trig = 10; 
long duration, cm; 

нижекодчастьдаsetup()функция. программазапускатьчас Волявызовsetup()функция. используйте его для инициализации переменных, режима приколоть, запуска использования Библиотекаждать. каждый раззапускатьили Тяжелыйнаборзапускатьтарелканазад,настраиватьфункция Воля Толькобегатьодин раз。 существоватьsetup()середина,Инициализируем последовательную связь со скоростью 115200 бод.,ипроходитьвызовSetupUltrasonic();function:настраивать УЗИиметь дело сприколотьизмодель

код Язык:javascript
копировать
void setup() 
{ 

  //Init Serial port with 115200 baud rate 
  Serial.begin(115200);   
  SetupUltrasonic();   
} 

нижеда Ультразвуковые датчикизнастраиватьфункция; это ВоляTriggerприколоть КонфигурациядляOUTPUT,ВоляEchoприколоть КонфигурациядляINPUTpinMode()функцияиспользуется для ВоляприколотьнастраиватьдляINPUTилиOUTPUT

код Язык:javascript
копировать
void SetupUltrasonic() 
{ 
 pinMode(Trig, OUTPUT); 
 pinMode(echo, INPUT);  

} 

создаватьиспользуется для Инициализацияинастраиватьисходныйценитьизsetup()функцияназад,loop()функция Воляв соответствии с В соответствии с Чтоимясказатьиз含义только确осуществлятьинепрерывный循环,кпозволятьтыизпрограммаруководить Дажеизменятьиответ。 использовать Речь идет об активном управлении запуском платы.

Ниже изкодда его основной цикл. Долженфункциядаодинбесконечный цикл,ивызовUpdate_Ultra_Sonic()функцияпроходитьсериалпорт Даженовыйи Распечатать УЗИчитатьчисло:

код Язык:javascript
копировать
void loop() 
{ 
    Update_Ultra_Sonic(); 
    delay(200); 
} 

нижекоддаUpdate_Ultra_Sonic()функцияизопределение. этотфункция Воляосуществлятьниже Держатьделать。 первый,это Волякурокприколотьнабор В2микросекундыизLOWсостояние,иделать10микросекундыизHIGHсостояние. существовать10микросекундыназад,это Воляснова ВоляприколотьвосстанавливатьсядляLOWсостояние. Это основано на временной диаграмме. Мы рассмотрели ширину импульса для проживания. 10µs。

курок 10µs Наконец, мы должны начать с Echo приколоть Читать продолжительность. Продолжительность звука от датчика зависит от времени, необходимого для распространения сигнала приезжающего объекта и от объекта для распространения сигнала приезжающего датчика-приемника. Мы можем использоватьpulseIn()функциячитатьпульспродолжениечасмежду。 придетсяприезжатьпродолжениечасмеждуназад,Мы можем использоватьmicrosecondsToCentimeters()функция Волячасмежду Конвертировать для см,Как показано нижекодом:

код Язык:javascript
копировать
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 Чтобы получить общее расстояние:

код Язык:javascript
копировать
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

существовать Этот разделсередина,Мы, Воля, изучаем, как Воля Tiva C LaunchPad и Python подключиться к из PC серединаз Launchpad Получите данные.

PySerial формакусок Можетиспользуется для Воля Launchpad и Python интерфейс。 связанный PySerial из Подробная документация и ее существование Windows,Linux и OS X начальствоиз Установитьпроцесс,пожалуйста Видетьэта страница

PySerial существовать Ubuntu Доступно в Сумке Менеджере, вы можете существоватьв терминалеиспользоватьниже Заказ Воля Чтолегкий Установитьсуществовать Ubuntu середина:

код Язык:javascript
копировать
    $ sudo apt-get install python-serial  

Установитьpython-serialСумканазад,нас Можетписать Python кодксоединять Launchpad。 интерфейссуществовать приведен в следующем разделе.

импорт нижекода Python изserialмодуль иsysмодуль. serialформакусокиметь дело с Launchpad из последовательного порта и выполнять такие операции, как чтение, запись, ожидание. sysформакусокпоставлятьобъяснениеустройствоиспользоватьилиподдерживатьизнекоторыйпеременнаякииобъяснятьустройство Сильное взаимодействиеиз Функцияиздоступ。 Всегда доступно:

код Язык:javascript
копировать
#!/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

код Язык:javascript
копировать
try: 
    ser = serial.Serial('/dev/ttyACM0',115200) 
except: 
    print "Unable to open serial port" 

нижекод Волячитатьсериалданные,прямойприезжатьсериалзамена персонажей ХОРОШО('n')и Воля Что Распечататьсуществовать Терминалначальстводляконец。 нравитьсяфруктынасв соответствии склавиатураначальствоизCtrl + Cкомбинацияключкпокидатьпрограмма,это Воляпроходитьвызовsys.exit(0)покидать:

код Язык:javascript
копировать
while True: 
    try: 
        line = ser.readline() 
        print line 
    except: 
        print "Unable to read from device" 
        sys.exit(0) 

держатьдокументназад,использоватьниже Заказ Волядокументиз Разрешения Дажеизменятьдля Можетосуществлятьдокумент:

код Язык:javascript
копировать
    $ 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 Формула расстояния инфракрасного датчика выглядит следующим образом:

код Язык:javascript
копировать
объем = (6,787 / (Volt - 3)) - 4

этотв,Напряжениедаот Напряжениеприколотьиз ADC изаналоговое напряжениеценить.

существоватькодиз Нет.одинчастьсередина,нас Воля Tiva C LaunchPad из Нет. 18 приколотьнастраиватьдлявходитьприколоть,ик 115200 скорость передачи данных для запуска последовательной связи:

код Язык:javascript
копировать
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 
} 

существоватьподизкодчастьсередина,контрольустройство Нетперерывчитатьформа拟приколотьи Воля Что Конвертировать дляксантиметрдляодин Кусочекизрасстояниеценить:

код Язык:javascript
копировать
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 6050 к Tiva C LaunchPad

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В, взято с панели запуска.

Настройка библиотеки MPU 6050 в Энергии

В этом разделе обсуждаются 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издобрый,используется для Кдатчикотправлятьданныеиотдатчикловитьполучатьданные:

код Язык:javascript
копировать
#include "Wire.h" 

#include "I2Cdev.h" 
#include "MPU6050.h" 

MPU6050 accelgyro; 

существуют В следующем разделе мы волязаемся I2C Последовательная связь с MPU 6050 Общайтесь и передайте отпечатки последовательного порта датчику ценить. сериалкоммуникацияскорость передачи данныхда115200,Setup_MPU6050()даиспользуется для Инициализация MPU 6050 Коммуникационная функция:

код Язык:javascript
копировать
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 оборудование. Если все прошло успешно, Воля печатает «Соединиться успешно»; в противном случае,Это Воля печать соединить не удалось:

код Язык:javascript
копировать
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 Распечатать обновления

код Язык:javascript
копировать
void loop() 
{ 

   //Update MPU 6050 
    Update_MPU6050(); 

} 

Update_MPU6050()изопределениенравиться Вниз。 Он объявляет шесть переменных для управления трехосным гирометром и гироскопом. MPU 6050 добрыйсерединазgetMotion6()функция Ответственныйотдатчикчитатьновыйценить。 После их прочтения он выведет на последовательный порт Воляпроходить:

код Язык:javascript
копировать
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 избазакнигакод。 существования В следующей главе мы, Воля, обсудим Долженробот исполь зоваиз Датчик. зрения.

вопрос

  1. Что да H схема моста?
  2. Что да Ортогональныйкодер?
  3. Что да 4X Схема кодирования?
  4. наснравитьсячтооткодерданныевычислить Кусочексдвиг?
  5. Каковы характеристики привода Dynamixel?
  6. Что да УЗИдатчик,Как они работают?
  7. тынравитьсячтовычислитьрасстояние Ультразвуковые датчикизрасстояние?
  8. Что даинфракрасная близостьдатчик,Как это работает?

дальнейшее чтение

проходитьниже Ссылка для чтениясвязанный Energia программированиеиз Дополнительная информация

7. Датчик технического зрения и интерфейс ROS.

существоватьначальствоодинглавасередина,нас Исследовать Понятноприводки Как использовать Tiva-C LaunchPad тарелкасоединятьроботиздатчик. существоватьэта главасередина,нас Воляосновнойпредставлять Зрениедатчики это иробот Вместеиспользоватьизинтерфейс。

настолькосуществоватьдизайнизробот Воляиметь 3D Зрениедатчик,ии Мы можем, Воля Чтои Зрение Библиотека(примернравитьсяКомпьютерное зрение с открытым исходным кодомOpenCV),Естественное взаимодействие с открытым исходным кодом(OpenNI)ибиблиотека облаков точекPCL)。 3D Зрениедатчиксуществоватьнасизроботсерединазосновнойприложениедасхозяиннавигация。

Также мы Воля изучаем, как Воля визуальные датчики ROS интерфейссоединять,ки Как использовать Зрение Библиотека(примернравиться OpenCV) обрабатывает то, что чувствует. В последней части этой главы мы изучаем алгоритм отображения в существующем роботе, который называется для SLAMОдновременное картографирование Кусочек),ки Как использовать 3D Датчик технического зрения,ROS иизображениеиметь дело с Библиотека。

В этой главе мы Воля представляем нижеследующие темы:

  • Датчик технического зрения робота и список библиотеки изображений
  • Введение в OpenCV, OpenNI и PCL
  • ROS-OpenCV интерфейс
  • использовать PCL-ROS интерфейсизоблако точекиметь дело с
  • Преобразование данных облака точек в данные лазерного сканирования
  • SLAM Введение

Технические требования

Вам потребуется Установить ROS Kinetic из системы Ubuntu 16.04 и Веб-камеру камеры глубины.,попробовать эту главусерединаз Пример。

Частично мы хотим представить лидирующие позиции на рынке робототехники, которые могут использовать 2D- и 3D-сенсоры зрения.

Датчик технического зрения робота и список библиотеки изображений

2D Датчики зрения Обычная камера фиксирует окружающую среду из 2D рамка изображения в то время как 3D Имеются датчики зрения. 2D кадр изображения и вызывается для глубины каждой точки изображения из дополнительных параметров. Мы можем найти жилье 3D датчикотносительнодатчикосьизкаждыйточкаизx,yиzрасстояние。

На рынке начальство имеет много датчиков зрения. В этой главе упоминаются некоторые вещи, которые могут существовать изроботсерединаспользовать. 2D и 3D Датчик зрения.

Pixy2/CMUcam5

На рисунке ниже показаносказатьдля 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)]

Pixy/CMUcam5

Чаще всего используется из 2D Датчик зрения представляет собой веб-камеру. Они содержат CMOS датчики USB интерфейс, но ничего подобного Pixy Он также имеет встроенные возможности визуальной обработки.

Веб-камера Logitech C920

На рисунке ниже показано Logitech Популярная веб-камера Должен может снимать крупным планом. 5 Мегапиксельное разрешение изображений ивысокий HD видео:

[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-bZVVF2lb-1681873784552)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00110.jpeg)]

Веб-камера Logitech HD C920

Kinect 360

сейчассуществовать,нас Волясмотретьодин Внизрынокначальство Некоторыйдоступный 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 начальствопопытаться найтиприезжать Должендатчик.

Intel RealSense серии D400

[Передача изображения по внешней ссылке не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется загрузить картинку Воля держать непосредственно на начальство (img-diPVIrYo-1681873784552)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/learn-robot-py /img/00112.jpeg)]

Intel RealSense серии D400

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

Новый тип 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)]

Датчик глубины Orbbec Astra

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, OpenNI и PCL

позволятьнассмотретьодин Внизнас Волясуществоватьроботсерединаспользоватьизпрограммная средаи Библиотека。 Во-первых, давайте посмотрим на OpenCV。 Данас Волясуществоватьэтотроботсерединаспользоватьиз Библиотека№1,используется для Обнаружение объекты и другие функции обработки изображений.

Что такое OpenCV?

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 Сумка.

существоватьдинамикасередина:

код Язык:javascript
копировать
    $ sudo apt-get install ros-kinetic-vision-opencv  

существоватьмелодиясередина:

код Язык:javascript
копировать
    $ sudo apt-get install ros-melodic-vision-opencv

Если вы хотите убедиться, что он установлен в вашей системе OpenCV-Python формакусок,Пожалуйста, используйте терминал Linux,ЗатемвходитьpythonЗаказ。 Тогда вам стоит посмотреть, куда приезжать. Python устный переводчик. пытатьсясуществовать Python в терминале Выполните команду ниже, чтобы проверить OpenCV Установить:

код Язык:javascript
копировать
    >>> import cv2
    >>> cv2.__version__

нравитьсяфруктыэтот Заказуспех,но Волясуществоватьтыизсистема Установить наэтот Версияиз OpenCV。 Версия Можетспособныйда 3.3.x или 3.2.x。

нравитьсяфруктыхотетьсуществовать Windows пытаться OpenCV,Вы можете попробовать ссылку ниже

ссылка ниже Воля проведет вас через Mac OS X начальство OpenCV из Установить процесс

OpenCV изосновнойприложениесуществоватьнижеполе:

  • Обнаружение объектов
  • Распознавание жестов
  • взаимодействие человека и компьютера
  • Мобильный робот
  • Спортивное отслеживание
  • система распознавания лиц

Установите OpenCV из исходного кода в Ubuntu

OpenCV Установить Можетсопределение. Если вы хотите настроить OpenCV Установить можно попробовать из исходного кода Установить. ты Можетсуществоватьэта страницасерединапопытаться найтиприезжатьнравитьсячторуководитьэтот Установитьизметод。

хотетьиспользоватьэта главасерединаз Пример,большинство Воля OpenCV и ROS Вместеиспользовать。

Чтение и отображение изображений с помощью интерфейса Python-OpenCV

Нет. Пример Воля загружает изображение и Воля показывает его на экране в оттенках серого.

существоватьподизкодчастьсередина,нас Воляимпортироватьnumpyформакусок Приходитьиметь дело сизображениечисло Группа。 cv2формакусокда Python из OpenCV Сумка Пакетустройство,Мы можем использоватьэто Приходитьдоступ OpenCV Python API。 NumPy да Python программированиеязыкиз Расширять,Добавлена ​​поддержка больших многомерных массивов и матриц.,киверно Этичисло Группаруководить Держатьделатьиз Большойвысокийсортчислоизучатьфункция Библиотека(пожалуйста Видетьэта страницаучиться Дополнительная информация):

код Язык:javascript
копировать
#!/usr/bin/env python 
import numpy as np 
import cv2 

нижефункция Волячитатьrobot.jpgизображениеик Оттенки серогодобавлятьнагрузка Долженизображение。 cv2.imread()функцияиз Нет.одинпараметрдаизображениеизимясказать,Внизодинпараметрдаобозначениедобавлятьнагрузкаизображениецветдобрыйформаизлоготип。 Если флаг Должен больше, чем 0, то Долженизображение возвращает три ряда RGB Цветное изображение; в противном случае возврат. 0。 Если знак для 0, затем загрузите изображение Волядля изображения в оттенках серого; Если флаг Должен меньше, чем 0, это Воля возвращает и загружает изображение то самое изображение:

код Язык:javascript
копировать
img = cv2.imread('robot.jpg',0) 

нижекодчасть Воляиспользоватьimshow()функцияпоказыватьчитатьизизображение。 cv2.waitKey(0)функциядаклавиатураобязательностьфункция. Его параметрда-время (для одного Кусочка в миллисекундах). Если для 0, это Воля ждать нажатия клавиш бесконечно:

код Язык:javascript
копировать
cv2.imshow('image', img) 
cv2.waitKey(0) 

cv2.destroyAllWindows()функция Толькодаразрушать Понятнонассоздаватьизвсе окна:

код Язык:javascript
копировать
cv2.destroyAllWindows() 

Воля Переднийизкод Сохранить какдляimage_read.py,Затемкопировать JPG документи Воля Чтожизньимядляrobot.jpg。 используйте следующий код:

код Язык:javascript
копировать
    $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формакусок,котзахват камерыизображение:

код Язык:javascript
копировать
#!/usr/bin/env python 
import numpy as np 
import cv2

нижефункция ВолясоздаватьодинVideoCaptureобъект。 VideoCaptureдобрыйиспользуется дляот видео документиликамера захват видео. VideoCaptureдобрыйизисходныйизменятьпараметрдакамераизиндексиливидеодокументизимясказать。 Используется только индекс устройства для указывает номер камерыиз. Нет.одинкамераиндексдля 0,оборудованиеимясказатьдля/dev/video0-этот Сразудадля Чтонас Воля0помещатьсуществоватьнижекодсерединаз Оригиналпотому что:

код Язык:javascript
копировать
cap = cv2.VideoCapture(0) 

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

код Язык:javascript
копировать
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 в Ubuntu

Мы можем, Воля OpenNI Библиотекаи ROS пакет установлен вместе. ROS Уже OpenNI реализован интерфейс, но да ROS Полная установка на рабочем столе может не установиться OpenNI Сумка. Если да так, то нам нужна от Сумка менеджера Установить в этом.

ниже Заказ Воля к существованию Kinetic и Melodic Установить в ROS-OpenNI Библиотека(основной Зависит от Kinect Xbox 360 Поддержка датчиков):

код Язык:javascript
копировать
$ sudo apt-get install ros-<version>-openni-launch

ниже Заказ Воля Установить ROS-OpenNI 2 Библиотека (Асус Xtion Pro и Primesense Carmine Основная поддержка):

код Язык:javascript
копировать
    $ 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 Сумкаиз Подробнее,пожалуйста Видетьэта страница

Программирование Kinect с использованием Python, ROS, OpenCV и OpenNI

Посмотрим, как существовать ROS середина Сенсор Кинект для взаимодействия ииспользовать. ROS и OpenNI водительпучоксуществовать Вместе,Долженводитель Можетполучать Kinect из RGB иглубинаизображение。 ROS серединаз OpenNI и OpenNI 2 Сумка Можетиспользуется дляи Microsoft Kinect,Primesense Carmine,Asus Xtion Pro и Pro Live интерфейс。

Когда мы устанавливаем ROS изopenni_launchСумкачас,этовозвращаться Воля Установить Чтоотрод Сумка,примернравитьсяopenni_cameraopenni_cameraСумкада Kinect водитель,используется длявыпускатьоригинальныйданныеидатчикинформация,иopenni_launchСумка Включать ROS Стартовый файл. Эти файлы запуска запускают несколько узлов одновременно и публикуют данные, такие как необработанная глубина,RGB и IR изображениекиоблако точек。

Как запустить драйвер OpenNI

Вы можете использовать USB интерфейс Воля Kinect Датчик подключен компьютер и использоватьв терминалеизdmesgЗаказубеждаться PC начальствоуже Обнаружениеприезжать Сенсор Кинект。 настраивать Kinect После этого мы можем начать ROS из OpenNI Драйвер для получения данных с устройства.

ниже команда Воля открыть OpenNI устройство и загрузите все Nodelet(связанный Дополнительная информация,пожалуйста Видетьэта страница),к Воляоригинальныйглубинаили RGB/IR поток Конвертировать дляглубинаизображение,параллаксизображениеиоблако точек。 ROS nodeletСумкацельсуществоватьпоставлять Что-то вродесуществоватьтакой жеодинпроцесссерединабегатьнесколькоалгоритмизметод,ииалгоритммеждукопироватькопироватьдляноль:

код Язык:javascript
копировать
    $ roslaunch openni_launch openni.launch  

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

код Язык:javascript
копировать
    $ rostopic list  

Вы можете использоватьимядляimage_viewиз ROS Вид инструмента RGB изображение:

код Язык:javascript
копировать
    $ rosrun image_view image_view image:=/camera/rgb/image_color  

В следующей части мы Воля узнаем, как Воля эти и зображи OpenCV Выполните обработку изображения.

Интерфейс ROS с 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 ждатьэффектизизображениедобрыйформаназадпоказыватьвсеизображение。

Создайте пакет ROS с поддержкой OpenCV.

Мы можем создатьодинимядляsample_opencv_pkgиз Сумка,Должен Сумкаиметьниже Зависимости:sensor_msgs,cv_bridge,rospyиstd_msgssensor_msgsЗависимостиопределение Понятно Обычно используетсядатчик(Сумкавключать В соответствии скамера сканирующий лазерный дальномер)из ROS информация. cv_bridgeЗависимостида ROS из OpenCV интерфейс。

Ниже приведена команда для включения ROS Bag без каких-либо зависимостей:

код Язык:javascript
копировать
    $ catkin-create-pkg sample_opencv_pkg sensor_msgs cv_bridge 
 rospy std_msgs  

создавать Сумканазад,существовать Сумка Внутрисоздаватьодинscriptsдокументпапка; У Воля, который используется как позиция держатькодиз Кусочек, следующая часть Воля приезжает Долженкод.

использовать Python,ROS иcv_bridgeпоказывать Kinect изображение

нижекод абзаца дает Python кодиз Нет.Часть. этоосновной涉иимпортироватьrospy,sys,cv2,sensor_msgs,cv_bridge,иnumpyмодуль. sensor_msgsЗависимостиимпортироватьизображениеи Взаимномашинаинформациядобрыйформаиз ROS Тип данных. cv_bridgeформакусокимпортировать ПонятноCvBridgeдобрый,используется для Воля ROS изображениеданныедобрыйформа Конвертировать для OpenCV тип данных и наоборот:

код Язык:javascript
копировать
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

код Язык:javascript
копировать
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 изображениеиглубина изображенияиз Обратный звонок:

код Язык:javascript
копировать
    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теманачальствополучатьприезжатьцветизображениечас,это Волявызовэтот。 этотфункция Воляиметь дело сиспользуется для обнаружения края и цветного поля, а также обнаружения появления края, исходного цвета и отражения:

код Язык:javascript
копировать
    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теманачальствополучатьприезжатьглубинаизображениечас,это Волявызовэтотфункция. этотфункция Воляпоказыватьоригинальныйглубинаизображение:

код Язык:javascript
копировать
       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 Фильтр краев для поиска краев:

код Язык:javascript
копировать
    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()。 Он возвращает только кадр глубины:

код Язык:javascript
копировать
    def process_depth_image(self, frame): 
        # Just return the raw image for this demo 
        return frame 

При закрытии узла нижефункция Воля закрывает окно изображения:

код Язык:javascript
копировать
    def cleanup(self): 
        print "Shutting down vision node." 
        cv2.destroyAllWindows()

нижекоддаmain()функция. это ВоляисходныйизменятьcvBridgeDemo()добрыйивызовrospy.spin()функция:

код Язык:javascript
копировать
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Заказ Можетосуществлять Разрешениячас,Видны только эти узлы:

код Язык:javascript
копировать
    $ chmod +X cv_bridge_demo.py  

нижедазапускатьводительиузелиз Заказ。 использоватьниже Заказзапускать Kinect Водитель:

код Язык:javascript
копировать
    $ roslaunch openni_launch openni.launch  

использоватьниже Заказбегатьузел:

код Язык:javascript
копировать
    $ 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 и зображение

Подключите Orbbec Astra к ROS

Kinect из Одна из альтернативда Orbbec Astra。 иметьиспользуется для Astra из ROS водитель,мы видим как приезжать на благоустройство Должен водитель и от Должендатчикполучить изображение,глубину и облако точек。

Установите драйвер Astra–ROS.

существоватьэта страницаиэта страницасерединанестиприезжать Понятносуществовать Ubuntu серединанастраивать Astra-ROS водительиз полное описание. Установитьводительназад,Можетиспользоватьниже Заказзапускатьэто:

код Язык:javascript
копировать
    $ roslaunch astra_launch astra.launch  

Вы также можете выбрать из ROS Установка репозитория пакетов Astra водитель. Да Установить Эти Сумкаиз Заказ:

код Язык:javascript
копировать
    $ sudo apt-get install ros-kinetic-astra-camera
    $ sudo apt-get install ros-kinetic-astra-launch  

Установить Эти Сумканазад,У вас должны быть настройки устройства и разрешение на использование устройства Должен.,нравитьсяэта страницаМестоописывать。 Вы можете использоватьв терминалеизrostopic listЗаказ检проверятьот Долженводитель Генерировать ROS тема. кроме того,Мы можем использоватьначальствоодин节серединанестиприезжатьиз Взаимнотакой жеиз Python код Выполните обработку изображения.

использовать Kinect,ROS,OpenNI и PCL Облака точек процесса

3D облако точекда Воля 3D Окружающая среда 3D Объект представляет собой вдоль x,y и z Ось сбора точек в одну сторону. Мы можем из разных источников облако точек:хотеть Что?может пройтиписатьпрограмма Приходитьсоздаватьоблако точек,хотеть Что?может пройти Датчик лазерный сканер документаили его генерирует.

PCL Встроенная поддержка OpenNI 3D интерфейс。 Поэтому его можно загрузить с такого устройства, как Prime Sensor из 3D Камера, Майкрософт Kinect или Asus Xtion Pro)серединаполучатьииметь дело сданные.

PCL Воля Включатьсуществовать ROS полный рабочий стол Установитьсередина. Посмотрим, как существовать RViz(ROS серединазданные Может Видетьизменятьинструмент)серединагенерироватьи Может Видетьизменятьоблако точек。

Включите устройство и создайте облако точек.

Используйте следующую команду, чтобы открыть новый терминал и запустить драйвер узла ROS-OpenNI и генератор облаков точек:

код Язык:javascript
копировать
    $ roslaunch openni_launch openni.launch  

этот Заказ Воляактивация Kinect водительи Воляоригинальныйданныеиметь дело сдляудобныйизвыход,примернравитьсяоблако точек。

Если у вас есть Орббек Астра, вы можете командовать:

код Язык:javascript
копировать
    $ roslaunch astra_launch astra.launch  

Мы Воляиспользовать RViz 3D Инструмент визуализации, чтобы увидеть нас изоблако точек。

ниже Заказ Волязапускать RViz инструмент:

код Язык:javascript
копировать
    $ 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 Сумка Трубкапричинаустройство Установитьэтот Сумкаиз Заказ

код Язык:javascript
копировать
    $ sudo apt-get install ros-<version>-depthimage-to-laserscan

Должен Сумкаизосновной Функциядаверноглубинаизображениеизодинчастьруководитькусочеки Воля Что Конвертировать дляждатьэффектизлазерное сканирование Тип данных. ROS sensor_msgs/LaserScanинформациядобрыйформаиспользуется для выпуска данных лазерного сканирования. этотdepthimage_to_laserscanСумка Воляосуществлятьэтот Конвертироватьиподделкалазерный сканерданные. Можетиспользовать RViz Ознакомьтесь с результатами лазерного сканера. Чтобы преобразовать для запуска, мы должны запустить Волю, чтобы выполнить эту операцию из узла конвертера. для того, чтобы начать конверсию, мы должны существоватьзабывающиесяв файле это указывает. нижедазапускатьв файлезапускатьdepthimage_to_laserscanКонвертироватьнеобходимыйизкод:

код Язык:javascript
копировать
  <!-- 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 Визуализация данных лазерного сканирования в

Воля ROS и Kinect используется для SLAM

Мы изроботировали основную цель использования видения датчикизда для обнаружения объектов и навигации робота в существующей среде. 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узел,И роботу Включать необходимо начать отображение параметра среды:

код Язык:javascript
копировать
    $ roslaunch chefbot_gazebo gmapping_demo.launch  

Подвести итог

существование В этой главе мы представляем существование Chefbot серединаспользоватьиз Различный Датчик зрения. нассуществоватьроботсерединаспользовать Понятно Kinect и Астра и узнал о OpenCV,OpenNI,PCL и его приложения. насвозвращатьсяобсуждать Понятно Зрениедатчиксуществоватьроботнавигациясерединазделатьиспользовать,поток ХОРОШОиз SLAM Технология и ее существование ROS серединазприложение。 существовать Внизодинглавасередина,Мы, Воля, следим за прибытием роботов с полным интерфейсом.,иизучать Как использовать Chefbot Осуществлять автономную навигацию.

вопрос

  1. Что да 3D датчик, чем они отличаются от обычных камер?
  2. Каковы основные особенности ROS?
  3. Что такое приложения OpenCV, OpenNI и PCL?
  4. Что да SLAM?
  5. Что да RGB-D СЛЭМ, как это работает?

дальнейшее чтение

тыможет пройтиниже Ссылка для чтениясвязанный ROS серединазробот Зрение Сумкаиз Дополнительная информация:

8. Построить ChefBot аппаратное обеспечениеи Интеграция программного обеспечения

существовать Нет. 3 глава“использовать ROS и URDF В «Моделировании дифференциальных роботов» мы изучали ChefBot Издизайн шасси. существоватьэта главасередина,нас Воляизучать Как использовать Эти Компонент Группа Пакет Долженробот。 Мы также Воля исследуем Долженроботи Tiva-C LaunchPad издатчики и другие электронные компоненты с окончательным интерфейсом. После соединения мы Воля научимся Воляроботи. PC соединять,кинравитьсячтосуществоватьдействительныйроботсерединаспользовать SLAM и AMCL Осуществлять автономную навигацию.

В этой главе Воля рассматриваются следующие темы:

  • Сборка оборудования ChefBot
  • Конфигурация ChefBot PC и Сумка
  • Воля ChefBot датчики Tiva-C Launchpad соединять
  • Встроенный код для ChefBot
  • учиться ChefBot ROS Сумка
  • существовать ChefBot начальствовыполнить SLAM
  • ChefBot серединазсхозяиннавигация

Технические требования

хотетьтестэта главасерединазприложениеикод,ты Волянуждаться Установить 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 аппаратное обеспечение.

Сборка оборудования 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 и установите пакет ChefBot ROS.

существовать ChefBot середина,насиспользовать Intel из NUC PC Подойди и возьми роботодатчиковыеидные ручки. существовать Купить NUC PC После этого нам нужно установить Ubuntu 16.04 LTS。 Установить Ubuntu После этого, пожалуйста, завершите нашу жизнь, упомянутую в предыдущих главах. ROS И это Сумка. Мы можем настроить это индивидуально ПК, после завершения всех настроек конфигурации, вы сможете воля его в роботсередина. нижедасуществовать NUC PC Установить на ChefBot Процесс сумкаиз.

использоватьниже Заказот GitHub клонировать ChefBot из Сумка:

код Язык:javascript
копировать
    $ 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работаделать空между Внутриосуществлять:

код Язык:javascript
копировать
    $ catkin_make  

Если все зависимости верны, установитьсуществовать NUC посередине, затем ChefBot Сумка Волясуществоватьэтотсистемасерединагенерироватьи Установить。 существовать NUC PC начальствонастраивать ChefBot После Сумки мы можем сменить место жительства. Встроенный код для ChefBot。 сейчассуществовать,нас Можетсоединять LaunchPad серединазвседатчик. Волякодначальствопроходитьприезжать LaunchPad После этого мы можем проверить еще раз ROS пакеты и как их запускать. от GitHub клонироватьизкод Включать Tiva-C LaunchPad код, Волясуществовать Это объясняется в следующем разделе.

Воля ChefBot Датчик подключен к 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 Загрузите изкод Включайте встроенные коды, необходимые для компиляции этого кода из Библиотеки. Мы можем существовать здесь, чтобы увидеть основную часть кода проживания и зависит. Нет необходимости объяснять все части, поскольку мы их все уже рассмотрели.

Встроенный код для ChefBot

Обсуждение в этом разделе Воля LaunchPad кодиз основной части. нижедакодсерединаспользоватьизголовадокумент:

код Язык:javascript
копировать
//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добрыйиметь дело спроходитьвходитьизсериалданные:

код Язык:javascript
копировать
//Creating MPU6050 Object 
MPU6050 accelgyro(0x68); 
//Messenger object 
Messenger Messenger_Handler = Messenger(); 

заявление ПонятноMessengerобъектназад,основнойчастьиметь дело с Понятно Моторводить машина, энкодер, ультразвуковой датчик, МПУ 6050,Комплекс Кусочки батарея приколотьиз раздача приколоть. После назначения приколоть,нас Можетпроверятьсмотретькодизsetup()функция. setup()функцияизопределениесуществоватьнижекодсередина Давать出:

код Язык:javascript
копировать
//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()функция. Долженфункцияизосновнойглазиздачитатьииметь дело ссериалданные,киотправлятьдоступныйдатчикценить:

код Язык:javascript
копировать
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 узел.

Написание драйвера ROS Python для ChefBot

Воля Встроенныйкодначальствопроходитьприезжать LaunchPad После этого следующим этапом будет обработка. LaunchPad начальствоизсериалданные,и Воля Что Конвертировать для ROS тема для дальнейшей обработки. launchpad_node.py ROS Python водительузел Воля Tiva-C LaunchPad и ROS интерфейс。 launchpad_node.pyдокумент Кусочек ВChefBot_bringupСумкасерединазscriptдокументпапкасередина. нижедаlaunchpad_node.pyТяжелыйхотетькодчастьизиллюстрировать:

код Язык:javascript
копировать
#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функция:

код Язык:javascript
копировать
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 Тип данных темы из соответствующего заголовка середина:

код Язык:javascript
копировать
#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)
код Язык:javascript
копировать
#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:

код Язык:javascript
копировать
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_vtargetstd_msgs/Float32):Даверноколесоиз Цельскорость(к m/s дляодин Кусочек)。

Подписаться на тему

Twistgeometry_msgs/Twist):Дароботиз ЦельTwistЗаказ。 Долженроботиспользовать x направление линейной скорости и Twist информацияизрогскоростьθ

Важный ROS параметр

~base_widthfloat, default: 0.1):Дароботдваколесоребенокмеждурасстояние,крисдляодин Кусочек。

~rateint, default: 50):Давыпускатьскорость Цельизскорость Ставка(герц)。

~timeout_ticksint, default:2):Даостанавливатьсяконец Twist информацияназадвыпускатьизскорость Цельинформацияизкомпилировать Число。

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

Опубликовать тему

motor_cmdFloat32):Да PID Выход контроллераприжимез двигателя на конечном выходе. Мы можем использоватьout_minиout_max ROS Изменения параметров PID выходизобъем。

wheel_velFloat32):Да Манипуляторколесоизтекущийскорость,один Кусочекдля m/s。

Подписаться на тему

wheelInt16):книгатемадавращатькодеризвыход。 роботизкаждыйкодер Всеиметькаждыйсизтема.

wheel_vtargetFloat32):Да Цельскорость,один Кусочекдля m/s。

Тяжелыйхотетьпараметр

~Kpfloat ,default: 10):Долженпараметрда PID Контроллер пропорционального усиления.

~Kifloat, default: 10):Долженпараметрда PID Контроллер интегрального усиления.

~Kdfloat, default: 0.001):Долженпараметрда PID Контроллер дифференциального усиления.

~out_minfloat, default: 255):Да Моторскоростьценитьизминимальный лимит。 этотпараметр Воляскоростьценитьпределдлясказатьдляwheel_velтемаизэлектродвигатель。

~out_maxfloat, default: 255):Даwheel_velтемаизмаксимумпредел(кгерцдляодин Кусочек)。

~ratefloat, default: 20):Давыпускатьwheel_velтемаизсоотношение。

ticks_meterfloat, default: 20):Даза метризмашинаколесокодервырезатьстепеньчисло。 Даодинобщая ситуацияпараметр,потому чтодляэтотакжесуществовать Чтоонузелсерединаспользовать。

vel_thresholdfloat, default: 0.001):нравитьсяфруктыроботскоростьуронитьк Долженпараметрниже,нас Волямашинаколесо Видетьдлятихийконец。 нравитьсяфруктымашинаколесоизскорость Маленький Вvel_threshold,Мы Воля это трактуем за ноль.

encoder_minint, default: 32768):Дакодерчитатьчислоизсамый маленькийценить。

encoder_maxint, default: 32768):Дакодерчитатьчислоизмаксимумценить。

wheel_low_wrapint, default: 0.3 * (encoder_max - encoder_min) + encoder_min):Этиценитьрешать Конечноодометрдав Вгрузнаправлениевозвращатьсядатольконаправление。

wheel_high_wrapint, default: 0.7 * (encoder_max - encoder_min) + encoder_min):Этиценитьрешать Конечноодометрдав Вгрузнаправлениевозвращатьсядатольконаправление。

diff_tf.py:этотузелвычислитьодометриз Конвертироватьисуществоватьодометррамкаироботизбазафундаментрамка Измежду广播。

Опубликовать тему

odomnav_msgs/odometry):выпускатьодометр(роботизтекущийпозаиискажение)。

tf:этотпредоставилодометррамкаироботбазафундамент Связьмежду Конвертировать。

Подписаться на тему

lwheelstd_msgs/Int16),rwheelstd_msgs/Int16):Этидароботокодеризвыходценить。

  • ChefBot_keyboard_teleop.py:этотузелиспользоватьклавиатураначальствоиз КонтрольотправлятьTwistЗаказ。

Опубликовать тему

cmd_vel_mux/input/teleopgeometry_msgs/Twist):этот Воляиспользоватьклавиатура Заказвыпускать Twist информация.

сейчассуществовать,насуже Исследовать ПонятноChefBot_bringupСумкасерединазузел,Наши исследования Воля запускают документирование функциональности.

Понимание файлов запуска ChefBot ROS

сейчассуществовать,нас Воля Исследовать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:этотзапускатьдокументпоказыватьроботнавигациянеобходимыйизвседатчик.

использовать ChefBot Python узелизапускатьдокумент

У нас существует Интелиз 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 из Имя пользователя:

код Язык:javascript
копировать
    $ 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

код Язык:javascript
копировать
    $ miniterm.py /dev/ttyACM0 115200  

Если отображается сообщение об отказе в разрешении,пожалуйстасуществоватьudevдокументпапкасерединаписатьрегулированиено,кнастраивать USB Оборудование по лицензии, данное существует Нет. 6 глава“Воляприводидатчикироботконтрольустройствоинтерфейс”,или ВОЗМы можем использоватьниже Заказ Прочас Дажеизменять Разрешения。 существоватьздесь,насгипотезаttyACM0да LaunchPad из Имя устройства. Если ты PC серединазоборудованиеимясказатьдругой,нодолжениспользовать ДолженимясказатьзаменятьttyACM0

код Язык:javascript
копировать
    $ 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

код Язык:javascript
копировать
    $ roscore  

использоватьниже Заказбегатьlaunchpad_node.py

код Язык:javascript
копировать
    $ 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 в терминале Выполнение:

код Язык:javascript
копировать
    $ roslaunch ChefBot_bringup robot_standalone.launch  

запускать Манипуляторводительиузелназад,использоватьниже Заказзапускатьклавиатура遥控Держатьделать。 Это также должно существовать ChefBot PC из Новое начало терминала завершено:

код Язык:javascript
копировать
    $ roslaunch ChefBot_bringup keyboard_teleop.launch  

Чтобы активировать Kinect, пожалуйста, выполните команду. этот Заказтакжесуществовать ChefBot Терминальное начальство выполняет:

код Язык:javascript
копировать
    $roslaunch ChefBot_bringup 3dsensor_kinect.launch  

Если вы используетеизда Orbecc Astra,пожалуйстаиспользоватьнижезапускатьдокументзапускатьдатчик:

код Язык:javascript
копировать
    $ roslaunch ChefBot_bringup 3d_sensor_astra.launch  

Чтобы просмотреть датчикданные, мы можем выполнить команду ниже. Это Волясуществовать RViz Посмотреть модель Манипулятора в существующем состоянии удаленно PC начальствоосуществлять。 Если существуют отдаленные PC начальствонастраиватьChefBot_bringupСумка,Вы можете использовать команду доступниже,ипроходить ChefBot PC Визуализируйте данные модели робота:

код Язык:javascript
копировать
    $ 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。

Картирование помещений на ROS с помощью SLAM

Чтобы выполнить сопоставление, мы должны выполнить команду ниже.

ниже Заказсуществовать ChefBot в терминалезапускатьробот Водитель:

код Язык:javascript
копировать
    $ roslaunch ChefBot_bringup robot_standalone.launch  

Ниже команда Волязания прерывания процесса отображения. Обратите внимание, что это должно быть Долженсуществовать. ChefBot Терминальное начальство выполняет:

код Язык:javascript
копировать
    $ 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

Чтобы начать работу пульта дистанционного управления с клавиатуры, введите команду:

код Язык:javascript
копировать
    $ roslaunch ChefBot_bringup keyboard_teleop.launch  

Чтобы просмотреть реальную карту существованиясоздаватьиз, нам понадобится использовать команду существования Remote System начальствозапуска. RViz:

код Язык:javascript
копировать
    $ roslaunch ChefBot_bringup view_navigation.launch  

существовать RViz После просмотра робота в использовании клавиатуры вы можете переместить робота и просмотреть исходное существованиесоздаватьизкарта. Нарисовав всю область на карте, мы можем существовать ChefBot PC Терминалначальствоиспользоватьниже Заказдержатьземлякартина:

код Язык:javascript
копировать
    $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 Управляет функцией автономной навигации.

использовать ROS Конечно Кусочекинавигация

Строить пост на карте,Закрыть все приложение,Затемиспользоватьниже Заказсновабегатьробот Водитель:

код Язык:javascript
копировать
    $ roslaunch ChefBot_bringup robot_standalone.launch

использоватьниже Заказсуществоватьхранилищеизземлякартинаначальствозапускатьлокализацияинавигация:

код Язык:javascript
копировать
    $ roslaunch ChefBot_bringup amcl_demo.launch map_file:=~/test_map.yaml  

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

код Язык:javascript
копировать
    $ 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 создал карту и приказал роботу двигаться автономно.

вопрос

  1. Манипулятор ROS водительузелизиспользоватьспособда Что?
  2. PID контрольустройствосуществоватьнавигациясерединазделатьиспользоватьда Что?
  3. нравитьсячто Волякодерданные Конвертировать дляодометрданные?
  4. SLAM существоватьроботнавигациясерединазделатьиспользоватьда Что?
  5. AMCL существоватьроботнавигациясерединазделатьиспользоватьда Что?

дальнейшее чтение

Вы можете отниже ссылку в разделе учитьсясвязанный ROS серединазробот Зрение Сумкаиз Дополнительная информация:

Девять、использовать Qt и Python Создан для роботов GUI

существоватьначальствоодинглавасередина,насобсуждать Понятноиспользуется для автономной навигации и зроботаппаратное компоненты программного обеспечения и Сумкаизинтегрированы. После интеграции следующий шаг да Строить GUI для управления роботом. настолькосуществовать Строитьодин GUI,Должен GUI Может служить нижним слоем ROS Команда изкурок. Пользователи могут использовать GUI кнопка Приходитьзаменятьсуществовать Терминалначальствобегатьвсе Заказ。 Мы хотим дизайниз GUI да предназначен для типичного гостиничного номера с девятью столиками. Пользователь может создать гостиничный номер из карты начальства настройки таблицы местоположения Кусочек и заказать роботу, чтобы перейти к определенному столу начальства для доставки еды. После доставки еды пользователь может дать команду роботу переместить приезжать в исходное место Кусочка.

В этой главе Воля рассматриваются следующие темы:

  • существовать Ubuntu Установить на Qt
  • PyQt и PySide Введение
  • Введение в Qt Designer
  • Сигналы и слоты Qt
  • Воля Qt UI файл конвертирован в Python документ
  • использовать ChefBot GUI приложение
  • RQT и его функции Введение

Технические требования

хотетьсуществоватьэта главасерединатестприложениеикод,тынуждаться Установить Понятно 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 на Ubuntu 16.04 LTS.

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:

код Язык:javascript
копировать
    $ sudo apt-get install qt-sdk  

этот Заказ Воля Установить整индивидуальный Qt SDK И его проекты требовали из Библиотеки. Ubuntu хранилище Библиотекасерединадоступный Сумка Можетспособный Нетдадо настоящего времени Версия。 Чтобы получить последнюю версию Qt,Мы можем найти ссылку для скачивания подходящих применений. для различных OS Платформа из Qt изсуществовать Проволокаили Оставлять Проволока Установитьпрограмма

существоватьсистема Установить на Qt После этого мы, Волясмотретьприезжать Как использовать Qt развивать GUI и я Python Взаимодействие.

использовать Qt из Python обязательность

Давайте посмотрим, как подключить Python и Qt。 Обычно Питон В использовании доступны два модуля. длясоединятьприезжать Qt пользовательский интерфейс. Два самых популярных​​из Рамда:

  • PyQt
  • PySide

PyQt

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。

Установка PyQt в Ubuntu 16.04 LTS

нравитьсяфруктыхотетьсуществовать Ubuntu/Linux Установить на PyQt, который можно использовать ниже. этот Заказ Воля Установить PyQt библиотека, ее зависимости и некоторые Qt инструмент:

код Язык:javascript
копировать
    $ sudo apt-get install python-qt4 pyqt4-dev-tools

PySide

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 16.04 LTS.

PySide Сумкасуществовать Ubuntu Сумкахранилище Библиотека Доступен в формате . ниже Заказ Воля к существованию Ubuntu Установить на PySide модуль и Qt инструмент:

код Язык:javascript
копировать
    $ sudo apt-get install python-pyside pyside-tools  

Давайте использовать эти два модуля,смотретьсмотретьдва ВОЗмеждуразница。

использовать PyQt и PySide

Установить PyQt и PySide Сумканазад,нас Воля Исследовать Как использовать PyQt и PySide писать Hello World GUI。 PyQt и PySide междуосновнойразницатолькосуществовать Внекоторый Заказ。 большинствошагда Взаимнотакой жеиз​​。 Давайте посмотрим, как сделать Qt GUI и Воля Что Конвертировать для Python код。

Введение в Qt Designer

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

существовать Qt Использование обработки сигналов и слотов GUI событие. Когда событие произойдет, оно будет GUI Отправьте сигнал. Qt Виджет имеет множество предопределенных сигналов, которые пользователь может использовать. GUI Добавляйте пользовательские сигналы к событиям. Слот да вызывается в ответ на конкретную сигнальную функцию. существоватьэтот Примерсередина,насиспользоватьPushButtonизclicked()письмо Числоидляэтотписьмо Числосоздаватьодинсопределениеслот。

Мы можем существоватьэтотсопределениефункциясерединаписать Собственныйизкод。 Давайте посмотрим, как создается кнопка, сигнал Воля, соединяющий слот прибытия, а также Воля в целом. GUI Конвертировать для Python。 нижедасоздавать Hello World GUI Шаги, включенные в приложение:

  1. от Qt Designer тащитьисоздаватьодинPushButtonприезжатьпустая форма。
  2. для события нажатия кнопки назначает слот,Долженслотпроблемаодинсказатьдляclicked()изписьмо Число。
  3. Волядизайниз UI документдержатьсуществовать.uiРасширятьимясередина.
  4. Воля UI файл конвертирован в Python。
  5. написать определение пользовательских слотов.
  6. существоватьопределениеизслот/функция Внутри Распечатать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 файл конвертирован в Python код

дизайн UI После документа мы можем Воля UI файл конвертирован в Чтождатьэффектиз Python код。 использоватьpyuicкомпилироватьустройствонадстановиться Конвертировать。 нассуществовать Установить PyQt/PySide часуже Установить Понятноэтотинструмент. нижеда Воля Qt UI файл конвертирован в Python документиз Заказ。

мы должны PyQt и PySide использоватьдругойиз Заказ。 ниже Заказ Воля UI Конвертировать для Чтождатьэффектиз PyQt документ:

код Язык:javascript
копировать
    $ pyuic4 -x hello_world.ui -o hello_world.py  

pyuic4даодин UI Компилятор используется для Воля UI файл конвертирован в Чтождатьэффектиз Python код。 наснуждатьсясуществовать-xпараметрназаднестии UI документимя,исуществовать-oпараметрназаднестиивыходдокументимя。

PySide Команда практически не изменилась. PySide использоватьpyside-uicзаменятьpyuic4Воля UI файл конвертирован в Python документ. Остальные параметры те же:

код Язык:javascript
копировать
    $ pyside-uic -x hello_world.ui -o hello_world.py  

Фронт командования Волядля UI документгенерироватьждатьэффектиз Python код。 Это Волясоздывать есть GUI Компоненты Python добрый. Генерировать Скрипт Волябезиметьсопределениефункцияmessage()изопределение. Нам следует добавить эту специальную функцию для генерации кода. Ниже процесс Воля поможет вам добавить пользовательскую функцию; потому чтоэтот,когда вы нажимаете кнопку,Воляосуществлятьсопределениефункцияmessage()

существование Добавить определение слота в код PyQt

от приведено здесь PyQt Генерировать Python код。 pyuic4иpyside-uicГенерироватькодда Взаимнотакой жеиз,Толькодаимпортироватьформакусокимясказатьдругой。 Все остальные детали такие же. использовать PyQt Генерироватькодизиллюстрироватьтакжеподходящийиспользуется для PySide код。 от Переднийиз Конвертировать Генерироватькоднравиться Вниз。 Кодовая структура и параметр могут быть настроены в соответствии с вашим дизайном. UI Изменения в файлах:

код Язык:javascript
копировать
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 Скрипт. Эта работа даэтоткода, состоящая из пошагового процесса:

  1. Долженкод Воляотif __name__ == "__main__":начинатьосуществлять。 PyQt кодсерединаз Нет.одна вещьдасоздаватьодинQApplicationобъект。 QApplicationдобрый Трубкапричина GUI приложениеизконтрольпотокиосновнойнастраивать。 QApplicationдобрый Включатьхозяинцикл событий,Чтосередина Воляиметь дело си Планирование Windows Система и другие источники обо всех событиях. Он также обрабатывает инициализацию приложения и заканчивает. QApplicationдобрый Кусочек ВQtGuiформакусоквнутренний。 этоткодсоздаватьимядляappизQApplicationобъект。 Нам придется добавить основной код вручную.
  2. Form = QtGui.QWidget()ХОРОШОВолясоздаватьодинQWidgetдобрыйизимядляFormизобъект,Долженобъектжитьсуществовать ВQtGuiформакусоквнутренний。 QWidgetдобрыйда Qt Все объекты пользовательского интерфейса основаны на добром. это может быть из основного Windows Система получает событие мыши и клавиатуры.
  3. ui = Ui_Form()ХОРОШОсоздаватьодинсуществоватькодсерединаопределениеизUi_Form()добрыйизимядляuiизобъект。 Ui_Form()объект Можетловить受нассуществоватьначальствоодин ХОРОШОсерединасоздаватьизQWidgetдобрый,ии МожетсуществоватьэтотQWidgetобъектсерединадобавить вкнопка,текст,кнопкаконтрольи Чтоон UI компоненты. Ui_Form()добрый Включатьдвафункция:setupUi()иretranslateUi()。 Мы можем, ВоляQWidgetобъектпроходить递ДаватьsetupUi()функция. этотфункция Волясуществоватьэтот Маленькийотделение件объектначальстводобавить в UI Такие компоненты, как кнопки, для слотов распределения сигнала ждут. если необходимо,retranslateUi()функциявстреча Воля UI из языкового перевода на другие языки. Например, если вам нужен английский перевод «Воля» на испанский, вы можете упомянуть соответствующее испанское слово в «существуетэтфункция».
  4. Form.show()ХОРОШОпоказыватьскнопкаитекстизпоследнее окно。

Следующийдасоздаватьслотфункция,Долженфункция Воля РаспечататьHello Worldинформация. слотопределениесуществоватьUi_Form()добрыйвнутреннийсоздавать。 нижешаг Воляимядляmessage()изслотвставлятьUi_Form()добрый.

message()функцияопределениенравиться Вниз:

код Язык:javascript
копировать
    def message(self): 
    print "Hello World" 

этототвечать ДолженделатьдляфункциявставлятьприезжатьUi_Form()добрыйсередина. кроме того,существоватьUi_Form()добрый ВнутриизsetupUi()функциясередина Дажеизменятьниже ХОРОШО:

код Язык:javascript
копировать
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), Form.message) 

Form.messageпараметротвечатьзаменятьдляself.messageпараметр。 前один ХОРОШОВоляPushBbuttonписьмо Числоclicked(),соединятьприезжатьнасужесуществоватьUi_Form()добрыйсерединавставлятьизself.message()слот。

Hello World GUI приложениеиз Держатьделать

Воля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。

использовать ChefBot из Контроль GUI

существовать PyQt серединанадстановитьсяHello Worldприложение Изназад,нассейчассуществовать Воляобсуждатьиспользуется дляControl ChefBot из GUI。 Строить GUI из В основном используетсядорога дасоздавать Более простой способ для управления роботом. Например, если «Воляробот» используется в существующем отеле для подачи еды, лицу, управляющему «Долженроботизом», не нужно учиться запускать сложные команды «Долженроботиз»; потому чтоэтот,для ChefBot Строить GUI Можетуронить Низкийсложный杂секси яспользоватьсемья Дажелегкий。 Мы планируем использовать PyQt,ROS и Python интерфейс Строить GUI。 Можетсуществовать GitHub начальствоизниже Связьначальствополучатьпридется ChefBot ROS Сумка

Если вы еще не клонировали код, вы можете клонировать его с помощью команды «Использовать»:

код Язык:javascript
копировать
    $ 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

Графический интерфейс имеет следующие функции:

  • Он может контролировать состояние батареи робота. роботсостояниеинструктироватьроботизработаделатьсостояние. Например, если робот обнаруживает ошибку «Приехать», он Волясуществоватьэтот. GUI начальство указывает на ошибку.
  • Он может приказать роботу переместить приезжающий стол к начальству, чтобы доставить еду. GUI В начальстве есть виджет счетчика, используется длявходитьповерхностьиз Кусочекнабор。 В настоящее время мы имеем 9 Персональный стол с планом комнаты этот Графический интерфейс, но да мы можем расширить его на любое количество по мере необходимости. входитьповерхностьсеткакомпилировать Числоназад,Мы можем Пройти Нажмите кнопку «Выполнить», чтобы передать команду роботу в форму Должен. робот Воля Входить Должен Кусочекнабор。 Если вы хотите вернуть робота в исходное положение, вы можете нажать кнопку «Домой». Если вы хотите отменить текущее движение изробота, нажмите «Отмена», чтобы остановить робота. этот GUI приложениеиз работает следующим образом:

Когда нам придется развернуться в существующем отеле ChefBot Когда мы сделаем из Нет шаг дасоздавать карту номера. После того, как правильно нарисуем карту всей комнаты, мы должны Воля карту держатьсуществоваробот. PC начальство。 Робот выполняет картографирование только один раз. После рисования карты мы можем определить процедуру навигации и дать команду роботу для ввода определенного места на карте. ChefBot ROS Сумка Следоватьприкрепилдобрыйпохожий酒店Окружающая средазземлякартинаимоделирование Модель. Теперь мы можем реализовать эту эмуляцию и локализацию для тестирования. GUI,существовать Внизодинглавасередина,нас Воляобсуждать Как использовать GUI контрольаппаратное обеспечение. Если у вас существует локальная система, установите на ChefBot ROS пакет, мы можем смоделировать среду отеля и протестировать GUI。

При заказе аналогичного отеля из механизмов запускаем моделирование ChefBot:

код Язык:javascript
копировать
    $roslaunch chefbot_gazebo chefbot_hotel_world.launch  

запустить ChefBot после моделирования,Мы можем использоватьуже Строитьизземлякартинабегать Конечно Кусочекинавигацияпримерстепень。 Долженземлякартинапомещатьнаборсуществоватьchefbot_bringupСумкасередина. Мы можем существовать Должен Сумкасерединасмотретьприезжатьодинmapдокументпапка。 существоватьздесь,Мы Воляиспользоватьэтотземлякартинаосуществлятьэтоттест。 Мы можем использоватьниже Заказдобавлятьнагрузкалокализацияинавигацияпримерстепень:

код Язык:javascript
копировать
    $ roslaunch chefbot_gazebo amcl_demo.launch 
 map_file:=/home/<user_name>/catkin_ws/src/chefbot/chefbot_bringup/map/hotel1.yaml  

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

Если путь прибытия правильный, Воля начинает проектировать. ROS Навигационный стек. нравитьсяфруктыхотетьсуществоватьземлякартинаначальствопроверятьсмотретьроботиз Кусочекнаборили Руководствонастраиватьроботизисходный Кусочекнабор,Можетиспользоватьниже Заказиспользовать RViz:

код Язык:javascript
копировать
    $ roslaunch chefbot_bringup view_navigation.launch  

существовать RViz середина,Мы можем использовать 2D Команда навигационной кнопки «Поворот» приехать к любым координатам карты.

Мы также можем использовать команду программирования robot для перехода к любым координатам карты. ROS навигациякучаиспользовать ROS actionlibБиблиотекаработаделать。 ROS actionlibБиблиотекаиспользуется для выполнения вытесняемых задач; Это похоже на ROS Служить. относительно ROS Сервисиз Преимуществасуществовать В,Если мы не хотим отменить запрос в это время,Вы можете отменить это.

существовать GUI , мы можем приказывать роботиспользовать Python actionlibБиблиотекаизменятьприезжатьземлякартина坐отметка。 Мы можем использоватьнижетехнология Приходитьполучатьпридется桌ребеноксуществоватьземлякартинаначальствоиз Кусочекнабор。

запускатьформа拟устройствои AMCL После узла запустите клавиатурный пульт и Воляробот переместите приезжать возле каждого стола. Используемая команда для перевода и вращения робота:

код Язык:javascript
копировать
    $ rosrun tf tf_echo /map /base_link  

когданасодинударятьGoкнопкачас,Должен КусочекSET Воля получает стек навигации «приехать»,ииробот Волярегулирование划Чтопутьидостигатьприезжать Что Цель。 Мы даже можем отменить задачу в любой момент. Поэтому Шеф Бот GUI заряжатькогдаactionlibклиент,Долженклиент Воляземлякартина坐отметкаотправлятьприезжатьactionlibСлужитьустройство; Прямо сейчас Навигационный стек.

сейчассуществовать,Мы можем использоватьниже Заказбегатьробот GUI Для управления роботом:

код Язык:javascript
копировать
    $ rosrun chefbot_bringup robot_gui.py  

нас Может Выберите номер стола,Затем нажмите кнопку «Выполнить»к Воляроботсдвигккаждыйповерхность。

гипотезатыклонировать Понятнодокументиполучатьпридется Понятноrobot_gui.pyдокумент,нас Воляобсуждатьдляactionlibклиентдобавить вприезжатьUi_Form()добрыйсерединазосновнойслот,И достаньте батарею и Манипуляторсостояниеизценить.

наснуждатьсядляэтот GUI приложениеимпортироватьниже Python Модуль:

код Язык:javascript
копировать
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 В словаре упоминается, что слово «приехать» стоит возле каждого стола. Нижекодпоказывать имеет жестко запрограммированное местоположение возле каждой таблицы:

код Язык:javascript
копировать
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клиент:

код Язык:javascript
копировать
#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() 

нижекодпоказывать Понятноэтоткодсерединакнопкаивращатькоробка Маленькийотделение件из Сигнал и слотраспространять:

код Язык:javascript
копировать
#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 серединазвращатькоробкаценитьираспространятьодинповерхность Число。 такой же,это Воляповерхность Число Конвертировать для Взаимноотвечатьизробот Кусочекнабор:

код Язык:javascript
копировать
def set_table_number(self): 
  self.table_no = self.spinBox.value() 
  self.current_table_position = table_position[self.table_no] 

Эта кнопка «Поворот приехать» находится в слоте «Поворот приехать» и определении. Эта функция будет отображать выбранную форму из Манипулятор Кусочек, установленную в заголовке целевого сообщения, и Воля будет отправлена ​​в стек навигации середина:

код Язык:javascript
копировать
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()слотопределение. Эта Воля отменяет все запланированные на тот момент пути Манипулятора:

код Язык:javascript
копировать
def Cancel(self): 
  self.client.cancel_all_goals()

нижекоддаHome()изопределение. этотвстреча Воляповерхностьсетка Кусочекнаборнастраиватьдляноль,ивызовGo()функция. Кусочекнабордлянольизповерхностьсеткадароботизоригинальный Кусочекнабор:

код Язык:javascript
копировать
def Home(self): 
  self.current_table_position = table_position[0] 
  self.Go() 

применяется приведенное ниже определение дляupdate_values()иadd()функция. update_values()метод Воляначинатьсуществовать Проволокастепеньсередина Даженовый Батарея Властьироботсостояние. add()функция Воля Поиск Батареясостояниеироботсостояниеиз ROS Параметр и Воля — это соответственно настройки для индикатора выполнения и метки:

код Язык:javascript
копировать
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()слоти Даженовый Батареяисостояниеценить:

код Язык:javascript
копировать
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 инструмент,Установитьпроцесскинравитьсячто检проверятьроботсерединаздатчикданные.

существовать Ubuntu 16.04 LTS Установить вииспользовать RQT

RQT да ROS серединазпрограммная среда,этокплагинизформавыполнить Различный GUI инструмент. Можем добавить для с помощью плагина Воля RQT серединаз Можетдококно。

Можетиспользоватьниже Заказсуществовать Ubuntu 16.04 Установить в RQT。 существовать Установить RQT Прежде чем убедиться, что вы завершили установку ROS Indigo。

код Язык:javascript
копировать
    $ sudo apt-get install ros-<ros_version>-rqt  

Установить RQT После Сумки мы можем получить доступ RQT из GUI выполнить,сказатьдляrqt_gui,существовать Чтосередина Мы можем, Воляrqt pluginsдоксуществоватьодининдивидуальныйокносередина.

позволятьнасначинатьиспользоватьrqt_gui

существоватьбегатьrqt_guiДо,пожалуйстабегатьroscoreЗаказ:

код Язык:javascript
копировать
    $ roscore  

бегатьниже Заказкзапускатьrqt_gui

код Язык:javascript
копировать
    $ 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

код Язык:javascript
копировать
    $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。 Мы смотрели, как приезжать, некоторые используют дляотлаживатьроботданныеизплагин. В следующей главе мы рассмотрим полный тест и калибровку приезжающего робота.

вопрос

  1. Linux Какие популярные платформы начальство UI инструмент Сумка?
  2. В чем разница между обязательностью PyQt и PySide Qt?
  3. нравитьсячто Воля Qt UI файл конвертирован в Python Сценарий?
  4. Что да Сигналы и слоты Qt?
  5. Что да RQT, что это в основном приложение?

дальнейшее чтение

существоватьниже Связьсерединаучитьсясвязанный ROS серединазробот Зрение Сумкаиз Дополнительная информация:

10. Оценка

Глава 1. Начало работы с операционными системами роботов

  1. Да ROS из Три основные функции:
    • Интерфейс обмена сообщениями,Может общаться с разными программами
    • Готовый алгоритм изробота, позволяющий роботпрототипделать быстрее
    • Визуализация роботизированныеи Отладка программного инструмента
  2. ROS Средняя концепция разных уровней да ROS системный уровень документа, ROS Уровень вычислительного графа ROS уровень сообщества.
  3. Catkin Строитьсистемадаиспользовать CMake и Python Скрипт Строитьиз。 этотинструмент помогает нам Строить ROS Сумка.
  4. ROS Тема да именованная шина, в которой один узел может и другой узел связи. темасерединаспользоватьизинформациядобрыйформада ROS информация.
  5. ROS Вычислительные графики из разных концепций да ROS Узел, РОС Тема, РОС Сообщения, РОС Главный контроль, ROS Сервиси ROS сумка.
  6. ROS Хост действует как соединение двух ROS Узлы начинают общаться друг с другом и с программой-посредником.
  7. Gazebo из Важные особенностида:
    • Динамическое моделирование: оно включает в себя ODE,Bullet,Simbody и Dart ждать физический движок
    • РАСШИРЕННАЯ 3D-ГРАФИКА: ITиспользует OGRE FRAME, создательвысокий КАЧЕСТВО освещения, теней и текстур.
    • Плагин поддерживает: Эта Воля позволяет усовершенствовать персонал, добавлять новые разработки, датчики контроля окружающей среды.
    • TCP/IP проходитьтерять:использоватьна на основе сокета из интерфейса управления сообщениями Gazebo

Нет. 2 глава,учитьсядифференциалроботизбазафундамент

  1. Полный изробот может существовать в любом направлении начальство от Зависит. от движений и им можно управлять изс Зависит отстепеньждать Вобщийс Зависит отстепень. на основе Omni Колесо изроботда полный пример роботизации. Неполный робот имеет ограничения на свое движение, поэтому он может управлять отстепень Воля Нетждать Вобщийс Зависит отстепень. разницаводить Пример неполной Конфигурации.
  2. Кинематика робота существует, рассматривает движение робота без учета массы и инерции.,И динамика робота, масса и инерция.,спорти Взаимнозакрыватьизменятьмоментмеждусвязь。
  3. ICC представляет собой мгновенный центр кривизны, воображаемую точку, вокруг которой вращается ось колеса.
  4. этот даотмашинаколесоскоростьсерединапроверятьпопытаться найтироботтекущий Кусочекнаборизпроцесс。
  5. Найдите целевое положение Кусочка от степени скорости колеса до уровня приезда.

Нет. 3 Глава «Моделирование дифференциальных роботов»

  1. При моделировании роботов вы можете установить собственные параметры робота. 2D и 3D робот означает из процесса, где Сумма включает параметры роботиз Кинематика и Динамика.
  2. 2D-модель в основном включает в себя точные размеры деталей, что помогает нам рассчитать кинематику и помогает в изготовлении деталей.
  3. роботиз 3D Модель дароботаппаратное обеспечениеизточныйкопировать Товары,иметьиспользовать CAD Программное обеспечение дизайнизфизикироботизация всех параметров. этотиспользуется создаватьробот моделированияроботиз 3D Распечатайте детали.
  4. 3D-модели намного проще и точнее, чем ручное моделирование с использованием API-интерфейса Blender Скриптсоздавать.
  5. URDF да ROS серединароботиз 3D представление модели робота. Имеет кинематику и динамику.

Нет. 4 глава,использовать ROS Имитированный дифференциальный робот

  1. Можетиспользовать Gazebo плагинсуществовать Gazebo моделирование датчиков в . датчикформаформа Можетиспользовать C++ писать,Может Воля Чтовставлятьприезжать Gazebo Эмулятор середина.
  2. использовать Gazebo ROS Плагин Воля ROS соединятьприезжать Gazebo。 Когда мы, Воляэтотплагиндобавлятьнагрузкаприезжать Gazebo серединачас,Мы можем пройти ROS интерфейсконтроль Gazebo。
  3. Важный Этикеткада<inertia>,<collision>и<gazebo>
  4. ROS серединаз Gmapping Сумкада Fast SLAM алгоритмизвыполнить,Можетсуществоватьроботсерединаспользуется для карт окружающей среды и существования ее начальства определить Кусочек. существовать ROS серединаспользовать Gmapping да Простой процесс: Сумка включает в себя темы с необходимыми параметрами (например, одометр и лазерное сканирование). Gmapping узел.
  5. Move_baseузелиметьиметь дело сроботсередина Различныйнавигацияребеноксистемаиз Функция。 Он имеет возможность работать с глобальным и локальным планировщиком, а также с роботизированной картой. один旦узелполучатьприезжать Цель Кусочекнабор,Должен целевой кусочек настройки подаются в подсистему навигации,кприезжатьдостигать Должен Цель Кусочекнабор。
  6. AMCL Аббревиатура от «Адаптивное определение Кусочек по методу Монте-Карло», что представляет собой существующий с заданной картой изначально детерминированный алгоритм Кусочекроботиз. ROS один из них ROS Сумка,используется Развертывание в длясуществовать изробот AMCL。 Мы можем использоватьподходящийкогдаизвходитьинуждатьсяизпараметрзапускать AMCL узел.

Нет. 5 глава, дизайн ChefBot аппаратное обеспечениеисхема

  1. Дадляудовлетворитьроботнеобходимыйрегулированиесеткаизроботпопытаться найтиприезжатьподходящийизроботаппаратное обеспечение Компонентыпроцесс。 этовозвращаться涉исхемадизайнивычислитькаждый Компонентытекущий,кубеждатьсяробот Компонентыстабильный Конечносекс。
  2. этодаконтрольэлектродвигательнаправлениеискоростьизсхема переключения。
  3. Основные компонентыиспользуется для расчета скорости колеса с помощью энкодера колеса и используется для обнаружения препятствий вокруг робота с помощью лазерного дальномера или датчика глубины.
  4. Нам нужно проверить, соответствует ли он спецификации робота.
  5. картографирование,Обнаружение препятствий,Обнаружение объектовиотслеживать。

Нет. 6 глава,приводидатчикироботконтрольустройствоизинтерфейс

  1. схема переключения, используется дляControlроботсередина Моторизскоростьстепень.
  2. Может Обнаружениемашинаколесовращатьскоростьинаправлениеиздатчик.
  3. существуют схемы кодирования 4X,насизвлекатькодерпульсмеждумаксимумпереход,Чтобы получить больше очков за одно вращение.
  4. использоватькодерсчитатьи Каждыйсчитатьрасстояние,Мы легко можем рассчитать смещение колеса.
  5. Это умный актуатор,Имеет мотор и микроконтроллер.,Можетпрямойловитьсоединятьприезжать PC и яспользуется для нестандартных приводов различных настроек. Можно последовательно подключить, подходящие способы использования для роботизированной руки.
  6. Это даиспользуется для поиска объемиздатчика, имеет один передатчик и один приемник. Передатчик излучает ультразвуковые волны, а приемник принимает ультразвуковые волны. Этипроцессмежду Задерживатьиспользуется для измерения расстояния.
  7. объем = Эхо-стрелка выходизвысокий уровень времени * Скорость(340М/С)/ 2
  8. оно отправляется IR Пульс и Зависит от IR Получатель получает. В зависимости от расстояния, ИК ловитьполучатьустройствосерединаз Напряжениевстреча发生变изменять,Мы можем использоватьнижемужской式вычислитьрасстояние:
код Язык:javascript
копировать
объем = (6787 / (V - 3)) - 4

Нет. 7 глава,Воля Зрениедатчики ROS интерфейс

  1. большинство 3D Датчик Мощность имеет дополнительный визуальный датчик для обнаружения глубоких уровней. это Можетспособныйиспользовать IR Метод проекции илииспользовать стереоскопическое зрение.
  2. Интерфейс обмена сообщениями, визуализация и отладка роботизинструмента, готовые алгоритмы изроботов.
  3. OpenCV В основном с алгоритмами компьютерного зрения OpenNI иметьиспользуется для реализации NI приложениеиз реализации алгоритма, при этом PCL иметьиспользуется для Облака точек процессаданныеизалгоритм。
  4. Это означает одновременную локализацию и картографирование. этодав целомиспользуется для робота отображает окружающую среду и одновременно определяет ее по алгоритму Кусочекиз.
  5. этода Что-то вродесуществовать 3D модель Внизкартографированиеробот Окружающая средазалгоритм。

Нет. 8 глава,Сборка оборудования ChefBotи Интеграция программного обеспечения

  1. Это робот базовых контроллеров PC ждатьвысокийслойконтрольустройствомеждусерединамеждупрограмма。 это Воля Низкий уровеньданные Конвертировать для ROS ждатьэффектданные.
  2. ПИД — это механизм обратной связи контура управления, который может получать обратную связь робот Кусочек для достижения целевых настроек.
  3. использоватькодерданные,Мы можем использоватьроботспортизучать方степень Приходитьвычислитьроботпрошел мимоизрасстояние。 Эти данные ценятся на одометре.
  4. этоосновнойиспользуется длякартографированиесреда。
  5. этоосновнойиспользуется длясуществоватьтихий态землякартинасередина Конечно Кусочекробот。

Нет. 9 глава,использовать Qt и Python Создан для роботов GUI

  1. Qt и GTK。
  2. Два вида обязательности почти одинаковы, отличается только название да. PyQt Лицензия да GPL, в то время как PySide Следовать LGPL Предоставляются вместе. Кроме того, PySide Имеет много связанных между собой API из Документация.
  3. Мы можем использоватьимядля pyuic из Py UI компилятор.
  4. Qt Доступен слот для программы от Qt функция защиты сигнала. примернравиться,clickда Можетвызовимядляhello()изфункцияизписьмо Число。
  5. Rqt да ROS Полезно в GUI инструмент№1。 Мы можем создать RQT плагин и может вставлять RQT GUI середина. RQT Уже есть несколько плагинов для визуализации и отладки ожидания.
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода