<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Posts on ONE Robotics Company | FANUC Robot Programming</title>
		<link>https://www.onerobotics.com/posts/</link>
		<description>Recent content in Posts on ONE Robotics Company | FANUC Robot Programming</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Tue, 01 Sep 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://www.onerobotics.com/posts/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Lock operators out of the HMI Forge editor with FANUC Password Protection (J541)</title>
				<link>https://www.onerobotics.com/posts/2026/lock-operators-out-of-the-hmi-forge-editor-with-fanuc-password-protection/</link>
				<pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2026/lock-operators-out-of-the-hmi-forge-editor-with-fanuc-password-protection/</guid>
				<description>&lt;p&gt;Locking down the teach pendant or Tablet TP is a good idea. I&amp;rsquo;ve known well-meaning operators and technicians&#xA;who &amp;ldquo;tweak things in&amp;rdquo; while actually causing the system to degrade over time. The solution: lock&#xA;everything down with FANUC&amp;rsquo;s Password Protection (J541) option.&lt;/p&gt;&#xA;&lt;p&gt;I recorded a quick video showing how you can easily jump-start your Password Protection configuration with HMI Forge.&lt;/p&gt;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;&#x9;&#x9;&#x9;&lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;lazy&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube-nocookie.com/embed/CTAyM5F5EtY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;Generating a FANUC Password Protection configuration with HMI Forge&#34;&gt;&lt;/iframe&gt;&#xA;&#x9;&#x9;&lt;/div&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;no-j541-theres-a-built-in-lock&#34;&gt;No J541? There&amp;rsquo;s a built-in lock&lt;/h2&gt;&#xA;&lt;picture&gt;&#xA;    &lt;source type=&#34;image/webp&#34; srcset=&#34;https://www.onerobotics.com/img/hmi-forge-password-protection/lock_hu_800aabefffed38cc.webp&#34;&gt;&#xA;    &lt;img src=&#34;https://www.onerobotics.com/img/hmi-forge-password-protection/lock.png&#34; alt=&#34;HMI Forge Lock Panel&#34; width=&#34;439&#34; height=&#34;531&#34; loading=&#34;lazy&#34;&gt;&#xA;  &lt;/picture&gt;&#xA;&lt;p&gt;HMI Forge has its own lock feature so you can set a password on the editor and prevent unintended changes, but&#xA;if you want more control over who can change what, J541 is the answer.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Recreating FANUC&#39;s Custom HMI in 5 Minutes - No Code</title>
				<link>https://www.onerobotics.com/posts/2026/recreating-fanucs-custom-hmi-in-5-minutes-no-code/</link>
				<pubDate>Tue, 30 Jun 2026 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2026/recreating-fanucs-custom-hmi-in-5-minutes-no-code/</guid>
				<description>&lt;p&gt;FANUC created a demo a couple years ago to showcase the CR-35iB and their plugin SDK.&#xA;They basically have a custom HMI with several screens telling the operator what to do for&#xA;each step in the process. It probably took a developer who&amp;rsquo;s comfortable with HTML, CSS, JavaScript&#xA;and the plugin SDK toolchain at least a few hours to create this. We can recreate this with &lt;a href=&#34;https://hmiforge.onerobotics.com&#34;&gt;HMI Forge&lt;/a&gt; in&#xA;~5 minutes, no code.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Simplifying Robotics: Mastering FANUC CRX Plugins and Timeline Editor</title>
				<link>https://www.onerobotics.com/posts/2024/simplifying-robotics-mastering-fanuc-crx-plugins-and-timeline-editor/</link>
				<pubDate>Mon, 13 May 2024 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2024/simplifying-robotics-mastering-fanuc-crx-plugins-and-timeline-editor/</guid>
				<description>&lt;h2 id=&#34;fanuc-crx-robots-and-the-timeline-editor&#34;&gt;FANUC CRX Robots and the Timeline Editor&lt;/h2&gt;&#xA;&lt;p&gt;I contend that programming FANUC robots is easy and can be learned quickly. But what if the idea of writing code is too intimidating or you just don&amp;rsquo;t have time?&lt;/p&gt;&#xA;&lt;p&gt;Wouldn&amp;rsquo;t it be great if you could make the robot do a job without writing a single line of code?&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s the idea behind FANUC&amp;rsquo;s new(ish) timeline editor for &lt;a href=&#34;https://crx.fanucamerica.com&#34;&gt;CRX robots&lt;/a&gt;. You basically program the robot by dropping functional blocks onto a timeline. My two-year old could figure it out.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Asynchronous Part-Presence Checking (When the Robots are Too Fast)</title>
				<link>https://www.onerobotics.com/posts/2021/asynchronous-part-presence-checking/</link>
				<pubDate>Tue, 10 Aug 2021 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2021/asynchronous-part-presence-checking/</guid>
				<description>&lt;p&gt;I’ve spent a lot of time working on high-speed line tracking (iRPickTool) applications. When I first started working on them back in 2008, throughputs around 100 cycles per minute were really pushing the envelope (but this was when FANUC’s flagship high-speed picking robot was the M-430iA).&lt;/p&gt;&#xA;&lt;p&gt;Since then FANUC has introduced a number of &lt;a href=&#34;https://en.wikipedia.org/wiki/Delta_robot&#34;&gt;Delta robots&lt;/a&gt;: the &lt;a href=&#34;https://www.fanucamerica.com/products/robots/series/m-1ia-delta-robots&#34;&gt;M-1iA&lt;/a&gt; in 2009, the &lt;a href=&#34;https://www.fanucamerica.com/products/robots/series/m-3ia-delta-robots&#34;&gt;M-3iA&lt;/a&gt; in 2010, the &lt;a href=&#34;https://www.fanucamerica.com/products/robots/series/m-2ia-delta-robots&#34;&gt;M-2iA&lt;/a&gt; in 2013(?) and the &lt;a href=&#34;https://www.fanucamerica.com/products/robots/series/dr-3ib-series-delta-robots&#34;&gt;DR-3iB&lt;/a&gt; in 2019. These robots are much better suited for high-speed picking applications than the articulated M-430iA arm: lighter, faster, better work envelope&amp;ndash; great robots.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Named Variables &amp; Constants for FANUC TP (with Fexcel)</title>
				<link>https://www.onerobotics.com/posts/2021/programming-fanuc-robots-with-variables-and-constants/</link>
				<pubDate>Tue, 03 Aug 2021 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2021/programming-fanuc-robots-with-variables-and-constants/</guid>
				<description>&lt;p&gt;When I first learned to program FANUC robots, I was bothered by the TP programming language. At the time I was using &lt;a href=&#34;https://www.ruby-lang.org/en/&#34;&gt;Ruby&lt;/a&gt; primarily, which, according to the &lt;a href=&#34;https://www.ruby-lang.org/en/&#34;&gt;official website&lt;/a&gt;, &amp;ldquo;has an elegant syntax that is natural to read and easy to write.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;I was annoyed that I had to manage my own memory locations for numbers, positions, I/O, etc.&lt;/p&gt;&#xA;&lt;p&gt;Wouldn&amp;rsquo;t it be nice if I could program FANUC robots with Ruby? &amp;hellip;or at least something Ruby-esque?&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to Diagnose FANUC Alarm Codes and Error Codes</title>
				<link>https://www.onerobotics.com/posts/2019/how-to-diagnose-fanuc-alarm-codes-and-error-codes/</link>
				<pubDate>Sun, 17 Nov 2019 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2019/how-to-diagnose-fanuc-alarm-codes-and-error-codes/</guid>
				<description>&lt;p&gt;It’s inevitable. You’re setting up your robot, programming it or running production, and you come across an alarm code that you don’t recognize. What do you do? Call tech support? Google? Read the manuals?&lt;/p&gt;&#xA;&lt;p&gt;Based on some of the questions I’ve seen, I think a lot of people are unaware of the troubleshooting resources available at their fingertips.&lt;/p&gt;&#xA;&lt;p&gt;Your robot probably has a ton of help files and documentation available right on the teach pendant. That eDoc CD that came with your robot is also packed with documentation gold, and there are also a couple of ways to lookup alarms online.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Four Ways to Control FANUC Robots&#39; Speed Override</title>
				<link>https://www.onerobotics.com/posts/2019/four-ways-to-control-fanuc-robots-speed-override/</link>
				<pubDate>Wed, 06 Nov 2019 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2019/four-ways-to-control-fanuc-robots-speed-override/</guid>
				<description>&lt;p&gt;Imagine this: you have a robot that easily keeps up with its task (trust me, these applications do exist!). Like a considerate parent, you allow the robot to run at 70% which still gives it a little time to rest between cycles.&lt;/p&gt;&#xA;&lt;p&gt;But every time you walk by the cell, the teach pendant shows a glaring 100% override. The robot works its ass off for a few seconds and then sits there motionless, waiting for the next part to come down the line.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Refactoring Skip Conditions</title>
				<link>https://www.onerobotics.com/posts/2019/refactoring-skip-conditions/</link>
				<pubDate>Mon, 21 Oct 2019 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2019/refactoring-skip-conditions/</guid>
				<description>&lt;p&gt;In my &lt;a href=&#34;https://www.onerobotics.com/posts/2019/how-to-search-with-a-fanuc-robot-using-skip-conditions/&#34;&gt;last article&lt;/a&gt; we talked about &lt;a href=&#34;https://www.onerobotics.com/posts/2019/how-to-search-with-a-fanuc-robot-using-skip-conditions/&#34;&gt;FANUC’s Skip Conditions&lt;/a&gt;: how they work, where you might use them and why they can be confusing. We also discussed the SkipJump option which may have better semantics.&lt;/p&gt;&#xA;&lt;p&gt;Today I want to use the Skip Condition syntax as an opportunity for refactoring. We’ll work with TP parameters and their corresponding argument registers (&lt;code&gt;AR[]&lt;/code&gt;), side-step some argument register limitations, discuss return values and eventually create a pretty powerful two-stage search algorithm that has high accuracy without sacrificing cycle time.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to Search with a FANUC Robot Using Skip Conditions</title>
				<link>https://www.onerobotics.com/posts/2019/how-to-search-with-a-fanuc-robot-using-skip-conditions/</link>
				<pubDate>Wed, 09 Oct 2019 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2019/how-to-search-with-a-fanuc-robot-using-skip-conditions/</guid>
				<description>&lt;p&gt;Have you ever needed your FANUC robot to search for something and stop when it &amp;ldquo;sees&amp;rdquo; it with some sort of sensor?&lt;/p&gt;&#xA;&lt;p&gt;There are probably 100 ways you could pull this off (macros, background logic, manipulating UOP signals, etc.), but if you’ve been programming FANUC robots for a while, your first thought is probably &amp;ldquo;SKIP CONDITIONS!&amp;rdquo; followed almost immediately by &amp;ldquo;How exactly do those work again? I remember them being kinda weird.&amp;rdquo;&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to RUN FANUC Programs Concurrently with the RUN statement</title>
				<link>https://www.onerobotics.com/posts/2019/how-to-run-fanuc-programs-concurrently-with-the-run-statement/</link>
				<pubDate>Tue, 17 Sep 2019 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2019/how-to-run-fanuc-programs-concurrently-with-the-run-statement/</guid>
				<description>&lt;p&gt;I get emails from time to time about &lt;a href=&#34;https://www.onerobotics.com/fanuc-robot-programming/&#34;&gt;programming FANUC robots&lt;/a&gt;. (Please feel free to reach out!) Every once in a while I get asked about FANUC&amp;rsquo;s multitasking capabilities:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;Can I do multitasking with a FANUC robot?&amp;rdquo;&lt;br&gt;&#xA;&amp;ldquo;How do I run a background task with FANUC?&amp;rdquo;&lt;br&gt;&#xA;&amp;ldquo;How do I run an aux axis independently while the robot is doing other stuff?&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The short answer is yes, but there are a number of options. Which one&amp;rsquo;s appropriate depends on your use-case.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Labeling FANUC Robot IO and Data Directly From Excel</title>
				<link>https://www.onerobotics.com/posts/2019/labeling-fanuc-robot-io-and-data-directly-from-excel/</link>
				<pubDate>Wed, 10 Apr 2019 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2019/labeling-fanuc-robot-io-and-data-directly-from-excel/</guid>
				<description>&lt;p&gt;I remember when I first discovered that FANUC robots had the web-based&#xA;Comment Tool. No longer would I have to endure the pain of trying to mash&#xA;F1 five times just to get the letter &amp;ldquo;E&amp;rdquo;, only to accidentally get &amp;ldquo;F&amp;rdquo; due&#xA;to an extra keypress. I just have to unlock KAREL, head to the robot webpage&#xA;and start commenting away.&lt;/p&gt;&#xA;&lt;p&gt;Better, but still not great.&lt;/p&gt;&#xA;&lt;p&gt;Most of us use Excel spreadsheets to keep track of our robot data, so we still&#xA;have to manually copy things over from the spreadsheet to the robot.&lt;/p&gt;</description>
			</item>
			<item>
				<title>TP Programming With Interfaces</title>
				<link>https://www.onerobotics.com/posts/2019/tp-programming-with-interfaces/</link>
				<pubDate>Sun, 07 Apr 2019 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2019/tp-programming-with-interfaces/</guid>
				<description>&lt;p&gt;I worked on a palletizing project recently that required serialization. In effect, the product must be tracked through every stop of the process:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Product picked&lt;/li&gt;&#xA;&lt;li&gt;Inspection passed&lt;/li&gt;&#xA;&lt;li&gt;Inspection failed&lt;/li&gt;&#xA;&lt;li&gt;Product moving to pallet&lt;/li&gt;&#xA;&lt;li&gt;Product placed on pallet&lt;/li&gt;&#xA;&lt;li&gt;Product dropped&lt;/li&gt;&#xA;&lt;li&gt;Product rejected&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The robot simply sends a Digital Output signal to the PLC when any of these events takes place, and the PLC is responsible for sending signals on to the customer&amp;rsquo;s serialization service.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to Write a FANUC KAREL Logging Utility</title>
				<link>https://www.onerobotics.com/posts/2018/how-to-write-a-fanuc-karel-logging-utility/</link>
				<pubDate>Mon, 29 Oct 2018 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2018/how-to-write-a-fanuc-karel-logging-utility/</guid>
				<description>&lt;p&gt;I received a question via email the other day where someone wanted to know how to log timestamped position data to a file. As luck would have it, I&amp;rsquo;d been meaning to write a post about something like this for quite a while now.&lt;/p&gt;&#xA;&lt;p&gt;This application ends up being a great example that covers a broad range of KAREL programming fundamentals:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;KAREL variables, constants and data types&lt;/li&gt;&#xA;&lt;li&gt;Custom &lt;code&gt;ROUTINE&lt;/code&gt;s&lt;/li&gt;&#xA;&lt;li&gt;String manipulation&lt;/li&gt;&#xA;&lt;li&gt;Bitwise operations&lt;/li&gt;&#xA;&lt;li&gt;TPE parameters&lt;/li&gt;&#xA;&lt;li&gt;Error-checking and the &lt;code&gt;status&lt;/code&gt; convention&lt;/li&gt;&#xA;&lt;li&gt;File operations&lt;/li&gt;&#xA;&lt;li&gt;File pipes (the &lt;code&gt;PIP:&lt;/code&gt; device)&lt;/li&gt;&#xA;&lt;li&gt;Data formatting&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s get started by considering our desired TPE interface. We want to be able to log Position Register (PR) values (X, Y, Z, W, P, R) to a logfile whenever this KAREL program is called from a TP program. For maximum flexibility, let&amp;rsquo;s accept two parameters: one will be an &lt;code&gt;INTEGER&lt;/code&gt; id for the PR we want to log, and the other will be a &lt;code&gt;STRING&lt;/code&gt; filename for the desired logfile.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Teaching Points Backwards</title>
				<link>https://www.onerobotics.com/posts/2018/teaching-points-backwards/</link>
				<pubDate>Thu, 23 Aug 2018 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2018/teaching-points-backwards/</guid>
				<description>&lt;p&gt;I was with a customer earlier this week who needed a little help with one of their robots. It was a simple pick and place application, but for one reason or another, one of its placements had drifted and now the robot was fumbling that drop at overrides over 70%.&lt;/p&gt;&#xA;&lt;p&gt;Pretty simple fix, right? Put the robot in teach, pick up a part and then step it through the place routine. Touch up the drop position when you get there.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Coming Soon</title>
				<link>https://www.onerobotics.com/posts/2017/coming-soon/</link>
				<pubDate>Wed, 18 Jan 2017 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2017/coming-soon/</guid>
				<description>&lt;p&gt;I wasn&amp;rsquo;t great about blogging in 2016, but I did ship a few things:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A new site design that was long overdue.&lt;/li&gt;&#xA;&lt;li&gt;Several blog posts, most notably a guide to &lt;a href=&#34;https://www.onerobotics.com/posts/2016/starting-fanuc-robots-in-auto/&#34;&gt;starting FANUC robots in AUTO&lt;/a&gt;, &lt;a href=&#34;https://www.onerobotics.com/posts/2016/using-karel-pipe-files/&#34;&gt;a guide on using pipes in KAREL&lt;/a&gt; and &lt;a href=&#34;https://www.onerobotics.com/posts/2016/hash-table-implementation-for-fanuc-karel/&#34;&gt;an open source hash table implementation for KAREL&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Several updates to &lt;a href=&#34;https://github.com/onerobotics/KUnit&#34;&gt;KUnit&lt;/a&gt;, a unit testing framework for KAREL. With a proper development environment, you can test your KAREL libraries from the comfort of your command console.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;On a personal note, my wife and I got a dog, bought our first house, and our first child could come any day now.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Embrace the END Statement</title>
				<link>https://www.onerobotics.com/posts/2016/embrace-the-end-statement/</link>
				<pubDate>Mon, 07 Nov 2016 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2016/embrace-the-end-statement/</guid>
				<description>&lt;p&gt;What do you think this line of code does?&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;code class=&#34;language-tp&#34; data-lang=&#34;tp&#34;&gt;&lt;span class=hl-ins&gt;JMP&lt;/span&gt; &lt;span class=hl-lbl&gt;LBL&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;9999&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve been programming FANUC robots for a while, you probably guessed that this statement jumps to the end of the program. It comes in many variants: &lt;code&gt;JMP LBL[999]&lt;/code&gt;, &lt;code&gt;JMP LBL[10000]&lt;/code&gt;, etc., but the intent is almost always the same: end this routine.&lt;/p&gt;&#xA;&lt;p&gt;The problem is that there&amp;rsquo;s no guarantee that &lt;code&gt;LBL[9999]&lt;/code&gt; or &lt;code&gt;LBL[10000]&lt;/code&gt; or whatever actually ends the routine. That label may not even exist. You may be reasonably sure as to what will happen if &lt;strong&gt;you&lt;/strong&gt; wrote the program, but I&amp;rsquo;m willing to bet that someday your &lt;code&gt;LBL[10000]&lt;/code&gt; won&amp;rsquo;t be the last line of your routine.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Using KAREL Pipe Files</title>
				<link>https://www.onerobotics.com/posts/2016/using-karel-pipe-files/</link>
				<pubDate>Fri, 28 Oct 2016 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2016/using-karel-pipe-files/</guid>
				<description>&lt;p&gt;I&amp;rsquo;m currently working on a project where two separate tasks need to pass data to eachother. How do we do that in KAREL? Enter the pipe &lt;code&gt;PIP:&lt;/code&gt; device.&lt;/p&gt;&#xA;&lt;p&gt;The concept of a pipe has been around since the early 1970s, originating as a crucial part of the Unix operating system. Pipes simply provide a mechanism for data to travel from one process to another.&lt;/p&gt;&#xA;&lt;p&gt;While the KAREL manual does a pretty good job of describing how pipes work and how to use them, I ran into a couple of issues while implementing the provided example. Here&amp;rsquo;s a quick tutorial showing some of the issues I dealt with along with a &lt;strong&gt;working&lt;/strong&gt; example of how to use KAREL pipes.&lt;/p&gt;</description>
			</item>
			<item>
				<title>FANUC UOP Signals &amp; Starting Robots in AUTO Mode (2026 Guide)</title>
				<link>https://www.onerobotics.com/posts/2016/starting-fanuc-robots-in-auto/</link>
				<pubDate>Tue, 18 Oct 2016 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2016/starting-fanuc-robots-in-auto/</guid>
				<description>&lt;p&gt;You&amp;rsquo;ve finished &lt;a href=&#34;https://www.onerobotics.com/fanuc-robot-programming/&#34;&gt;programming your FANUC robot&lt;/a&gt;, tested it in T1, and now you want to run it faster. If you&amp;rsquo;re like me, you sometimes forget the details on Remote vs. Local, UOP signals and the different startup types available (RSR, PNS, Style, Other). For your (and my own) reference, here&amp;rsquo;s a quick guide on how to get things running.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; If you like this post and are interested in the programming side of things, be sure to check out my &lt;a href=&#34;https://www.onerobotics.com/robot-whispering/&#34;&gt;book on programming FANUC robots&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hash Table Implementation for FANUC KAREL</title>
				<link>https://www.onerobotics.com/posts/2016/hash-table-implementation-for-fanuc-karel/</link>
				<pubDate>Tue, 04 Oct 2016 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2016/hash-table-implementation-for-fanuc-karel/</guid>
				<description>&lt;p&gt;I was working on a KAREL project the other day where I really wanted to use an &lt;a href=&#34;https://en.wikipedia.org/wiki/Associative_array&#34;&gt;associative array&lt;/a&gt; to store some &lt;code&gt;key =&amp;gt; value&lt;/code&gt; pairs. While a &lt;code&gt;STRUCT&lt;/code&gt; would be appropriate if my keys were known ahead of time, there&amp;rsquo;s no data type for mapping unknown keys to values&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&amp;hellip;so I built a &lt;a href=&#34;https://en.wikipedia.org/wiki/Hash_table&#34;&gt;hash table&lt;/a&gt; implementation that you can use in your own KAREL programs. The source is available here: &lt;a href=&#34;https://github.com/onerobotics/hash&#34;&gt;https://github.com/onerobotics/hash&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Usage is documented in the &lt;a href=&#34;https://github.com/onerobotics/hash/blob/master/README.md&#34;&gt;README&lt;/a&gt;, but I thought it might be interesting/useful to talk a bit about what&amp;rsquo;s going on behind the scenes.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Isolate Your Wait Statements</title>
				<link>https://www.onerobotics.com/posts/2016/isolate-your-wait-statements/</link>
				<pubDate>Wed, 21 Sep 2016 20:25:24 -0500</pubDate>
				<guid>https://www.onerobotics.com/posts/2016/isolate-your-wait-statements/</guid>
				<description>&lt;p&gt;Have you ever looked at a TP program and gotten lost following all the &lt;code&gt;LBL&lt;/code&gt;s and &lt;code&gt;JMP&lt;/code&gt;s? Have you ever gotten lazy handling your &lt;code&gt;WAIT&lt;/code&gt;-statement &lt;code&gt;TIMEOUT&lt;/code&gt;s because you didn&amp;rsquo;t want to bother adding the extra stuff to your main routine?&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re nodding &amp;ldquo;yes&amp;rdquo; right now, you should try isolating your &lt;code&gt;WAIT&lt;/code&gt;-statements into their own &lt;a href=&#34;https://www.onerobotics.com/posts/2015/small-programs/&#34;&gt;small programs&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In my eight-plus years of programming robots and troubleshooting other people&amp;rsquo;s code, I&amp;rsquo;ve found that a mess of labels and lack of refactoring large programs into smaller routines is the &lt;strong&gt;single biggest cause of issues&lt;/strong&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Smart Payloads</title>
				<link>https://www.onerobotics.com/posts/2016/smart-payloads/</link>
				<pubDate>Tue, 20 Sep 2016 15:16:20 -0500</pubDate>
				<guid>https://www.onerobotics.com/posts/2016/smart-payloads/</guid>
				<description>&lt;p&gt;My last project was a machine load/unload application where the robot had two basically identical grippers. Either gripper could be used to load or unload any station. Here&amp;rsquo;s how I handled the payload switching and grip/ungrip logic in the load/unload programs.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Small Programs</title>
				<link>https://www.onerobotics.com/posts/2015/small-programs/</link>
				<pubDate>Sat, 19 Sep 2015 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2015/small-programs/</guid>
				<description>&lt;p&gt;FANUC&amp;rsquo;s TP programming environment is great for creating simple programs&#xA;quickly. From the comfort of your teach pendant, you can record a few&#xA;points, turn a few bits on and off and have a fully functional demo&#xA;within a few minutes. However, as soon as you have to add some real&#xA;intelligence to your robot, you&amp;rsquo;ll quickly find the editor to be&#xA;cumbersome and slow.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve already written about &lt;a href=&#34;https://www.onerobotics.com/posts/2014/writing-tp-programs-by-hand---pros-and-cons/&#34;&gt;how I write my TP programs by&#xA;hand&lt;/a&gt;, but&#xA;here&amp;rsquo;s a quick trick I&amp;rsquo;ve been using to make my development faster and&#xA;my programs a little easier to understand: tiny programs. I&amp;rsquo;m talking&#xA;really small, like one or two lines.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Programming Multiple Robot Systems Effectively</title>
				<link>https://www.onerobotics.com/posts/2015/programming-multiple-robot-systems-effectively/</link>
				<pubDate>Fri, 03 Apr 2015 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2015/programming-multiple-robot-systems-effectively/</guid>
				<description>&lt;p&gt;When dealing with multiple robot systems, I usually find that&#xA;maintaining consistency from robot-to-robot is usually the most&#xA;difficult part. Simply getting backups of all your robots can be a pain&#xA;if you don&amp;rsquo;t have &lt;a href=&#34;https://www.onerobotics.com/apps/fanuc_robot_backup_tool/&#34;&gt;the right tool for the job&lt;/a&gt;. If you&amp;rsquo;re using&#xA;Windows (you probably are), just a little knowledge of the command line&#xA;and the &lt;code&gt;ftp&lt;/code&gt; utility will make your life a lot easier.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-command-prompt&#34;&gt;The Command Prompt&lt;/h2&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve never used the Windows command prompt before, read &lt;a href=&#34;http://www.cs.princeton.edu/courses/archive/spr05/cos126/cmd-prompt.html&#34;&gt;this quick&#xA;intro from the Princeton CS department&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>TP&#43; is Open Source</title>
				<link>https://www.onerobotics.com/posts/2015/tp-plus-is-open-source/</link>
				<pubDate>Sat, 14 Mar 2015 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2015/tp-plus-is-open-source/</guid>
				<description>&lt;p&gt;This post is about 6 weeks overdue, but &lt;a href=&#34;https://github.com/onerobotics/tp_plus&#34;&gt;the full TP+ source&#xA;code&lt;/a&gt; is now available on GitHub. I&amp;rsquo;ve already accepted some&#xA;improvements from &lt;a href=&#34;http://groupsixtech.com/&#34;&gt;Group Six Technologies Inc&lt;/a&gt;, and I&amp;rsquo;m happy to&#xA;accept more.&lt;/p&gt;&#xA;&lt;p&gt;TP+ should still likely be considered beta software, but feel free to&#xA;play around with it in the comfort of your own console (instead of the&#xA;&lt;a href=&#34;http://tp-plus.herokuapp.com/&#34;&gt;demo site&lt;/a&gt;). Please give it a try and let me know what you think!&lt;/p&gt;</description>
			</item>
			<item>
				<title>Review of 2014</title>
				<link>https://www.onerobotics.com/posts/2015/review-of-2014/</link>
				<pubDate>Sat, 03 Jan 2015 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2015/review-of-2014/</guid>
				<description>&lt;p&gt;2014 was a great year for the blog despite my apparent inability to&#xA;write past late August. As a light reintroduction to the sport of&#xA;blogging, I figured it would be useful to highlight some of the most&#xA;popular, overlooked and (I think) cool posts from last year in addition&#xA;to some stats I find interesting.&lt;/p&gt;&#xA;&lt;h1 id=&#34;most-popular-posts-of-2014&#34;&gt;Most Popular Posts of 2014&lt;/h1&gt;&#xA;&lt;p&gt;Though technically posted in 2013, my &lt;a href=&#34;https://www.onerobotics.com/posts/2013/introduction-to-karel-programming/&#34;&gt;Introduction to KAREL Programming&lt;/a&gt; was by far the most popular post on the blog.&#xA;It seems there are a lot of people interested in learning KAREL! I have&#xA;a few ideas as to why:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Line Tracking - How Does it Work?</title>
				<link>https://www.onerobotics.com/posts/2014/line-tracking-how-does-it-work/</link>
				<pubDate>Sat, 23 Aug 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/line-tracking-how-does-it-work/</guid>
				<description>&lt;p&gt;After a little digging into my records, I found that nearly 60% of the&#xA;projects I&amp;rsquo;ve been involved with over the last three years have used&#xA;vision and/or line tracking. It seems like integrators and end-users&#xA;tend to need more help when using these options. If they&amp;rsquo;re lucky, they&#xA;may have been trained by an expert somewhere, but they&amp;rsquo;re often stuck&#xA;with just a manual (if they&amp;rsquo;re that lucky) to try and fix some pretty&#xA;obscure bugs. A thorough understanding of how each piece of the stack&#xA;fits together really helps these projects go a lot more smoothly. This&#xA;post is on line tracking, but I&amp;rsquo;ll cover vision and how it fits into&#xA;line tracking in future posts.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to Use BG Logic to Simplify Your TP Programs</title>
				<link>https://www.onerobotics.com/posts/2014/use-bg-logic-to-simplify-your-tp-programs/</link>
				<pubDate>Sun, 27 Jul 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/use-bg-logic-to-simplify-your-tp-programs/</guid>
				<description>&lt;p&gt;TP programs should be readable. If an operator can step through the code&#xA;and understand it, you might be able to avoid a phone call when the&#xA;robot inevitably misbehaves. Lately I&amp;rsquo;ve been simplifying complex&#xA;conditionals into unique flags to keep my programs short and simple.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s say you have an application where the robot needs to unload one&#xA;machine and then load another machine. The part out of machine 1 is hot&#xA;so you want to wait until both machines are ready before unloading the&#xA;first machine. You might have a line of code that looks like this:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Polish</title>
				<link>https://www.onerobotics.com/posts/2014/polish/</link>
				<pubDate>Sun, 20 Jul 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/polish/</guid>
				<description>&lt;p&gt;Programming FANUC robots is easy. Giving the robots enough intelligence&#xA;to run safely and reliably in just about any failure scenario is the&#xA;hard part.&lt;/p&gt;&#xA;&lt;p&gt;This is where many integrators get into trouble. They don&amp;rsquo;t plan enough&#xA;programming time on the front-end so that they are forced to add polish&#xA;on the production floor. If your FAT is just a day or two away and your&#xA;code isn&amp;rsquo;t sprinkled with all sorts of (hopefully rarely used but&#xA;thoroughly tested) error recovery routines, you&amp;rsquo;re in trouble.&lt;/p&gt;</description>
			</item>
			<item>
				<title>When to use Tool Offsets vs. Frame Offsets</title>
				<link>https://www.onerobotics.com/posts/2014/when-to-use-tool-offsets-vs-frame-offsets/</link>
				<pubDate>Fri, 04 Jul 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/when-to-use-tool-offsets-vs-frame-offsets/</guid>
				<description>&lt;p&gt;I used to be a frame offset (PR Offset) guy almost 100% of the time. Assuming&#xA;you are &lt;a href=&#34;https://www.onerobotics.com/posts/2013/uframes-and-utools/&#34;&gt;using accurate UFRAMEs and UTOOLs&lt;/a&gt;,&#xA;this should get you pretty far in material handling. However, once&#xA;things stop being perfect and your tolerances start getting really&#xA;tight, you might be better off using tool offsets in your pick and place&#xA;situations.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;code class=&#34;language-tp&#34; data-lang=&#34;tp&#34;&gt;&lt;span class=hl-cname&gt;&lt;span class=hl-ins&gt;UTOOL_NUM&lt;/span&gt;&lt;/span&gt;&lt;span class=hl-op&gt;=&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-rem&gt;! pick product from fixture 1 ;&lt;/span&gt;&#xA;&lt;span class=hl-cname&gt;&lt;span class=hl-ins&gt;UFRAME_NUM&lt;/span&gt;&lt;/span&gt;&lt;span class=hl-op&gt;=&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-ins&gt;L&lt;/span&gt; &lt;span class=hl-reg&gt;P&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-cname&gt;:pick&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-num&gt;1000&lt;/span&gt;&lt;span class=hl-unit&gt;mm&lt;/span&gt;/s &lt;span class=hl-ins&gt;CNT&lt;/span&gt;&lt;span class=hl-num&gt;100&lt;/span&gt; Offset&lt;span class=hl-pun&gt;,&lt;/span&gt;&lt;span class=hl-reg&gt;PR&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-cname&gt;:pick approach&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-ins&gt;L&lt;/span&gt; &lt;span class=hl-reg&gt;P&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-cname&gt;:pick&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-num&gt;250&lt;/span&gt;&lt;span class=hl-unit&gt;mm&lt;/span&gt;/s &lt;span class=hl-ins&gt;CNT&lt;/span&gt;&lt;span class=hl-num&gt;0&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-ins&gt;CALL&lt;/span&gt; &lt;span class=hl-prog&gt;GRIP&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-ins&gt;L&lt;/span&gt; &lt;span class=hl-reg&gt;P&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-cname&gt;:pick&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-num&gt;500&lt;/span&gt;&lt;span class=hl-unit&gt;mm&lt;/span&gt;/s &lt;span class=hl-ins&gt;CNT&lt;/span&gt;&lt;span class=hl-num&gt;100&lt;/span&gt; Offset&lt;span class=hl-pun&gt;,&lt;/span&gt;&lt;span class=hl-reg&gt;PR&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;2&lt;/span&gt;&lt;span class=hl-cname&gt;:pick retreat&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-rem&gt;! place product on fixture 2 ;&lt;/span&gt;&#xA;&lt;span class=hl-cname&gt;&lt;span class=hl-ins&gt;UFRAME_NUM&lt;/span&gt;&lt;/span&gt;&lt;span class=hl-op&gt;=&lt;/span&gt;&lt;span class=hl-num&gt;2&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-ins&gt;L&lt;/span&gt; &lt;span class=hl-reg&gt;P&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;2&lt;/span&gt;&lt;span class=hl-cname&gt;:place&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-num&gt;1000&lt;/span&gt;&lt;span class=hl-unit&gt;mm&lt;/span&gt;/s &lt;span class=hl-ins&gt;CNT&lt;/span&gt;&lt;span class=hl-num&gt;100&lt;/span&gt; Offset&lt;span class=hl-pun&gt;,&lt;/span&gt; &lt;span class=hl-reg&gt;PR&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;3&lt;/span&gt;&lt;span class=hl-cname&gt;:place approach&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-ins&gt;L&lt;/span&gt; &lt;span class=hl-reg&gt;P&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;2&lt;/span&gt;&lt;span class=hl-cname&gt;:place&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-num&gt;250&lt;/span&gt;&lt;span class=hl-unit&gt;mm&lt;/span&gt;/s &lt;span class=hl-ins&gt;CNT&lt;/span&gt;&lt;span class=hl-num&gt;0&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-ins&gt;CALL&lt;/span&gt; &lt;span class=hl-prog&gt;UNGRIP&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-ins&gt;L&lt;/span&gt; &lt;span class=hl-reg&gt;P&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;2&lt;/span&gt;&lt;span class=hl-cname&gt;:place&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-num&gt;500&lt;/span&gt;&lt;span class=hl-unit&gt;mm&lt;/span&gt;/s &lt;span class=hl-ins&gt;CNT&lt;/span&gt;&lt;span class=hl-num&gt;100&lt;/span&gt; Offset&lt;span class=hl-pun&gt;,&lt;/span&gt;&lt;span class=hl-reg&gt;PR&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;4&lt;/span&gt;&lt;span class=hl-cname&gt;:place retreat&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;This works great when you can approach and retreat from your fixtures in&#xA;an orthogonal or parallel direction, but what happens when your part&#xA;doesn&amp;rsquo;t sit quite perfectly in the fixture? What if your user frame&#xA;isn&amp;rsquo;t perfectly accurate? Time to use a tool offset.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Writing TP Programs by Hand - Pros and Cons</title>
				<link>https://www.onerobotics.com/posts/2014/writing-tp-programs-by-hand---pros-and-cons/</link>
				<pubDate>Sat, 07 Jun 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/writing-tp-programs-by-hand---pros-and-cons/</guid>
				<description>&lt;p&gt;FANUC&amp;rsquo;s TP programming language and the teach pendant&amp;rsquo;s built-in editor&#xA;are great tools. They allow relatively novice programmers to get up and&#xA;running very quickly. Teach a couple points, throw in a couple labels&#xA;and &lt;code&gt;IF&lt;/code&gt; statements, and you&amp;rsquo;re off to the races. However, anyone who&amp;rsquo;s&#xA;tried to do anything a bit more complex quickly realizes how cumbersome&#xA;programming on the teach pendant is. Navigating through multiple levels&#xA;of menus to find the &lt;code&gt;PAYLOAD&lt;/code&gt; instruction or creating an extensive&#xA;mixed-logic conditional is really painful. At this point many&#xA;programmers switch to programming &lt;code&gt;.LS&lt;/code&gt; files by hand.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Backup Tool for FANUC Robots</title>
				<link>https://www.onerobotics.com/posts/2014/backup-tool-for-fanuc-robots/</link>
				<pubDate>Wed, 04 Jun 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/backup-tool-for-fanuc-robots/</guid>
				<description>&lt;p&gt;The process of sticking PCMCIA memory cards (or now USB sticks) into&#xA;each one of your controllers, going to the FILE menu, creating directories,&#xA;Backup &amp;gt; All of the above, etc. is a huge pain. I felt this pain very&#xA;sharply when working on an 18-robot line years ago.&lt;/p&gt;&#xA;&lt;p&gt;BackupTool allows you to concurrently backup all the robots on your&#xA;project to your PC with a single command.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.onerobotics.com/apps/BackupTool/demo.gif&#34; alt=&#34;demo&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strike&gt;Download BackupTool v0.0.1 for Windows 64-bit&lt;/strike&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Robot Work Envelope Considerations</title>
				<link>https://www.onerobotics.com/posts/2014/robot-work-envelope-considerations/</link>
				<pubDate>Sat, 17 May 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/robot-work-envelope-considerations/</guid>
				<description>&lt;p&gt;Put your robot in a good spot or suffer the consequences. It may seem&#xA;obvious, but the best programming in the world may not be able to save a&#xA;system where the robot has to struggle to get from point A to point B.&lt;/p&gt;&#xA;&lt;h2 id=&#34;palletizing&#34;&gt;Palletizing&lt;/h2&gt;&#xA;&lt;p&gt;One of the first problems I had to solve as the newly appointed M-410iB&#xA;product manager back in 2008 was where both an end-user and an&#xA;integrator were blaming FANUC for overheat and throughput problems. &amp;ldquo;You&#xA;claimed that this robot could do 28 bags per minute,&amp;rdquo; the integrator&#xA;exclaimed. &amp;ldquo;We can barely do 20 without getting J2 overheats. We bought&#xA;the fan kit and everything&amp;hellip; this must be a faulty robot.&amp;rdquo;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Visual Line Tracking is Hard</title>
				<link>https://www.onerobotics.com/posts/2014/visual-line-tracking-is-hard/</link>
				<pubDate>Sat, 26 Apr 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/visual-line-tracking-is-hard/</guid>
				<description>&lt;p&gt;I spent last week helping an end-user with their two-robot visual line&#xA;tracking system. As far as systems like these go, this one&amp;rsquo;s pretty&#xA;simple: just two robots, one backlit conveyor, one camera and basically&#xA;one product. The entire codebase comes in well under a thousand lines.&#xA;We had issues that were hard to solve despite the simplicity. What&#xA;follows is my process while debugging several common visual tracking&#xA;errors.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Simulating TP Programs in the Browser with tp.js</title>
				<link>https://www.onerobotics.com/posts/2014/simulating-tp-programs-in-the-browser-with-tp-js/</link>
				<pubDate>Sat, 19 Apr 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/simulating-tp-programs-in-the-browser-with-tp-js/</guid>
				<description>&lt;p&gt;Last week I wrote about &lt;a href=&#34;https://www.onerobotics.com/posts/2014/testing-fanuc-tp-programs-with-ruby/&#34;&gt;Testing TP Programs with Ruby&lt;/a&gt;,&#xA;but you had to trust that I wasn&amp;rsquo;t just making things up. Over the past&#xA;few days I&amp;rsquo;ve ported most of my work into a JavaScript library so you&#xA;can actually see TP programs running directly in your web browser.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s cut to the chase and do an example. I&amp;rsquo;ve written a simple TP&#xA;program below that performs a few basic functions like numeric register&#xA;assignment, conditional evaluation, jumping to a label and linear&#xA;motion. Next to the program, I&amp;rsquo;ve created a simple debugger which gives&#xA;you some insight into how the program is running and what&amp;rsquo;s happening to&#xA;the numeric register.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Testing FANUC TP Programs with Ruby</title>
				<link>https://www.onerobotics.com/posts/2014/testing-fanuc-tp-programs-with-ruby/</link>
				<pubDate>Sat, 12 Apr 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/testing-fanuc-tp-programs-with-ruby/</guid>
				<description>&lt;p&gt;I&amp;rsquo;ve &lt;a href=&#34;https://www.onerobotics.com/tags/testing/&#34;&gt;written about testing before&lt;/a&gt;, but I still can&amp;rsquo;t&#xA;get over the fact that the state of the art method for testing&#xA;multi-million dollar industrial robot cells is trial and error. That&amp;rsquo;s&#xA;why I&amp;rsquo;ve started working on an environment for reliably testing FANUC&#xA;TP code.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve basically written a &lt;a href=&#34;https://www.ruby-lang.org/en/&#34;&gt;Ruby&lt;/a&gt; &lt;a href=&#34;http://guides.rubygems.org/what-is-a-gem/&#34;&gt;gem&lt;/a&gt; to correctly parse, interpret&#xA;and execute TP programs within a simulated runtime. With this&#xA;environment I can use any of Ruby&amp;rsquo;s great testing tools to make sure the&#xA;robot does what it&amp;rsquo;s supposed to do.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Building a Robot from Scratch</title>
				<link>https://www.onerobotics.com/posts/2014/building-a-robot-from-scratch/</link>
				<pubDate>Sat, 05 Apr 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/building-a-robot-from-scratch/</guid>
				<description>&lt;p&gt;Robotics as an engineering science is about as multi-disciplinary as&#xA;it gets. There&amp;rsquo;s electronics, motion control, hardware, dynamics,&#xA;kinematics, user interface, and a whole slew of other very complicated&#xA;components that eventually create a useful robot. As a contract&#xA;programmer, I usually only touch the high-level software side. However,&#xA;with a few weeks to myself recently, I&amp;rsquo;ve been taking steps to more&#xA;fully understand the rest of the picture.&lt;/p&gt;&#xA;&lt;p&gt;Fair warning: this post is a little different from the ones I&amp;rsquo;ve written&#xA;so far. It&amp;rsquo;s not terribly practical or immediately relevant to&#xA;programming robots so feel free to move along. However, if you&amp;rsquo;re&#xA;interested in the steps I&amp;rsquo;m taking to ultimately build my own completely&#xA;functional robot arm from scratch, read on. (There might even be &lt;a href=&#34;#making&#34;&gt;some pretty&#xA;pictures&lt;/a&gt; towards the end.)&lt;/p&gt;</description>
			</item>
			<item>
				<title>Never Trust an Operator</title>
				<link>https://www.onerobotics.com/posts/2014/never-trust-an-operator/</link>
				<pubDate>Sat, 08 Mar 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/never-trust-an-operator/</guid>
				<description>&lt;p&gt;Programming robots can seem easy. You can get a robot moving around for&#xA;a quick video demo in minutes. Even a tradeshow cell that needs to run&#xA;perfectly for a day at a time isn&amp;rsquo;t too bad because the environment is&#xA;controlled. Once you give up that control and hit the factory floor,&#xA;however, the game changes. Here we have to validate everything,&#xA;double-check it all and keep the robot safe when it gets misinformation.&lt;/p&gt;</description>
			</item>
			<item>
				<title>KAREL syntax highlighting for vim</title>
				<link>https://www.onerobotics.com/posts/2014/karel-syntax-highlighting-for-vim/</link>
				<pubDate>Mon, 03 Mar 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/karel-syntax-highlighting-for-vim/</guid>
				<description>&lt;p&gt;I just open-sourced my &lt;a href=&#34;https://github.com/onerobotics/vim-karel&#34;&gt;KAREL syntax highlighting plugin for vim&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introducing KUnit: a simple unit testing framework for FANUC&#39;s KAREL programming language</title>
				<link>https://www.onerobotics.com/posts/2014/introducing-kunit-a-simple-unit-testing-framework-for-fanuc-s-karel-programming-language/</link>
				<pubDate>Sat, 01 Mar 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/introducing-kunit-a-simple-unit-testing-framework-for-fanuc-s-karel-programming-language/</guid>
				<description>&lt;p&gt;I&amp;rsquo;m happy to share a real open source project that I&amp;rsquo;ve been working on:&#xA;KUnit. The source code is available on GitHub:&#xA;&lt;a href=&#34;https://github.com/onerobotics/KUnit&#34;&gt;https://github.com/onerobotics/KUnit&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Coming from a &lt;a href=&#34;https://www.ruby-lang.org/en/&#34;&gt;Ruby&lt;/a&gt; background where&#xA;automated unit testing is common-practice, it&amp;rsquo;s frustrating to come work&#xA;on a robot where tools for automated testing don&amp;rsquo;t exist. No matter how&#xA;careful I am when making changes to my code, I always feel a little bit&#xA;exposed without a comprehensive set of unit tests making sure I didn&amp;rsquo;t&#xA;break something. I haven&amp;rsquo;t come up with a solution for automating TP&#xA;program testing, but here&amp;rsquo;s a tool you can use to make sure your KAREL&#xA;programs are doing what they are supposed to do.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Keep it Running</title>
				<link>https://www.onerobotics.com/posts/2014/keep-it-running/</link>
				<pubDate>Sat, 22 Feb 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/keep-it-running/</guid>
				<description>&lt;p&gt;Any automated system is crippled when it requires human intervention.&#xA;One of our goals then as programmers should be to eliminate as much&#xA;human intervention as possible. I&amp;rsquo;ve found that simply changing many&#xA;check conditions to short &lt;code&gt;WAIT&lt;/code&gt; statements results in fewer alarms and&#xA;therefore less operator intervention and more productivity.&lt;/p&gt;&#xA;&lt;p&gt;Take for example a simple macro to ensure your gripper has correctly&#xA;gripped your part:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;code class=&#34;language-tp&#34; data-lang=&#34;tp&#34;&gt;&lt;span class=hl-rem&gt;! ENSURE_GRIP.LS ;&lt;/span&gt;&#xA;&lt;span class=hl-rem&gt;! ============= ;&lt;/span&gt;&#xA;&lt;span class=hl-lbl&gt;LBL&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-ins&gt;IF&lt;/span&gt; &lt;span class=hl-pun&gt;(&lt;/span&gt;&lt;span class=hl-reg&gt;RI&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-cname&gt;:Grip overtravel&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt;&lt;span class=hl-op&gt;=&lt;/span&gt;&lt;span class=hl-const&gt;OFF&lt;/span&gt; &lt;span class=hl-ins&gt;AND&lt;/span&gt; &lt;span class=hl-reg&gt;RI&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;2&lt;/span&gt;&lt;span class=hl-cname&gt;:Grip open&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt;&lt;span class=hl-op&gt;=&lt;/span&gt;&lt;span class=hl-const&gt;OFF&lt;/span&gt;&lt;span class=hl-pun&gt;)&lt;/span&gt;&lt;span class=hl-pun&gt;,&lt;/span&gt;&lt;span class=hl-ins&gt;JMP&lt;/span&gt; &lt;span class=hl-lbl&gt;LBL&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;999&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-rem&gt;! not gripped ;&lt;/span&gt;&#xA;&lt;span class=hl-reg&gt;UALM&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-ins&gt;JMP&lt;/span&gt; &lt;span class=hl-lbl&gt;LBL&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-lbl&gt;LBL&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;999&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;If those signals aren&amp;rsquo;t perfect at the exact moment you call the&#xA;program, you&amp;rsquo;re going to get a fault. You throw an alarm and call the&#xA;operator over to potentially find the issue has resolved itself. The&#xA;frustrated operator hits resume and gets back to work while the robot&#xA;does the same.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Intelligent Traversing</title>
				<link>https://www.onerobotics.com/posts/2014/intelligent-traversing/</link>
				<pubDate>Sun, 16 Feb 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/intelligent-traversing/</guid>
				<description>&lt;p&gt;I&amp;rsquo;ve been working on several machine-tending applications lately. These&#xA;projects tend to get complicated quickly as the robot decides where to&#xA;go next based on the state of the peripheral equipment. The&#xA;decision-making logic is hard enough, but getting the robot to and from&#xA;each station safely can be tricky. This is how I handle it.&lt;/p&gt;&#xA;&lt;p&gt;I start off by defining a list of stations:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Home&lt;/li&gt;&#xA;&lt;li&gt;Inbound parts&lt;/li&gt;&#xA;&lt;li&gt;Regrip station&lt;/li&gt;&#xA;&lt;li&gt;Machine 1&lt;/li&gt;&#xA;&lt;li&gt;Machine 2&lt;/li&gt;&#xA;&lt;li&gt;Reject station&lt;/li&gt;&#xA;&lt;li&gt;Inspection station&lt;/li&gt;&#xA;&lt;li&gt;Outbound parts&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I then define a register for saving the robot&amp;rsquo;s current location. I&amp;rsquo;ll&#xA;typically also add another register for saving the previous station,&#xA;just in case I need it.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Writing Maintainable TP Code</title>
				<link>https://www.onerobotics.com/posts/2014/writing-maintainable-tp-code/</link>
				<pubDate>Sat, 08 Feb 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/writing-maintainable-tp-code/</guid>
				<description>&lt;p&gt;Continuing with last week&amp;rsquo;s theme of best-practices, I&amp;rsquo;d like to&#xA;discuss what makes certain programs maintainable and others impossible&#xA;to work with. &lt;a href=&#34;https://www.onerobotics.com/posts/2014/dont-jump-around/&#34;&gt;Eliminating as much jumping as&#xA;possible&lt;/a&gt; is a good start,&#xA;but there are a few other rules I always try to follow when working on a&#xA;project.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-keep-programs-short-and-focused&#34;&gt;1. Keep Programs Short and Focused&lt;/h2&gt;&#xA;&lt;p&gt;FANUC&amp;rsquo;s Teach Pendant doesn&amp;rsquo;t have much screen real estate. The default&#xA;editor can only display 11 lines of code (LOC), and you only get 20 in&#xA;the Double or Single Wide modes. That means that if you need to&#xA;troubleshoot a 200 LOC routine on the floor, you can at best only see&#xA;10% of the program at any given time.&lt;/p&gt;</description>
			</item>
			<item>
				<title>TP Syntax Highlighting with Pygments</title>
				<link>https://www.onerobotics.com/posts/2014/tp-syntax-highlighting-with-pygments/</link>
				<pubDate>Sun, 02 Feb 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/tp-syntax-highlighting-with-pygments/</guid>
				<description>&lt;p&gt;You have noticed that the snippets of TP code in my previous posts now&#xA;have pretty colors. I created a &lt;a href=&#34;https://github.com/unreal/pygments.rb&#34;&gt;custom fork of GitHub&amp;rsquo;s pygments.rb&lt;/a&gt;&#xA;that adds a lexer for FANUC TP. I&amp;rsquo;m going to maintain and improve this&#xA;custom fork for a while until the lexer is a bit more complete, then I&#xA;will see about submitting the patch to the &lt;a href=&#34;http://pygments.org/&#34;&gt;official Pygments&#xA;project&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s an example:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;code class=&#34;language-tp&#34; data-lang=&#34;tp&#34;&gt;&lt;span class=hl-ins&gt;/PROG&lt;/span&gt;  &lt;span class=hl-prog&gt;EXAMPLE&lt;/span&gt;&#xA;&lt;span class=hl-ins&gt;/ATTR&lt;/span&gt;&#xA;&lt;span class=hl-cname&gt;OWNER&lt;/span&gt;     &lt;span class=hl-op&gt;=&lt;/span&gt; ASCBIN&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-cname&gt;COMMENT&lt;/span&gt;   &lt;span class=hl-op&gt;=&lt;/span&gt; &#34;Example TP file&#34;&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-cname&gt;PROG_SIZE&lt;/span&gt; &lt;span class=hl-op&gt;=&lt;/span&gt; &lt;span class=hl-num&gt;2651&lt;/span&gt;&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-cname&gt;CREATE&lt;/span&gt;    &lt;span class=hl-op&gt;=&lt;/span&gt; DATE &lt;span class=hl-num&gt;14&lt;/span&gt;&lt;span class=hl-op&gt;-&lt;/span&gt;&lt;span class=hl-num&gt;01&lt;/span&gt;&lt;span class=hl-op&gt;-&lt;/span&gt;&lt;span class=hl-num&gt;02&lt;/span&gt;  TIME &lt;span class=hl-num&gt;10&lt;/span&gt;:&lt;span class=hl-num&gt;12&lt;/span&gt;:&lt;span class=hl-num&gt;44&lt;/span&gt;&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-cname&gt;MODIFIED&lt;/span&gt;  &lt;span class=hl-op&gt;=&lt;/span&gt; DATE &lt;span class=hl-num&gt;14&lt;/span&gt;&lt;span class=hl-op&gt;-&lt;/span&gt;&lt;span class=hl-num&gt;01&lt;/span&gt;&lt;span class=hl-op&gt;-&lt;/span&gt;&lt;span class=hl-num&gt;02&lt;/span&gt;  TIME &lt;span class=hl-num&gt;10&lt;/span&gt;:&lt;span class=hl-num&gt;12&lt;/span&gt;:&lt;span class=hl-num&gt;44&lt;/span&gt;&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-cname&gt;FILE_NAME&lt;/span&gt; &lt;span class=hl-op&gt;=&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-cname&gt;VERSION&lt;/span&gt;   &lt;span class=hl-op&gt;=&lt;/span&gt; &lt;span class=hl-num&gt;0&lt;/span&gt;&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-cname&gt;LINE_COUNT&lt;/span&gt;  &lt;span class=hl-op&gt;=&lt;/span&gt; &lt;span class=hl-num&gt;21&lt;/span&gt;&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-cname&gt;MEMORY_SIZE&lt;/span&gt; &lt;span class=hl-op&gt;=&lt;/span&gt; &lt;span class=hl-num&gt;3195&lt;/span&gt;&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-cname&gt;PROTECT&lt;/span&gt;   &lt;span class=hl-op&gt;=&lt;/span&gt; READ_WRITE&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;TCD:  &lt;span class=hl-cname&gt;STACK_SIZE&lt;/span&gt;    &lt;span class=hl-op&gt;=&lt;/span&gt; &lt;span class=hl-num&gt;0&lt;/span&gt;&lt;span class=hl-pun&gt;,&lt;/span&gt;&#xA;      &lt;span class=hl-cname&gt;TASK_PRIORITY&lt;/span&gt; &lt;span class=hl-op&gt;=&lt;/span&gt; &lt;span class=hl-num&gt;50&lt;/span&gt;&lt;span class=hl-pun&gt;,&lt;/span&gt;&#xA;      &lt;span class=hl-cname&gt;TIME_SLICE&lt;/span&gt;    &lt;span class=hl-op&gt;=&lt;/span&gt; &lt;span class=hl-num&gt;0&lt;/span&gt;&lt;span class=hl-pun&gt;,&lt;/span&gt;&#xA;      &lt;span class=hl-cname&gt;BUSY_LAMP_OFF&lt;/span&gt; &lt;span class=hl-op&gt;=&lt;/span&gt; &lt;span class=hl-num&gt;0&lt;/span&gt;&lt;span class=hl-pun&gt;,&lt;/span&gt;&#xA;      &lt;span class=hl-cname&gt;ABORT_REQUEST&lt;/span&gt; &lt;span class=hl-op&gt;=&lt;/span&gt; &lt;span class=hl-num&gt;0&lt;/span&gt;&lt;span class=hl-pun&gt;,&lt;/span&gt;&#xA;      &lt;span class=hl-cname&gt;PAUSE_REQUEST&lt;/span&gt; &lt;span class=hl-op&gt;=&lt;/span&gt; &lt;span class=hl-num&gt;0&lt;/span&gt;&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-cname&gt;DEFAULT_GROUP&lt;/span&gt;&#x9;&lt;span class=hl-op&gt;=&lt;/span&gt; &lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-pun&gt;,&lt;/span&gt;*&lt;span class=hl-pun&gt;,&lt;/span&gt;*&lt;span class=hl-pun&gt;,&lt;/span&gt;*&lt;span class=hl-pun&gt;,&lt;/span&gt;*&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-cname&gt;CONTROL_CODE&lt;/span&gt;&#x9;&lt;span class=hl-op&gt;=&lt;/span&gt; &lt;span class=hl-num&gt;00000000&lt;/span&gt; &lt;span class=hl-num&gt;00000000&lt;/span&gt;&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-ins&gt;/APPL&lt;/span&gt;&#xA;&#xA;LINE_TRACK&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  LINE_TRACK_SCHEDULE_NUMBER      : &lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  LINE_TRACK_BOUNDARY_NUMBER      : &lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  CONTINUE_TRACK_AT_PROG_END      : TRUE&lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&#xA;&lt;span class=hl-ins&gt;/MN&lt;/span&gt;&#xA;   &lt;span class=hl-num&gt;1&lt;/span&gt;:  &lt;span class=hl-op&gt;!&lt;/span&gt; Example comment &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;   &lt;span class=hl-num&gt;2&lt;/span&gt;:   &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;   &lt;span class=hl-num&gt;3&lt;/span&gt;:  &lt;span class=hl-lbl&gt;LBL&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;   &lt;span class=hl-num&gt;4&lt;/span&gt;:  &lt;span class=hl-reg&gt;R&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-cname&gt;:Some Register&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt;&lt;span class=hl-op&gt;=&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;   &lt;span class=hl-num&gt;5&lt;/span&gt;:  &lt;span class=hl-reg&gt;DO&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-cname&gt;:Some Output&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt;&lt;span class=hl-op&gt;=&lt;/span&gt;&lt;span class=hl-const&gt;ON&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;   &lt;span class=hl-num&gt;6&lt;/span&gt;:   &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;   &lt;span class=hl-num&gt;7&lt;/span&gt;:  &lt;span class=hl-ins&gt;CALL&lt;/span&gt; &lt;span class=hl-prog&gt;MY_SUBROUTINE&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;   &lt;span class=hl-num&gt;8&lt;/span&gt;:   &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;   &lt;span class=hl-num&gt;9&lt;/span&gt;:  &lt;span class=hl-ins&gt;IF&lt;/span&gt; &lt;span class=hl-reg&gt;R&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;2&lt;/span&gt;&lt;span class=hl-cname&gt;:Another register&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt;&lt;span class=hl-op&gt;&amp;gt;=&lt;/span&gt;&lt;span class=hl-num&gt;3&lt;/span&gt;&lt;span class=hl-pun&gt;,&lt;/span&gt;&lt;span class=hl-ins&gt;JMP&lt;/span&gt; &lt;span class=hl-lbl&gt;LBL&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;999&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  &lt;span class=hl-num&gt;10&lt;/span&gt;:   &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  &lt;span class=hl-num&gt;11&lt;/span&gt;:L &lt;span class=hl-reg&gt;PR&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-cname&gt;:Some PR&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; max_speed &lt;span class=hl-ins&gt;CNT&lt;/span&gt;&lt;span class=hl-num&gt;20&lt;/span&gt; VOFFSET&lt;span class=hl-pun&gt;,&lt;/span&gt;VR&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-ins&gt;ACC&lt;/span&gt; &lt;span class=hl-reg&gt;R&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;100&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  &lt;span class=hl-num&gt;12&lt;/span&gt;:   &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  &lt;span class=hl-num&gt;13&lt;/span&gt;:  &lt;span class=hl-cname&gt;&lt;span class=hl-ins&gt;UTOOL_NUM&lt;/span&gt;&lt;/span&gt;&lt;span class=hl-op&gt;=&lt;/span&gt;&lt;span class=hl-num&gt;5&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  &lt;span class=hl-num&gt;14&lt;/span&gt;:  //&lt;span class=hl-ins&gt;PAYLOAD&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;2&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  &lt;span class=hl-num&gt;15&lt;/span&gt;:   &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  &lt;span class=hl-num&gt;16&lt;/span&gt;:  &lt;span class=hl-reg&gt;F&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt;&lt;span class=hl-op&gt;=&lt;/span&gt;&lt;span class=hl-pun&gt;(&lt;/span&gt;&lt;span class=hl-const&gt;OFF&lt;/span&gt;&lt;span class=hl-pun&gt;)&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  &lt;span class=hl-num&gt;17&lt;/span&gt;:   &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  &lt;span class=hl-num&gt;18&lt;/span&gt;:  &lt;span class=hl-ins&gt;WAIT&lt;/span&gt;    .&lt;span class=hl-num&gt;20&lt;/span&gt;&lt;span class=hl-pun&gt;(&lt;/span&gt;sec&lt;span class=hl-pun&gt;)&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  &lt;span class=hl-num&gt;19&lt;/span&gt;:  &lt;span class=hl-ins&gt;JMP&lt;/span&gt; &lt;span class=hl-lbl&gt;LBL&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;1&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  &lt;span class=hl-num&gt;20&lt;/span&gt;:   &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;  &lt;span class=hl-num&gt;21&lt;/span&gt;:  &lt;span class=hl-lbl&gt;LBL&lt;/span&gt;&lt;span class=hl-pun&gt;[&lt;/span&gt;&lt;span class=hl-num&gt;999&lt;/span&gt;&lt;span class=hl-pun&gt;]&lt;/span&gt; &lt;span class=hl-pun&gt;;&lt;/span&gt;&#xA;&lt;span class=hl-ins&gt;/POS&lt;/span&gt;&#xA;&lt;span class=hl-ins&gt;/&lt;span class=hl-ins&gt;END&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
			</item>
			<item>
				<title>Don&#39;t Jump Around</title>
				<link>https://www.onerobotics.com/posts/2014/dont-jump-around/</link>
				<pubDate>Sat, 01 Feb 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/dont-jump-around/</guid>
				<description>&lt;p&gt;I hate to disagree with &lt;a href=&#34;http://www.youtube.com/watch?v=g7IVAH1JauE&#34;&gt;the wise words of House of Pain&lt;/a&gt;,&#xA;but excessive jumping around is the most common issue I see when&#xA;reviewing others&amp;rsquo; TP code. Labels and jump-statements come natural in a&#xA;language that doesn&amp;rsquo;t support actual code-blocks for simple&#xA;if-statements. Within just a few minutes of programming, a beginner sees&#xA;an &lt;code&gt;IF (...),JMP LBL[X]&lt;/code&gt; and decides that this is how FANUC programming&#xA;is done.&lt;/p&gt;&#xA;&lt;p&gt;Randall Munroe from &lt;a href=&#34;http://xkcd.com/&#34;&gt;xkcd&lt;/a&gt; sums up the potential for catastrophe when&#xA;using GOTO statements (TP&amp;rsquo;s JMP) in this comic:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Your First Visual Tracking Application Part Two</title>
				<link>https://www.onerobotics.com/posts/2014/your-first-visual-tracking-application-part-two/</link>
				<pubDate>Sat, 25 Jan 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/your-first-visual-tracking-application-part-two/</guid>
				<description>&lt;p&gt;In &lt;a href=&#34;https://www.onerobotics.com/posts/2014/your-first-visual-tracking-application-part-one/&#34;&gt;part one of this&#xA;series&lt;/a&gt;,&#xA;we covered gripper design and testing, vision considerations, robot&#xA;selection, cell layout and choosing the correct number of robots for&#xA;visual tracking applications. This post will cover some other&#xA;considerations: conveyor flow, hardware requirements, setup and&#xA;configuration, and finally, programming.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s the full list with links to each section:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.onerobotics.com/posts/2014/your-first-visual-tracking-application-part-one/#gripper&#34;&gt;Gripper&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.onerobotics.com/posts/2014/your-first-visual-tracking-application-part-one/#vision&#34;&gt;Vision&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.onerobotics.com/posts/2014/your-first-visual-tracking-application-part-one/#robot-selection&#34;&gt;Robot Selection&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.onerobotics.com/posts/2014/your-first-visual-tracking-application-part-one/#layout&#34;&gt;Layout&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.onerobotics.com/posts/2014/your-first-visual-tracking-application-part-one/#number-of-robots&#34;&gt;Number of Robots&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conveyor-flow&#34;&gt;Relative Conveyor Flow Direction&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#hardware&#34;&gt;Hardware&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#setup&#34;&gt;Setup&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#programming&#34;&gt;Programming&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;conveyor-flow&#34;&gt;Relative Conveyor Flow Direction&lt;/h2&gt;&#xA;&lt;p&gt;If you consider a simple system with two conveyors: one for parts coming&#xA;in, and one for parts going out, which direction(s) do they go? Do they&#xA;both move in the same direction, or do they oppose eachother?&lt;/p&gt;</description>
			</item>
			<item>
				<title>FANUC TP Syntax Highlighting for Vim</title>
				<link>https://www.onerobotics.com/posts/2014/fanuc-tp-syntax-highlighting-for-vim/</link>
				<pubDate>Tue, 21 Jan 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/fanuc-tp-syntax-highlighting-for-vim/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;http://www.vim.org/&#34;&gt;Vim&lt;/a&gt; is my favorite text editor. It may take an&#xA;hour or two to get over the initial learning curve (and probably years&#xA;to master it), but it&amp;rsquo;s worth it. The ability to cruise through your&#xA;code and change it quickly without ever touching a mouse saves a ton of&#xA;time, and there are&#xA;&lt;a href=&#34;https://www.google.com/search?q=vim+screencasts&#34;&gt;plenty of good resources&lt;/a&gt;&#xA;for learning it.&lt;/p&gt;&#xA;&lt;p&gt;You can grab&#xA;&lt;a href=&#34;https://github.com/unreal/vim-fanuc-tp&#34;&gt;my syntax highlighting file on GitHub&lt;/a&gt;.&#xA;Pull requests appreciated.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Your First Visual Tracking Application - Part One</title>
				<link>https://www.onerobotics.com/posts/2014/your-first-visual-tracking-application-part-one/</link>
				<pubDate>Sat, 18 Jan 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/your-first-visual-tracking-application-part-one/</guid>
				<description>&lt;p&gt;Visual tracking is intimidating, much more intimidating than most other&#xA;material handling applications. With all the additional hardware&#xA;required (cameras, encoders, multiplexers) and steps to get things&#xA;moving (camera calibration, tracking frame calibration, vision process&#xA;creation, reference setting, accuracy tuning), it&amp;rsquo;s easy to get&#xA;overwhelmed. And you haven&amp;rsquo;t even made any of your other extremely&#xA;important decisions yet: &lt;a href=&#34;#robot-selection&#34;&gt;what robot(s) should I use?&lt;/a&gt;&#xA;&lt;a href=&#34;#layout&#34;&gt;What is the best layout for this application?&lt;/a&gt; Should I use&#xA;parallel flow or counterflow? &lt;a href=&#34;#gripper&#34;&gt;What type of gripper should I&#xA;use?&lt;/a&gt; Can I get away with a single-pick gripper, or should I&#xA;design one that picks two at a time? Should I use PickTool, or should I&#xA;write it all from scratch? Lots of questions, difficult answers.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Intro to FANUC Background Logic</title>
				<link>https://www.onerobotics.com/posts/2014/intro-to-fanuc-background-logic/</link>
				<pubDate>Sat, 11 Jan 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/intro-to-fanuc-background-logic/</guid>
				<description>&lt;p&gt;FANUC&amp;rsquo;s Background Logic feature is basically the ladder-logic you know&#xA;and love in TP Program form. These programs only consist of Mixed Logic&#xA;statements (e.g. F[1]=(DI[1] AND DI[2])), and the programs are&#xA;constantly scanned in the background while your robot is online,&#xA;ignoring all E-Stops, alarms, etc. Depending on the complexity of your&#xA;system, you may be able to skip the PLC and simply use BG Logic to&#xA;control everything.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introducing TP&#43;</title>
				<link>https://www.onerobotics.com/posts/2014/introducing-tp-plus/</link>
				<pubDate>Fri, 03 Jan 2014 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2014/introducing-tp-plus/</guid>
				<description>&lt;p&gt;TP+ is a slightly higher-level language that translates into valid FANUC&#xA;TP code. Its goal is to make programming FANUC robots easier. TP+&#xA;includes a number of features from newer programming languages that TP&#xA;does not support.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Variables for registers, I/O, etc.&lt;/li&gt;&#xA;&lt;li&gt;Automatic label numbering&lt;/li&gt;&#xA;&lt;li&gt;IF-ELSE blocks&lt;/li&gt;&#xA;&lt;li&gt;Improved readability&lt;/li&gt;&#xA;&lt;li&gt;Less stringent syntax&lt;/li&gt;&#xA;&lt;li&gt;Syntax sugar&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;&#xA;&lt;p&gt;You can try out TP+ here: &lt;a href=&#34;http://tp-plus.herokuapp.com&#34;&gt;TP+ Demo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;example-code&#34;&gt;Example code:&lt;/h2&gt;&#xA;&lt;p&gt;Paste this code into the demo and see how it&amp;rsquo;s translated into TP.&lt;/p&gt;</description>
			</item>
			<item>
				<title>FANUC KAREL Programming: An Introduction (with Examples)</title>
				<link>https://www.onerobotics.com/posts/2013/introduction-to-karel-programming/</link>
				<pubDate>Sat, 28 Dec 2013 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2013/introduction-to-karel-programming/</guid>
				<description>&lt;p&gt;You can &lt;a href=&#34;https://www.onerobotics.com/fanuc-robot-programming/&#34;&gt;program FANUC robots&lt;/a&gt; in two different languages: the TP (teach pendant) programming language or KAREL. TP is good enough for 99% of&#xA;the things you need to do on the robot, but for everything else, there&amp;rsquo;s KAREL.&lt;/p&gt;&#xA;&lt;p&gt;KAREL is a lower-level language very similar to &lt;a href=&#34;https://en.wikipedia.org/wiki/Pascal_(programming_language)&#34;&gt;Pascal&lt;/a&gt;. It&#xA;features strongly typed variables, constants, custom types, procedures,&#xA;functions, and gives you access to all sorts of useful built-ins for&#xA;things you may not be able to do with TP. (By the way, if you&amp;rsquo;re interested in TP programming, please check out &lt;a href=&#34;https://www.onerobotics.com/robot-whispering/&#34;&gt;the book I wrote on programming FANUC robots&lt;/a&gt;.)&lt;/p&gt;</description>
			</item>
			<item>
				<title>UFRAMEs and UTOOLs</title>
				<link>https://www.onerobotics.com/posts/2013/uframes-and-utools/</link>
				<pubDate>Sat, 21 Dec 2013 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2013/uframes-and-utools/</guid>
				<description>&lt;p&gt;One of the great things about FANUC&amp;rsquo;s TP programming language is that&#xA;just about anyone, with very little training, can pick up a teach&#xA;pendant, write a few lines of code and get their robot moving. The&#xA;language is very high-level and fairly readable so even someone without&#xA;a programming background can generally understand what each line of code&#xA;does.&lt;/p&gt;&#xA;&lt;p&gt;But what if something goes wrong? The problem with making a tool that&amp;rsquo;s&#xA;so beginner-friendly (but still very powerful) is that beginners often&#xA;struggle on fairly basic problems because they don&amp;rsquo;t understand the&#xA;lower-level mechanics and software. Their code may also accomplish a&#xA;task but do so in a way that makes maintenance difficult further down&#xA;the road.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The Perils of Six-Axis Robots</title>
				<link>https://www.onerobotics.com/posts/2013/the-perils-of-six-axis-robots/</link>
				<pubDate>Fri, 29 Nov 2013 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2013/the-perils-of-six-axis-robots/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://www.onerobotics.com/fanuc-robot-programming/&#34;&gt;Programming FANUC robots&lt;/a&gt; successfully requires you do two things:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Write good programs&lt;/li&gt;&#xA;&lt;li&gt;Write good motion&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;You can&amp;rsquo;t write good motion without understanding how position data&#xA;works on the robot. Let&amp;rsquo;s dive into it a bit and see if we can get a&#xA;better understanding of how the robot gets from A to B and how we can&#xA;control exactly how that happens when multiple solutions are present.&lt;/p&gt;&#xA;&lt;p&gt;Consider a simple arm that rotates around an axis, a single-axis&#xA;manipulator. This robot can only reach the 360 degree circle around&#xA;the axis whose radius is the length of the arm itself. There is exactly&#xA;one joint angle solution for every reachable position.&lt;/p&gt;</description>
			</item>
			<item>
				<title>I, Robot</title>
				<link>https://www.onerobotics.com/posts/2013/i-robot/</link>
				<pubDate>Sat, 23 Nov 2013 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2013/i-robot/</guid>
				<description>&lt;p&gt;It&amp;rsquo;s easy to just move on after merely getting something to work when&#xA;you&amp;rsquo;re using an incredibly fast and robust robot. The robot&#xA;moves the heavy thing from point A to point B and you even have a little&#xA;cycle time to spare. The customer&amp;rsquo;s happy; you&amp;rsquo;re happy; time to&#xA;celebrate, right?&lt;/p&gt;&#xA;&lt;p&gt;But what about the robot? Is the robot happy too? Would &lt;em&gt;you&lt;/em&gt; be happy&#xA;performing that task all day? Certainly not, but if you had to do it for&#xA;a little while, would you do it like you just taught&#xA;the robot, or would you tweak a couple of things to make it a little easier?&lt;/p&gt;</description>
			</item>
			<item>
				<title>Testing FANUC TP and KAREL Code</title>
				<link>https://www.onerobotics.com/posts/2013/testing-fanuc-tp-and-karel-code/</link>
				<pubDate>Sat, 16 Nov 2013 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2013/testing-fanuc-tp-and-karel-code/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE 2014/02/27:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you&#39;re looking for a how-to guide on &lt;a&#xA;href=&#34;https://www.onerobotics.com/tags/karel-programming/&#34;&gt;FANUC KAREL programming&lt;/a&gt;, you&#39;re&#xA;probably better off reading my &lt;a&#xA;href=&#34;https://www.onerobotics.com/posts/2013/introduction-to-karel-programming/&#34;&gt;Introduction&#xA;to KAREL Programming&lt;/a&gt; article.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;One of the things I love about the Ruby community is its dedication and&#xA;support for testing. Having very little formal computer science&#xA;education, concepts like unit testing and integration testing were&#xA;completely foreign to me. After first ignoring everyone&amp;rsquo;s advice to test&#xA;now and test often, I eventually forced myself to learn out of&#xA;necessity and now advocate the practice to anyone who will listen.&#xA;Having confidence in your code is very important, especially when your&#xA;code is the only thing keeping a $100k robot from crashing through a&#xA;$500k machine tool. By testing thoroughly, it&amp;rsquo;s much easier to have&#xA;confidence in your code and gives you the freedom to perform large&#xA;refactorings while still maintaining essential functionality.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Intelligent Part-Presence</title>
				<link>https://www.onerobotics.com/posts/2013/intelligent-part-presence/</link>
				<pubDate>Sat, 09 Nov 2013 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2013/intelligent-part-presence/</guid>
				<description>&lt;p&gt;Good material handling applications typically include many part-presence&#xA;sensors: proximity switches on fixtures or machine tools, photo eyes or&#xA;gripper open/closed/overtravel switches on end-of-arm tools, etc. How&#xA;and when do you use them most effectively?&lt;/p&gt;&#xA;&lt;p&gt;I check part-presence liberally. If something has gone awry with your&#xA;automation, you want to realize it as soon as possible to minimize&#xA;damage. Take a simple pick routine as an example:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Make sure the part is present at the fixture&lt;br&gt;&#xA;&lt;em&gt;It doesn&amp;rsquo;t make much sense to pick a part that isn&amp;rsquo;t there.&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;Make sure the gripper is open and empty&lt;br&gt;&#xA;&lt;em&gt;The robot will probably crash if the gripper is not open and will&#xA;almost certainly crash if&amp;rsquo;s it already gripping a part. If the&#xA;gripper IO is not functional here, you&amp;rsquo;ll hopefully detect it before&#xA;it becomes a bigger problem (e.g. after you&amp;rsquo;ve picked up a 100lb&#xA;part).&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;Move to the part&lt;/li&gt;&#xA;&lt;li&gt;Grip the part&lt;/li&gt;&#xA;&lt;li&gt;Make sure the gripper is closed and the part is present within the&#xA;gripper&lt;br&gt;&#xA;&lt;em&gt;If you have the IO, use it.&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;Retreat from the fixture&lt;/li&gt;&#xA;&lt;li&gt;Make sure the gripper is still closed and the part is still there&lt;br&gt;&#xA;&lt;em&gt;Even if the gripper IO was satisfied at the fixture, it could be a&#xA;bad grip that lets go as soon as you leave.&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;Make sure the fixture is now empty&#xA;&lt;em&gt;If a sensor fails, you want to know about it as soon as possible.&#xA;It&amp;rsquo;s more important to make this check when loading, but it&amp;rsquo;s&#xA;worthwhile checking here too. On the load side, you&amp;rsquo;ll want to know&#xA;that a part is incorrectly seated before you bash into that &amp;ldquo;empty&amp;rdquo;&#xA;fixture at 2000mm/s on the next load cycle.&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Of the 8 steps in that sequence, 5 involve part part-presence IO.&#xA;Skipping any one of those checks could be a dangerous oversight.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Clean Code</title>
				<link>https://www.onerobotics.com/posts/2013/clean-code/</link>
				<pubDate>Sat, 02 Nov 2013 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2013/clean-code/</guid>
				<description>&lt;p&gt;We&amp;rsquo;ve all been there: asked to work on a project where some or all of&#xA;the programming has already been done. You pick up the teach pendant&#xA;to find a program called MAIN which contains 1000 LOC with a mess of&#xA;labels, old sections of code that are jumped out and may even be&#xA;controlling other parts of the machine at the same time. If you&amp;rsquo;re&#xA;lucky, there might be some comments or thoughtfully-labeled sections,&#xA;but it&amp;rsquo;s still going to be a nightmare to work on. If only the original&#xA;programmer had put some more thought into the architecture of his&#xA;programming you wouldn&amp;rsquo;t have to sift through 1000 lines to fix a bug.&lt;/p&gt;</description>
			</item>
			<item>
				<title>AP_LD and RT_LD Functions</title>
				<link>https://www.onerobotics.com/posts/2013/ap_ld-and-rt_ld-functions/</link>
				<pubDate>Sat, 26 Oct 2013 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2013/ap_ld-and-rt_ld-functions/</guid>
				<description>&lt;p&gt;If you&amp;rsquo;ve ever worked on a robot with the Constant Path option, you&amp;rsquo;ve&#xA;probably seen these funny motion segment modifiers and wondered what&#xA;they were for.&lt;/p&gt;&#xA;&lt;p&gt;AP_LD and RT_LD stand for &amp;ldquo;Approach Linear Distance&amp;rdquo; and &amp;ldquo;Retreat Linear&#xA;Distance.&amp;rdquo; They guarantee the last (or first on a retreat) Xmm of a&#xA;given motion segment to be linear. This can be very useful when you&#xA;need to avoid an obstacle or make sure your motions are not rounding&#xA;off too soon.&lt;/p&gt;</description>
			</item>
			<item>
				<title>To ACC or not to ACC</title>
				<link>https://www.onerobotics.com/posts/2013/to-acc-or-not-to-acc/</link>
				<pubDate>Sat, 19 Oct 2013 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2013/to-acc-or-not-to-acc/</guid>
				<description>&lt;p&gt;That is the question. And the answer is &amp;ldquo;probably not.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;Once a programmer learns that the ACC instruction exists (and figures&#xA;out how to make it go over 100) this is often the first place they go&#xA;to make the robot faster. It&amp;rsquo;s such an easy change to make with&#xA;immediate results, but there are serious consequences. I&amp;rsquo;d argue that&#xA;going over ACC100 should only be done as a last resort.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Using Conventions to Improve Your Workflow</title>
				<link>https://www.onerobotics.com/posts/2013/using-conventions-to-improve-your-workflow/</link>
				<pubDate>Sat, 12 Oct 2013 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2013/using-conventions-to-improve-your-workflow/</guid>
				<description>&lt;p&gt;As a contract programmer, it&amp;rsquo;s important for me to be as efficient as&#xA;possible. Coding faster saves my clients money and allows me to move on&#xA;to the next project quicker. Over the years I&amp;rsquo;ve developed quite a few&#xA;tools and habits that help me do more work faster.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conventions&#34;&gt;Conventions&lt;/h2&gt;&#xA;&lt;p&gt;I picked up &lt;a href=&#34;http://rubyonrails.org&#34;&gt;Ruby on Rails&lt;/a&gt; back in 2007. One&#xA;of the things I really like about it is its liberal use of &lt;a href=&#34;http://en.wikipedia.org/wiki/Convention_over_configuration&#34;&gt;convention&#xA;over configuration&lt;/a&gt;.&#xA;By defining conventions for things that always come up, you don&amp;rsquo;t have&#xA;to waste any time or energy developing solutions for them.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Using FTP for Increased Productivity</title>
				<link>https://www.onerobotics.com/posts/2013/using-ftp-to-increase-productivity/</link>
				<pubDate>Sat, 05 Oct 2013 00:00:00 +0000</pubDate>
				<guid>https://www.onerobotics.com/posts/2013/using-ftp-to-increase-productivity/</guid>
				<description>&lt;p&gt;One of the easiest ways to save time while working on a FANUC robot is&#xA;to become familiar with an FTP client. The addition of the USB port on&#xA;the Teach Pendant helped bring most people out of the dark ages of&#xA;lugging PCMCIA cards around (although many people still use them), but&#xA;even USB sticks aren&amp;rsquo;t the fastest way to get files to and from your&#xA;robots.&lt;/p&gt;&#xA;&lt;p&gt;For those unfamiliar with the concept, FTP stands for File Transfer&#xA;Protocol; it&amp;rsquo;s basically a method for getting files from one computer&#xA;to another. One computer (like the robot controller) runs an FTP server&#xA;and waits for FTP clients (like your laptop) to connect and issue&#xA;commands. You have commands for getting a list of files, downloading&#xA;files, uploading files, creating directories, etc. As long as your&#xA;laptop is on the same network as your robot, you&amp;rsquo;re good to go.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
