Съдържание:
- Консумативи
- Стъпка 1: Настройка на всичко
- Стъпка 2: Разбиране как работи контролерът
- Стъпка 3: Създаване на ROS-MATLAB интерфейс
- Стъпка 4: Получаване на IP адрес
- Стъпка 5: Създайте GUI за контролера
- Стъпка 6: Програмиране на бутоните за редактиране на GUI
- Стъпка 7: Програмиране на GUI бутони
- Стъпка 8: Настройване на мрежова конфигурация на ROS компютър (Linux)
- Стъпка 9: Стартирайте контролера
Видео: Роботизиран контролер на базата на Matlab: 9 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:51
Още от дете винаги съм мечтал да бъда Iron Man и все още го правя. Iron Man е един от онези герои, които са реално възможни и просто казано аз се стремя да стана Iron Man някой ден, дори ако хората ми се смеят или казват, че е невъзможно, защото „това е невъзможно само докато някой го направи“-Арнолд Шварценегер.
ROS е нововъзникваща рамка, която се използва за разработване на сложни роботизирани системи. Приложенията му включват: Автоматизирана система за сглобяване, Телеоперация, Протезни оръжия и Тежки машини в индустриалния сектор.
Изследователите и инженерите използват ROS за разработване на прототипите, докато различни доставчици го използват за създаване на своите продукти. Той има сложна архитектура, която затруднява управлението от куц човек. Използването на MATLAB за създаване на интерфейсна връзка с ROS е нов подход, който може да помогне на изследователите, инженерите и доставчиците при разработването на по -стабилни решения.
Така че тази инструкция е за това как да направим роботизиран контролер на базата на Matlab, това ще бъде един от малкото уроци по този въпрос и сред малкото инструкции за ROS. Целта на този проект е да се проектира контролер, който да контролира всеки ROS-робот, свързан към вашата мрежа. Така че нека започнем!
кредити за видеомонтаж: Ammar Akher, на [email protected]
Консумативи
Следните компоненти са необходими за проекта:
(1) ROS компютър/робот
(2) Рутер
(3) PC с MATLAB (версия: 2014 или по -нова)
Стъпка 1: Настройка на всичко
За тази инструкция използвам Ubuntu 16.04 за моя linux pc и ros-kinetic, така че за да избегна объркване, препоръчвам да използвам ros kinetic и ubuntu 16.04, тъй като има най-добрата поддръжка за ros-kinetic. За повече информация как да инсталирате ros kinetic отидете на https://wiki.ros.org/kinetic/Installation/Ubuntu. За MATLAB или купувате лиценз, или изтегляте версия на пътека от тук.
Стъпка 2: Разбиране как работи контролерът
Компютърът управлява роботизирания контролер на MATLAB. Контролерът приема IP адреса и порта на ros pc/робот.
Ros-тема се използва за комуникация между контролера и ros pc/робот, която също се приема като вход от контролера. Модемът е необходим за създаване на LAN (локална мрежа) и е това, което присвоява IP адресите на всички устройства, свързани към неговата мрежа. Следователно ros pc/robot и компютърът, работещ с контролера, трябва да бъдат свързани към една и съща мрежа (т.е. мрежата на модема). Така че сега, когато знаете "как работи", нека да стигнем до "как е построен" …
Стъпка 3: Създаване на ROS-MATLAB интерфейс
ROS-MATLABInterface е полезен интерфейс за изследователи и студенти за прототипиране на техните алгоритми за роботи в MATLAB и тестване на ROS-съвместими роботи. Този интерфейс може да бъде създаден от инструментариума на системата за роботика в matlab и ние можем да прототипираме нашия алгоритъм и да го тестваме на робот с поддръжка на ROS или в роботизирани симулатори като Gazebo и V-REP.
За да инсталирате набор от инструменти за роботизирана система във вашия MATLAB, просто отидете на опцията Добавка в лентата с инструменти и потърсете роботизирана кутия с инструменти в изследователя на добавки. С помощта на роботизирания набор от инструменти можем да публикуваме или да се абонираме за тема, като например ROS възел, и можем да го направим ROS майстор. Интерфейсът MATLAB-ROS има повечето от ROS функционалностите, които бихте могли да изисквате за вашите проекти.
Стъпка 4: Получаване на IP адрес
За да работи контролерът, е задължително да знаете ip адреса на вашия ROS робот/компютър и компютъра, работещ с контролера на MATLAB.
За да получите ip на вашия компютър:
В Windows:
Отворете командния ред и въведете командата ipconfig и запишете IPv4 адреса
За Linux:
Въведете командата ifconfig и запишете inet адреса. Сега, когато имате ip адрес, е време да създадете графичен интерфейс …
Стъпка 5: Създайте GUI за контролера
За да създадете GUI, отворете MATLAB и въведете guide в командния прозорец. Това ще отвори приложението за ръководство, което ще създаваме нашия GUI. Можете също да използвате дизайнера на приложения в MATLAB, за да проектирате своя графичен интерфейс.
Ще създадем общо 9 бутона (както е показано на фиг.):
6 бутони: напред, назад, наляво, надясно, свързване с робот, изключване
3 редактируеми бутони: Ros pc ip, порт и име на тема.
Бутоните за редактиране са бутоните, които ще вземат ip на ROS компютъра, неговия порт и името на темата като вход. Името на темата е това, чрез което MATLAB контролерът и ROS роботът/компютърът комуникират. За да редактирате низ на редактируемия бутон, щракнете с десния бутон върху бутона >> отидете на Inspector properties >> String и редактирайте текста на бутона.
След като GUI завърши, можете да програмирате бутоните. Тук започва истинското забавление …
Стъпка 6: Програмиране на бутоните за редактиране на GUI
GUI се запазва като.fig файл, но функциите за код/обратно повикване се записват във формат.m. Файлът.m съдържа кода за всичките ви бутони. За да добавите функции за обратно повикване към бутоните, щракнете с десния бутон върху бутона> > Преглед на обратното повикване >> обратно връщане. Това ще отвори.m файла за вашия графичен интерфейс до мястото, където е определен този бутон.
Първото обратно повикване, което ще кодираме, е за бутона за редактиране на ROS IP. Под функцията edit1_Callback напишете следния код:
функция edit1_Callback (hObject, eventdata, дръжки)
глобален ros_master_ip
ros_master_ip = get (hObject, 'String')
Тук функцията е дефинирана като edit1_Callback, която се отнася до първия бутон за редактиране. Когато въведем IP адрес от ROS мрежата в този бутон за редактиране, той ще съхранява IP адреса като низ в глобална променлива, наречена ros_master_ip.
Тогава точно под _OpeningFcn (hObject, eventdata, handles, varargin) дефинирайте следното (вижте фиг.):
глобален ros_master_ip
глобален ros_master_port
глобално teleop_topic_name
ros_master_ip = '192.168.1.102';
ros_master_port = '11311';
teleop_topic_name = '/cmd_vel_mux/input/teleop';
Просто глобално кодирахте ros-pc ip (ros_master_ip), порт (ros_master_port) и името на Teleop Topic. Това прави, че ако оставите бутоните за редактиране празни, тези предварително определени стойности ще се използват, когато се свържете.
Следващото обратно повикване, което ще кодираме, е за бутона за редактиране на порта.
Под функцията edit2_Callback напишете следния код:
функция edit2_Callback (hObject, eventdata, дръжки)
глобален ros_master_port
ros_master_port = get (hObject, 'String')
Тук функцията е дефинирана като edit2_Callback, която се отнася до втория бутон за редактиране. Когато влезем в порта на ros pc/robot тук от ROS мрежата в този редактируем бутон, той ще съхранява порта като низ в глобална променлива, наречена ros_master_port.
По същия начин следващото обратно извикване, което ще кодираме, е за бутона за редактиране на името на темата.
Под функцията edit3_Callback напишете следния код:
функция edit3_Callback (hObject, eventdata, дръжки)
глобално teleop_topic_name
teleop_topic_name = get (hObject, 'String')
Подобно на ros_master_port, това също се съхранява като низ в глобална променлива.
След това ще разгледаме функциите за обратно повикване за бутоните …
Стъпка 7: Програмиране на GUI бутони
Бутоните, които създадохме преди, са тези, които ще използваме за преместване, свързване и изключване на робота от контролера. Обратните повиквания на бутоните са дефинирани, както следва:
напр. бутон на функцията 6_Callback (hObject, eventdata, дръжки)
Забележка: в зависимост от реда, в който сте създали бутоните си, те ще бъдат номерирани съответно. Следователно функцията pushbutton6 в моя.m файл може да бъде за напред, докато във вашия.m файл може да е за назад, така че имайте това предвид. За да разберете коя е точната функция за вашия бутон, просто щракнете с десния бутон >> Преглед на обратното повикване >> обратното повикване и той ще отвори функцията за вашия бутон, но за тази инструкция предполагам, че е същата като моята.
За бутона Свързване към робот:
Под функцията бутон 6_Callback (hObject, eventdata, дръжки):
функция pushbutton6_Callback (hObject, eventdata, дръжки) глобален ros_master_ip
глобален ros_master_port
глобално teleop_topic_name
глобален робот
глобален velmsg
ros_master_uri = strcat ('https://', ros_master_ip, ':', ros_master_port)
setenv ('ROS_MASTER_URI', ros_master_uri)
розинит
robot = rospublisher (teleop_topic_name, 'geometry_msgs/Twist');
velmsg = rosmessage (робот);
Това обратно извикване ще зададе променливата ROS_MASTER_URI чрез свързване на ros_master_ip и порта. След това командата rosinit ще инициализира връзката. След свързване, той ще създаде издател на geometry_msgs/Twist, който ще се използва за изпращане на командата velocity. Името на темата е името, което даваме в полето за редактиране. След като връзката е успешна, ще можем да задействаме бутоните напред, назад, наляво, надясно.
Преди да добавим обратно повикване към бутоните за напред, назад, трябва да инициализираме скоростите на линейна и ъглова скорост.
Следователно по -долу _OpeningFcn (hObject, eventdata, handles, varargin) дефинира следното (виж фиг.):
global left_spinVelocity глобален right_spinVelocity
глобална напред скорост
глобална обратна скорост
left_spinVelocity = 2;
right_spinVelocity = -2;
forwardVelocity = 3;
backwardVelocity = -3;
Забележка: всички скорости са в rad/s
Сега, когато глобалните променливи са дефинирани, нека програмираме бутоните за движение.
За бутона Напред:
функция pushbutton4_Callback (hObject, eventdata, дръжки) глобален velmsg
глобален робот
глобално teleop_topic_name
глобална напред скорост
velmsg. Angular. Z = 0;
velmsg. Linear. X = напредVelocity;
изпращане (робот, velmsg);
latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);
По същия начин за бутона назад:
бутон на функцията5_Callback (hObject, eventdata, дръжки)
глобален velmsg
глобален робот
глобална обратна скорост
глобално teleop_topic_name
velmsg. Angular. Z = 0;
velmsg. Linear. X = backwardVelocity;
изпращане (робот, velmsg);
latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);
По същия начин за левия бутон: функция pushbutton3_Callback (hObject, eventdata, дръжки)
глобален velmsgglobal робот global left_spinVelocity
глобално teleop_topic_name
velmsg. Angular. Z = left_spinVelocity;
velmsg. Linear. X = 0;
изпращане (робот, velmsg);
latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);
По същия начин за десния бутон:
глобален робот velmsgglobal
глобален right_spinVelocity
глобално teleop_topic_name
velmsg. Angular. Z = right_spinVelocity;
velmsg. Linear. X = 0;
изпращане (робот, velmsg);
latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);
След като всички функции за обратно повикване са добавени и файловете са запазени, можем да тестваме нашия контролер.
Стъпка 8: Настройване на мрежова конфигурация на ROS компютър (Linux)
Ще тестваме контролера на ros pc (Linux), което ще изисква настройка на мрежовата конфигурация. Ако управлявате контролера и на linux компютър, ще трябва да настроите и мрежовата конфигурация там.
Конфигурация на мрежата:
Отворете терминалния прозорец и въведете gedit.bashrc
След като файлът е отворен, добавете следното:
#Конфигурация на машина за роботи
експортиране на ROS_MASTER_URI = https:// localhost: 11311
#IP адрес на главния възел на ROS
експортиране на ROS_HOSTNAME =
износ ROS_IP =
ехо "ROS_HOSTNAME:" $ ROS_HOSTNAME
ехо "ROS_IP:" $ ROS_IP
ехо "ROS_MASTER_URI:" $ ROS_MASTER_URI
Трябва да следвате тази стъпка всеки път поради динамично присвояване на IP.
Стъпка 9: Стартирайте контролера
Ще тестваме нашия контролер на бот от костенурка в Gazebo.
За да инсталирате Gazebo, моля, вижте
За да инсталирате Turtle bot, моля, вижте
Отворете папката, в която сте записали вашите.fig и.m файлове в MATLAB и натиснете Run (както е показано на снимката). Това ще отвори контролера на компютъра. Преди да натиснете свързване, уверете се, че вашият симулатор на костенурка работи.
За да тествате симулацията на TurtleBot:
Отворете терминала на компютър на Ros и въведете: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Това ще отвори симулация на Turtlebot на този компютър. Името на темата на TurtleBot е/cmd_vel_mux/input/teleop, което вече сме предоставили в приложението. Въведете в ros pc IP адрес, порт и име на тема в редактируемите бутони и натиснете бутона. Свързване към робот. Вашият костенурков бот трябва да започне да се движи, когато натиснете напред, назад и т.н.
За да видите линейните и ъгловите скорости:
Отворете нов терминал и въведете командата: $ rostopic echo/cmd_vel_mux/input/teleop
И ето ви, вашият собствен базиран на Matlab ROS роботизиран контролер. Ако ви хареса моята инструкция, моля, гласувайте за Първия конкурс за автори и го споделете с възможно най -много хора. Благодаря ти.
Препоръчано:
Arduino базиран DIY контролер за игри - Arduino PS2 контролер за игри - Възпроизвеждане на Tekken с DIY Arduino геймпад: 7 стъпки
Arduino базиран DIY контролер за игри | Arduino PS2 контролер за игри | Игра на Tekken с DIY Arduino геймпад: Здравейте момчета, играта на игри винаги е забавна, но играта със собствения си DIY персонализиран контролер на играта е по -забавна. Така че ще направим контролер за игра, използвайки arduino pro micro в тази инструкция
Стартов контролер DOL на базата на IOT за напоителна помпа: 6 стъпки
Стартов контролер DOL на базата на IOT за напоителна помпа: Здравейте приятели Тази инструкция е за това как да наблюдавате и контролирате дистанционно напоителна помпа по интернет. Story: В моята ферма получавам захранване от местната мрежа само за около 6 часа на ден. Сроковете не са редовни, наличността на
Индукционен металдетектор на базата на Arduino на базата на DIY: 5 стъпки
DIY Ардуино базиран импулсен метален детектор: Това е сравнително прост металдетектор с отлични характеристики
YABC - Още един контролер на Blynk - IoT облачен контролер за температура и влажност, ESP8266: 4 стъпки
YABC - Още един контролер на Blynk - IoT облачен контролер за температура и влажност, ESP8266: Здравейте производители, наскоро започнах да отглеждам гъби у дома, гъби стриди, но вече имам 3 пъти от тези контролери у дома за контрол на температурата на ферментатора за моята домашна напитка, съпруга също прави това нещо Комбуча сега и като термостат за топлина
Роботизиран миксолог MATLAB: 4 стъпки (със снимки)
Роботизиран миксолог MATLAB: Искали ли сте някога вашите напитки да се смесят перфектно за вас за броени секунди? Е, не търсете повече, роботизираният миксолог е тук, за да отнеме времето, необходимо за разбъркване на вашите напитки. Този проект използва RobotGeek Snapper Arm, за да функционира като ваш