SlideShare a Scribd company logo
Въведителна & Интерактивна
РОБОТИКА
Въведение в
Python и C++
Програма за изучаване на компютърни науки и
роботика
Съдържание
 НАО въведение и представяне ……………………………………….….…3
 Choreographe ……………………………………………………....................5
 Box Library ………………………………………………………...…...…...17
 Модул 1 – Hello World – Здравей свят ……...………………………….….43
 Модул 2 – Walk It Out – Разходи се ………………………………………..50
 Модул 3 – Hearing Things – Чуване ………………………………...….......55
 Модул 4 – Let’s Dance – Да танцуваме ……………………………….…...63
 Модул 5 – Sense and Act – Сетива и действия ……………………...…..…71
 Модул 6 –Do the Robot – Направете робота ……………………….…...…80
 Модул 7 – Face Off – Разпознаване на лица ………………………..……88
 Модул 8 – Object Recognition – Разпознаване на обекти ……………..….92
 Модул 9 – Games and Stories – Игри и истории ………………………....103
 Модул 10 – Finding your way – Намери си пътя ……..………………....105
 Модул 11 – Trajectory following – Изкуствен краснопис ….....…..….…107
 Въведение в Python и C++ …....................................................................109
2
NAO Humanoid Robot - Хуманоиден робот НАО
НАО роботите са средноразмерни и имат
отворена архитектура. Използват се из целия
свят в средното и висшето образование, могат
да се открият в над 48 университета. Роботите
НАО са създадени, за да могат да се ползват,
както от ученици в средното образование,
така и в учебни програми на висшите
училища. Заради приятната за използване
среда за програмиране, НАО може да се
програмира от всеки, без да е от значение
нивото на програмните умения.
Проектът за НАО стартира през 2005г., когато е избран да бъде официална платформа
на RoboCup (Световно първенство по футбол за роботи) през август 2007г. През 2009г.
24 отбора от цял свят се включиха в RoboCup, за целта отборите разполагаха със 100
НАО робота.
Нао е хуманоиден робот- т. е. има тяло, структурирано по подобие на човешкото.
Основни характеристики:
Нао е 57,3см висок и 27,3см широк. Общото тегло на робота е 5,4кг. Направен е от
специална пластмаса, устойчива на удари. Има вградена Li-ion батерия, която
позволява 90мин. автономна работа.
Връзката с компютър става посредством Ethernet кабел, Wi-Fi безжична връзка и USB
кабел.
Спецификата на хардуера в Нао е следната:
Процесор – Atom 1.6 GHz
1GB RAM
2GB Flash Memory
8GB Micro SDHC
3
Компоненти:
Cameras - Камери – 2бр. Разположени на главата една в горната част /фокусирана
напред/ и една в долната част/фокусирана надолу/. Те служат за разпознаване на лица,
обекти, направата на запис.
Microphones - Микрофони – 4 бр. По един на всяко ухо и по един отпред и отзад на
главата.
Speakers - Говорители – 2бр. По един на всяко ухо.
Infrared -
Инфрачервени сензори
– разположени на
очите.
Tactile Sensors -
Осезателни сензори –
разположени на главата
и ръцете. Дават
възможност за реакция
чрез докосване.
Force Sensitive Sensors –
разположени на
краката. Измерват
промяната на
съпротивление според
натиска, който е оказан.
Bumpers – намират се
на краката, предпазват
от удари.
Sonar Range-finders –
На тялото на робота са
разположени 4 сонара:
2 предавателя и 2 приемника.
Нао има общо 25 стави /joints/.
2 за главата, 1 на кръста, 12 на двете ръце и 10 на двата крака.
Software – Нао се управлява посредством Choreographe.
Езиците за програмиране на Нао са Python и C++.
4
Choreographe
Choreographe е cross-platform приложение, което може да имплементира действията на
НАО чрез графично-представено програмиране. За разлика от текстовото
програмиране, с графичното програмиране има по-малко съсредоточаване върху
граматиката, а самото програмиране се постига по-скоро с мишка и клавиатура,
отколкото със създаването на програмен код.
Choreographe може да се използва с Windows, Linux и Mac OS. Имплементацията на
действия на НАО в Choreographe става чрез свързване на елементите на движение
(кутийки) и групирането им в една верига.
Фигурата показва интерфейса на Choreographe, разделен на четири различни категории.
Достъпни са още и Pose Library Video Monitor.
1. Menu Screen - Екранно меню
2. Box Library – Библиотека с кутийки
3. Diagramming Space – Работно поле
4. 3D NAO – Тримерен модел
5
1. Menu Screen / Екранно меню
6
2. Box Library – Библиотека с кyтийки
Кутийките, които се използват в Choreographe са групирани по функции. Една кутийка
представлява икона с определена функция. Библиотеката от кутийки на НАО е
разделена на 13 типа, и съдържа около 70 кутийки. Те се използват, за да управляват
движенията на НАО.
Всеки може да създаде нова библиотека, както и нови кутийки, освен това в програмата
могат да се вмъкнат нови кутийки.
3. Diagramming space – Работно поле
Това е мястото, където се програмират и създават поведения на робота. Потребителя
може да издърпва кутийки от библиотеката. В предоставената библиотека съществува
конфигурация на кутийка, която е съставена от различни кутийки. При кликване два
пъти върху тази кутийка, ще се появи пространство, принадлежащо на тази кутийка.
Фигурата показва как чрез използването само на мишката, можем да създадем
приложение, което вкючва светлините на ушите при изчерпване на заряда на батерията.
4. 3D NAO – Тримерен модел
Този екран показва триизмерен НАО.
7
5. Predefined position library
Това е функция, която запаметява стойностите на конкретна поза. Choreographe
предоставя три различни пози като основни.
 Zero - всички стойности на ставите са равни на 0.
 Init – това е поза, която е удобна да се използва за преход към следващо
движение.
 Stand – тази поза изисква най-малък разход на батерия.
Потребителя може да си съдаде библиотека от най-често използваните пози.
6. Video monitor
Предоставя футкциите необходими за имплементиране на движения, които имат нужда
от камерите на НАО.
8
7. Connection Settings
При избиране на Connect to опцията от Choreographe в Connection менюто ще се появи
Browse Robot прозорец, както е показано.
От лявата страна са изброени всички открити НАО-та. Типа на вида връзка се означава
с различно оцветяване.От лявата страна са изброени всички открити НАО-та. Типа на
вида връзка се означава с различно оцветяване.
9
NAOqi е активен, осъществена е връзка.
NAOqi е в неподвижно състояние, не може да се осъществи връзка. Може
да се осъществи връзка при свързване с кабел.
NAO подлежи на симулации. LED светлини и сензори не могат да бъдат
имплементирани, Възможно е само да се контролира движението на
робота.
Най-добрата характеристика на Choreographe е възможността да
предостави графично-базирано програмиране. Кутииките и иконите
са важен елемент от Choreographe и са поставени в диаграми.
Графичното програмиране се осъществява чрез свързването на тези
кутийки. Choreographe предоставя около 70 готови кутийки, но
потребителя може да създава свои.
Всяка кутийка се конфигурира с вход, изход и бутон за параметри. Някои кутийки обаче
нямат изход или бутон за параметри.
onStart input: вход за активация на функциите на кутийката. Обикновенно е
свързана със сигналите, предоставени от други кутийки.
onStop input: вход за спиране на функциите на кутийката.
onStopped output: изход, който показва резултат, когато функцията на кутийката
спира. Използва се като входен сигнал за други кутийки.
onLoad input: използва се, когато се свързва Timeline на вътрешна кутийка. Когато
поведението на кутийката е имплементирано се зарежда Timeline на вътрешна кутийка.
Input Connected to ALMemory вход свързан с паметта, доставя се стойноста на
конкретна променлива.
onEvent input: Този вход въвежда информация от външен източник в кутийката.
Punctual output: Този изход изпраща информация вътре в кутийката.
Parameter: Намира се в долния ляв ъгъл на кутийката. Служи за настройване на
параметрите.
Входовете и изходите на една кутийка могат да имат различни цветове, в зависимост от
тима на сигнала на връзката. Формата на сигнала и цвета, използвани от Choreographe
са както следва:
Bang: Черен цвят, често срещан вход/изход сигнал, който не пренася информация.
Number: Жълт цвят, сигнал, който пренася информация под формата на числа.
String: Син цвят, сигнал, който пренася информация под формата на текст.
Dynamic: Сив свят, пренася всякакъв вид информация. Типа на сигнала се определя,
когато е приложен.
10
Съществуват три типа, които се намират в кутийките. Script, Timeline, Diagram. Script
използва Python, за да имплементира функционалност на кутийката. Timeline
програмира движенията на НАО в зависимост от движението на събития. Timeline е
базирана на време, програмира движенията на НАО чрез фреймове. Diagram е базирана
на събитие, програмира движенията на НАО чрез кутийки.
Програми с движение на ставите могат да използват Timeline и Diagram заедно. Някои
части от кутийките, предоставени от Choreographe могат да имат и трите типа,
приложени едновременно.
Box Generation
Както беше споменато, всеки потребител може да генерира нова кутийка, която да
имплементира недостъпни функции. Важно е да се каже, че програми, съдържащи
комбинация от кутийки и изпълняващи по-сложни функции могат да бъдат по-трудно
прочитани. Ако това се случи e добре програмата да се раздели на функции. Това ще
подобри четливостта, както и поддържането на програмата.
Ще разгледаме как се създават Timeline и Diagram кутийки.
Генериране на кутийка и настройване на интерфейса на кутийката:
А/ С кликане на дейсния бутон на мишката върху мястото за диаграми, ще се появи
меню за редактиране. Избира се Add a new box.
11
Б/ Ще се появи прозорец за конфигуриране на новата кутийка. Следват се
инструкциите:
1. General Description: Избира се име и описание на кутийката.
2. Image: Избира се форма и изображение за кутийката.
3. Inputs/Outputs/Parameters: Вход/изход/параметър списъци могат да бъдат
настройвани. Има контролни бутони от дясната страна на всеки списък, бутона –
в ляво премахва отговарящия елемент, бутона + от дясно привабя нов елемен и
отваря IO прозорец. При добавяне на елемент към параметъра се създава бутон
за достъп към този параметър върху интерфейса на новата кутийка.
12
4. Offspring: Определя се типа на кутийката, дали ще е script, timeline или diagram.
5. Plugin: Функция, която използва библиотеката на някои от кутийките на
Choreographe.
6. IO description: Настройва се по-детайлна информация за входа, изхода и
параметрите. Настройва се име, описание, тип на сигнала и вход/изход форма.
Номерът от дясната страна на типа се отнася до броя на информацията, ако е по-
голям от 1 предаденият сигнал е във форма на масив.
В/ При кликане два пъти върху новата кутиика, ще се отвори нов прозорец.
Event-Based and Time-Based Programming
Съществуват два начина да се програмират движения на НАО. Първият метод е
програмиране, базирано на събитие, където се използват кутийки, които са свързани
помежду си. Вторият метод е програмиране, базирано на време, тук движението на
ставите на робота става във времето. Танцови стъпки могат да се създадат чрез
програмиране, базирано на време като за целта се използват диаграми. И двата метода
могат да се използват в рамките на един проект, т.е. заедно.
Event-Based Programming
Поставянето на кутийки и връзките между тях са двете най-важни неща в
програмирането, базирано на събитие. кутийките се поставят чрез drag and drop метода
и се обединяват в една програма, когато биват свързани във верига.
Със следващия пример се показва как се използват кутийки, как се свързват и тяхното
изпълнение.
13
1/ Ще използваме две Say кутийки.
2/ След като се натисне бутона с инструмент ще се появи прозорец с параметри, където
в Text полето трябва да се въведе текста, който ще бъде изричан от НАО.
3/ След въвеждане на текст за двете кутийки, те трябва да се свържат. Свързването става
чрез вход/изход частите, както е показано по-долу.
4/ За да се изпълни програмата от НАО, той трябва да бъде свързан с Choreographe.
5/ След свързване на НАО програмата ще трябва да му се изпрати, а след това и
изпълни. Клика се върху Play бутона, след което синият правоъгълник ще се задвижи.
14
Time-Based Programming
Програмирането, базирано на време съдържа движенията на НАО, които протичат във
времето. Една програма може да се направи, когато всеки фрейм определя различна
поза на НАО. Програмиране чрез Timeline не определя позицията на всички фреймове,
а определя позата на някои от тях.
В следващия пример ще покаже как се създават кутийки от типа Timeline, за да може
НАО да раздвижи ръцете си.
1/ След като една нова Timeline кутийка е създадена, се отваря следният timeline
прозорец.
15
1. Motion: Движение - Съставено от редактор за времевата линия и play бутон.
2. Behavior layers: Слоеве на поведение. Използва се за създаване на събитие в
точно определено време или да се имплементира процес за това кога действието
да се осъществи.
3. Edit: Редакция – мястото, където се настройва колко фрейма ще се осъществяват
в секунда. Съществуват три режима: Passive mode, Waiting Mode, Aggressive
Mode.
4. Select the desired frame: Избор на искания фрейм.
5. Manipulate the joints: Избор на ставите, които да бъдат задвижени.
16
Box Library
LED Library
Тази категория осигурява всички кутийки, които се отнасят за LED светлините на НАО.
Ear LED кутийката се отнася за светлините разположени на ушите на НАО. Чрез
прозореца за параметри може да се контролира:
Side- избор на ляво ухо,
дясно ухо или и двете уши.
Angle - Промяна на ъгъла на
LED.
Intensity- Промяна на
наситеността на цвета.
Duration - Продължителност на яркостта.
Тази кутийка управлява светлините на очите на НАО. В прозореца за параметри може
да се управлява продължителността на светене на светлините.
При кликване два пъти върху
кутийката излиза екран за избор
на цвят.
17
RandomEyes кутийката дава възможност на цветовете на очите да се
избират на произволен принцип. Промяната става през определено
време. Времето за промяна и избора на цветове може да се промени,
чрез редакция на скрипта.
С тази кутийка светлините на
ушите и краката на робота
могат да бъдат управлявани.
LED groups: избор на LED
група т.е. крака или уши.
Time: избор на време за
активация.
Min. intensity: при сигнал приложен на Stop входа,
избор на наситеност на светлината.
Max. intensity: при сигнал приложен на Start
входа, избор на наситеност на светлината.
Water Clock кутийката включва светлините на очите и ушите на НАО в син цвят за
точно определен период от време, който се настройва в прозореца за параметри –
duration.
18
Sensors Library
НАО притежава множество сензори включващи: infrared, bumper и отделни контактни
сензори. Те се използват за определяне на наличието на препятствия или да осъществят
контакт с потребителя. Функциите, използващи сензори могат да се потвърдят само с
използването на робота.
Това е кутийката, отнасяща се до батерията. При двойно кликване
върху нея се отваря прозорец за вътрешната конфигурация. isLow
кутийката има два
входа. Един за входа
на Battery кутийката
и друг за свързване с
паметта на
BatteryLowDetected. Вторият вход ще се
активира тогава, когато нивото на
батерията се изчерпа.
Bumper /броня/ кутийката се отнася за сензорите разположени в
двата крака на НАО, които при натиск разпознават препятствия
намиращи се пред краката. Двата изхода предоставят информация
за коя от двете брони
е натисната, дели
лявата или дясната.
Вътрешната конфигурация на кутийката
показва две кутийки за лявата и дясната
броня. Всяка от кутийките е свързана с
променливите LeftBumperPressed и
RightBumperPressed. Изходната стойност е
истина, ако всяка променлива има
стойност по-голяма от 0, докато
стойността на изхода е лъжа, когато
стойността е равна на 0.
19
Тази кутийка представлява сензорите за натиск на НАО –FSRs –
Force Sensitive Sensors. Те са прикрепени към стъпалата на робота и
определят дали краката на робота са в контакт с пода. Тази кутийка
определя
изходният сигнал
според
стойността на
променливата footContactChanged.
Ще се появи сигнал от втория изход,
ако има контакт с пода, при липса на
такъв ще излезне сигнал от третия
изход. Може да се определи кога НАО
падаТази функция се използва за предпазване на системата.
Фигурата по-долу показва разположението на FSR сензорите.
Тази кутийка се отнася за позата на робота. От нея излизат
стрингове за настоящата позиция на НАО. Синьото в изхода
индикира сигнал от тип string. robotPoseChanged променливата и
изходите са
свързани
директно.
Стойностите, които се
предоставят на изходните
стойности включват: Unknown,
Stand, Sit, Crouch, Knee, Frog, Back, Belly, Left, Right и Headback.
20
Sonar кутийката използва ултразвуковите сензори разположени в
НАО, които спомагат за това да се определи дали пред робота има
препятствия. От трите
изхода, най-горният ще
работи, когато не са налични
препятствия. Когато се
засече препятствие от
сензора, синият изход ще изведе сигнал от тип
string с информация отнасяща се за посоката на
препятствието.
Изходът на кутийката, във вътрешната част на
сонарната кутийка, е свързан с променливите
отнасящи се до сензора. Те са свързани с променливите SonarLeftNothingDetected,
SonarLeftDetected, SonarRightDetectd и SonarRightNothingDetected.
Тази кутийка се отнася до
сензора намиращ се на
горната част на главата на
НАО и е разделен на три
части. Активира се след
докосване от потребителя и
предоставя информация коя
и дали дадена част е активирана. Трите изхода
показват коя от трите части е активирана.
Потребителя може да създаде поведения, които
да се изпълнят в зависимост от коя част на сензора е докосната.
Тези две кутийки се отнасят за
сензорите разположени на двете
ръце на НАО. Функциите са
идентични на TactileTouch,
кутийката.
21
Fall Detector кутийката определя дали робота ще падне. Също така
имплементира вътрешен сигнал за безопасност на системата. Във
вътрешната диаграма на тази кутийка се намира Wait кутийката и
променливата
robotHasFallen. Те са
свързани и се
активират от Wait кутийката след
определено време.
Logic Library
Logic библиотеката предоставя кутийки с функции като цикли и условни конструкции,
предоставени от програмните езици. Тези функции са от голяма помощ при
реализираето на сложни програми.
Dispatcher кутийката изпълнява същата роля като switch конструкцията в езика за
програмиране С. Ако идващият сигнал отговаря на
елемент от кутийката, то този елемент ще се изпрати на
отговарящия изход. Първият изход става активен,
когато не се открие съвпадащ елемент. Сигнала на
вход/изходите е в сиво, което означава, че могат да се
използват както числа, така и текст. Въведеният текст
трябва да бъде ограден в двойни кавички. Кутийката може да определи типа на сигнала.
Може да се добавят и изтриват списъци чрез менюто (Insert row, Remove row), което се
появява при кликване с десен бутон върху горната част на кутийката.
22
Тази кутийка разпознава гласа на потребителя, ако разпознатият глас отговаря на дума
от списъка се произвежда string към отговарящия
изход. Това означава, че отговорите могат да се
класифицират в зависимост от въпроса. Първият вход
изпълнява Choice кутийката, ако входът получи string,
кутийката се изпълнява и след това се прочита текста.
Sting-а трябва да съдържа въпрос, който отговаря на
отговора, който НАО ще чуе от потребителя. Вторият
вход получава списък от думи от външен източник.
Сигнала трябва да бъде получен преди да е стартирала
кутийката. Списъкът с думи може да се генерира над
кутийката. Първият изход на кутийката има string тип,
отнасящ се за статуса на Choice кутийката. Самият
статус може да е следният:
timeout: при липса на отговор от
потребителя за определен период от време.
notUnderstood: при липса на думи, които
отговарят на гласа на потребителя.
onStop: когато сигнала се приложи на Stop.
wordRecognised: когато има дума, която
отговаря на гласа на потребителя.
onTactileSensor: когато потребителят
използва сензор за докосване.
Потребителят може да изпълни команда,
използвайки сензора разположен на главата
в допълнение на разпознаването на реч.
Предната част на сензора повишава
индекса на думите, докато задната част го
намаля - при промяна на индекса, думата,
отговаряща му се прочита. Централната
част доставя избраната дума.
На фигурата от дясно са показани
параметрите на Choice кутийката.
23
Тази кутийка има три входа и два изхода. Изпълнява функця подобна на for
конструкцията в С езика. Индекса се повишава с едно, когато сигнал влезне през start
входа и изхода на индекса е активиран. Loop max параметъра може да
има стойност между 0 и 500 за брой
на итерациите. Индекса на Loop
кутийката се инициализира с 0 и се
повишава с 1. При кликване два пъти
върху кутийката се появява прозорец
със скрипт. Необходими са познания за програмиране
на езика Python, за да могат да бъдат направени
промени.
Multiplexer кутийката изпълнява противоположна на Dispatcher кутийката функция.
Притежава няколко входа и само един изход. При влизане на сигнал в първия вход, се
активира първата дума от списъка, а при влизане от втория вход се активира втората
дума от списъка. При влизане на сигнал и в двата
входа едновременно и двете думи са активирани.
Wait for Signals кутийката има два входа и един изход. Изходът се активира само, когато
сигнал влезне и през двата входа. Изходът не се активира, ако само един вход получава
сигнал. Двата
сигнала не е
необходимо да
влизат по едно и
също време, те се
инициализират, когато изходът е активиран.
24
Timer кутийката има два входа и два изхода. Времето на таймера се измерва в секунди, а
и е в обхвата между 0,0 и 5000,0. След като
таймерът е активиран и
времето измине, ще настъпи
сигнал към втория изход.
Тази кутийка има два входа и един изход. Нейната функция е да изчака определен
период от време да измине и
тогава да се изпрати сигнал.
Вход/изход сигнала е черен,
което означава, че не може да
се изпраща информация като
текст и числа. Timeout е
параметър, който показва
колко време да продължи изчакването.
Tool Library
Библиотеката за инструменти има две функции. Едната функция е да генерира
движения, базирани на време, например такава кутийка може да се използва да се
програмира НАО да използва сензора за halt, докато все още е в движение. Втората
функция е константна т.е. постоянна. В програмирането с програмни езици,
потребителя определя константата, за да използва конкретна информация. Константата,
предоставена от Choreographe притежава информация за ъгли, rgb цветове, числа и
стрингове.
25
Goto and Play и Goto and Stop кутийките имат по един вход и
идентични параметри. Времеви-базирано движение се генерира чрез
фреймове. Номера на фрейма дава информация колко фрейма да се
преместят и могат да са разположени между 0 и 10 000. Тази кутийка
се използва в timeline създадените кутийки. След като Goto and Play се
премести в определен фрейм, движението започва от този конкретен
фрейм. Тези кутийки отговарят на елементите базирани на събитие във
времево-базираните движения.
Тези две кутийки са изходи, те нямат параметри
и само един вход. Play кутийката е подобна на
Goto and Play кутийката, но започва да се
изпълнява в настоящия фрейм, без да се мести.
Stop кутийката спира в настоящия фрейм, без да
мести фреймове.
Angle Edit кутийката има два входа и един изход.
Потребителят може да добавя стойности на ъгъла,
като избира дали да бъдат в градуси или радиани.
Тази кутийка първо конвертира вкараната стойност
от потребителя в радиани, а след това тази стойност
се използва от изхода.
Тази кутийка има един вход и един изход. При кликване върху
цвета от Color Edit се появява прозорец с палитра от цветове.
След като е избран исканият цвят, информацията за цвета ще се
изпрати като RGB код.
26
Тези две кутийки имат по един вход и един изход. Number Edit кутийката изпраща
цифров сигнал, а Text Edit кутийката изпраща текстов сигнал.
Math Library
Тази библиотека предоставя кутийки, отнасящи се към математически операции като
разделяне, умножение, генериране на произволни числа. кутийки за прибавяне и
изваждане не са налични.
Divide кутийката има два входа и един изход.
Цветовете на входа и изхода показват, че информацията, която се
обработва е съставена от числа. Тази кутийка изпълнява операцията
деление на две числа, които идват от входовете, а резултатът се
извежда от изхода. Първият вход е за делимото, а вторият за
делителя.
Също като Divide, Multiply кутийката има два входа и един изход.
Използва двете числа от входа за множители и от извършване на
умножението предоставя резултата на изхода.
27
Тази кутийка има един вход и един изход. Тя генерира произволни цели
числа, с минимална стойност 0, а максималната стойност се определя от
параметъра. Тази кутийка се
активира веднъж, затова
трябва да се използват Timer
или Loop кутийки, за да се
продължи генерирането на призволни
числа.
Както предишната, така и тази кутийка има един вход и един изход.
Разликата тук е възможността да се използват реални числа т.е. числа с
плаваща запетая, вместо цели числа. Отново чрез параметъра може да се
означи кое да бъде максималното число.
Motion Library
Тази библиотека е съставена от кутийки, които изпълняват прости движения.
Arms Example кутийката има два входа и един изход и изпълнява
движения на ръцете. Определени са точно пет фрейма.
28
Hello кутийката е едновременно timeline и script кутийка. Вътре в
кутийката слой FaceLeds е приложен, започвайки от фрейм 0. Този
слой има и _AskForAttention script кутийка. Фрейм 115 е последният
като скоростта му е 25fps, което е по-бързо от стойността по
подразбиране.
Hello кутийката показва движение с ръкомахане на ръцете във форма
на поздрав като едновременно с това цветовете на светлините на очите
също се променят. Има интервали между всеки два фрейма за по плавно движение.
Empty timeline кутийката има структура на timeline, но няма фрейм
с точно определено движение. Можеш да направиш свой собствен
стил, без да е нужно да създаваш нова кутийка.
Sit Down кутийката изпълнява движението сядане. В прозореца за
параметри Maximum of tries се означава броя пъти, които робота може
да опита да седне. Максимума може да бъде до 10 пъти. Тази кутийка
има три изхода. Първият изход става активен, когато сядането е
успешно, вторият става активен, когато сядането е неуспешно, а
третият изход се активира, когато не е възможно да се осъществи
движението сядане.
29
Stand Up кутийката предоставя
движението за ставане, прозореца за
параметри е същия като този на Sit
Down кутийката.
Stiffness кутийката изпълнява Enslaving и Un-enslaving функциите, които отключват и
заключват двигателя на робота. Stiffness се отнася за силата на заключване т.е. колко
точно сила ще се приложи за изпълнението на командата подадена
към двигателя. Когато силата се приложи на НАО, Stiffness на
всички стойности ще бъде 0.
Когато Stiffness е 0, ставата няма да може да се задвижи дори да е
изпратена команда, а когато е 1 всичката възможна сила ще се
използва за изпълнение на командата. Колкото по-голяма е Stiffness,
толкова по-бързо ще се изчерпват запасите на батерията. Тази кутийка има два входа и
един изход. Start настройва Stiffness на max, а Stop на min. Duration показва кога
Stiffness е приложена. Head, left arm, right arm, left leg, right leg параметрите показват
къде е приложена Stiffness функцията.
Tai Chi кутийката
изпълнява движения,
които представляват Tai
Chi Chuan. Параметъра
use legs позволява да се
избере дали краката да
се използват. Изпълнението ще се промени
в зависимост на това дали ще се използват
краката.
30
Тези две кутийки имат
функцията да движат
ръцете на НАО. Ръката се
отваря, когато сигнал
премине през start и се
затваря, когато сигналът
премине през stop. Това са script кутийки, за да
могат да се изпълнят по-сложни движения
трябава да се редактира самият код.
Walk Library
Тази библиотека включва няколко кутийки, отнасящи се до ходенето на НАО.
OmniWalk кутийката съдържа четири входа и един изход. Това е
script кутийка, където четири числови сигнала се използват, за да
може НАО да ходи. Четирите сигнала са:
X: Определя посоката и скоростта на ходене в посока напред и
назад. Стойността може да бъде от -1,0 до 1,0. Отрицателната
стойност индикира посоката назад.
Y: Определя посоката и скоростта за ляво и дясно. Стойността може
да бъде от -1,0 до 1,0. Отрицателната стойност индикира посоката надясно, а
положителната наляво.
Theta: Определя посоката и скоростта на завъртане. Стойността може да бъде от -1,0 до
1,0 като отрицателната стойност индикира посоката за завъртане на дясно, а
положителната наляво.
Step Frequency: Определя честотата на ходене. Стойността може да е от 0,0 до 1,0.,
където 0 означава непроменящо се състояние, а 1 максимална скорост.
Тази кутийка създава примерна програма, която използва OmniWalk кутийката.
DemoOmni включва нормално ходене и ходене с ръкомахане.
Активирана е и характеристика за безопасност, която да предпазва
НАО от опасности при ходене. Например, когато и двата крака на
НАО не са стъпили на пода той ще спре да ходи.
Включени са и следните параметри:
Left arm enabled: определя дали лявата ръка ще се движи.
Right arm enabled: определя дали дясната ръка ще се движи.
Stop walk when foot contact is lost: определя дали характеристиката
за безопасност ще се активира.
31
Тази кутийка, както името й подсказва, е за ходене без спиране.
OmniWalk кутийката е използвана за ходене, както и сензорите
(ultrasonic, battery и
bumper). Възможно е и
използването на
камерата, за да се
имплементира
функцията за следене на лица. Ходенето
спира, когато сензора за докосване е
използван. Когато НАО падне, програмата
спира след като той се изправя. Параметрите
SpeedX, SpeedY, SpeedRotation са същите като
на DemoOmni кутийката, а faceTracking
показва дали е засякано лице и следенето е
активирано.
Тази кутийка определя до къде да се ходи. Параметрите включват X
и Y (стойности за
разстояние) и Theta (ъгъл
на завиване), които се отнасят до разстоянието,
и други параметри, които са същите като тези
на DemoOmni кутийката.
X: посока напред, разстояние измерено в
метри.
Y: посока настрани, разстояние измерено в
метри.
Theta: ъгъл на завиване, измерен в радиани.
32
Audio Library
НАО разполага с четири микрофона и два
говорителя. Аудио елемента е основна част, която
спомага за осъществяване на комуникацията
между НАО и хората. Аудио библиотеката
предоставя разнообразни функции, които да
подобрят комуникацията.
Тази кутийка дава настройки за силата на
звука. Параметъра Volume се измерва в
проценти, а когато е със стойност 0, това
означава, че звукът е спрян.
Тази кутийка може да се избере езика,
който НАО да използва. Езиците, които
поддържа НАО са: китайски,
английски, френски, немски,
италиански, японски, корейски,
португалски и испански.
33
Music кутийката изпълнява музикални файлове. Поддържаните формати са: .wav, .mp3,
и .ogg. Параметрите са следните:
Play in loop: функцията playback, т.е. повторяемост.
Begin position: момента в, който аудио файла ще стартира, измерва
се в секунди.
Volume: Силата на звучене на аудио файла. Обхватът на
стойностите е от 0,0 до 1,0 като стойността по подразбиране е 1,0.
Panorama: съотношението между ляв/десен говорител. Обхватът е
от - 1, до 1,0. При стойност - 1,0 само левият говорител е активен,
при стойност 1,0 само десният говорител е активиран. Стойността по подразбиране е 0.
В Music кутийката се открива Music File кутийка, която определя местоположението на
файла, който трябва да се изпълни и PlayMusic кутийка, която изпълнява файла. При
кликане върху бутона папка на Music File кутийката ще се отвори прозорец Select a file,
където трябва да се избере желаният файл.
Тази кутийка разрешава ва НАО да прочете текста, който е въведен. Параметрите са
следните:
Text: текстов низ, който ще се прочете от НАО, не е нужно
използването на двойни кавички.
Voice Shaping: Стойност за дълбочината на гласа, обхвата е от 50 до
150, като 100 е стойността по подразбиране. По-малки числа,
означава по-остър глас. За мъжки
глас е препоръчително да се
използва стойност 75. Speed: Скоростта на на говорене,
измерена в проценти. Колкото по-ниска е стойността,
толкова по-бавно се говори. Стойността по
подразбиране е 100, а обхвата е от 50 до 200.
34
Тази кутийка притежава подобни на Say кутийката функции, но получава Text
параметъра от входа.
SpeechReco кутийката определя
дали гласа чут от микрофоните
съвпада с предварително зададен
списък от думи. Първият изход се
активира, когато гласовото
разпознаване започне, а вторият
изход изпраща съвпадащите думи,
когато гласовото разпознаване е успешно. Третият
изход е активиран, когато няма съвпадение.
Параметрите на кутийката са следните:
Word list: списък от думи, които съставят разпознаването на речта, думите се разделят с
точка и запетая.
Language: избира се език, от поддържаните езици на НАО.
Threshold: числова стойност, в проценти, която представя точността на гласовото
разпознаване, ако стойността на разпознаване е по-ниска от threshold стойността, се
предполага, че думата няма да бъде разпозната. Стойностите са в диапазона от 0 до 1
като стойността по подразбиране е 0,4.
Visual expression: определя дали LED светлините ще се използват през гласовото
разпознаване.
Тази кутийка прочита думите
избрани от потребителя. Може да
се използва, за да се подобри
точността на Speech Recognition
кутийката. Параметрите са word и
language.
35
Record кутийката записва
звука, получен от
микрофоните. Има четири
входа, първият започва
записа, а вторият го спира.
Третият вход пуска записания
файл, а четвъртият вход го
спира. Параметрите на кутийката са следните:
Duration: времето на записа, измерено в секунди,
обхвата на записа е от 0 до 60 секунди, а
стойността по подразбиране е 5 секунди.
Filename: името на файла, което се използва за запаметяване на записаното съдържание
като аудио файл.
Number of channels: тук се дава указание за броя на микрофоните. При избор на 1 се
използват само предния микрофон, а файла се запаметява в .ogg
формат, а стойност 4 използва всички микрофони, формата на файла
е .wav.
Sound Location кутийката засича звуци идващи от
близко разстояние и предоставя ъгъл на звуковия
източник. Вторият изход (soundLocation) предоставя
две стойности, в радиани, за ъгъла на завъртане на
звуковия източник. Първата стойност е азимутна, а
втората е височината на ъгъла. Третият изход
(headPosition) съдържа информацията, отнасяща се до главата и предоставя шест
стойности. Първите три сочат местоположението на главата, а вторите три индекират
ъгъла на завъртане на главата. Trust threshold е стойността по подразбиране, която
определя дали звука ще настъпи, обхвата е между 0,5 и 1,0, а стойността по
подразбиране е 0,5. Enable move определя дали да се премести главата към източника на
звука.
36
Video Library
НАО има две камери с висока резолюция, едната гледа право напред, а другата гледа
надолу. Системата за виждане на НАО е конфигурирана да събира нужната
информация, събрана чрез камерите. Choreographe предоставя различни кутийки, които
използват тази система.
Select Cam кутийка избира коя камера да се активира. Първият вход
активира сочещата напред камера, а вторият активира сочещата
надолу камера.
Тази кутийка използва камерите, за да разпознава лица и предоставя
броя на хората, които са разпознати. Вторият изход извежда броя на
разпознатите лица, я третия изход се активира, когато няма
разпознати лица. Има вътрешна кутийка, тя взима FaceDetected
променливите от паметта. Броя на лицата се пресмята чрез размера
на променливата FaceDetected.
Тази кутийка използва камерите и лицата от базата данни, за да
разпознава лица. Идентифицира на кого принадлежи лицето, ако има
такова. При успешно лицево разпознаване, втория изход извежда име
на лицето. При разпознаване на няколко лица наведнъж, изхода на
имена се извършва под ред.
37
Тази кутийка изгражда базата данни необходима за разпознаване на
лица. Първият вход получава string от имена, които могат да се
разграничават между лицата. При влизане на текстов сигнал, лицата
и имената се прибавят. Вторият вход инициализира базата данни.
Когато стринг влезне от първия вход има пет секундно изчакване
заради Wait кутийката. През тези пет секунди лицето е засечено и
прибавено в базата данни. Информацията за лицата е добавена, когато LearForgrtFace
кутийката получи лицевата информация от Delay Msg кутийката. LED светлините на
очите ще бъдат зелени, ако информацията е запаметява правилно в базата данни, при
неуспех LED светлините на очите ще бъдат червени.
NAOMark кутийката разпознава предварително дефинирани следи. Ако
следата е разпозната, номера на следата е изход към втория изход, ако
следата не е разпозната, третия изход е активиран. Choereographe предоставя
десет следи. Изображенията и номерата им могат да бъдат открити в
инсталационния диск.
38
Тази кутийка сравнява изображенията, получени от камерите с
изображенията запаметени в базата данни, за да определи
съществуването на обект. Тази база данни е различна от базата данни
от лица използвана от Face Recognition кутийката. Базата данни тук
може да бъде генерирана чрез използването на video monitor.
Вторият изход предоставя името на обекта, ако съществува обект в
изображението. Третият изход е активиран, ако не съществува такъв
обект.
Tracker Library
За да може НАО да следва конкретен обект, той има нужда от
информация за обекта. Choreographe предоставя функции, които
използват камерата, за да се следят обекти и лица.
WB Tracker кутийката или Whole Body, следи
обекти, докато поддържа първоначалната си
поза. Ако следенето е успешно, се активира
втория изход, а ако неуспешно (т.е. изображение
на обекта не съществува) се активира третият
изход. От прозореца с параметри Target choice се отнася за обекта, който трябва да се
следи като това могат да бъдат човешки лица или червени топки в радиус не по-голям
от 6см. Time before lost е времето прекарано в откриване на обекта. С други думи, ако
обекта не бъде открит за това време, следенето се означава като неуспешно.
39
Измерването става в секунди, като обхвата е между 0,0 и 5,0, със стойност по
подразбиране 1,0.
При тази кутийка изходът е
същият като при WB Tracker кутийката.
Параметрите Target choice и Time before lost
също са идентични. Threshold for walk
forward/backwards е стойността за това колко
далече се намира следвания от НАО обект.
Измерва се в метри, като обхвата е между 0,0 и
1,0. Тези параметри определят посоката на
движение на НАО. Той ще се движи напред, ако
разстоянието до следвания обект е по-голямо от
Threshold for walk forward стойността, ще се движи назад, ако стойността е по-малка от
Threshold for walk backwards стойността. Ако стойността е между двата прага, НАО ще
остане на мястото си.
The Walk Tracker кутийката има Tracker и WalkToTarget кутийки. Tracker кутийката
разпознава обекта и пресмята посоката. WalkToTarget кутийката използва
информацията, отнасяща се за ъгъла и посоката на движение на НАО.
Communication Library
Тази библиотека изпълнява функциите да изпраща и получава
e-mail-и. Тази функция е достъпна в зависимост от това какъв
mail сървър се използва.
Тази кутийка изпраща e-mail-и. Изходът е
активиран, ако e-mail-а е изпратен
успешно. Параметрите на кутийката са:
From/To: адреса на изпращача, адреса на получателя.
Subject: заглавие.
40
Contents: съдържание.
Attachment: файл или път към файл с прикачено съдържание.
Password: парола за достъп до адреса на изпращача.
SMPT address: SMPT адреса на адресния сървър.
SMPT port: SMPT порт номер.
Тази кутийка се използва за
получаване на e-mail. Тези e-mail-и
се запазват в различни формати,
като най-често използваните са
text.txt, webpage.html, image.jpg,
audio.wav. Параметрите са:
POP address: POP адреса на идващия mail сървър.
E-mail address: e-mail адреса на получателя.
Password: паролата на акаунта.
SSL port: SSL порт.
41
Модул - Hello World! - Здравей свят!
Какво ще научим:
 Как да включим НАО
 Как да свържем НАО с Choreographe
 Как да накараме НАО да говори чрез Choreographe
Подготовка за използване на НАО
Преди да започнем да използваме НАО, ще се научим как да го зареждаме, настройваме
и работим с него безопасно.
1/ Когато НАО не е в двжение, включи зареждащия кабел в гърба на робота (виж на
картинката). Ако робота се зарежда светлината на зарядното ще е червена.
2/Преди да се включиш НАО се погрижи той да е в стабилна поза
т.е. изправен гръб и двата му крака стъпили стабилно на пода. Това
е препоръчителната поза. НЕ поставяй НАО на маса, от която може
да падне и да се повреди.
3/Включи НАО, като натиснеш бутона на гърдите му. След
натиснат бутон за включване светлините на НАО ще се включат.
Времето за включване на НАО може да отнеме няколко минути, звуков сигнал ще
сигнализира, когато е готов за работа.
42
4/ Свързаване на НАО с Choreographe. Първо стартирай програмата Choreographe на
своя компютър. Ще се появи следния прозорец. Кликни на бутона Connect, за да се
свържеш с НАО.
5/ Ще се отвори друг прозорец и в него ще се появи твоя робот. Селектирай го и кликни
отново Connect To
6/ Сега трябва да си свързан с НАО. Опитай да задвижиш някоя част от тялото на НАО.
Прозореца в ляво на Choreographe ще покаже промяната на позицията на ставите на
НАО.
43
Задача – Начално ниво – Hello World
Ще програмираме НАО да каже “Hello”. НАО използва text-to-speech-
engine, за да преобразува текста в звук, чийто резултат излиза от
говорителите.
1/ В Choreographe виж Box List от ляво. Отиди до Audio и с дърпане изтегли кутийката
Say в централната част на програмата наречена workspace, която съдържа командите,
които робота изпълнява.
2/ За да се изпълни Say кутийката тя трябва да се свърже с програмата. Кликни върху
малката стрелка от ляво на workspace прозореца и издърпай линия към стелката на Say,
която се намира от ляво. кутийките се изпълняват последователно в реда, в който са
свързани. Последната кутия трябва да се свързва със Stop, който се намира в дясната
страна на workspace прозореца.
44
3/ Най-накрая кликни зеления бутон Play. НАО трябва да каже “Hello”
Задача – Средно ниво – Say Anything
Ще се научим как да променяме думите, които НАО казва.
1/ С получения резултат от предходната задача, кликни два пъти върху кутийката Say.
2/ Ще се появи прозорче Localized Text, свързано със Say кутийката. За да се върнеш на
предишния екран крикни върху root.
45
3/ Замени “Hello“ в полето за текст с “Hello World!”
4/ Натисни Play бутона и чуй какво ще каже НАО.
5/ Опитай да експериментираш, като използваш различни думи или фрази.
Задача – Средно ниво – Voice Acting
НАО може да говори бързо, бавно, тихо и високо в зависимост от това как са
настроени неговите параметри – “voice shaping” и “speed”.
1/ Кликли върху инструмента в долната лява част на кутийката Say.
46
2/ Ще се появи следният прозорец. В него се съдържат параметрите на тази кутийка. –
“voice shaping” (оформление на гласа) и “speed” (бързина на гласа).
3/ Промени различните стойности и кликни ОК. Натисни Play бутона и чуй как НАО
говори.
4/ Какво се промени? Експериментирай с различни стойности. Какво контролират двата
параметъра?
Допълнителни задачи:
1/ Накарай НАО да се представи и поздрави класа.
2/ Накарай НАО да изиграе ролите на различни герои от пиеса като
използва различни гласове за всеки герой.
3/ Накарай НАО да изпее азбуката като променя формата и остротата на
гласа си за всяка буква, която произнася.
47
Модул – Walk It Out! – Разходи се!
Какво ще научим:
 Как да накараме Нао да ходи чрез Choreographe
 Координатната равнина (x, y) на НАО
 Как да преобразуваме (x, y) кординатите в градус за
завъртане и дистанция за ходене
 Как да накараме Нао да извърви разстоянието до
определена точка
Координатната равнина (x, y) на НАО
НАО използва координатната (x, y) равнина, за да се насочва към места. Фигурите по-
долу показват координатната структура на НАО. Фигурата в ляво показва
координатната равнина на НАО, когато се разглежда отгоре. А фигурата в дясно показва
същата координатна равнина в триизмерно положение.
X – оста на НАО сочи напред, а Y – оста сочи на ляво на робота. Z-оста, която е
перпендикулярна на останалите две оси, сочи на горе.
Мерните единици на кординатната равнина на НАО са в метри. Примерно (1, 2) се
отнася за точка, 1 метър пред НАО и 2 метра на ляво от него.
В допълнение към точките в координатната равнина се определят и ъгли. Измерват се в
радиани в посока обратна на часовниковата стрелка.
48
Задача – Начално ниво – March Forward
Ще започнем с това да накараме НАО да се изправи, да върви напред и да седне.
1/ Провери дали НАО е в стабилна позиция. Включи НАО и го свържи с Choreographe.
2/ В Choreographe отиди до Motions папката в прозорчето със списък с кутийки.
Издърпай Motor On/Off и Stand Up кутийките в workspace прозореца. Свържи
кутийките.
3/ Издърпай Move To и Sit Down кутийките, които се намират в Motion категорията, и ги
свържи със Stand Up кутийката.
49
4/ Motor On/Off кутийката ще включи опцията за скованост на робота. В този момент не
можеш да променяш положението на ставите му с ръка. В това състояние батерията на
робота ще се изтощава доста по-бързо. За да освободим сковаността от ставите на
робота издърпай в края на веригата още една кутийка Motor On/Off.
5/ За да се изпълни програмата от робота кликни Play бутона. Робота ще се изправи, ще
върви напред и ще седне.
6/ В допълнение, робота има възможност да разпознава вероятност за сблъсъци с
предмети. Робота наблюдава околната среда. Това приложение ще спре НАО да се
движи, ако прецени че има опасност да се сблъска с нещо и така да го повреди.
Приложението може да се спре, ако е необходимо.
Задача – Средно ниво – Walk To a Point
В допълнение на ходенето напред, НАО може да се завърърта на място. Също така
НАО може да се предвижва в различни посоки – напред, настрани, назад или
диагонално. Сега ще се научим как да завиваме.
1/ В Choreographe, съедини една Stand Up кутийка и две Move To кутийки. (И двете се
намират в Motion категорията.)
50
2/ Кликни върху инструмента (долу в ляво) на първата Move To кутийка. Ще се появи
прозорец за конфигуриране на параметрите на тази кутийка.
Прозореца, който се появява ти дава възможност да определиш колко точно робота да се
премести. X - напред, y – настрани и theta – завъртане. Разстоянията се измерват в
метри (отрицателно число означава противоположна посока), а завъртането в радиани.
Постави на x и y стойност 0, постави стойност на theta , различна от 0. Това ще накара
робота да се завърти.
3/ Отвори същия прозорец на следващата Move To кутийка. Постави на x някаква
стойност, различна от 0. А на y и theta стойност 0. Това ще накара робота да ходи
напред.
4/ По избор. Добави Sit Down кутийка в края на веригата от команди.
5/ Натисни бутона Play и наблюдавай движението на робота.
Допълнителни задачи:
1/ Накарай НАО да върви под формата на квадрат – да върви
напред и да завие, да върви напред и да завие, да върви напред
и завие, да върви напред отново.
2/ Накарай НАО да върви в триъгълник.
51
Модул – Hearing Things – Чуване!
Какво ще научим:
 Какво е speech recognition
 Как да изпълним speech recognition на НАО
 Как да използваме прага на разпознаване на гласа
Speech Recognition на НАО. Разпознаване на Реч.
Хората комуникират помежду си чрез речта. Например, когато поздравяваме някой
използваме думите „Здравей“, „Как си?“. Ние автоматично обработваме речта и
разбираме значението на думите почти мигновено. При роботите този процес е по-
сложен. НАО има микрофони на главата си, за да чува звука около него.
За разлика от човека, който чува звук постоянно, НАО трябва да бъде програмиран да
слуша за точно определени звуци в определено време. НАО изпълнява Speech
Recognition (Разпознаване на реч) с алгоритъм, който да превръща това, което чува в
думи, които познава.
За да направи това НАО изисква библиотека от думи, които да очаква да чуе. Например,
една библиотека може да съдържа две думи – yes и no. Когато НАО обработи звуците,
които чува, ще прецени дали те са yes или no, или нито една от двете думи. След като
една дума се разпознае, НАО може да бъде програмиран да реагира по различен начин.
Например, ако чуе yes НАО може да отговори с I am happy, а ако чуе no да отговори с I
am sad. Ако не разпознае нито една от думите НАО може да отговори с I don’t know.
52
Задача – Начално ниво – Speech Recognition
Ще използваме Speech Recognition на НАО. Ще програмираме НАО да разпознае
своето име и да поздравява в отговор.
1/ Първо, издърпай Speech Recognition кутийката (намира се в Audio -> Voice папката) и
я свържи със стрелката за начало.
2/ Кликни върху инструмента, за да достъпиш до параметрите на тази кутийка. Задай на
Word list: nao. Това дефинира библиотеката от познати думи, за които НАО ще слуша.
Поставяйки Nao в библиотеката ще накара НАО да слуша за своето собствено име.
Задай стойността на threshold на 10%. Този ред контролира колко подобен трябва да
бъде звукът, за да може НАО да го разпознае. Това означава, че робота трябва да бъде
само 10% сигурен за това, което чува, за да разпознае думата. Ако поставим стойността
на прага на разпознаваемост 90% робота може да не разпознае думите, които сме
казали, защото не е сигурен.
53
3/ След това, създай две кутийки Say и ги свържи с долните два съединителя на Speech
Recognition кутийката. Горният съединител ще се задейства тогава, когато думата, която
е въведена в библиотеката е разпозната, а долният съединител ще се задейства, тогава
когато чутата дума не е разпозната. Тази структура се нарича условна.
4/ Кликни два пъти върху всяка Say кутийка, за да конфигуриаш какво да казва НАО.
Първата кутийка ще се изпълни, ако робота чуе Nao. Промени тектста на тази кутийка
да казва “Hello, I am Nao.” Промени текста на втората кутийка на “I did not understand”,
тя ще се изпълни, ако робота не разпознае чутата дума.
54
5/ Накрая свържи двете кутийки в долната дясна дясна страна на Speech Recognition
кутийката с Х кутийката от лявата страна на същата кутийка. Това ще накара робота да
спре да слуша за нови думи след като чуе първата.
6/ Сега стартирай Play бутона. Ще чуеш звук, който показна, че НАО е готов да слуша.
Освен това очите му ще светнат в синьо, това също показва, че НАО слуша. След като
НАО чуе човек да говори, очите му ще светнат в жълто. Ако той разпознае думите,
които чува, очите му ще светнат в зелено, ако обаче не ги разпознае, очите му ще
светнат в червено. Когато НАО спре да слуша отново ще се чуе звук.
55
Задача – Средно ниво – Distinguishing Multiple
Names
В това упражнение ще програмираме робота да слуша за различни имена
и да отговори различно след като чуе всяко едно от тях.
1/ Издърпай Speech Recognition кутийката в полето за работа.
2/ Кликни върху инструмента, за да се появи прозорецът с параметри и постави
стойности в word list-а. Стойностите да бъдат “nao;r 2 d 2;c 3 p 0”. Думите в
библиотеката се разделят чрез точка и запетая, без разстояние. Постави прага на
разпознаваемост на 10%.
56
3/ След това добави Switch Case кутийка. Тя може да се открие в списъка с условните
инструменти Flow Control. Тази кутийка сравнява входните данни със списък с
предварително зададени стойности и задейства една от кутийките от дясно в
зависимост от входа.
4/ Промени предварително зададените стойности на Switch Case кутийката, така че да
отговарят на думите въведени в библиотеката на Speech Recognition кутийката. Думите
тук трябва да са обградени от двойни кавички, които показват, че се въвеждат
стрингове. Важно е да се отбележи, че трябва да се спазват главните и малки букви, те
трябва да бъдат такива, каквито сме ги въвели в библиотеката. Когато дума от
библиотеката е чута, Speech Recognition кутийката изпраща тази дума на Switch Case
кутийката.
Switch Case кутийката сравнява входните данни с всички cases (случаи) и задейства
подходящата кутийка от дясно на съответната дума.
57
5/ Сега добави Say кутийки и ги свържи по начина, по който е показано по-долу.
6/ Добави съобщения към всяка Say кутийка. Say кутийката, свързана със Speech
Recognition кутийката ще бъде това, което казва робота, когато не разбира какво е казал
човека. Трите кутийки свързани към Switch Case кутийката ще бъдат отговорите на
робота, когато чуе дадена дума от библиотеката. Например, кутийката най-отгоре ще се
изпълни, когато робота чуе думата “nao”.
7/ Най-накрая, свържи двете долни десни кутийки на Speech Recognition кутийката със
знака Х на същата кутийка, както направихме в предишното упражнение.
58
Допълнителни задачи:
1/ Накарай НАО да попита “How are you?”, в зависимост от
резултата, който кажеш, НАО трябва да отговори “That’s good to
hear”.” или “I hope your day gets better.“
2/ Създай верига от взаимодействия с НАО, където той първо
пита дали харесваш торта или пай. Ако харесваш торта, да те
попита дали харесваш шоколадова или чийзкейк. Ако харесваш
пай НАО да попита дали предпочиташ ябълков или тиквен. В
зависимост от това какво харесваш НАО да каже нещо
подходящо като например “I like chocolate cake too, especially
with whipped cream on top.”
3/ Създай един гласово контролиран робот, където ти да може
да кажеш на НАО да ходи напред, да завие наляво или да завие
надясно. НАО да изпълни действието, което му кажеш.
8/ Натисни Play бутона и опитай, изричайки различни имена.
9/ Може би забелязваш, че разпознаването на речта не е перфектно. Например, робота
може да чуе “c 3 p o” , когато казваш “r 2 d 2” или може да не те разбере какво казваш.
Нивото на разпознаване се определя от параметъра Threshold в Speech Recognition
кутийката.
59
Какво ще научим:
Какво е keyframe motion
Какво представлява понятието за център на
гравитацията на НАО
Как да задържим НАО да е балансиран, докато
настройваме неговата поза
Как да запишем и изпълним keyframes на НАО с
Choreographe
Как да изпълним танц на НАО
Модул – Let’s Dance – Да танцуваме!
Keyframe Motion
Ние хората движим тялото си плавно, докато роботите са стереотипизирани да се
движат сковано. Защо това е така? Някои роботи се движат по bang-bang маниер като
задвижват става, например на ръката на максимална скорост и изведнъж спират.
Първият bang сочи към движението на максимална скорост, а вторият сочи
къмвнезапното спиране. Въпреки това, роботите имат възможност да бъдат по-плавни в
движенията си. Един от методите, които можем да използваме се осъществява чрез
т.нар. keyframe. Keyframe представлява множество от позиции на ставите на робота.
Един keyframe може да бъде позицията на робота в изправено положение, а друг втори
keyframe с ръце вдигнати над главата. В keyframe motion ставите на робота се задвижват
плавно, преминавайки от едно положение в друго.
Чрез опрeделяне на последователност от keyframe-ове можеш да опишеш по-сложни
движения за робота. Keyframe движението е проста техника за изграждане на
движения. Като например: ръкомахане на ръцете, движение на краката, дори и танцови
стъпки. Keyframe-ове са използвани във футбола на роботите. Роботите могат да ритат
футболната топка в много посоки – напред, настрани, дори и назад.
60
Balancing NAO – Балансиране на НАО
От наученото в часовете по физика е известно, че всички обекти имат център на
гравитация. Центъра на гравитацията оказва влияние на това дали позата на обекта е
стабилна. За неподвижни тела, обектът е стабилен, ако центърът на гравитацията се
намира в основата на обекта.
Същата концепция важи и за НАО. Когато е изправен на двата си крака, основната
линия е разположена между двата му крака. В момента, когато НАО е на един крак,
основната линия е разположена на този крак. Центъра на гравитация на НАО е
разположена в неговия „корем“. Центъра на гравитацията на НАО се променя, защото
той може да променя своята форма, когато различни части от тялото му се движат.
Създавайки по-сложни пози на НАО трябва да се държи под внимание неговият баланс.
При настройване на позата на робота трябва да се проверява тежестта на НАО
разположена на двата му крака. Понякога може да изглежда, че и двата му крака на
стъпили на земята, а всичката тежест на НАО всъщност е разположена върху единия му
крак. Такава позиция не е достатъчно стабилна и може да доведе до по-бързо
прегряване на двигателите на НАО.
61
Задача – Начално ниво – Macarena Hand Motions
Choreographe ни позволява за записваме позиици на тялото (keyframes) и да ги
комбинираме на една timeline (времева линия), за да се направят последователни
движения. Ще научим как да създаваме keyframe-ове, като накараме НАО да танцува
танца на Макарена, използвайки ръцете си.
1/ Създай нова кутийка от тип timeline и я найменовай Macarena. Timeline кутийка
позволява да се редактират keyframe-ове.
2/ Кликни два пъти върху новосъздадената кутийка. Ще се появи timeline editor.
Времевата линия се използва, за да се наблюдават и променят отделните keyframe-ове.
Те представляват малките правоъгълни черни кутийки разположени върху времевата
линия. Числата върху линията представляват последователност от фреймове като всеки
фрейм представлява продължение от 10 милисекунди. Така на НАО ще бъдат
необходими 100 ms, за да достигне фрейм 10, 150 ms, за да достигне фрейм 15 и т.н.
Скоростта на фреймовете може да бъде променена.
62
Кликайки върху един keyframe може да го променяш. При свързване към НАО можеш
да наблюдаваш и запазваш keyframe-ове със самия робот. Ако се свържеш с local
NAOqi, можеш да наблюдаваш и запазваш фреймове използвайки виртуалния 3D НАО.
3/ Ще започнем изпълнението на танца от НАО. Първоначално той ще бъде в изправена
позиция. За да изпълниш това, отвори Pose Library. Кликни върху View и избери Pose
Library.
4/ Свържи се към НАО и провери дали сковаността (stiffness) на ставите е задействана.
Ако не е, натисни Wake Up бутона. Това ще накара НАО да се изправи и ставите му да
са неподвижни. Докато държиш НАО, за да го предпазиш от падане, кликни върху
Standinit позата в библиотеката (ако НАО не е изправен). НАО ще
застане в изправена позиция.
5/ За да запазим тази поза като keyframe, кликни на фрейм 10 (100 ms) и селектирай
Store joints in keyframe, а след това Whole body. В този keyframe ще заеме init поза.
Причината да изберем фрейм 10 е, за да дадем възможност на НАО да се придвижи по-
бавно от позицията, в която се е намирал първоначално. Ако започнем от фрейм 1 НАО
ще мръдне насилствено, за да заеме конкретната позиция и ще падне.
63
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика
Учебник по роботика

More Related Content

What's hot

ИТ - начален преговор за 6 клас
ИТ - начален преговор за 6 класИТ - начален преговор за 6 клас
ИТ - начален преговор за 6 клас
nad_and
 
Signature recognition
Signature recognitionSignature recognition
Signature recognition
Vijju Lakkundi
 
Βασικά Θέματα Ασφάλειας Διαδικτύου (ενότητα 1)
Βασικά Θέματα Ασφάλειας Διαδικτύου (ενότητα 1)Βασικά Θέματα Ασφάλειας Διαδικτύου (ενότητα 1)
Βασικά Θέματα Ασφάλειας Διαδικτύου (ενότητα 1)
Θεοδώρα Μαγουλιώτη
 
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみたゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
Kohei Kadowaki
 
C2 5 monitors
C2 5 monitorsC2 5 monitors
C2 5 monitors
papettas
 
Το υλικό του υπολογιστή
Το υλικό του υπολογιστήΤο υλικό του υπολογιστή
Το υλικό του υπολογιστή
Αλεξάνδρα Χρυσανθακοπούλου
 
Κεφ 16 πνευματικά δικαιώματα και προσωπικά δεδομένα στο διαδίκτυο
Κεφ 16 πνευματικά δικαιώματα και προσωπικά δεδομένα στο διαδίκτυοΚεφ 16 πνευματικά δικαιώματα και προσωπικά δεδομένα στο διαδίκτυο
Κεφ 16 πνευματικά δικαιώματα και προσωπικά δεδομένα στο διαδίκτυο
ΕΥΑΓΓΕΛΙΑ ΚΟΚΚΙΝΟΥ
 
Ο Υπολογιστής στην καθημερινή μας ζωή - Νικόλλα Δήμητρα
Ο Υπολογιστής στην καθημερινή μας ζωή - Νικόλλα ΔήμητραΟ Υπολογιστής στην καθημερινή μας ζωή - Νικόλλα Δήμητρα
Ο Υπολογιστής στην καθημερινή μας ζωή - Νικόλλα Δήμητρα
Eleni Psara
 
λογισμικό(Software)
λογισμικό(Software)λογισμικό(Software)
λογισμικό(Software)
Evi Tzanne
 
α 8 πειρατεία λογισμικού
α 8 πειρατεία λογισμικούα 8 πειρατεία λογισμικού
α 8 πειρατεία λογισμικούTsormpatzoglou Nestor
 
Ψηφιακή εικόνα
Ψηφιακή εικόναΨηφιακή εικόνα
Ψηφιακή εικόναtryfonid
 
Προστασία Λογισμικού - Ιοί - Πειρατεία Λογισμικού
Προστασία Λογισμικού - Ιοί - Πειρατεία ΛογισμικούΠροστασία Λογισμικού - Ιοί - Πειρατεία Λογισμικού
Προστασία Λογισμικού - Ιοί - Πειρατεία Λογισμικού
Nikos Michailidis
 
【修士論文】CNNを用いた定置網漁場におけるマグロ有無の推定に関する研究
【修士論文】CNNを用いた定置網漁場におけるマグロ有無の推定に関する研究【修士論文】CNNを用いた定置網漁場におけるマグロ有無の推定に関する研究
【修士論文】CNNを用いた定置網漁場におけるマグロ有無の推定に関する研究
harmonylab
 
Πολυμέσα
ΠολυμέσαΠολυμέσα
Πολυμέσα
kalodikis
 
Αρχεία - Φάκελοι
Αρχεία - ΦάκελοιΑρχεία - Φάκελοι
Αρχεία - Φάκελοι
Nikos Michailidis
 
Pad
PadPad
Gimp (Εκπαιδευτικός Οδηγός)
Gimp (Εκπαιδευτικός Οδηγός)Gimp (Εκπαιδευτικός Οδηγός)
Gimp (Εκπαιδευτικός Οδηγός)
Makis Triantafillidis
 
Biometric authentication system
Biometric authentication systemBiometric authentication system
Biometric authentication system
Manoj Kumar
 
Симетрични и асиметрични алгоритми за криптиране на информация
Симетрични и асиметрични алгоритми за криптиране на информацияСиметрични и асиметрични алгоритми за криптиране на информация
Симетрични и асиметрични алгоритми за криптиране на информация
Kaloyan Kosev
 
GLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめGLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめ
Yoichi Hirata
 

What's hot (20)

ИТ - начален преговор за 6 клас
ИТ - начален преговор за 6 класИТ - начален преговор за 6 клас
ИТ - начален преговор за 6 клас
 
Signature recognition
Signature recognitionSignature recognition
Signature recognition
 
Βασικά Θέματα Ασφάλειας Διαδικτύου (ενότητα 1)
Βασικά Θέματα Ασφάλειας Διαδικτύου (ενότητα 1)Βασικά Θέματα Ασφάλειας Διαδικτύου (ενότητα 1)
Βασικά Θέματα Ασφάλειας Διαδικτύου (ενότητα 1)
 
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみたゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
 
C2 5 monitors
C2 5 monitorsC2 5 monitors
C2 5 monitors
 
Το υλικό του υπολογιστή
Το υλικό του υπολογιστήΤο υλικό του υπολογιστή
Το υλικό του υπολογιστή
 
Κεφ 16 πνευματικά δικαιώματα και προσωπικά δεδομένα στο διαδίκτυο
Κεφ 16 πνευματικά δικαιώματα και προσωπικά δεδομένα στο διαδίκτυοΚεφ 16 πνευματικά δικαιώματα και προσωπικά δεδομένα στο διαδίκτυο
Κεφ 16 πνευματικά δικαιώματα και προσωπικά δεδομένα στο διαδίκτυο
 
Ο Υπολογιστής στην καθημερινή μας ζωή - Νικόλλα Δήμητρα
Ο Υπολογιστής στην καθημερινή μας ζωή - Νικόλλα ΔήμητραΟ Υπολογιστής στην καθημερινή μας ζωή - Νικόλλα Δήμητρα
Ο Υπολογιστής στην καθημερινή μας ζωή - Νικόλλα Δήμητρα
 
λογισμικό(Software)
λογισμικό(Software)λογισμικό(Software)
λογισμικό(Software)
 
α 8 πειρατεία λογισμικού
α 8 πειρατεία λογισμικούα 8 πειρατεία λογισμικού
α 8 πειρατεία λογισμικού
 
Ψηφιακή εικόνα
Ψηφιακή εικόναΨηφιακή εικόνα
Ψηφιακή εικόνα
 
Προστασία Λογισμικού - Ιοί - Πειρατεία Λογισμικού
Προστασία Λογισμικού - Ιοί - Πειρατεία ΛογισμικούΠροστασία Λογισμικού - Ιοί - Πειρατεία Λογισμικού
Προστασία Λογισμικού - Ιοί - Πειρατεία Λογισμικού
 
【修士論文】CNNを用いた定置網漁場におけるマグロ有無の推定に関する研究
【修士論文】CNNを用いた定置網漁場におけるマグロ有無の推定に関する研究【修士論文】CNNを用いた定置網漁場におけるマグロ有無の推定に関する研究
【修士論文】CNNを用いた定置網漁場におけるマグロ有無の推定に関する研究
 
Πολυμέσα
ΠολυμέσαΠολυμέσα
Πολυμέσα
 
Αρχεία - Φάκελοι
Αρχεία - ΦάκελοιΑρχεία - Φάκελοι
Αρχεία - Φάκελοι
 
Pad
PadPad
Pad
 
Gimp (Εκπαιδευτικός Οδηγός)
Gimp (Εκπαιδευτικός Οδηγός)Gimp (Εκπαιδευτικός Οδηγός)
Gimp (Εκπαιδευτικός Οδηγός)
 
Biometric authentication system
Biometric authentication systemBiometric authentication system
Biometric authentication system
 
Симетрични и асиметрични алгоритми за криптиране на информация
Симетрични и асиметрични алгоритми за криптиране на информацияСиметрични и асиметрични алгоритми за криптиране на информация
Симетрични и асиметрични алгоритми за криптиране на информация
 
GLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめGLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめ
 

Similar to Учебник по роботика

Python choreographe NAOqi Framework
Python choreographe NAOqi FrameworkPython choreographe NAOqi Framework
Python choreographe NAOqi Framework
Atelier for robotics
 
Rykowodstwo po programirane_na_bazata_na_ezika_java
Rykowodstwo po programirane_na_bazata_na_ezika_javaRykowodstwo po programirane_na_bazata_na_ezika_java
Rykowodstwo po programirane_na_bazata_na_ezika_javaSonia Lichkova
 
Scratch за начинаещи
Scratch за начинаещиScratch за начинаещи
Scratch за начинаещи
Krassimir Kosstov
 
7. vb sabitijno programirane
7. vb sabitijno programirane7. vb sabitijno programirane
7. vb sabitijno programirane
dnaidenowa
 
Как проектът Yocto помага за създаване на Internet of Things?
Как проектът Yocto помага за създаване на Internet of Things?Как проектът Yocto помага за създаване на Internet of Things?
Как проектът Yocto помага за създаване на Internet of Things?
Leon Anavi
 
Memory problems in .NET apps
Memory problems in .NET appsMemory problems in .NET apps
Memory problems in .NET apps
Borislav Ivanov
 
Демо урок по програмиране със Светлин Наков
Демо урок по програмиране със Светлин НаковДемо урок по програмиране със Светлин Наков
Демо урок по програмиране със Светлин Наков
Svetlin Nakov
 
Mozllla Labs presentation
Mozllla Labs presentationMozllla Labs presentation
Mozllla Labs presentationBogomil Shopov
 
Security Log Management
Security Log  ManagementSecurity Log  Management
Как да убием и последната дискета с Open Source технологии?
Как да убием и последната дискета с Open Source технологии?Как да убием и последната дискета с Open Source технологии?
Как да убием и последната дискета с Open Source технологии?
Leon Anavi
 
Блокове за аритметични действия, аритметични отношения, логически оператори и...
Блокове за аритметични действия, аритметични отношения, логически оператори и...Блокове за аритметични действия, аритметични отношения, логически оператори и...
Блокове за аритметични действия, аритметични отношения, логически оператори и...
Krassimir Kosstov
 
K.Merachev G.Penkov Intro To Context Free Art
K.Merachev G.Penkov  Intro To Context Free ArtK.Merachev G.Penkov  Intro To Context Free Art
K.Merachev G.Penkov Intro To Context Free Artgushelche
 
Въведение в Perl
Въведение в PerlВъведение в Perl

Similar to Учебник по роботика (16)

Python choreographe NAOqi Framework
Python choreographe NAOqi FrameworkPython choreographe NAOqi Framework
Python choreographe NAOqi Framework
 
Rykowodstwo po programirane_na_bazata_na_ezika_java
Rykowodstwo po programirane_na_bazata_na_ezika_javaRykowodstwo po programirane_na_bazata_na_ezika_java
Rykowodstwo po programirane_na_bazata_na_ezika_java
 
Scratch за начинаещи
Scratch за начинаещиScratch за начинаещи
Scratch за начинаещи
 
7. vb sabitijno programirane
7. vb sabitijno programirane7. vb sabitijno programirane
7. vb sabitijno programirane
 
Why do we need a language like go?
Why do we need a language like go?Why do we need a language like go?
Why do we need a language like go?
 
Как проектът Yocto помага за създаване на Internet of Things?
Как проектът Yocto помага за създаване на Internet of Things?Как проектът Yocto помага за създаване на Internet of Things?
Как проектът Yocto помага за създаване на Internet of Things?
 
Memory problems in .NET apps
Memory problems in .NET appsMemory problems in .NET apps
Memory problems in .NET apps
 
Демо урок по програмиране със Светлин Наков
Демо урок по програмиране със Светлин НаковДемо урок по програмиране със Светлин Наков
Демо урок по програмиране със Светлин Наков
 
br15_single
br15_singlebr15_single
br15_single
 
Mozllla Labs presentation
Mozllla Labs presentationMozllla Labs presentation
Mozllla Labs presentation
 
Sample IT Test 13
Sample IT Test 13Sample IT Test 13
Sample IT Test 13
 
Security Log Management
Security Log  ManagementSecurity Log  Management
Security Log Management
 
Как да убием и последната дискета с Open Source технологии?
Как да убием и последната дискета с Open Source технологии?Как да убием и последната дискета с Open Source технологии?
Как да убием и последната дискета с Open Source технологии?
 
Блокове за аритметични действия, аритметични отношения, логически оператори и...
Блокове за аритметични действия, аритметични отношения, логически оператори и...Блокове за аритметични действия, аритметични отношения, логически оператори и...
Блокове за аритметични действия, аритметични отношения, логически оператори и...
 
K.Merachev G.Penkov Intro To Context Free Art
K.Merachev G.Penkov  Intro To Context Free ArtK.Merachev G.Penkov  Intro To Context Free Art
K.Merachev G.Penkov Intro To Context Free Art
 
Въведение в Perl
Въведение в PerlВъведение в Perl
Въведение в Perl
 

More from Atelier for robotics

Основни структури за управление на изчислителния процес
Основни структури за управление на изчислителния процесОсновни структури за управление на изчислителния процес
Основни структури за управление на изчислителния процес
Atelier for robotics
 
Въведение в Python
Въведение в PythonВъведение в Python
Въведение в Python
Atelier for robotics
 
Using NAOqi
Using NAOqiUsing NAOqi
NAOqi framework
NAOqi frameworkNAOqi framework
NAOqi framework
Atelier for robotics
 
Cross compiling
Cross compilingCross compiling
Cross compiling
Atelier for robotics
 
C++ datatypes
C++ datatypesC++ datatypes
C++ datatypes
Atelier for robotics
 

More from Atelier for robotics (7)

Основни структури за управление на изчислителния процес
Основни структури за управление на изчислителния процесОсновни структури за управление на изчислителния процес
Основни структури за управление на изчислителния процес
 
Въведение в Python
Въведение в PythonВъведение в Python
Въведение в Python
 
Using NAOqi
Using NAOqiUsing NAOqi
Using NAOqi
 
NAOqi framework
NAOqi frameworkNAOqi framework
NAOqi framework
 
DCM
DCMDCM
DCM
 
Cross compiling
Cross compilingCross compiling
Cross compiling
 
C++ datatypes
C++ datatypesC++ datatypes
C++ datatypes
 

Учебник по роботика

  • 1. Въведителна & Интерактивна РОБОТИКА Въведение в Python и C++ Програма за изучаване на компютърни науки и роботика
  • 2. Съдържание  НАО въведение и представяне ……………………………………….….…3  Choreographe ……………………………………………………....................5  Box Library ………………………………………………………...…...…...17  Модул 1 – Hello World – Здравей свят ……...………………………….….43  Модул 2 – Walk It Out – Разходи се ………………………………………..50  Модул 3 – Hearing Things – Чуване ………………………………...….......55  Модул 4 – Let’s Dance – Да танцуваме ……………………………….…...63  Модул 5 – Sense and Act – Сетива и действия ……………………...…..…71  Модул 6 –Do the Robot – Направете робота ……………………….…...…80  Модул 7 – Face Off – Разпознаване на лица ………………………..……88  Модул 8 – Object Recognition – Разпознаване на обекти ……………..….92  Модул 9 – Games and Stories – Игри и истории ………………………....103  Модул 10 – Finding your way – Намери си пътя ……..………………....105  Модул 11 – Trajectory following – Изкуствен краснопис ….....…..….…107  Въведение в Python и C++ …....................................................................109 2
  • 3. NAO Humanoid Robot - Хуманоиден робот НАО НАО роботите са средноразмерни и имат отворена архитектура. Използват се из целия свят в средното и висшето образование, могат да се открият в над 48 университета. Роботите НАО са създадени, за да могат да се ползват, както от ученици в средното образование, така и в учебни програми на висшите училища. Заради приятната за използване среда за програмиране, НАО може да се програмира от всеки, без да е от значение нивото на програмните умения. Проектът за НАО стартира през 2005г., когато е избран да бъде официална платформа на RoboCup (Световно първенство по футбол за роботи) през август 2007г. През 2009г. 24 отбора от цял свят се включиха в RoboCup, за целта отборите разполагаха със 100 НАО робота. Нао е хуманоиден робот- т. е. има тяло, структурирано по подобие на човешкото. Основни характеристики: Нао е 57,3см висок и 27,3см широк. Общото тегло на робота е 5,4кг. Направен е от специална пластмаса, устойчива на удари. Има вградена Li-ion батерия, която позволява 90мин. автономна работа. Връзката с компютър става посредством Ethernet кабел, Wi-Fi безжична връзка и USB кабел. Спецификата на хардуера в Нао е следната: Процесор – Atom 1.6 GHz 1GB RAM 2GB Flash Memory 8GB Micro SDHC 3
  • 4. Компоненти: Cameras - Камери – 2бр. Разположени на главата една в горната част /фокусирана напред/ и една в долната част/фокусирана надолу/. Те служат за разпознаване на лица, обекти, направата на запис. Microphones - Микрофони – 4 бр. По един на всяко ухо и по един отпред и отзад на главата. Speakers - Говорители – 2бр. По един на всяко ухо. Infrared - Инфрачервени сензори – разположени на очите. Tactile Sensors - Осезателни сензори – разположени на главата и ръцете. Дават възможност за реакция чрез докосване. Force Sensitive Sensors – разположени на краката. Измерват промяната на съпротивление според натиска, който е оказан. Bumpers – намират се на краката, предпазват от удари. Sonar Range-finders – На тялото на робота са разположени 4 сонара: 2 предавателя и 2 приемника. Нао има общо 25 стави /joints/. 2 за главата, 1 на кръста, 12 на двете ръце и 10 на двата крака. Software – Нао се управлява посредством Choreographe. Езиците за програмиране на Нао са Python и C++. 4
  • 5. Choreographe Choreographe е cross-platform приложение, което може да имплементира действията на НАО чрез графично-представено програмиране. За разлика от текстовото програмиране, с графичното програмиране има по-малко съсредоточаване върху граматиката, а самото програмиране се постига по-скоро с мишка и клавиатура, отколкото със създаването на програмен код. Choreographe може да се използва с Windows, Linux и Mac OS. Имплементацията на действия на НАО в Choreographe става чрез свързване на елементите на движение (кутийки) и групирането им в една верига. Фигурата показва интерфейса на Choreographe, разделен на четири различни категории. Достъпни са още и Pose Library Video Monitor. 1. Menu Screen - Екранно меню 2. Box Library – Библиотека с кутийки 3. Diagramming Space – Работно поле 4. 3D NAO – Тримерен модел 5
  • 6. 1. Menu Screen / Екранно меню 6
  • 7. 2. Box Library – Библиотека с кyтийки Кутийките, които се използват в Choreographe са групирани по функции. Една кутийка представлява икона с определена функция. Библиотеката от кутийки на НАО е разделена на 13 типа, и съдържа около 70 кутийки. Те се използват, за да управляват движенията на НАО. Всеки може да създаде нова библиотека, както и нови кутийки, освен това в програмата могат да се вмъкнат нови кутийки. 3. Diagramming space – Работно поле Това е мястото, където се програмират и създават поведения на робота. Потребителя може да издърпва кутийки от библиотеката. В предоставената библиотека съществува конфигурация на кутийка, която е съставена от различни кутийки. При кликване два пъти върху тази кутийка, ще се появи пространство, принадлежащо на тази кутийка. Фигурата показва как чрез използването само на мишката, можем да създадем приложение, което вкючва светлините на ушите при изчерпване на заряда на батерията. 4. 3D NAO – Тримерен модел Този екран показва триизмерен НАО. 7
  • 8. 5. Predefined position library Това е функция, която запаметява стойностите на конкретна поза. Choreographe предоставя три различни пози като основни.  Zero - всички стойности на ставите са равни на 0.  Init – това е поза, която е удобна да се използва за преход към следващо движение.  Stand – тази поза изисква най-малък разход на батерия. Потребителя може да си съдаде библиотека от най-често използваните пози. 6. Video monitor Предоставя футкциите необходими за имплементиране на движения, които имат нужда от камерите на НАО. 8
  • 9. 7. Connection Settings При избиране на Connect to опцията от Choreographe в Connection менюто ще се появи Browse Robot прозорец, както е показано. От лявата страна са изброени всички открити НАО-та. Типа на вида връзка се означава с различно оцветяване.От лявата страна са изброени всички открити НАО-та. Типа на вида връзка се означава с различно оцветяване. 9 NAOqi е активен, осъществена е връзка. NAOqi е в неподвижно състояние, не може да се осъществи връзка. Може да се осъществи връзка при свързване с кабел. NAO подлежи на симулации. LED светлини и сензори не могат да бъдат имплементирани, Възможно е само да се контролира движението на робота.
  • 10. Най-добрата характеристика на Choreographe е възможността да предостави графично-базирано програмиране. Кутииките и иконите са важен елемент от Choreographe и са поставени в диаграми. Графичното програмиране се осъществява чрез свързването на тези кутийки. Choreographe предоставя около 70 готови кутийки, но потребителя може да създава свои. Всяка кутийка се конфигурира с вход, изход и бутон за параметри. Някои кутийки обаче нямат изход или бутон за параметри. onStart input: вход за активация на функциите на кутийката. Обикновенно е свързана със сигналите, предоставени от други кутийки. onStop input: вход за спиране на функциите на кутийката. onStopped output: изход, който показва резултат, когато функцията на кутийката спира. Използва се като входен сигнал за други кутийки. onLoad input: използва се, когато се свързва Timeline на вътрешна кутийка. Когато поведението на кутийката е имплементирано се зарежда Timeline на вътрешна кутийка. Input Connected to ALMemory вход свързан с паметта, доставя се стойноста на конкретна променлива. onEvent input: Този вход въвежда информация от външен източник в кутийката. Punctual output: Този изход изпраща информация вътре в кутийката. Parameter: Намира се в долния ляв ъгъл на кутийката. Служи за настройване на параметрите. Входовете и изходите на една кутийка могат да имат различни цветове, в зависимост от тима на сигнала на връзката. Формата на сигнала и цвета, използвани от Choreographe са както следва: Bang: Черен цвят, често срещан вход/изход сигнал, който не пренася информация. Number: Жълт цвят, сигнал, който пренася информация под формата на числа. String: Син цвят, сигнал, който пренася информация под формата на текст. Dynamic: Сив свят, пренася всякакъв вид информация. Типа на сигнала се определя, когато е приложен. 10
  • 11. Съществуват три типа, които се намират в кутийките. Script, Timeline, Diagram. Script използва Python, за да имплементира функционалност на кутийката. Timeline програмира движенията на НАО в зависимост от движението на събития. Timeline е базирана на време, програмира движенията на НАО чрез фреймове. Diagram е базирана на събитие, програмира движенията на НАО чрез кутийки. Програми с движение на ставите могат да използват Timeline и Diagram заедно. Някои части от кутийките, предоставени от Choreographe могат да имат и трите типа, приложени едновременно. Box Generation Както беше споменато, всеки потребител може да генерира нова кутийка, която да имплементира недостъпни функции. Важно е да се каже, че програми, съдържащи комбинация от кутийки и изпълняващи по-сложни функции могат да бъдат по-трудно прочитани. Ако това се случи e добре програмата да се раздели на функции. Това ще подобри четливостта, както и поддържането на програмата. Ще разгледаме как се създават Timeline и Diagram кутийки. Генериране на кутийка и настройване на интерфейса на кутийката: А/ С кликане на дейсния бутон на мишката върху мястото за диаграми, ще се появи меню за редактиране. Избира се Add a new box. 11
  • 12. Б/ Ще се появи прозорец за конфигуриране на новата кутийка. Следват се инструкциите: 1. General Description: Избира се име и описание на кутийката. 2. Image: Избира се форма и изображение за кутийката. 3. Inputs/Outputs/Parameters: Вход/изход/параметър списъци могат да бъдат настройвани. Има контролни бутони от дясната страна на всеки списък, бутона – в ляво премахва отговарящия елемент, бутона + от дясно привабя нов елемен и отваря IO прозорец. При добавяне на елемент към параметъра се създава бутон за достъп към този параметър върху интерфейса на новата кутийка. 12
  • 13. 4. Offspring: Определя се типа на кутийката, дали ще е script, timeline или diagram. 5. Plugin: Функция, която използва библиотеката на някои от кутийките на Choreographe. 6. IO description: Настройва се по-детайлна информация за входа, изхода и параметрите. Настройва се име, описание, тип на сигнала и вход/изход форма. Номерът от дясната страна на типа се отнася до броя на информацията, ако е по- голям от 1 предаденият сигнал е във форма на масив. В/ При кликане два пъти върху новата кутиика, ще се отвори нов прозорец. Event-Based and Time-Based Programming Съществуват два начина да се програмират движения на НАО. Първият метод е програмиране, базирано на събитие, където се използват кутийки, които са свързани помежду си. Вторият метод е програмиране, базирано на време, тук движението на ставите на робота става във времето. Танцови стъпки могат да се създадат чрез програмиране, базирано на време като за целта се използват диаграми. И двата метода могат да се използват в рамките на един проект, т.е. заедно. Event-Based Programming Поставянето на кутийки и връзките между тях са двете най-важни неща в програмирането, базирано на събитие. кутийките се поставят чрез drag and drop метода и се обединяват в една програма, когато биват свързани във верига. Със следващия пример се показва как се използват кутийки, как се свързват и тяхното изпълнение. 13
  • 14. 1/ Ще използваме две Say кутийки. 2/ След като се натисне бутона с инструмент ще се появи прозорец с параметри, където в Text полето трябва да се въведе текста, който ще бъде изричан от НАО. 3/ След въвеждане на текст за двете кутийки, те трябва да се свържат. Свързването става чрез вход/изход частите, както е показано по-долу. 4/ За да се изпълни програмата от НАО, той трябва да бъде свързан с Choreographe. 5/ След свързване на НАО програмата ще трябва да му се изпрати, а след това и изпълни. Клика се върху Play бутона, след което синият правоъгълник ще се задвижи. 14
  • 15. Time-Based Programming Програмирането, базирано на време съдържа движенията на НАО, които протичат във времето. Една програма може да се направи, когато всеки фрейм определя различна поза на НАО. Програмиране чрез Timeline не определя позицията на всички фреймове, а определя позата на някои от тях. В следващия пример ще покаже как се създават кутийки от типа Timeline, за да може НАО да раздвижи ръцете си. 1/ След като една нова Timeline кутийка е създадена, се отваря следният timeline прозорец. 15
  • 16. 1. Motion: Движение - Съставено от редактор за времевата линия и play бутон. 2. Behavior layers: Слоеве на поведение. Използва се за създаване на събитие в точно определено време или да се имплементира процес за това кога действието да се осъществи. 3. Edit: Редакция – мястото, където се настройва колко фрейма ще се осъществяват в секунда. Съществуват три режима: Passive mode, Waiting Mode, Aggressive Mode. 4. Select the desired frame: Избор на искания фрейм. 5. Manipulate the joints: Избор на ставите, които да бъдат задвижени. 16
  • 17. Box Library LED Library Тази категория осигурява всички кутийки, които се отнасят за LED светлините на НАО. Ear LED кутийката се отнася за светлините разположени на ушите на НАО. Чрез прозореца за параметри може да се контролира: Side- избор на ляво ухо, дясно ухо или и двете уши. Angle - Промяна на ъгъла на LED. Intensity- Промяна на наситеността на цвета. Duration - Продължителност на яркостта. Тази кутийка управлява светлините на очите на НАО. В прозореца за параметри може да се управлява продължителността на светене на светлините. При кликване два пъти върху кутийката излиза екран за избор на цвят. 17
  • 18. RandomEyes кутийката дава възможност на цветовете на очите да се избират на произволен принцип. Промяната става през определено време. Времето за промяна и избора на цветове може да се промени, чрез редакция на скрипта. С тази кутийка светлините на ушите и краката на робота могат да бъдат управлявани. LED groups: избор на LED група т.е. крака или уши. Time: избор на време за активация. Min. intensity: при сигнал приложен на Stop входа, избор на наситеност на светлината. Max. intensity: при сигнал приложен на Start входа, избор на наситеност на светлината. Water Clock кутийката включва светлините на очите и ушите на НАО в син цвят за точно определен период от време, който се настройва в прозореца за параметри – duration. 18
  • 19. Sensors Library НАО притежава множество сензори включващи: infrared, bumper и отделни контактни сензори. Те се използват за определяне на наличието на препятствия или да осъществят контакт с потребителя. Функциите, използващи сензори могат да се потвърдят само с използването на робота. Това е кутийката, отнасяща се до батерията. При двойно кликване върху нея се отваря прозорец за вътрешната конфигурация. isLow кутийката има два входа. Един за входа на Battery кутийката и друг за свързване с паметта на BatteryLowDetected. Вторият вход ще се активира тогава, когато нивото на батерията се изчерпа. Bumper /броня/ кутийката се отнася за сензорите разположени в двата крака на НАО, които при натиск разпознават препятствия намиращи се пред краката. Двата изхода предоставят информация за коя от двете брони е натисната, дели лявата или дясната. Вътрешната конфигурация на кутийката показва две кутийки за лявата и дясната броня. Всяка от кутийките е свързана с променливите LeftBumperPressed и RightBumperPressed. Изходната стойност е истина, ако всяка променлива има стойност по-голяма от 0, докато стойността на изхода е лъжа, когато стойността е равна на 0. 19
  • 20. Тази кутийка представлява сензорите за натиск на НАО –FSRs – Force Sensitive Sensors. Те са прикрепени към стъпалата на робота и определят дали краката на робота са в контакт с пода. Тази кутийка определя изходният сигнал според стойността на променливата footContactChanged. Ще се появи сигнал от втория изход, ако има контакт с пода, при липса на такъв ще излезне сигнал от третия изход. Може да се определи кога НАО падаТази функция се използва за предпазване на системата. Фигурата по-долу показва разположението на FSR сензорите. Тази кутийка се отнася за позата на робота. От нея излизат стрингове за настоящата позиция на НАО. Синьото в изхода индикира сигнал от тип string. robotPoseChanged променливата и изходите са свързани директно. Стойностите, които се предоставят на изходните стойности включват: Unknown, Stand, Sit, Crouch, Knee, Frog, Back, Belly, Left, Right и Headback. 20
  • 21. Sonar кутийката използва ултразвуковите сензори разположени в НАО, които спомагат за това да се определи дали пред робота има препятствия. От трите изхода, най-горният ще работи, когато не са налични препятствия. Когато се засече препятствие от сензора, синият изход ще изведе сигнал от тип string с информация отнасяща се за посоката на препятствието. Изходът на кутийката, във вътрешната част на сонарната кутийка, е свързан с променливите отнасящи се до сензора. Те са свързани с променливите SonarLeftNothingDetected, SonarLeftDetected, SonarRightDetectd и SonarRightNothingDetected. Тази кутийка се отнася до сензора намиращ се на горната част на главата на НАО и е разделен на три части. Активира се след докосване от потребителя и предоставя информация коя и дали дадена част е активирана. Трите изхода показват коя от трите части е активирана. Потребителя може да създаде поведения, които да се изпълнят в зависимост от коя част на сензора е докосната. Тези две кутийки се отнасят за сензорите разположени на двете ръце на НАО. Функциите са идентични на TactileTouch, кутийката. 21
  • 22. Fall Detector кутийката определя дали робота ще падне. Също така имплементира вътрешен сигнал за безопасност на системата. Във вътрешната диаграма на тази кутийка се намира Wait кутийката и променливата robotHasFallen. Те са свързани и се активират от Wait кутийката след определено време. Logic Library Logic библиотеката предоставя кутийки с функции като цикли и условни конструкции, предоставени от програмните езици. Тези функции са от голяма помощ при реализираето на сложни програми. Dispatcher кутийката изпълнява същата роля като switch конструкцията в езика за програмиране С. Ако идващият сигнал отговаря на елемент от кутийката, то този елемент ще се изпрати на отговарящия изход. Първият изход става активен, когато не се открие съвпадащ елемент. Сигнала на вход/изходите е в сиво, което означава, че могат да се използват както числа, така и текст. Въведеният текст трябва да бъде ограден в двойни кавички. Кутийката може да определи типа на сигнала. Може да се добавят и изтриват списъци чрез менюто (Insert row, Remove row), което се появява при кликване с десен бутон върху горната част на кутийката. 22
  • 23. Тази кутийка разпознава гласа на потребителя, ако разпознатият глас отговаря на дума от списъка се произвежда string към отговарящия изход. Това означава, че отговорите могат да се класифицират в зависимост от въпроса. Първият вход изпълнява Choice кутийката, ако входът получи string, кутийката се изпълнява и след това се прочита текста. Sting-а трябва да съдържа въпрос, който отговаря на отговора, който НАО ще чуе от потребителя. Вторият вход получава списък от думи от външен източник. Сигнала трябва да бъде получен преди да е стартирала кутийката. Списъкът с думи може да се генерира над кутийката. Първият изход на кутийката има string тип, отнасящ се за статуса на Choice кутийката. Самият статус може да е следният: timeout: при липса на отговор от потребителя за определен период от време. notUnderstood: при липса на думи, които отговарят на гласа на потребителя. onStop: когато сигнала се приложи на Stop. wordRecognised: когато има дума, която отговаря на гласа на потребителя. onTactileSensor: когато потребителят използва сензор за докосване. Потребителят може да изпълни команда, използвайки сензора разположен на главата в допълнение на разпознаването на реч. Предната част на сензора повишава индекса на думите, докато задната част го намаля - при промяна на индекса, думата, отговаряща му се прочита. Централната част доставя избраната дума. На фигурата от дясно са показани параметрите на Choice кутийката. 23
  • 24. Тази кутийка има три входа и два изхода. Изпълнява функця подобна на for конструкцията в С езика. Индекса се повишава с едно, когато сигнал влезне през start входа и изхода на индекса е активиран. Loop max параметъра може да има стойност между 0 и 500 за брой на итерациите. Индекса на Loop кутийката се инициализира с 0 и се повишава с 1. При кликване два пъти върху кутийката се появява прозорец със скрипт. Необходими са познания за програмиране на езика Python, за да могат да бъдат направени промени. Multiplexer кутийката изпълнява противоположна на Dispatcher кутийката функция. Притежава няколко входа и само един изход. При влизане на сигнал в първия вход, се активира първата дума от списъка, а при влизане от втория вход се активира втората дума от списъка. При влизане на сигнал и в двата входа едновременно и двете думи са активирани. Wait for Signals кутийката има два входа и един изход. Изходът се активира само, когато сигнал влезне и през двата входа. Изходът не се активира, ако само един вход получава сигнал. Двата сигнала не е необходимо да влизат по едно и също време, те се инициализират, когато изходът е активиран. 24
  • 25. Timer кутийката има два входа и два изхода. Времето на таймера се измерва в секунди, а и е в обхвата между 0,0 и 5000,0. След като таймерът е активиран и времето измине, ще настъпи сигнал към втория изход. Тази кутийка има два входа и един изход. Нейната функция е да изчака определен период от време да измине и тогава да се изпрати сигнал. Вход/изход сигнала е черен, което означава, че не може да се изпраща информация като текст и числа. Timeout е параметър, който показва колко време да продължи изчакването. Tool Library Библиотеката за инструменти има две функции. Едната функция е да генерира движения, базирани на време, например такава кутийка може да се използва да се програмира НАО да използва сензора за halt, докато все още е в движение. Втората функция е константна т.е. постоянна. В програмирането с програмни езици, потребителя определя константата, за да използва конкретна информация. Константата, предоставена от Choreographe притежава информация за ъгли, rgb цветове, числа и стрингове. 25
  • 26. Goto and Play и Goto and Stop кутийките имат по един вход и идентични параметри. Времеви-базирано движение се генерира чрез фреймове. Номера на фрейма дава информация колко фрейма да се преместят и могат да са разположени между 0 и 10 000. Тази кутийка се използва в timeline създадените кутийки. След като Goto and Play се премести в определен фрейм, движението започва от този конкретен фрейм. Тези кутийки отговарят на елементите базирани на събитие във времево-базираните движения. Тези две кутийки са изходи, те нямат параметри и само един вход. Play кутийката е подобна на Goto and Play кутийката, но започва да се изпълнява в настоящия фрейм, без да се мести. Stop кутийката спира в настоящия фрейм, без да мести фреймове. Angle Edit кутийката има два входа и един изход. Потребителят може да добавя стойности на ъгъла, като избира дали да бъдат в градуси или радиани. Тази кутийка първо конвертира вкараната стойност от потребителя в радиани, а след това тази стойност се използва от изхода. Тази кутийка има един вход и един изход. При кликване върху цвета от Color Edit се появява прозорец с палитра от цветове. След като е избран исканият цвят, информацията за цвета ще се изпрати като RGB код. 26
  • 27. Тези две кутийки имат по един вход и един изход. Number Edit кутийката изпраща цифров сигнал, а Text Edit кутийката изпраща текстов сигнал. Math Library Тази библиотека предоставя кутийки, отнасящи се към математически операции като разделяне, умножение, генериране на произволни числа. кутийки за прибавяне и изваждане не са налични. Divide кутийката има два входа и един изход. Цветовете на входа и изхода показват, че информацията, която се обработва е съставена от числа. Тази кутийка изпълнява операцията деление на две числа, които идват от входовете, а резултатът се извежда от изхода. Първият вход е за делимото, а вторият за делителя. Също като Divide, Multiply кутийката има два входа и един изход. Използва двете числа от входа за множители и от извършване на умножението предоставя резултата на изхода. 27
  • 28. Тази кутийка има един вход и един изход. Тя генерира произволни цели числа, с минимална стойност 0, а максималната стойност се определя от параметъра. Тази кутийка се активира веднъж, затова трябва да се използват Timer или Loop кутийки, за да се продължи генерирането на призволни числа. Както предишната, така и тази кутийка има един вход и един изход. Разликата тук е възможността да се използват реални числа т.е. числа с плаваща запетая, вместо цели числа. Отново чрез параметъра може да се означи кое да бъде максималното число. Motion Library Тази библиотека е съставена от кутийки, които изпълняват прости движения. Arms Example кутийката има два входа и един изход и изпълнява движения на ръцете. Определени са точно пет фрейма. 28
  • 29. Hello кутийката е едновременно timeline и script кутийка. Вътре в кутийката слой FaceLeds е приложен, започвайки от фрейм 0. Този слой има и _AskForAttention script кутийка. Фрейм 115 е последният като скоростта му е 25fps, което е по-бързо от стойността по подразбиране. Hello кутийката показва движение с ръкомахане на ръцете във форма на поздрав като едновременно с това цветовете на светлините на очите също се променят. Има интервали между всеки два фрейма за по плавно движение. Empty timeline кутийката има структура на timeline, но няма фрейм с точно определено движение. Можеш да направиш свой собствен стил, без да е нужно да създаваш нова кутийка. Sit Down кутийката изпълнява движението сядане. В прозореца за параметри Maximum of tries се означава броя пъти, които робота може да опита да седне. Максимума може да бъде до 10 пъти. Тази кутийка има три изхода. Първият изход става активен, когато сядането е успешно, вторият става активен, когато сядането е неуспешно, а третият изход се активира, когато не е възможно да се осъществи движението сядане. 29
  • 30. Stand Up кутийката предоставя движението за ставане, прозореца за параметри е същия като този на Sit Down кутийката. Stiffness кутийката изпълнява Enslaving и Un-enslaving функциите, които отключват и заключват двигателя на робота. Stiffness се отнася за силата на заключване т.е. колко точно сила ще се приложи за изпълнението на командата подадена към двигателя. Когато силата се приложи на НАО, Stiffness на всички стойности ще бъде 0. Когато Stiffness е 0, ставата няма да може да се задвижи дори да е изпратена команда, а когато е 1 всичката възможна сила ще се използва за изпълнение на командата. Колкото по-голяма е Stiffness, толкова по-бързо ще се изчерпват запасите на батерията. Тази кутийка има два входа и един изход. Start настройва Stiffness на max, а Stop на min. Duration показва кога Stiffness е приложена. Head, left arm, right arm, left leg, right leg параметрите показват къде е приложена Stiffness функцията. Tai Chi кутийката изпълнява движения, които представляват Tai Chi Chuan. Параметъра use legs позволява да се избере дали краката да се използват. Изпълнението ще се промени в зависимост на това дали ще се използват краката. 30
  • 31. Тези две кутийки имат функцията да движат ръцете на НАО. Ръката се отваря, когато сигнал премине през start и се затваря, когато сигналът премине през stop. Това са script кутийки, за да могат да се изпълнят по-сложни движения трябава да се редактира самият код. Walk Library Тази библиотека включва няколко кутийки, отнасящи се до ходенето на НАО. OmniWalk кутийката съдържа четири входа и един изход. Това е script кутийка, където четири числови сигнала се използват, за да може НАО да ходи. Четирите сигнала са: X: Определя посоката и скоростта на ходене в посока напред и назад. Стойността може да бъде от -1,0 до 1,0. Отрицателната стойност индикира посоката назад. Y: Определя посоката и скоростта за ляво и дясно. Стойността може да бъде от -1,0 до 1,0. Отрицателната стойност индикира посоката надясно, а положителната наляво. Theta: Определя посоката и скоростта на завъртане. Стойността може да бъде от -1,0 до 1,0 като отрицателната стойност индикира посоката за завъртане на дясно, а положителната наляво. Step Frequency: Определя честотата на ходене. Стойността може да е от 0,0 до 1,0., където 0 означава непроменящо се състояние, а 1 максимална скорост. Тази кутийка създава примерна програма, която използва OmniWalk кутийката. DemoOmni включва нормално ходене и ходене с ръкомахане. Активирана е и характеристика за безопасност, която да предпазва НАО от опасности при ходене. Например, когато и двата крака на НАО не са стъпили на пода той ще спре да ходи. Включени са и следните параметри: Left arm enabled: определя дали лявата ръка ще се движи. Right arm enabled: определя дали дясната ръка ще се движи. Stop walk when foot contact is lost: определя дали характеристиката за безопасност ще се активира. 31
  • 32. Тази кутийка, както името й подсказва, е за ходене без спиране. OmniWalk кутийката е използвана за ходене, както и сензорите (ultrasonic, battery и bumper). Възможно е и използването на камерата, за да се имплементира функцията за следене на лица. Ходенето спира, когато сензора за докосване е използван. Когато НАО падне, програмата спира след като той се изправя. Параметрите SpeedX, SpeedY, SpeedRotation са същите като на DemoOmni кутийката, а faceTracking показва дали е засякано лице и следенето е активирано. Тази кутийка определя до къде да се ходи. Параметрите включват X и Y (стойности за разстояние) и Theta (ъгъл на завиване), които се отнасят до разстоянието, и други параметри, които са същите като тези на DemoOmni кутийката. X: посока напред, разстояние измерено в метри. Y: посока настрани, разстояние измерено в метри. Theta: ъгъл на завиване, измерен в радиани. 32
  • 33. Audio Library НАО разполага с четири микрофона и два говорителя. Аудио елемента е основна част, която спомага за осъществяване на комуникацията между НАО и хората. Аудио библиотеката предоставя разнообразни функции, които да подобрят комуникацията. Тази кутийка дава настройки за силата на звука. Параметъра Volume се измерва в проценти, а когато е със стойност 0, това означава, че звукът е спрян. Тази кутийка може да се избере езика, който НАО да използва. Езиците, които поддържа НАО са: китайски, английски, френски, немски, италиански, японски, корейски, португалски и испански. 33
  • 34. Music кутийката изпълнява музикални файлове. Поддържаните формати са: .wav, .mp3, и .ogg. Параметрите са следните: Play in loop: функцията playback, т.е. повторяемост. Begin position: момента в, който аудио файла ще стартира, измерва се в секунди. Volume: Силата на звучене на аудио файла. Обхватът на стойностите е от 0,0 до 1,0 като стойността по подразбиране е 1,0. Panorama: съотношението между ляв/десен говорител. Обхватът е от - 1, до 1,0. При стойност - 1,0 само левият говорител е активен, при стойност 1,0 само десният говорител е активиран. Стойността по подразбиране е 0. В Music кутийката се открива Music File кутийка, която определя местоположението на файла, който трябва да се изпълни и PlayMusic кутийка, която изпълнява файла. При кликане върху бутона папка на Music File кутийката ще се отвори прозорец Select a file, където трябва да се избере желаният файл. Тази кутийка разрешава ва НАО да прочете текста, който е въведен. Параметрите са следните: Text: текстов низ, който ще се прочете от НАО, не е нужно използването на двойни кавички. Voice Shaping: Стойност за дълбочината на гласа, обхвата е от 50 до 150, като 100 е стойността по подразбиране. По-малки числа, означава по-остър глас. За мъжки глас е препоръчително да се използва стойност 75. Speed: Скоростта на на говорене, измерена в проценти. Колкото по-ниска е стойността, толкова по-бавно се говори. Стойността по подразбиране е 100, а обхвата е от 50 до 200. 34
  • 35. Тази кутийка притежава подобни на Say кутийката функции, но получава Text параметъра от входа. SpeechReco кутийката определя дали гласа чут от микрофоните съвпада с предварително зададен списък от думи. Първият изход се активира, когато гласовото разпознаване започне, а вторият изход изпраща съвпадащите думи, когато гласовото разпознаване е успешно. Третият изход е активиран, когато няма съвпадение. Параметрите на кутийката са следните: Word list: списък от думи, които съставят разпознаването на речта, думите се разделят с точка и запетая. Language: избира се език, от поддържаните езици на НАО. Threshold: числова стойност, в проценти, която представя точността на гласовото разпознаване, ако стойността на разпознаване е по-ниска от threshold стойността, се предполага, че думата няма да бъде разпозната. Стойностите са в диапазона от 0 до 1 като стойността по подразбиране е 0,4. Visual expression: определя дали LED светлините ще се използват през гласовото разпознаване. Тази кутийка прочита думите избрани от потребителя. Може да се използва, за да се подобри точността на Speech Recognition кутийката. Параметрите са word и language. 35
  • 36. Record кутийката записва звука, получен от микрофоните. Има четири входа, първият започва записа, а вторият го спира. Третият вход пуска записания файл, а четвъртият вход го спира. Параметрите на кутийката са следните: Duration: времето на записа, измерено в секунди, обхвата на записа е от 0 до 60 секунди, а стойността по подразбиране е 5 секунди. Filename: името на файла, което се използва за запаметяване на записаното съдържание като аудио файл. Number of channels: тук се дава указание за броя на микрофоните. При избор на 1 се използват само предния микрофон, а файла се запаметява в .ogg формат, а стойност 4 използва всички микрофони, формата на файла е .wav. Sound Location кутийката засича звуци идващи от близко разстояние и предоставя ъгъл на звуковия източник. Вторият изход (soundLocation) предоставя две стойности, в радиани, за ъгъла на завъртане на звуковия източник. Първата стойност е азимутна, а втората е височината на ъгъла. Третият изход (headPosition) съдържа информацията, отнасяща се до главата и предоставя шест стойности. Първите три сочат местоположението на главата, а вторите три индекират ъгъла на завъртане на главата. Trust threshold е стойността по подразбиране, която определя дали звука ще настъпи, обхвата е между 0,5 и 1,0, а стойността по подразбиране е 0,5. Enable move определя дали да се премести главата към източника на звука. 36
  • 37. Video Library НАО има две камери с висока резолюция, едната гледа право напред, а другата гледа надолу. Системата за виждане на НАО е конфигурирана да събира нужната информация, събрана чрез камерите. Choreographe предоставя различни кутийки, които използват тази система. Select Cam кутийка избира коя камера да се активира. Първият вход активира сочещата напред камера, а вторият активира сочещата надолу камера. Тази кутийка използва камерите, за да разпознава лица и предоставя броя на хората, които са разпознати. Вторият изход извежда броя на разпознатите лица, я третия изход се активира, когато няма разпознати лица. Има вътрешна кутийка, тя взима FaceDetected променливите от паметта. Броя на лицата се пресмята чрез размера на променливата FaceDetected. Тази кутийка използва камерите и лицата от базата данни, за да разпознава лица. Идентифицира на кого принадлежи лицето, ако има такова. При успешно лицево разпознаване, втория изход извежда име на лицето. При разпознаване на няколко лица наведнъж, изхода на имена се извършва под ред. 37
  • 38. Тази кутийка изгражда базата данни необходима за разпознаване на лица. Първият вход получава string от имена, които могат да се разграничават между лицата. При влизане на текстов сигнал, лицата и имената се прибавят. Вторият вход инициализира базата данни. Когато стринг влезне от първия вход има пет секундно изчакване заради Wait кутийката. През тези пет секунди лицето е засечено и прибавено в базата данни. Информацията за лицата е добавена, когато LearForgrtFace кутийката получи лицевата информация от Delay Msg кутийката. LED светлините на очите ще бъдат зелени, ако информацията е запаметява правилно в базата данни, при неуспех LED светлините на очите ще бъдат червени. NAOMark кутийката разпознава предварително дефинирани следи. Ако следата е разпозната, номера на следата е изход към втория изход, ако следата не е разпозната, третия изход е активиран. Choereographe предоставя десет следи. Изображенията и номерата им могат да бъдат открити в инсталационния диск. 38
  • 39. Тази кутийка сравнява изображенията, получени от камерите с изображенията запаметени в базата данни, за да определи съществуването на обект. Тази база данни е различна от базата данни от лица използвана от Face Recognition кутийката. Базата данни тук може да бъде генерирана чрез използването на video monitor. Вторият изход предоставя името на обекта, ако съществува обект в изображението. Третият изход е активиран, ако не съществува такъв обект. Tracker Library За да може НАО да следва конкретен обект, той има нужда от информация за обекта. Choreographe предоставя функции, които използват камерата, за да се следят обекти и лица. WB Tracker кутийката или Whole Body, следи обекти, докато поддържа първоначалната си поза. Ако следенето е успешно, се активира втория изход, а ако неуспешно (т.е. изображение на обекта не съществува) се активира третият изход. От прозореца с параметри Target choice се отнася за обекта, който трябва да се следи като това могат да бъдат човешки лица или червени топки в радиус не по-голям от 6см. Time before lost е времето прекарано в откриване на обекта. С други думи, ако обекта не бъде открит за това време, следенето се означава като неуспешно. 39
  • 40. Измерването става в секунди, като обхвата е между 0,0 и 5,0, със стойност по подразбиране 1,0. При тази кутийка изходът е същият като при WB Tracker кутийката. Параметрите Target choice и Time before lost също са идентични. Threshold for walk forward/backwards е стойността за това колко далече се намира следвания от НАО обект. Измерва се в метри, като обхвата е между 0,0 и 1,0. Тези параметри определят посоката на движение на НАО. Той ще се движи напред, ако разстоянието до следвания обект е по-голямо от Threshold for walk forward стойността, ще се движи назад, ако стойността е по-малка от Threshold for walk backwards стойността. Ако стойността е между двата прага, НАО ще остане на мястото си. The Walk Tracker кутийката има Tracker и WalkToTarget кутийки. Tracker кутийката разпознава обекта и пресмята посоката. WalkToTarget кутийката използва информацията, отнасяща се за ъгъла и посоката на движение на НАО. Communication Library Тази библиотека изпълнява функциите да изпраща и получава e-mail-и. Тази функция е достъпна в зависимост от това какъв mail сървър се използва. Тази кутийка изпраща e-mail-и. Изходът е активиран, ако e-mail-а е изпратен успешно. Параметрите на кутийката са: From/To: адреса на изпращача, адреса на получателя. Subject: заглавие. 40
  • 41. Contents: съдържание. Attachment: файл или път към файл с прикачено съдържание. Password: парола за достъп до адреса на изпращача. SMPT address: SMPT адреса на адресния сървър. SMPT port: SMPT порт номер. Тази кутийка се използва за получаване на e-mail. Тези e-mail-и се запазват в различни формати, като най-често използваните са text.txt, webpage.html, image.jpg, audio.wav. Параметрите са: POP address: POP адреса на идващия mail сървър. E-mail address: e-mail адреса на получателя. Password: паролата на акаунта. SSL port: SSL порт. 41
  • 42. Модул - Hello World! - Здравей свят! Какво ще научим:  Как да включим НАО  Как да свържем НАО с Choreographe  Как да накараме НАО да говори чрез Choreographe Подготовка за използване на НАО Преди да започнем да използваме НАО, ще се научим как да го зареждаме, настройваме и работим с него безопасно. 1/ Когато НАО не е в двжение, включи зареждащия кабел в гърба на робота (виж на картинката). Ако робота се зарежда светлината на зарядното ще е червена. 2/Преди да се включиш НАО се погрижи той да е в стабилна поза т.е. изправен гръб и двата му крака стъпили стабилно на пода. Това е препоръчителната поза. НЕ поставяй НАО на маса, от която може да падне и да се повреди. 3/Включи НАО, като натиснеш бутона на гърдите му. След натиснат бутон за включване светлините на НАО ще се включат. Времето за включване на НАО може да отнеме няколко минути, звуков сигнал ще сигнализира, когато е готов за работа. 42
  • 43. 4/ Свързаване на НАО с Choreographe. Първо стартирай програмата Choreographe на своя компютър. Ще се появи следния прозорец. Кликни на бутона Connect, за да се свържеш с НАО. 5/ Ще се отвори друг прозорец и в него ще се появи твоя робот. Селектирай го и кликни отново Connect To 6/ Сега трябва да си свързан с НАО. Опитай да задвижиш някоя част от тялото на НАО. Прозореца в ляво на Choreographe ще покаже промяната на позицията на ставите на НАО. 43
  • 44. Задача – Начално ниво – Hello World Ще програмираме НАО да каже “Hello”. НАО използва text-to-speech- engine, за да преобразува текста в звук, чийто резултат излиза от говорителите. 1/ В Choreographe виж Box List от ляво. Отиди до Audio и с дърпане изтегли кутийката Say в централната част на програмата наречена workspace, която съдържа командите, които робота изпълнява. 2/ За да се изпълни Say кутийката тя трябва да се свърже с програмата. Кликни върху малката стрелка от ляво на workspace прозореца и издърпай линия към стелката на Say, която се намира от ляво. кутийките се изпълняват последователно в реда, в който са свързани. Последната кутия трябва да се свързва със Stop, който се намира в дясната страна на workspace прозореца. 44
  • 45. 3/ Най-накрая кликни зеления бутон Play. НАО трябва да каже “Hello” Задача – Средно ниво – Say Anything Ще се научим как да променяме думите, които НАО казва. 1/ С получения резултат от предходната задача, кликни два пъти върху кутийката Say. 2/ Ще се появи прозорче Localized Text, свързано със Say кутийката. За да се върнеш на предишния екран крикни върху root. 45
  • 46. 3/ Замени “Hello“ в полето за текст с “Hello World!” 4/ Натисни Play бутона и чуй какво ще каже НАО. 5/ Опитай да експериментираш, като използваш различни думи или фрази. Задача – Средно ниво – Voice Acting НАО може да говори бързо, бавно, тихо и високо в зависимост от това как са настроени неговите параметри – “voice shaping” и “speed”. 1/ Кликли върху инструмента в долната лява част на кутийката Say. 46
  • 47. 2/ Ще се появи следният прозорец. В него се съдържат параметрите на тази кутийка. – “voice shaping” (оформление на гласа) и “speed” (бързина на гласа). 3/ Промени различните стойности и кликни ОК. Натисни Play бутона и чуй как НАО говори. 4/ Какво се промени? Експериментирай с различни стойности. Какво контролират двата параметъра? Допълнителни задачи: 1/ Накарай НАО да се представи и поздрави класа. 2/ Накарай НАО да изиграе ролите на различни герои от пиеса като използва различни гласове за всеки герой. 3/ Накарай НАО да изпее азбуката като променя формата и остротата на гласа си за всяка буква, която произнася. 47
  • 48. Модул – Walk It Out! – Разходи се! Какво ще научим:  Как да накараме Нао да ходи чрез Choreographe  Координатната равнина (x, y) на НАО  Как да преобразуваме (x, y) кординатите в градус за завъртане и дистанция за ходене  Как да накараме Нао да извърви разстоянието до определена точка Координатната равнина (x, y) на НАО НАО използва координатната (x, y) равнина, за да се насочва към места. Фигурите по- долу показват координатната структура на НАО. Фигурата в ляво показва координатната равнина на НАО, когато се разглежда отгоре. А фигурата в дясно показва същата координатна равнина в триизмерно положение. X – оста на НАО сочи напред, а Y – оста сочи на ляво на робота. Z-оста, която е перпендикулярна на останалите две оси, сочи на горе. Мерните единици на кординатната равнина на НАО са в метри. Примерно (1, 2) се отнася за точка, 1 метър пред НАО и 2 метра на ляво от него. В допълнение към точките в координатната равнина се определят и ъгли. Измерват се в радиани в посока обратна на часовниковата стрелка. 48
  • 49. Задача – Начално ниво – March Forward Ще започнем с това да накараме НАО да се изправи, да върви напред и да седне. 1/ Провери дали НАО е в стабилна позиция. Включи НАО и го свържи с Choreographe. 2/ В Choreographe отиди до Motions папката в прозорчето със списък с кутийки. Издърпай Motor On/Off и Stand Up кутийките в workspace прозореца. Свържи кутийките. 3/ Издърпай Move To и Sit Down кутийките, които се намират в Motion категорията, и ги свържи със Stand Up кутийката. 49
  • 50. 4/ Motor On/Off кутийката ще включи опцията за скованост на робота. В този момент не можеш да променяш положението на ставите му с ръка. В това състояние батерията на робота ще се изтощава доста по-бързо. За да освободим сковаността от ставите на робота издърпай в края на веригата още една кутийка Motor On/Off. 5/ За да се изпълни програмата от робота кликни Play бутона. Робота ще се изправи, ще върви напред и ще седне. 6/ В допълнение, робота има възможност да разпознава вероятност за сблъсъци с предмети. Робота наблюдава околната среда. Това приложение ще спре НАО да се движи, ако прецени че има опасност да се сблъска с нещо и така да го повреди. Приложението може да се спре, ако е необходимо. Задача – Средно ниво – Walk To a Point В допълнение на ходенето напред, НАО може да се завърърта на място. Също така НАО може да се предвижва в различни посоки – напред, настрани, назад или диагонално. Сега ще се научим как да завиваме. 1/ В Choreographe, съедини една Stand Up кутийка и две Move To кутийки. (И двете се намират в Motion категорията.) 50
  • 51. 2/ Кликни върху инструмента (долу в ляво) на първата Move To кутийка. Ще се появи прозорец за конфигуриране на параметрите на тази кутийка. Прозореца, който се появява ти дава възможност да определиш колко точно робота да се премести. X - напред, y – настрани и theta – завъртане. Разстоянията се измерват в метри (отрицателно число означава противоположна посока), а завъртането в радиани. Постави на x и y стойност 0, постави стойност на theta , различна от 0. Това ще накара робота да се завърти. 3/ Отвори същия прозорец на следващата Move To кутийка. Постави на x някаква стойност, различна от 0. А на y и theta стойност 0. Това ще накара робота да ходи напред. 4/ По избор. Добави Sit Down кутийка в края на веригата от команди. 5/ Натисни бутона Play и наблюдавай движението на робота. Допълнителни задачи: 1/ Накарай НАО да върви под формата на квадрат – да върви напред и да завие, да върви напред и да завие, да върви напред и завие, да върви напред отново. 2/ Накарай НАО да върви в триъгълник. 51
  • 52. Модул – Hearing Things – Чуване! Какво ще научим:  Какво е speech recognition  Как да изпълним speech recognition на НАО  Как да използваме прага на разпознаване на гласа Speech Recognition на НАО. Разпознаване на Реч. Хората комуникират помежду си чрез речта. Например, когато поздравяваме някой използваме думите „Здравей“, „Как си?“. Ние автоматично обработваме речта и разбираме значението на думите почти мигновено. При роботите този процес е по- сложен. НАО има микрофони на главата си, за да чува звука около него. За разлика от човека, който чува звук постоянно, НАО трябва да бъде програмиран да слуша за точно определени звуци в определено време. НАО изпълнява Speech Recognition (Разпознаване на реч) с алгоритъм, който да превръща това, което чува в думи, които познава. За да направи това НАО изисква библиотека от думи, които да очаква да чуе. Например, една библиотека може да съдържа две думи – yes и no. Когато НАО обработи звуците, които чува, ще прецени дали те са yes или no, или нито една от двете думи. След като една дума се разпознае, НАО може да бъде програмиран да реагира по различен начин. Например, ако чуе yes НАО може да отговори с I am happy, а ако чуе no да отговори с I am sad. Ако не разпознае нито една от думите НАО може да отговори с I don’t know. 52
  • 53. Задача – Начално ниво – Speech Recognition Ще използваме Speech Recognition на НАО. Ще програмираме НАО да разпознае своето име и да поздравява в отговор. 1/ Първо, издърпай Speech Recognition кутийката (намира се в Audio -> Voice папката) и я свържи със стрелката за начало. 2/ Кликни върху инструмента, за да достъпиш до параметрите на тази кутийка. Задай на Word list: nao. Това дефинира библиотеката от познати думи, за които НАО ще слуша. Поставяйки Nao в библиотеката ще накара НАО да слуша за своето собствено име. Задай стойността на threshold на 10%. Този ред контролира колко подобен трябва да бъде звукът, за да може НАО да го разпознае. Това означава, че робота трябва да бъде само 10% сигурен за това, което чува, за да разпознае думата. Ако поставим стойността на прага на разпознаваемост 90% робота може да не разпознае думите, които сме казали, защото не е сигурен. 53
  • 54. 3/ След това, създай две кутийки Say и ги свържи с долните два съединителя на Speech Recognition кутийката. Горният съединител ще се задейства тогава, когато думата, която е въведена в библиотеката е разпозната, а долният съединител ще се задейства, тогава когато чутата дума не е разпозната. Тази структура се нарича условна. 4/ Кликни два пъти върху всяка Say кутийка, за да конфигуриаш какво да казва НАО. Първата кутийка ще се изпълни, ако робота чуе Nao. Промени тектста на тази кутийка да казва “Hello, I am Nao.” Промени текста на втората кутийка на “I did not understand”, тя ще се изпълни, ако робота не разпознае чутата дума. 54
  • 55. 5/ Накрая свържи двете кутийки в долната дясна дясна страна на Speech Recognition кутийката с Х кутийката от лявата страна на същата кутийка. Това ще накара робота да спре да слуша за нови думи след като чуе първата. 6/ Сега стартирай Play бутона. Ще чуеш звук, който показна, че НАО е готов да слуша. Освен това очите му ще светнат в синьо, това също показва, че НАО слуша. След като НАО чуе човек да говори, очите му ще светнат в жълто. Ако той разпознае думите, които чува, очите му ще светнат в зелено, ако обаче не ги разпознае, очите му ще светнат в червено. Когато НАО спре да слуша отново ще се чуе звук. 55
  • 56. Задача – Средно ниво – Distinguishing Multiple Names В това упражнение ще програмираме робота да слуша за различни имена и да отговори различно след като чуе всяко едно от тях. 1/ Издърпай Speech Recognition кутийката в полето за работа. 2/ Кликни върху инструмента, за да се появи прозорецът с параметри и постави стойности в word list-а. Стойностите да бъдат “nao;r 2 d 2;c 3 p 0”. Думите в библиотеката се разделят чрез точка и запетая, без разстояние. Постави прага на разпознаваемост на 10%. 56
  • 57. 3/ След това добави Switch Case кутийка. Тя може да се открие в списъка с условните инструменти Flow Control. Тази кутийка сравнява входните данни със списък с предварително зададени стойности и задейства една от кутийките от дясно в зависимост от входа. 4/ Промени предварително зададените стойности на Switch Case кутийката, така че да отговарят на думите въведени в библиотеката на Speech Recognition кутийката. Думите тук трябва да са обградени от двойни кавички, които показват, че се въвеждат стрингове. Важно е да се отбележи, че трябва да се спазват главните и малки букви, те трябва да бъдат такива, каквито сме ги въвели в библиотеката. Когато дума от библиотеката е чута, Speech Recognition кутийката изпраща тази дума на Switch Case кутийката. Switch Case кутийката сравнява входните данни с всички cases (случаи) и задейства подходящата кутийка от дясно на съответната дума. 57
  • 58. 5/ Сега добави Say кутийки и ги свържи по начина, по който е показано по-долу. 6/ Добави съобщения към всяка Say кутийка. Say кутийката, свързана със Speech Recognition кутийката ще бъде това, което казва робота, когато не разбира какво е казал човека. Трите кутийки свързани към Switch Case кутийката ще бъдат отговорите на робота, когато чуе дадена дума от библиотеката. Например, кутийката най-отгоре ще се изпълни, когато робота чуе думата “nao”. 7/ Най-накрая, свържи двете долни десни кутийки на Speech Recognition кутийката със знака Х на същата кутийка, както направихме в предишното упражнение. 58
  • 59. Допълнителни задачи: 1/ Накарай НАО да попита “How are you?”, в зависимост от резултата, който кажеш, НАО трябва да отговори “That’s good to hear”.” или “I hope your day gets better.“ 2/ Създай верига от взаимодействия с НАО, където той първо пита дали харесваш торта или пай. Ако харесваш торта, да те попита дали харесваш шоколадова или чийзкейк. Ако харесваш пай НАО да попита дали предпочиташ ябълков или тиквен. В зависимост от това какво харесваш НАО да каже нещо подходящо като например “I like chocolate cake too, especially with whipped cream on top.” 3/ Създай един гласово контролиран робот, където ти да може да кажеш на НАО да ходи напред, да завие наляво или да завие надясно. НАО да изпълни действието, което му кажеш. 8/ Натисни Play бутона и опитай, изричайки различни имена. 9/ Може би забелязваш, че разпознаването на речта не е перфектно. Например, робота може да чуе “c 3 p o” , когато казваш “r 2 d 2” или може да не те разбере какво казваш. Нивото на разпознаване се определя от параметъра Threshold в Speech Recognition кутийката. 59
  • 60. Какво ще научим: Какво е keyframe motion Какво представлява понятието за център на гравитацията на НАО Как да задържим НАО да е балансиран, докато настройваме неговата поза Как да запишем и изпълним keyframes на НАО с Choreographe Как да изпълним танц на НАО Модул – Let’s Dance – Да танцуваме! Keyframe Motion Ние хората движим тялото си плавно, докато роботите са стереотипизирани да се движат сковано. Защо това е така? Някои роботи се движат по bang-bang маниер като задвижват става, например на ръката на максимална скорост и изведнъж спират. Първият bang сочи към движението на максимална скорост, а вторият сочи къмвнезапното спиране. Въпреки това, роботите имат възможност да бъдат по-плавни в движенията си. Един от методите, които можем да използваме се осъществява чрез т.нар. keyframe. Keyframe представлява множество от позиции на ставите на робота. Един keyframe може да бъде позицията на робота в изправено положение, а друг втори keyframe с ръце вдигнати над главата. В keyframe motion ставите на робота се задвижват плавно, преминавайки от едно положение в друго. Чрез опрeделяне на последователност от keyframe-ове можеш да опишеш по-сложни движения за робота. Keyframe движението е проста техника за изграждане на движения. Като например: ръкомахане на ръцете, движение на краката, дори и танцови стъпки. Keyframe-ове са използвани във футбола на роботите. Роботите могат да ритат футболната топка в много посоки – напред, настрани, дори и назад. 60
  • 61. Balancing NAO – Балансиране на НАО От наученото в часовете по физика е известно, че всички обекти имат център на гравитация. Центъра на гравитацията оказва влияние на това дали позата на обекта е стабилна. За неподвижни тела, обектът е стабилен, ако центърът на гравитацията се намира в основата на обекта. Същата концепция важи и за НАО. Когато е изправен на двата си крака, основната линия е разположена между двата му крака. В момента, когато НАО е на един крак, основната линия е разположена на този крак. Центъра на гравитация на НАО е разположена в неговия „корем“. Центъра на гравитацията на НАО се променя, защото той може да променя своята форма, когато различни части от тялото му се движат. Създавайки по-сложни пози на НАО трябва да се държи под внимание неговият баланс. При настройване на позата на робота трябва да се проверява тежестта на НАО разположена на двата му крака. Понякога може да изглежда, че и двата му крака на стъпили на земята, а всичката тежест на НАО всъщност е разположена върху единия му крак. Такава позиция не е достатъчно стабилна и може да доведе до по-бързо прегряване на двигателите на НАО. 61
  • 62. Задача – Начално ниво – Macarena Hand Motions Choreographe ни позволява за записваме позиици на тялото (keyframes) и да ги комбинираме на една timeline (времева линия), за да се направят последователни движения. Ще научим как да създаваме keyframe-ове, като накараме НАО да танцува танца на Макарена, използвайки ръцете си. 1/ Създай нова кутийка от тип timeline и я найменовай Macarena. Timeline кутийка позволява да се редактират keyframe-ове. 2/ Кликни два пъти върху новосъздадената кутийка. Ще се появи timeline editor. Времевата линия се използва, за да се наблюдават и променят отделните keyframe-ове. Те представляват малките правоъгълни черни кутийки разположени върху времевата линия. Числата върху линията представляват последователност от фреймове като всеки фрейм представлява продължение от 10 милисекунди. Така на НАО ще бъдат необходими 100 ms, за да достигне фрейм 10, 150 ms, за да достигне фрейм 15 и т.н. Скоростта на фреймовете може да бъде променена. 62
  • 63. Кликайки върху един keyframe може да го променяш. При свързване към НАО можеш да наблюдаваш и запазваш keyframe-ове със самия робот. Ако се свържеш с local NAOqi, можеш да наблюдаваш и запазваш фреймове използвайки виртуалния 3D НАО. 3/ Ще започнем изпълнението на танца от НАО. Първоначално той ще бъде в изправена позиция. За да изпълниш това, отвори Pose Library. Кликни върху View и избери Pose Library. 4/ Свържи се към НАО и провери дали сковаността (stiffness) на ставите е задействана. Ако не е, натисни Wake Up бутона. Това ще накара НАО да се изправи и ставите му да са неподвижни. Докато държиш НАО, за да го предпазиш от падане, кликни върху Standinit позата в библиотеката (ако НАО не е изправен). НАО ще застане в изправена позиция. 5/ За да запазим тази поза като keyframe, кликни на фрейм 10 (100 ms) и селектирай Store joints in keyframe, а след това Whole body. В този keyframe ще заеме init поза. Причината да изберем фрейм 10 е, за да дадем възможност на НАО да се придвижи по- бавно от позицията, в която се е намирал първоначално. Ако започнем от фрейм 1 НАО ще мръдне насилствено, за да заеме конкретната позиция и ще падне. 63