Warning
This page is located in archive.

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

help:common:robot_mitsubishimelfa_toolbox [2011/08/24 13:08]
meloumar
help:common:robot_mitsubishimelfa_toolbox [2018/02/03 10:49]
Line 1: Line 1:
-====== Mitsubishi Melfa Robot Control Toolbox pro Matlab - Návod použití ====== 
-===== Úvod ===== 
  
-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 [[robot_mitsubishi_rv-6s|Mitsubishi Melfa RV-6S]] a [[robot_mitsubishi_rv-6sdl|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). 
- 
-Kromě tohoto návodu jsou všechny funkce toolboxu zdokumentovány,​ pro jejich podrobný popis lze zobrazit příkazem ''​help''​. 
- 
-===== Instalace ===== 
- 
-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''​). 
- 
-===== Inicializace a ukončení ===== 
- 
-Funkce: 
- 
-<​code>​robot = mmOpen( robotname [, propertyName,​ propertyValue,​ ...] ) 
-robot = mmOpen2( robotname, comobj [, propertyName,​ propertyValue,​ ...] )</​code>​ 
- 
-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. 
- 
-Specifikace,​ které jsou v toolboxu k dispozici, lze vylistovat příkazem ''​mmRobots'':​ 
- 
-<​code>​ 
->> mmRobots 
-Available Melfa Robot definitions:​ 
-  RV6S   .. Mitsubishi Melfa RV-6S 
-  RV6SDL .. Mitsubishi Melfa RV-6SDL 
-</​code>​ 
- 
-Inicializace robota po otervření komunikace probíhá automaticky. 
- 
-<​code>​mmClose(robot)</​code>​ 
- 
-Uzavře komunikaci s robotem (je-li to poslední robot pro řídící jednotku, tak je uzavřena komunikace i s ní). 
-===== Typický průběh práce s toolboxem ===== 
- 
-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í. ​ 
- 
-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''​. 
- 
-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. 
- 
-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). **Nesmí se vypnout řídící jednotka, 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. 
- 
-Pro spuštění demonstrační sekvence slouží funcke: 
- 
-<​code>​mmDemo( robotname [, propertyName,​ propertyValue,​ ...] )</​code>​ 
- 
-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.** 
-===== Přehled funkcí ===== 
- 
-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''​. 
- 
-<​code>​ 
-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. 
-</​code>​ 
- 
-===== Základní pohyb ===== 
- 
-Ří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: [[https://​cw.felk.cvut.cz/​doku.php/​help/​common/​robot_mitsubishi_rv-6s/​|RV-6S]],​ [[https://​cw.felk.cvut.cz/​doku.php/​help/​common/​robot_mitsubishi_rv-6sdl|RV-6SDL]] 
- 
-Demonstrační sekvence pro robota RV-6S: 
-<​code>​ 
-%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);​ 
-</​code>​ 
-===== Kinematika ===== 
- 
-Ří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)((řídící jednotka podporuje i více typů souřadnic)). 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. ​ 
- 
-===== Virtualizace ===== 
- 
-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. 
- 
-===== Melfa Basic ===== 
- 
-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 [[http://​cmp.felk.cvut.cz/​cmp/​hardware/​Mitsubishi-RV6SL/​manuals/​Factory-English/​bfp-a8661l.pdf| 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í. 
- 
-Přes ''​mmSendCmd''​ lze volat příkazy pro načítání (''​LOAD''​),​ editaci (''​EDATA''​) a ukládání programů (''​SAVE'',​ ukončení editace ''​NEW''​). 
-===== Download ​ ===== 
- 
-Verze 1.4, 24.8.2011: [[http://​cmp.felk.cvut.cz/​cmp/​hardware/​Mitsubishi-RV6S/​toolbox/​mm_toolbox_v1_4.zip|mm_toolbox_v1_4.zip]] 
-(Opravena chyba v inverzní kinematické úloze) 
help/common/robot_mitsubishimelfa_toolbox.txt · Last modified: 2018/02/03 10:49 (external edit)