ur10_robot_arm:ur10_robot_arm

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
ur10_robot_arm:ur10_robot_arm [2020/08/04 06:56] – [Define the grid] formlabur10_robot_arm:ur10_robot_arm [2025/09/08 03:00] (current) – [Connect to the robot] formlab
Line 4: Line 4:
 Collaborative robot-arm   Collaborative robot-arm  
  
 +References:
 +  * [[https://asd.sutd.edu.sg/dfab/a-geometric-inverse-kinematics-solution-for-the-universal-robot/|A Geometric Inverse Kinematics Solution for the Universal Robot]]
 +  * [[https://www.zacobria.com/pdf/universal_robots_zacobria_hints_and_tips_manual_1_4_3.pdf|Hints and tips by Zacobria]]
 +===== Software =====
 +  * [[ur10_robot_arm:ur10_robot_arm#polyscope_the_teaching_pendant|Polyscope (the teaching pendant)]]
 +  * [[ur10_robot_arm:ur10_robot_arm#grasshopper|Grasshopper]]
 +  * [[ur10_robot_arm:ur10_robot_arm#robodk|Rodo-DK]]
 +  * Other possible control software
 +    * Python
 +    * [[https://etasl.pages.gitlab.kuleuven.be/|eTaSL]]
 +==== Polyscope (the teaching pendant) ====
  
-Applications+=== Define TCP === 
 +  * Click ‘new’ (you cant rename TCP’s) 
 +  * Define the position 
 +    * Enter the offset by measuring, or use the wizard. The wizard lets you orient the physical TCP around a point in 4 different positions. 
 +  * Define the orientation (optional) 
 +    * Enter a custom orientation in case the TCP is not normal to the flange. 
 +  * Define a tool weight and center of gravity. 
 +  * Click ‘set as default’ 
 +  * Save the installation setting (on the left bar)
  
-===== future tool heads ===== +Test the setup: 
-  * 3D scanner tool head +  * rotate the robot around the TCP on the teaching pendant (move tab). The tool tip should stay still in space while the rest of the robot rotates around it.
-  * +
  
-===== Brush attachment =====+==== RoboDK ==== 
 +- [[https://www.youtube.com/watch?v=WmyIAgNyPC0|Reference Frame Definition]]
  
-===== 3D print attachment ===== +- Direct computer-robot ethernet connection doesn't work. You need a switch or a router. The computer's IP address should be set to DHCP. 
-In development+==== Grasshopper ====
  
-===== Pen plotter attachment =====+Grasshopper runs inside Rhino 7. In order to control the robot arm, a Grasshopper plugin is needed: Robots.
  
-===== Webcam attachment ===== 
  
-===== DSLR attachment =====+=== Connect to the robot ===
  
-===== Hole drilling attachment ===== +(08/09/2025)\\  
-{{:ur10_robot_arm:griddrill_poster_web.jpg?600|}}\\ +Connect the Robot controller with an ethernet cable. This can be done in 3 ways: 
-This tool head was made to drill grid of almost 500 holes into the base plate of the thermoform machine.+  * Robot controller direct to the Mac 
 +  * Robot controller to a network switch, which then connects to a Mac (not connected to the main network) 
 +  * Robot controller to a network switch, which is connected to the main network
  
-==== Physicial setup ==== +On the teaching pendant go to Setup Robot > Network 
-The program is made and executed on the teaching pendant.+  * Select Static Address 
 +  * IP address: 192.168.185.99 
 +  * Subnet Mask: 255.255.192.0 
 +  * Default Gateway: 0.0.0.0 
 +  * Preferred & Alternative DNS servers:  0.0.0.0
  
-{{:ur10_robot_arm:griddrill_dremel_attached_web.jpg?600|}}\\ +On the computer, go to System Settings > Network > Ethernet > TCP/IP 
-The Dremel is strapped to the upper arm of the robot and secured with zip ties, using a curved block of foam.+  * Set 'Configure' to 'Manually' 
 +  * IP Address192.168.185.88 
 +  * Subnet Mask: 255.255.192.0
  
-{{:ur10_robot_arm:griddril_flex_arm_attached_web.jpg?600|}}\\ +In the terminal, try pinging to check the connection to the robot
-Slide the Dremel flex-arm in the 3D printed holder. Make sure it is attached to the tool change plate. Check that the bolt-heads are not sticking out on the side that will mount to the robot armThe tool changer needs low profile boltsAttach the tool to the robot arm and install a 1mm drill in the chuck.+  * ''ping 192.168.185.99'' 
 +  * If the ping returns data, you know the computer can reach the robot
  
-{{:ur10_robot_arm:griddril_wood_web.jpg?600|}}\\ +Now you can control the robot with the Robots plugin in Grasshopper / Rhino and use the URRealtimeFeedback script to get the current pose & TCP position.
-I had a piece of wood on a table with a layer of thick cardboard underneath, but with the robot arm, it is possible to drill in walls, upright panels etc... (The cardboard in the picture should have been thicker).+
  
-==== Define the coordinate system of the stock material ====+Current versions used:  
 +  * Rhino version: 7  (7.38.24338.17002, 2024-12-03) 
 +  * Grasshopper version 03/12/2024 build 1.0.0007 
 +  * Robots (Visose) version: 1.4.1: [[https://github.com/visose/Robots|Link]] 
 +  * URRealtimeFeedback script for Grasshopper Robots: [[https://github.com/robin-gdwl/GH_Robots_URRealtimeFeedback|Link]]
  
-{{:ur10_robot_arm:griddril_test_reach_web.jpg?600|}}\\ +Using a forked version of the URRealtimeFeedback script by Odbee ([[https://github.com/robin-gdwl/GH_Robots_URRealtimeFeedback/pull/2|Link]]), makes it possible to use version 1.6.7 of the Robots plugin.
-Test the reach of the armcan it get to the far corners?+
  
-{{:ur10_robot_arm:griddril_define_corrdinate_system_web.jpg?600|}}\\ 
-To define the coordinate system of the stock material, take the teaching pendant and go to ''Installation > Features''. 
-  * Add a plane and define the necessary points. In this case these are the corners of the sheet of MDF. 
-  * First point: this defines the origin of the feature. 
-  * Second point: this defines the Y axis. 
-  * Third point: this defines the X axis. 
  
-Save the file with a clear name. 
  
-==== Define the grid ==== 
-In this example, the drill makes a grid of 495 holes. The program is based on a wizard for palletizing. 
  
-On the teaching pendant, load the following program: ''File > Load > drilling holes in a grid v2 (palletizing).urp''. +=== The Robots plugin === 
-Let's define 4 points where the outer most actions of the palletising sequence will take place. These points will become the corner-holes.+== Installation ==
  
-{{:ur10_robot_arm:griddril_define_grid_01_corners_web.jpg?600|}}\\ +  * In Rhino, go to ''Tools > Package Manager'' and select the ''online'' tab
-In the program tree, click item ''a1st Corner_1'' +  * Search for 'Robots' and select the 'Robots' plugin. If you select itcheck the Github url: the author is visose. 
-Click ''change this position''+  * Select version ''1.4.1'' and click install (restart Rhino after). 
 +    * Everything below version ''1.5.0'' probably works. 
 +    * Briefly tested versions: ''1.0.1'', ''1.3.0'', ''1.4.1'' seem to work. ''1.5.0'', ''1.6.0'' are too new for the get-current-position-script (see below).
  
-{{:ur10_robot_arm:griddril_define_grid_02_select_feature_web.jpg?600|}}\\ +== Robots.dll file ==
-From the upper right drop down menu, select the feature you defined previously.+
  
-{{:ur10_robot_arm:griddril_define_grid_03_point_down_web.jpg?600|}}\\ +If Rhino keeps asking to locate the Robots.dll filehere's a tip. Make all grasshopper projects (files with a ''.gh'' extension) writable. This way you'll need to reference the location of the ''robot.dll'' file only once.  
-To make the drill point straight downclick on one of the number boxes under ''TCP''A new screen opens.+  * On mac: cmd + i, under sharing & permissions, change the privilege of 'everyoneto Read & Write. 
 +  * Location of the robots.dll file: 
 +    * ''username/Library/Application Support/McNeel/Rhinoceros/packages/7.0/Robots/1.4.1/Robots.dll''
  
-{{:ur10_robot_arm:griddril_define_grid_04_point_down_numbers_web.jpg?600|}}\\ +== Guides ==
-Change drop down menu ''Rotation vector [rad]'' to ''Rotation Vector [°]''+
-  * Set RX to ''0'' +
-  * Set RY to ''0'' +
-  * Set RZ to ''180'' (this is the rotation of the Z-axis, so the value probably doesn't matter)+
  
-{{:ur10_robot_arm:griddril_define_grid_06_speed_web.jpg?600|}}\\ +  * [[https://github.com/visose/Robots/wiki/How-To-Use|Robots How-To-Use]]. 
-Lower the speed for safety.+  * There are a few example files in ('Robots-master > Documentation > Examples'
 +  * I followed this [[https://www.youtube.com/watch?v=HV44DDlDqmQ&ab_channel=BastianWibranek|getting started video]]. 
 +  * Robots guide by [[https://wiki.fablabbcn.org/ROBOTS|Fab Lab Barcelona]] (almost a complete copy from Robots How-To-Use). 
 +  * Drawing with robots [[https://www.youtube.com/watch?v=vyYAmu00xMg&t=1019s&ab_channel=KarlSingline|video tutorial]]. Uses KukaPRC instead of 'Robots', but workflow might be useful. 
 +  * [[https://www.youtube.com/playlist?list=PLqtxhH1qb3Mw5A_YbvHDfrq4DNNfLtcW-|Youtube video series 'programming robots in Grasshopper']]
  
-Manually move the arm to the first positionusing the on screen arrows.+I tried adapting the 'simple example' by changing the Kuka robot to a UR10 robot. It worksbut the initial position is all wrong. In [[http://fab.cba.mit.edu/classes/863.19/Harvard/people/joonhaenglee/week14/week14.html|this guide]] Joonhaeng Lee at [[http://cba.mit.edu/|MIT's center for bits and atoms]] describes a solution to this problem.
  
-{{:ur10_robot_arm:griddril_define_grid_05_first_pos_web.jpg?600|}}\\ 
-When arrived at the first position, carefully move the arm down so that the drill almost touches the wooden surface. Keep a millimeter of safety margin. 
  
-Click ''OK'' and define the 3 other points too.+== Tips == 
 +  * The first target should be a joint target. Following ones can be cartesian targets. 
 +== Upload script to robot == 
 +  * Small programs can be streamed directly to the robot with the 'Remote Connectionmodule.\\ {{:ur10_robot_arm:robots_sendtorobot.png?400|}} 
 +    * Send the program to the robot by clicking 'Upload'
 +    * The arm starts moving without warning(!). 
 +    * With larger programs (1000+ targets(?)), there might be a delay after clicking upload and the arm moving. 
 +  * Larger programs (2500+ targets) cannot be streamed. Use the 'Save Program' module.\\ {{:ur10_robot_arm:robots_saveprogram.png?400|}} 
 +    * This file is created right away (it's streamed). 
 +    * Change the .URS extension to .script 
 +    * Open the script in a script editor, copy the function name at the top, and add to the bottom ''result = programName()''. Now the program will actually be ran. Maybe this is an incompatibility between the e-series and the previous versions. Might be changeable in the post processor C# script. 
 +    * Upload to the robot via SFTP (place it somewhere in the map '/programs'). 
 +    * Make a new program, add the script module, change it from line to file, and load the file from the programs folder. 
 +    * This doesn't work for large files though. People are talking about splitting it up into sections. But it's unclear to me how. 
 +      * 485 targets works 
 +      * 24673 targets already doesn't want to load :(
  
  
-==== Define the drilling sequence ==== +=== URRealtimeFeedback plugin for Robots === 
-This is the sequence to drill single holeWhen running the programit will be repeated for every hole+This is a grasshopper file with some builtin scripts that allows to receive the current pose of the robot arm. 
-We will only be defining heights, since the X-Y location will be taken from the grid locations later.+ 
 +  * [[https://github.com/robin-gdwl/GH_Robots_URRealtimeFeedback|Github plugin page]] 
 +  * [[https://github.com/robin-gdwl/GH_Robots_URRealtimeFeedback#-usage|Installation instructions]] 
 +  * [[https://www.youtube.com/watch?v=c1BiL6fXkgs&ab_channel=robin_gdwl|Demo video]] 
 + 
 +== Setup == 
 +  * Do not connect to the LAN network of KASK. Instead connect to the robot arm directly, or via separate switch. 
 +  * Set the computer to a static IP address that is the same as the Robot'sexcept for the last number 
 + 
 + 
 +  * <code>Computer -------------- Robot arm</code> 
 +  * or  
 +  * <code>Computer --- Switch --- Robot arm</code> 
 + 
 + 
 + 
 + 
 +== Related 'Robots' projects == 
 +  * Wirecutting with Grasshopper & Robots ([[https://www.youtube.com/watch?v=-JtDSXmi1YI&ab_channel=GediminasKirdeikis|video]]) 
 +==== FTP connection ==== 
 +  * Use FIleZilla 
 +  * Host: ''sftp:%%//%%192.168.185.99'' 
 +  * Username: root 
 +  * Password: easybot 
 +  * Port: 22 (also works without entering anything here) 
 + 
 +Location of program (URP) or script (URS) files: ''/programs'' 
 + 
 + 
 +==== RoboDK ==== 
 +- [[https://www.youtube.com/watch?v=WmyIAgNyPC0|Reference Frame Definition]] 
 + 
 + 
 +===== Hardware  ===== 
 +==== Toolhead connector ====  
 + 
 +A suitable cable that mates to the toolhead connector is [[https://www.lumberg-automationusa.com/con/pdf/RKMV8354.pdf|Lumberg RKMV 8-354]] 
 + 
 + 
 + 
 +===== Broom handle attachment ===== 
 +{{:ur10_robot_arm:urbroomhandle.jpg?600|}}\\ 
 +{{:ur10_robot_arm:urbroomhandle_02_web.jpg?600|}}\\ 
 +===== 3D printer (Clay) ===== 
 +In development 
 + 
 +{{:ur10_robot_arm:urprinter_clay.jpg?600|}} 
 +===== 3D printer (Plastic) ===== 
 +In development 
 + 
 +{{:ur10_robot_arm:urprinter.jpg?600|}}\\ 
 + 
 + 
 +===== Pen plotter ===== 
 +{{:ur10_robot_arm:urprlotter.jpg?600|}}\\ 
 + 
 +Used by [[http://hisk.edu/mw/index.php/Diego_Lama|Diego Lama]] to scratch drawings into car parts 
 + 
 +[[Drawing with the UR10]] (RoboDK).\\ 
 +[[Drawing with the UR10 V2]] (Grasshopper) 
 +===== Webcam attachment ===== 
 +{{:ur10_robot_arm:urbwebcam.jpg?600|}}\\ 
 +{{:ur10_robot_arm:urwebcam_design_museum_ghent_web.jpg?600|}}\\ 
 + 
 +===== DSLR attachment ===== 
 + 
 +===== Hole drilling attachment ===== 
 +{{:ur10_robot_arm:griddrill.jpg?600|}}\\ 
 +{{:ur10_robot_arm:griddrill_poster_web.jpg?600|}}\\ 
 +This tool head turns the robot into an automated hole drilling machine. Good for elaborate hole patterns that would be tedious to do manually.
  
-{{:ur10_robot_arm:griddrill_drilling_sequence_01_patternpoint_web.jpg?600|}}\\ +Based on [[https://www.thingiverse.com/thing:2475928|this design]].
-Under ''PalletSequence'', select ''PatternPoint_1''. Click ''Change Position'' and move the point of the drill to one of the edges of the wooden plate, so the drill can go down without touching the wood. This way we can clearly see how deep we should drill. +
-Position the drill about 1mm above the surface.+
  
-{{:ur10_robot_arm:griddrill_drilling_sequence_02_approach_pos_web.jpg?600|}}\\ +The 3D printed part attaches to a [[https://www.grip-gmbh.com/connect/mgw/mgw063|Grip toolchanger underplate (G-MGW063-2U)]].
-Define ''approach'' position: a few cm’s higher than ''PatternPoint_1'', so the robot arm can move safely above the work surface.+
  
-{{:ur10_robot_arm:griddrill_drilling_sequence_03_down_web.jpg?600|}}\\ +Download the 3D files {{ :ur10_robot_arm:ur_dremel_flex_clamp.zip |here}}.\\ 
-  * Define Down —> ''From point'': set to the position of ''PatternPoint_1''. This will be the start of the drilling move. +Attach the clamps to the largest part with M4 screws and nuts.\\ 
-  * Define Down —> ''To point'': move the arm down until the drill is just a bit below the bottom of the wooden plate. This is how deep we will drill. +Attach the largest part to the tool changer with 4 M5x16 low profile bolts and 4 M4 nuts
-  * Define Up —> ''From point'': set to the bottom position of the drill operation. This is where our retract move will start+
-  * Define Up —> ''To point'': set to the position of ''approach''. This is the end of our retract move. +
-  * Define ''Exit'': set to the position of ''approach''+
  
  
-==== Define the pattern ====+=== Applications ===
  
 +  * [[:ur10_robot_arm:Drilling holes in a grid]]
  
  • ur10_robot_arm/ur10_robot_arm.1596549418.txt.gz
  • Last modified: 2020/08/04 06:56
  • by formlab