Search
Tento toolbox zpřístupňuje řízení robotů z Matlabu pomocí jednotného rozhraní pro roboty Mistubishi Melfa. Umožňuje pohyb robotem v kloubových a kartézských souřadnicích.
Aby bylo možné daný robot tímto toolboxem ovládat, musí být k dispozici definiční soubor. Předdefinováni jsou roboti Mitsubishi Melfa RV-6S a Mitsubishi Melfa RV-6SDL, pro ostatní je nutno mít vlastní definici.
Komunikace s řídící jednotkou realizována pomocí sériového rozhraní RS232C. Řídící jednotka umožňuje obsluhovat více robotů najednou a to mít připojeno více sériových linek s PC nebo ovládání více robotů z jedné sériové linky.
Mitsubishi Melfa Robot Control Toolbox vyžaduje Matlab 7.6 (R2008a) a výše s podporou serial port object (na x64 je třeba vyšší verze).
serial port object
Kromě tohoto návodu jsou všechny funkce toolboxu zdokumentovány, pro jejich podrobný popis lze zobrazit příkazem help.
help
Toolbox vyžaduje mít nainstalovaný robotický toolbox od Peter Corke (ke stažení na http://petercorke.com/Robotics_Toolbox.html). Dále před prvním užitím je nutné v adresáři, kde je nainstalovaný Mitsubishi Melfa Toolbox, spustit mmCompileMex (přeloží hat.c). Nezapomeňte v Matlabu aktualizovat Toolbox Path Cache, v nastavení pod General).
mmCompileMex
General
Funkce:
robot = mmOpen( robotname [, propertyName, propertyValue, ...] ) robot = mmOpen2( robotname, comobj [, propertyName, propertyValue, ...] )
načtou specifikaci robota a otevře komunikační port. robot je instance třídy odvozené z hgsetget, parametry propertyName, propertyValue nastaví parametry robotu, pokud se liší od výchozích. Funkce vrací řídící proměnnou, kterou používají ostatní funkce toolboxu. Port musí být pro Matlab volný. Používá-li řídící jednotka více robotů na jednom portu, použijeme funkci mmOpen2 při otevírání komunikace s dalšími roboty.
robot
hgsetget
propertyName, propertyValue
mmOpen2
Specifikace, které jsou v toolboxu k dispozici, lze vylistovat příkazem mmRobots:
mmRobots
>> mmRobots Available Melfa Robot definitions: RV6S .. Mitsubishi Melfa RV-6S RV6SDL .. Mitsubishi Melfa RV-6SDL
Inicializace robota po otervření komunikace probíhá automaticky.
mmClose(robot)
Uzavře komunikaci s robotem (je-li to poslední robot pro řídící jednotku, tak je uzavřena komunikace i s ní).
Nejprve je potřeba otevřít komunikaci s robotem pomocí funkce mmOpen, připadně mmOpen2, tím se vytvoří handle na robota. Pokud je ovládáno více robotů jednou sériovou linkou, tak pro ovládaní je nutné zabrat sériovou linku pro daného robota před libovolným příkazem pomocí mmAcquireCom a po uknočení mmReleaseCom. V případě používání více robotů je toto nutné provádět pro každou sekvenci příkazů pro jednoho daného robota, aby si nelezli do zelí. Toto není realizováno pro používání s více vlákny. Ukončení komunikace se provede zavoláním mmClose. Funcke mmOpen a připadně mmOpen2 vyžadují nezabranou sériovou linku, po jejich zavolání je sériová linka zabrána robotem, s nímž byla právě otevřena komunikace. Naopak funkce mmClose očekává již zabranou sériovou linku a po ukončení komunikace s robotem ji uvolní.
mmOpen
mmAcquireCom
mmReleaseCom
mmClose
Poté je nutné zavolat mmCtnlOn pro povolení zadávání příkazů ze sériové linky. Dále je pro jakýkoliv pohyb s robotem nutné zapnout servomotor pomocí mmSrvOn. Zapínání a vypínání servomotoru je asynchronní, pro počkání se použije funkce mmWaitForServoOn resp. mmWaitForServoOff.
mmCtnlOn
mmSrvOn
mmWaitForServoOn
mmWaitForServoOff
Zápis na sériovou linku se provádí pomocí mmPrintf, čtení mmScanf resp. je možné použít funkci mmSendCmd pro zápis příkazu pro robota a přečtení odpovědi. Funkce mmExec pošle příkaz v jazyce MELFA BASIC a přečte odpověd (o Melfě Basic sekce níže). Identifikátor robota je automaticky zapsán, při používání více robotů se automaticky kontroluje, jestli si 'nelezou do zelí'. Všechny funkce kontrolují, zda komunikace proběhla v pořádku.
mmPrintf
mmScanf
mmSendCmd
mmExec
Nakonec se funkcí mmClose ukončí komunikace s robotem. Před zavoláním je vhodné umístit robota do výchozí pozice (tj. všechny kloubové souřadnice rovny nule). Řídící jednotka se nesmí vypnout, pokud se robot pohybuje!
V celém toolboxu návratová proměnná r, kterou vrací většina funkcí, znamená, zda nastal problém s komunikací s robotem (platnost příkazu atd); je-li r rovno nule, tak komunikace proběhla v pořádku tj. příkaz byl odeslán z PC, robot příkaz přijal a je syntakticky správně, ale není-li uvedeno jinak, tak není kontrolována smysluplnost příkazu (čili např. příkaz pro pohyb mimo pracovní plochu robota vyvolá chybu, ale ne v komunikaci, proto r bude rovno 0). Pro některé funkce existuje is Safe varianta, která hned po poslání příkazu kontroluje, zda u robota nastala chyba.
r
Safe
Pro spuštění demonstrační sekvence slouží funcke:
mmDemo( robotname [, propertyName, propertyValue, ...] )
Demonstruje základní ovládání robotu - provede patřičné inicializace a volá demonstrační sekvenci, je-li k dispozici. Parametry funkce jsou shodné s mmOpen. Demonstrační sekvence pro robota předpokládá volný pracovní prostor.
Všechny funkce jsou prefixovány mm. Pro všechny funkce je argument robot handle na robota a návratová hodnota r kontrola komunikace, popsána výše. Zde je uveden souhrn všech funkcí a běžné použavné argumenty / návratové hodnoty (v popisu funkce jsou uvedeny pod %COMMONARGS), který lze také zobrazit pomocí help mm.
mm
%COMMONARGS
help mm
Common arguments: r: The whole tooblox uses this return value as a notification that communication with the robot was successful. This only checks whether there was an error in the communication e.g commanding the robot to go outside its working area is not a communication error therefore. Some function have a 'Safe' variant; that means that a proper error checking is done after the command (usually returns 'rs' instead of 'r'. The 'r' is equal to 0 for success, any other value is error. robot: The handle for the robot unit, derived from hgsetget, so you can use the 'get' and 'set' functions. Required for almost all functions. It is created in mmOpen or mmOpen2 when specifying the robot name. The handle is invalidated by calling mmClose. Function overview: mmAcquireCom .. Acquires this com port for a robot. mmClose .. Closes communication with robot. mmCntlOff .. Turns off control for that robot. mmCntlOn .. Turns on control for that robot. mmComprops_Serial .. Creates serial object properties structure. The properties' names must match to the serial object properties' names. mmCreateCoords .. Creates the coordinate system string for Melfa. mmCreateRobot .. Creates a instance of a robot structure. mmDemo .. Runs a demonstration sequence. mmDkt .. The direct kinematic task. mmError .. Raises an error in the controller (currently by hack). mmExec .. Sends a MELFA command to robot and reads the reply. mmExecSafe .. Sends a MELFA command to robot, reads the reply and checks for error. mmFlush .. Flushes robot comport. mmGetAcceleration .. Gets the acceleration and deceleration constants. mmGetBaseSpeed .. Gets the base speed constant. mmGetFlags .. Gets the position flags. mmGetInterpolationSpeed .. Gets the interpolation speed constant. mmGetJogSpeed .. Gets the jog speed constant. mmGetPos .. Returns the current position in selected coordinates. mmGetPos2 .. Returns the coordinates of selected type. mmGetState .. Retutns the current robot state. mmGetVar .. Reads a variable and returns its value. mmIkt .. The inverse kinematic task (specific for each robot). mmIsFreeCom .. Whether the communication is not acquired. mmMov .. Moves the robot to specified position using joint interpolation. mmMovLin .. Moves the robot using linear interpolation. mmMovLinSafe .. Exact operation as mmMovLin with error checking right after. mmMovSafe .. Exact operation as mmMov with error checking right after. mmMovToolZ .. Moves the robot using linear interpolation. mmMovToolZSafe .. Exact operation as mmMovToolZ with error checking right after. mmOpen .. Opens the Melfa Robot Communication. mmOpen2 .. Opens the Melfa Robot Communication over an existing com object. mmOpenVirt .. Opens a virtual Melfa Robot. mmOwnsCom .. Whether the communication is acquired by the robot. mmParseRunState .. Parses the run state bitfield into structure. mmParseStopState .. Parses the stop state bitfield into structure. mmPlotRecordedMove .. Plots the robot recorded moving. mmPlotRobot .. Plots the robot rigid body with specified coordinates. mmPlotTrajectory .. Plots a trajectory. mmPrecisionType .. Sets the precision type. mmPrintf .. Writes a line to the com port. mmPurge .. Clears errors. mmReadyToMove .. Checks if the robot is ready to move. mmReleaseCom .. Releases the com for another robot. mmRobots .. Lists available Melfa Robots implemented in the toolbox. mmrtCreateInteractiveRobot .. Creates Robot Toolbox robot instance. mmrtDriveBot .. Executes Robot Toolbox DriveBot function. mmrtPlotJointMove .. Plots the robot moving from A to B position in joint interp. mmrtPlotLinearMove .. Plots the robot moving from A to B position in linear interp. mmrtPlotRecordedMove .. Plots the robot recorded moving (using Robot Toolbox). mmrtPlotRobot .. Plots the robot rigid body with specified coordinates. mmrtRecordingStart .. Starts robot movement recording. The samples must be added manually. mmrtRecordingStop .. Stops robot movement recording. mmrtRecordingTakeSample .. Records the sample. mmrtRecordTillStop .. Records the robot until the robot is in stop state. mmScanf .. Reads a line from the communication port. mmSendCmd .. Sends a command to robot and reads the reply. mmSendCmdSafe .. Sends a command to robot, reads the reply and checks error. mmSetAcceleration .. Sets the acceleration and deceleration constants. mmSetBaseSpeed .. Sets the base speed constant. mmSetInterpolationSpeed .. Gets the interpolation speed constant. mmSetJogSpeed .. Sets the jog speed constant. mmSetVar .. Assigns a value for a variable. mmSetVar2 .. Assigns a variable from another variable. mmSimulateMove .. Simulates movement from A to B. mmSrvOff .. Turns off servo for that robot. mmSrvOn .. Turns on servo for that robot. mmStop .. Stops the robot. mmTestKinematics .. Tests inverse kinematic task (requires correct direct kinematic task). mmTraceJoint .. Traces the robot moving from A to B position in joint interp. mmTraceLinear .. Traces the robot moving from A to B position in linear interp. mmWaitForServoOff .. Waits until the servomotor is off. mmWaitForServoOn .. Waits until the servomotor is on. mmWaitForStop .. Waits until the robot is in stop state. anglesToMtx .. Converts yaw, pitch and roll to rotation matrix. denavitHartenberg .. Creates a 4x4 matrix for Denavit-Hartenberg notation. hat .. High Accuracy Timer. mtxRotateX .. Creates a rotation matrix over axis x. mtxRotateY .. Creates a rotation matrix over axis y. mtxRotateZ .. Creates a rotation matrix over axis z. mtxToAngles .. Converts rotation matrix to yaw, pitch and roll. mtxTranslate .. Creates a translation matrix. substr .. Extracts a substring out of a string.
Řídící jednotka vrací polohy kloubů ve stupních a automaticky řeší inverzní kinematickou úlohu pro aktuální polohu. Funcke mmMov vykoná pohyb v kloubových resp. kartézských souřadnicích, funkce mmMovLin vykoná pohyb v lineární interpolaci s pracovním bodem v aktuální poloze. Všechny funkce pro pohyb jsou asynchronní. Pro čekání na ukončení pohybu lze použít mmWaitForStop. Detailní popis pohybových funkcí je v manuálu pro jednotlivého robota: RV-6S, RV-6SDL
mmMov
mmMovLin
mmWaitForStop
Demonstrační sekvence pro robota RV-6S:
%open the robot communication with default properties robot = mmOpen('RV6S'); %turn on control mmCntlOn(robot); %turn on servomotor mmSrvOn(robot); %set base speed coeficient mmSetBaseSpeed(robot, 50); %set jog speed coeficient mmSetJogSpeed(robot, 100); %create the conformations n = 15; conformations = cell(1, n); conformations{1} = [ 0; 0; 0; 0; 0; 0]; conformations{2} = [ 0; 0; 90; 0; 90; 0]; conformations{3} = [ 0; 90; 0; 0; 90; 0]; conformations{4} = [ 0; 90; 0; 90; 90; 0]; conformations{5} = [ 0; 90; 0;-90; 90; 0]; conformations{6} = [ 0; 90; 0; 0; 90; 0]; conformations{7} = [ 0; 30; 60; 0; 0; 0]; conformations{8} = [-30; 30; 60; 0; 0; 60]; conformations{9} = [ 30; 30; 60; 0; 0;-60]; conformations{10} = [ 0; 30; 60; 0; 0; 0]; conformations{11} = [ 0;-50;140; 0; 0; 0]; conformations{12} = [-60;-50;140; 45; 45;-45]; conformations{13} = [ 60;-50;140;-45; 45; 45]; conformations{14} = [ 0;-50;140; 0; 0; 0]; conformations{15} = [ 0; 0; 0; 0; 0; 0]; %wait until the servomotor is on r = mmWaitForServoOn(robot); %check for error if (r) mmClose(robot); error('Failed to turn on servo motors.'); end %iterate through each conformation for i=1:n %move in jog coordinates [~, r1] = mmMovSafe(robot, 'J', conformations{i}); %wait until finished [r2] = mmWaitForStop(robot); %quit if error if ( r1 || r2 ) mmClose(robot); error('Robot is in error state.'); end end %all done, close communication mmClose(robot);
Řídící jednotka je schopna spočíst inverzní kinematickou úlohu pro aktuální polohu (funkce mmGetPos s parametrem P) a nebo najíždět na polohu zadanou v kartézských souřadnicích a Eulerovými úhly (yaw, pitch, roll)1). V matlabu jsou implementovány funkce pro převod mezi kloubovými souřadnicemi a kartézskými a Eulerovými úhly (yaw, pitch, roll). Kartézské souřadnice jsou v milimetrech a Eulerovy úhly ve stupních. Přímou kinematickou úlohu implementuje mmDkt, inverzní kinematickou úlohu implementuje mmIkt, která vrací pouze řešení, která jsou v limitech pro každou kloubovou souřadnici a jsou neperiodická (u posl. kloubu pro RV-6S a RV-6SDL je v limitech i řešení o peridu vyšší / nižsí), většinou vychází 2 až 4 (maximálně 8) řešení. Funcke mmPlotRobot vykreslí model robota v daných kloubových souřadnicích. K dispozici je také funkce pro výpočet trajektorie pohybu robota z A do B v kloubové interpolaci a výpočet průbehu poloh kloubových souřadnicí při pohybu v lineární interpolaci.
mmGetPos
P
mmDkt
mmIkt
mmPlotRobot
K vytvoření virtuálního robota použijte funkci mmOpenVirt místo mmOpen. Virtuální robot podopruje základní příkazy a zjednodušeně simuluje pohyb.
mmOpenVirt
Melfa Basic je programovací jazyk pro roboty Mitsubishi Melfa podobající se Visual Basic popř. Assembleru. Robot RV-6S používá Melfu Basic IV, robot RV-6SDL požívá novější verzi Melfa Basic V. Rozdíly lze najít v manuálu pro Detailed explanations of functions and operations manual na straně 4-121. Pro vykonání libovolného příkazu v Melfě Basic slouží funkce mmExec. Některé funkce, jako např. pohyb, zjištění aktuální polohy atd., použivají příkazy v Melfě Basic. Pro jejich účely slouží proměnné 'P1', 'X1', 'J1' a 'M1', takže tyto proměnné není vhodné používat pro ukládání dat (mmGetVar, mmSetVar). Momentálně toolbox nepodporuje multitasking a signálování.
mmGetVar
mmSetVar
Přes mmSendCmd lze volat příkazy pro načítání (LOAD), editaci (EDATA) a ukládání programů (SAVE, ukončení editace NEW).
LOAD
EDATA
SAVE
NEW
Verze 1.4, 24.8.2011: mm_toolbox_v1_4.zip (Opravena chyba v inverzní kinematické úloze)