Съдържание:

Роботизиран контролер на базата на Matlab: 9 стъпки
Роботизиран контролер на базата на Matlab: 9 стъпки

Видео: Роботизиран контролер на базата на Matlab: 9 стъпки

Видео: Роботизиран контролер на базата на Matlab: 9 стъпки
Видео: CS50 2015 - Week 8 2024, Юли
Anonim
Image
Image
ROS роботизиран контролер, базиран на Matlab
ROS роботизиран контролер, базиран на Matlab

Още от дете винаги съм мечтал да бъда 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-MATLAB интерфейс
Създаване на ROS-MATLAB интерфейс
Създаване на ROS-MATLAB интерфейс
Създаване на ROS-MATLAB интерфейс
Създаване на ROS-MATLAB интерфейс
Създаване на ROS-MATLAB интерфейс

ROS-MATLABInterface е полезен интерфейс за изследователи и студенти за прототипиране на техните алгоритми за роботи в MATLAB и тестване на ROS-съвместими роботи. Този интерфейс може да бъде създаден от инструментариума на системата за роботика в matlab и ние можем да прототипираме нашия алгоритъм и да го тестваме на робот с поддръжка на ROS или в роботизирани симулатори като Gazebo и V-REP.

За да инсталирате набор от инструменти за роботизирана система във вашия MATLAB, просто отидете на опцията Добавка в лентата с инструменти и потърсете роботизирана кутия с инструменти в изследователя на добавки. С помощта на роботизирания набор от инструменти можем да публикуваме или да се абонираме за тема, като например ROS възел, и можем да го направим ROS майстор. Интерфейсът MATLAB-ROS има повечето от ROS функционалностите, които бихте могли да изисквате за вашите проекти.

Стъпка 4: Получаване на IP адрес

Получаване на IP адрес
Получаване на IP адрес
Получаване на IP адрес
Получаване на IP адрес

За да работи контролерът, е задължително да знаете ip адреса на вашия ROS робот/компютър и компютъра, работещ с контролера на MATLAB.

За да получите ip на вашия компютър:

В Windows:

Отворете командния ред и въведете командата ipconfig и запишете IPv4 адреса

За Linux:

Въведете командата ifconfig и запишете inet адреса. Сега, когато имате ip адрес, е време да създадете графичен интерфейс …

Стъпка 5: Създайте GUI за контролера

Създайте GUI за контролера
Създайте GUI за контролера
Създайте GUI за контролера
Създайте GUI за контролера
Създайте GUI за контролера
Създайте GUI за контролера

За да създадете GUI, отворете MATLAB и въведете guide в командния прозорец. Това ще отвори приложението за ръководство, което ще създаваме нашия GUI. Можете също да използвате дизайнера на приложения в MATLAB, за да проектирате своя графичен интерфейс.

Ще създадем общо 9 бутона (както е показано на фиг.):

6 бутони: напред, назад, наляво, надясно, свързване с робот, изключване

3 редактируеми бутони: Ros pc ip, порт и име на тема.

Бутоните за редактиране са бутоните, които ще вземат ip на ROS компютъра, неговия порт и името на темата като вход. Името на темата е това, чрез което MATLAB контролерът и ROS роботът/компютърът комуникират. За да редактирате низ на редактируемия бутон, щракнете с десния бутон върху бутона >> отидете на Inspector properties >> String и редактирайте текста на бутона.

След като GUI завърши, можете да програмирате бутоните. Тук започва истинското забавление …

Стъпка 6: Програмиране на бутоните за редактиране на GUI

Програмиране на GUI редактируеми бутони
Програмиране на GUI редактируеми бутони
Програмиране на GUI редактируеми бутони
Програмиране на GUI редактируеми бутони
Програмиране на GUI редактируеми бутони
Програмиране на GUI редактируеми бутони
Програмиране на GUI редактируеми бутони
Програмиране на 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 бутони

Програмиране на GUI бутони
Програмиране на GUI бутони
Програмиране на GUI бутони
Програмиране на 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 компютър (Linux)
Настройване на мрежова конфигурация на ROS компютър (Linux)
Настройване на мрежова конфигурация на ROS компютър (Linux)
Настройване на мрежова конфигурация на 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 роботизиран контролер. Ако ви хареса моята инструкция, моля, гласувайте за Първия конкурс за автори и го споделете с възможно най -много хора. Благодаря ти.

Препоръчано: