Talaan ng mga Nilalaman:

Matlab-based ROS Robotic Controller: 9 Mga Hakbang
Matlab-based ROS Robotic Controller: 9 Mga Hakbang

Video: Matlab-based ROS Robotic Controller: 9 Mga Hakbang

Video: Matlab-based ROS Robotic Controller: 9 Mga Hakbang
Video: Develop Autonomous Algorithms using ROS 2024, Nobyembre
Anonim
Image
Image
Batay sa Matlab na ROS Robotic Controller
Batay sa Matlab na ROS Robotic Controller

Mula pa noong bata ako, palagi kong pinangarap na maging Iron Man at ginagawa pa rin ito. Ang Iron Man ay isa sa mga character na kung saan ay makatotohanang posible at simpleng ilagay na hangad kong maging Iron Man balang araw kahit na pagtawanan ako ng mga tao o sabihin na imposible dahil "imposible lamang hanggang sa may gumawa nito" -Arnold Schwarzenegger.

Ang ROS ay isang umuusbong na balangkas na ginagamit para sa pagbuo ng mga kumplikadong sistema ng robot. Kasama sa mga aplikasyon ang: Automated Assembly System, Teleoperation, Prosthetic Arms at Heavy Machinary ng sektor ng industriya.

Ginagamit ng mga mananaliksik at inhinyero ang ROS para sa pagbuo ng mga prototype, habang ginagamit ito ng iba't ibang mga vendor para sa paglikha ng kanilang mga produkto. Mayroon itong isang kumplikadong arkitektura na nagpapahirap na pamahalaan ng isang pilay na tao. Ang paggamit ng MATLAB para sa paglikha ng link ng interface sa ROS ay isang diskarte sa nobela na makakatulong sa mga mananaliksik, inhinyero at vendor sa pagbuo ng mas matatag na mga solusyon.

Kaya't ang itinuturo na ito ay tungkol sa kung paano gumawa ng isang Matlab-based ROS Robotic Controller, ito ay magiging isa sa napakakaunting mga tutorial dito at doon sa ilang mga itinuturo ng ROS. Ang layunin ng proyektong ito ay upang magdisenyo ng isang controller na maaaring makontrol ang anumang ROS-robot na konektado sa iyong network. Kaya't magsimula tayo!

mga kredito sa pag-edit ng video: Ammar Akher, sa [email protected]

Mga gamit

Ang mga sumusunod na sangkap ay kinakailangan para sa proyekto:

(1) ROS PC / Robot

(2) Router

(3) PC na may MATLAB (bersyon: 2014 o mas mataas)

Hakbang 1: Pagkuha ng Lahat ng Pag-set up

Pagkuha ng Lahat ng Pag-set up
Pagkuha ng Lahat ng Pag-set up

Para sa itinuturo na ito, gumagamit ako ng Ubuntu 16.04 para sa aking linux pc at ros-kinetic, kaya upang maiwasan ang pagkalito inirerekumenda ko ang paggamit ng ros kinetic at ubuntu 16.04 dahil mayroon itong pinakamahusay na suporta para sa ros-kinetic. Para sa karagdagang impormasyon sa kung paano mag-install ng ros kinetic pumunta sa https://wiki.ros.org/kinetic/Installation/Ubuntu. Para sa MATLAB maaari kang bumili ng isang lisensya o mag-download ng isang bersyon ng trail mula dito.

Hakbang 2: Pag-unawa sa Paano Gumagana ang Controller

Pag-unawa sa Paano Gumagawa ang Controller
Pag-unawa sa Paano Gumagawa ang Controller

Pinapatakbo ng isang pc ang robotic controller sa MATLAB. Dadalhin ng controller ang IP address at ang port ng ros pc / robot.

Ang isang paksa ng rosas ay ginagamit upang makipag-usap sa pagitan ng tagapamahala at ng ros pc / robot, na kinukuha rin bilang input ng taga-kontrol. Kinakailangan ang modem upang lumikha ng isang LAN (local area network) at ito ang nagtatalaga sa mga ip address sa lahat ng mga aparato na konektado sa network nito. Samakatuwid ang ros pc / robot at ang pc na nagpapatakbo ng controller ay dapat na parehong konektado sa parehong network (ie. Ang network ng modem). Kaya't ngayong alam mo na "kung paano ito gumagana", makarating tayo sa "paano ito binuo" …

Hakbang 3: Lumilikha ng isang ROS-MATLAB Interface

Lumilikha ng isang ROS-MATLAB Interface
Lumilikha ng isang ROS-MATLAB Interface
Lumilikha ng isang ROS-MATLAB Interface
Lumilikha ng isang ROS-MATLAB Interface
Lumilikha ng isang ROS-MATLAB Interface
Lumilikha ng isang ROS-MATLAB Interface

Ang ROS-MATLABInterface ay isang kapaki-pakinabang na interface para sa mga mananaliksik at mag-aaral para sa pag-prototype ng kanilang mga robot algorithm sa MATLAB at pagsubok ito sa mga robot na katugma sa ROS. Ang interface na ito ay maaaring malikha ng toolbox ng system ng robotics system sa matlab at maaari naming prototype ang aming algorithm at subukan ito sa isang robot na pinapagana ng ROS o sa mga robot simulator tulad ng Gazebo at V-REP.

Upang mai-install ang toolbox ng system ng robotics sa iyong MATLAB, pumunta lamang sa pagpipiliang Add-on sa toolbar at hanapin ang robotic toolbox sa add-on explorer. Gamit ang robotic toolbox maaari naming mai-publish o mag-subscribe sa isang paksa, tulad ng isang ROS node, at maaari naming gawin itong isang ROS master. Ang interface ng MATLAB-ROS ay mayroong halos lahat ng mga pag-andar ng ROS na maaaring kailanganin mo para sa iyong mga proyekto.

Hakbang 4: Pagkuha ng IP Address

Pagkuha ng IP Address
Pagkuha ng IP Address
Pagkuha ng IP Address
Pagkuha ng IP Address

Para sa gumana ng controller kinakailangan na malaman mo ang ip address ng iyong ROS robot / pc at ang pc na nagpapatakbo ng controller sa MATLAB.

Upang makuha ang ip ng iyong pc:

Sa Windows:

Buksan ang prompt ng utos at i-type ang ipconfig command at tandaan ang IPv4 address

Para sa Linux:

I-type ang ifconfig command at itala ang inet address. Ngayon na mayroon ka ng ip address, oras na upang buuin ang GUI…

Hakbang 5: Lumikha ng isang GUI para sa Controller

Lumikha ng isang GUI para sa Controller
Lumikha ng isang GUI para sa Controller
Lumikha ng isang GUI para sa Controller
Lumikha ng isang GUI para sa Controller
Lumikha ng isang GUI para sa Controller
Lumikha ng isang GUI para sa Controller

Upang likhain ang GUI, buksan ang MATLAB at i-type ang gabay sa window ng utos. Bubuksan nito ang gabay na app bagaman lilikha kami ng aming GUI. Maaari mo ring gamitin ang taga-disenyo ng app sa MATLAB upang idisenyo ang iyong GUI.

Lilikha kami ng 9 na mga pindutan sa kabuuan (tulad ng ipinakita sa fig):

6 push-button: Foward, Paatras, Kaliwa, Kanan, Kumonekta sa Robot, Idiskonekta

3 Na-e-edit na mga pindutan: Ros pc ip, port at pangalan ng Paksa.

Ang Na-e-edit na pindutan ay ang mga pindutan na kukuha ng ROS pc's ip, port ito at ang pangalan ng Paksa bilang input. Ang pangalan ng Paksa ay kung saan nakikipag-usap ang MATLAB controller at ROS robot / pc. Upang mai-edit ang string sa maaaring i-edit na pindutan, mag-right click sa pindutan >> pumunta sa mga pag-aari ng Inspector >> String at i-edit ang teksto ng pindutan.

Kapag nakumpleto ang iyong GUI, maaari mong i-program ang mga pindutan. Dito nagsisimula ang totoong kasiyahan …

Hakbang 6: Pag-program ng GUI Na-e-edit na Mga Pindutan

Pag-program ng GUI Na-e-edit na Mga Pindutan
Pag-program ng GUI Na-e-edit na Mga Pindutan
Pag-program ng GUI Na-e-edit na Mga Pindutan
Pag-program ng GUI Na-e-edit na Mga Pindutan
Pag-program ng GUI Na-e-edit na Mga Pindutan
Pag-program ng GUI Na-e-edit na Mga Pindutan
Pag-program ng GUI Na-e-edit na Mga Pindutan
Pag-program ng GUI Na-e-edit na Mga Pindutan

Ang GUI ay nai-save bilang isang.fig file ngunit ang mga function ng code / callback ay nai-save sa format na.m. Naglalaman ang.m file ng code para sa lahat ng iyong mga pindutan. Upang magdagdag ng mga function na call-back sa iyong mga pindutan, i-right click ang pindutan> > Tingnan ang mga callback >> callback. Bubuksan nito ang.m file para sa iyong GUI kung saan tinukoy ang partikular na pindutan.

Ang unang callback na pupunta kami sa code ay para sa na-e-edit na pindutan ng ROS IP. Sa ilalim ng pag-edit ng function1_Callback isulat ang sumusunod na code:

pagpapaandar edit1_Callback (hObject, eventdata, humahawak)

pandaigdigang ros_master_ip

ros_master_ip = get (hObject, 'String')

Narito ang pagpapaandar ay tinukoy bilang edit1_Callback, na tumutukoy sa unang nai-edit na pindutan. Kapag nagpasok kami ng isang IP address mula sa ROS network sa na-e-edit na pindutan, maiimbak nito ang IP-address bilang isang string sa isang pandaigdigang variable na tinatawag na ros_master_ip.

Pagkatapos sa ilalim lamang ng _OpeningFcn (hObject, eventdata, humahawak, varargin) tukuyin ang sumusunod (tingnan ang fig):

pandaigdigang ros_master_ip

pandaigdigang ros_master_port

pandaigdigang teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/ cmd_vel_mux / input / teleop';

Sa buong mundo mo lang hard-code ang ros-pc ip (ros_master_ip), port (ros_master_port) at ang Teleop Topic na pangalan. Ang ginagawa nito ay kung iiwan mong walang laman ang mga na-e-edit na pindutan, gagamitin ang mga paunang natukoy na halagang ito kapag kumonekta ka.

Ang susunod na callback na aming pupunta sa code ay para sa Port na maaaring i-edit na pindutan.

Sa ilalim ng pagpapaandar na edit2_Callback isulat ang sumusunod na code:

pagpapaandar edit2_Callback (hObject, eventdata, humahawak)

pandaigdigang ros_master_port

ros_master_port = makakuha (hObject, 'String')

Narito ang pagpapaandar ay tinukoy bilang edit2_Callback, na tumutukoy sa pangalawang pindutang mai-e-edit. Kapag ipinasok namin ang port ng ros pc / robot dito mula sa ROS network sa na-e-edit na pindutan, itatabi nito ang port bilang isang string sa isang pandaigdigang variable na tinatawag na ros_master_port.

Katulad nito ang susunod na callback na pupuntahan namin sa code ay para sa pindutang ma-e-edit ang pangalan ng Paksa.

Sa ilalim ng pagpapaandar na edit3_Callback isulat ang sumusunod na code:

pagpapaandar edit3_Callback (hObject, eventdata, humahawak)

pandaigdigang teleop_topic_name

teleop_topic_name = get (hObject, 'String')

Katulad ng ros_master_port, ito rin ay naiimbak bilang string sa isang pandaigdigang variable.

Susunod na titingnan namin ang mga pagpapaandar na call-back para sa mga pindutan ng push …

Hakbang 7: Pag-program ng GUI Push Buttons

Programming ang GUI Push Buttons
Programming ang GUI Push Buttons
Programming ang GUI Push Buttons
Programming ang GUI Push Buttons

Ang mga push button na nilikha namin dati ay ang mga gagamitin namin upang ilipat, ikonekta at idiskonekta ang robot mula sa controller. Ang mga callback na push button ay tinukoy bilang mga sumusunod:

hal. pagpapaandar ng pushbutton6_Callback (hObject, eventdata, humahawak)

Tandaan: nakasalalay sa pagkakasunud-sunod kung saan mo nilikha ang iyong mga pindutan ng itulak, mabibilang ang mga ito nang naaayon. Samakatuwid pag-andar pushbutton6 sa aking.m file ay maaaring para sa Pagpasa samantalang sa iyong.m file na ito ay maaaring para sa Paatras kaya't tandaan mo iyon. Upang malaman kung aling eksaktong pag-andar para sa iyong pindutan ng push, simpleng pag-click lamang >> Tingnan ang mga callback >> callback at bubuksan nito ang pagpapaandar para sa iyong pushbutton ngunit para sa itinuturo na ito ipinapalagay kong pareho ito sa minahan.

Para sa pindutang Kumonekta sa robot:

Sa ilalim ng function na pushbutton6_Callback (hObject, eventdata, humahawak):

pagpapaandar ng pushbutton6_Callback (hObject, eventdata, humahawak) global ros_master_ip

pandaigdigang ros_master_port

pandaigdigang teleop_topic_name

pandaigdigang robot

pandaigdigang velmsg

ros_master_uri = strcat ('https://', ros_master_ip, ':', ros_master_port)

setenv ('ROS_MASTER_URI', ros_master_uri)

rosinit

robot = rospublisher (teleop_topic_name, 'geometry_msgs / Twist');

velmsg = rosmessage (robot);

Itatakda ng callback na ito ang variable na ROS_MASTER_URI sa pamamagitan ng pagsasama-sama ng ros_master_ip at ang port. Pagkatapos ay sisimulan ng utos ng rosinit ang koneksyon. Pagkatapos ng pagkonekta, lilikha ito ng isang publisher ng geometry_msgs / Twist, na gagamitin para sa pagpapadala ng bilis ng utos. Ang pangalan ng paksa ay ang pangalan na ibinibigay namin sa kahon ng pag-edit. Kapag matagumpay ang koneksyon, magagawa nating patakbuhin ang mga pindutan ng Forward, Backward, Left, Right push.

Bago idagdag ang mga callback sa Ipasa, Paatras na itulak ang mga pindutan, kailangan nating simulan ang mga bilis ng linear at anggular na tulin.

Samakatuwid sa ibaba _OpeningFcn (hObject, eventdata, humahawak, varargin) tukuyin ang sumusunod (tingnan ang fig):

pandaigdigang left_spinVelocity pandaigdigang kanan_spinVelocity

pandaigdigan pasulong

pandaigdigan na pabalik

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

Tandaan: ang lahat ng mga bilis ay nasa rad / s

Ngayon na ang mga pandaigdigang variable ay tinukoy program natin ang mga pushbuttons ng paggalaw.

Para sa Forward pushbutton:

function na pushbutton4_Callback (hObject, eventdata, humahawak) global velmsg

pandaigdigang robot

pandaigdigang teleop_topic_name

pandaigdigan pasulong

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

ipadala (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', totoo);

Katulad nito para sa Backward pushbutton:

pagpapaandar ng pushbutton5_Callback (hObject, eventdata, humahawak)

pandaigdigang velmsg

pandaigdigang robot

pandaigdigan na pabalik

pandaigdigang teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = paatrasVelocity;

ipadala (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', totoo);

Katulad nito para sa Kaliwa pushbutton: function pushbutton3_Callback (hObject, eventdata, humahawak)

pandaigdigang velmsgglobal robot pandaigdigang left_spinVelocity

pandaigdigang teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

ipadala (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', totoo);

Katulad din para sa Tamang pindutan:

pandaigdigang velmsgglobal robot

pandaigdigang kanan_spinVelocity

pandaigdigang teleop_topic_name

velmsg. Angular. Z = kanan_spinVelocity;

velmsg. Linear. X = 0;

ipadala (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', totoo);

Kapag naidagdag na ang lahat ng mga function ng callback at nai-save ang mga file, maaari naming subukan ang aming controller.

Hakbang 8: Pag-set up ng Konfigurasi ng Network sa ROS PC (Linux)

Pag-set up ng Konfigurasi ng Network sa ROS PC (Linux)
Pag-set up ng Konfigurasi ng Network sa ROS PC (Linux)
Pag-set up ng Konfigurasi ng Network sa ROS PC (Linux)
Pag-set up ng Konfigurasi ng Network sa ROS PC (Linux)

Susubukan namin ang controller sa isang ros pc (Linux), na mangangailangan ng pag-set up ng network config. Kung pinapatakbo mo rin ang controller sa isang linux pc, kakailanganin mong i-set up din ang pagsasaayos ng network doon.

Pag-configure ng Network:

Buksan ang window ng iyong terminal at i-type ang gedit.bashrc

Kapag ang file ay bukas idagdag ang sumusunod:

# Pag-configure sa Machine Machine

i-export ang ROS_MASTER_URI = https:// localhost: 11311

#IP address ng ROS master node

i-export ang ROS_HOSTNAME =

i-export ang ROS_IP =

echo "ROS_HOSTNAME:" $ ROS_HOSTNAME

echo "ROS_IP:" $ ROS_IP

echo "ROS_MASTER_URI:" $ ROS_MASTER_URI

Kailangan mong sundin ang hakbang na ito sa bawat oras dahil sa pabagu-bagong pagtatalaga ng IP.

Hakbang 9: Patakbuhin ang Controller

Patakbuhin ang Controller
Patakbuhin ang Controller

Susubukan namin ang aming controller sa isang Turtle bot sa Gazebo.

Upang mai-install ang Gazebo, mangyaring mag-refer sa

Upang mai-install ang Turtle bot, mangyaring mag-refer sa

Buksan ang folder kung saan mo nai-save ang iyong.fig at.m na mga file sa MATLAB at pindutin ang Run (tulad ng ipinakita sa larawan). Bubuksan nito ang controller sa PC. Bago pindutin ang kumonekta, tiyaking gumagana ang iyong turtle bot simulator.

Upang subukan ang iyong kunwa ng TurtleBot:

Buksan ang Terminal sa Ros pc at i-type ang: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Bubuksan nito ang isang simulation ng Turtlebot sa PC na iyon. Ang pangalan ng paksa ng TurtleBot ay / cmd_vel_mux / input / teleop, na ibinigay na namin sa application. I-type ang ros pc Ip address, pangalan ng port at paksa sa mga na-e-edit na pindutan at pindutin ang. Kumonekta sa pindutan ng Robot. Dapat magsimulang gumalaw ang iyong turtle bot kapag pinindot mo ang Forward, Backward atbp.

Upang matingnan ang mga linear at angular velocities:

Magbukas ng isang bagong terminal at i-type ang utos: $ rostopic echo / cmd_vel_mux / input / teleop

At mayroon ka, ang iyong sariling Matlab-based ROS Robotic Controller. Kung nagustuhan mo ang aking itinuturo mangyaring bigyan ito ng isang boto sa First Time Author Contest at ibahagi ito sa maraming tao hangga't maaari. Salamat.

Inirerekumendang: