Robot software is the coded commands that tell a mechanical device (known as a robot) what tasks to perform and control its actions. Robot software is used to perform tasks and automate tasks to be performed. Programming robots is a non-trivial task. Many software systems and frameworks have been proposed to make programming robots easier.
Some robot software aims at developing intelligent mechanical devices. Though common in science fiction stories, such programs are yet to become common-place in reality and much development is yet required in the field of artificial intelligence before they even begin to approach the science fiction possibilities. Pre-programmed hardware may include feedback loops such that it can interact with its environment, but does not display actual intelligence.
Currently, malicious programming of robots is of some concern, particularly in large industrial robots. The power and size of industrial robots mean they are capable of inflicting severe injury if programmed incorrectly or used in an unsafe manner. One such incident occurred on 21 July 1984 when a man was crushed to death by an industrial robot. That incident was an accident, but shows the potential risks of working with robots. In science fiction, the Three Laws of Robotics were developed for robots to obey and avoid malicious actions.
Industrial Robot Software
Industrial robot software usually comprises two sections: data objects and program flow (list of instructions). For example
Go to Jig1
is an instruction to the robot to go to positional data named Jig1. Of course programs can also contain implicit data for example
Tell axis 1 move 30 degrees.
Data and program usually reside in separate sections of the robot controller memory. One can change the data without changing the program and vice versa. For example one can write a different program using the same Jig1 or one can adjust the position of Jig1 without changing the program which uses it.
Examples of programming languages for Industrial Robots
Most robot manufacturers keep their software hidden. It is impossible to find out how most robots are programmed. It is almost as if they had no software in many cases. This is because these companies do not intend their customers to do their own programming and they sell complete proprietary application packages rather than general purpose software.
However, here are some examples of published robot programming languages.
Using the example pick and place task on Industrial Robot:
Move to P1 (a general safe position)
Move to P2 (an approach to P3)
Move to P3 (a position to pick the object)
Move to P4 (an approach to P5)
Move to P5 (a position to place the object)
Move to P1 and finish
VAL was one of the first robot ‘languages’ and was used in Unimate robots. Variants of VAL have been used by other manufacturers including Adept Technology. Stäubli currently use VAL3.
1. MOVE P1
2. MOVE P2
3. MOVE P3
4. CLOSEI 0.00
5. MOVE P4
6. MOVE P5
7. OPENI 0.00
8. MOVE P1
Epson RC+ (example for a vacuum pickup)
ROBOFORTH (a language based on FORTH).
P1 P3 GRIP P5 UNGRIP P1
(With Roboforth you can specify approach positions for places so you do not need P2 and P4.)
Clearly the robot should not continue the next move until the gripper is completely closed. Confirmation or allowed time is implicit in the above examples of CLOSEI and GRIP whereas the On vacuum command requires a time delay to ensure satisfactory suction.
Other robot programming languages
Visual programming languages
The software system for the Lego Mindstorms NXT robots is worthy of mention. It is based on and written by Labview. The approach is to start with the program rather than the data. The program is constructed by dragging icons into the program area and adding or inserting into the sequence. For each icon you then specify the parameters (data). For example for the motor drive icon you specify which motors and by how much they move. When the program is written it is downloaded into the Lego NXT 'brick' (microcontroller) for test.
Another interesting approach is worthy of mention. All robotic applications need parallelism and event-based programming. Parallelism is where the robot does two or more things at the same time. This requires appropriate hardware and software. Most programming languages rely on threads or complex abstraction classes to handle parallelism and the complexity that comes with it, like concurrent access to shared ressources. URBI
provides a higher level of abstraction by integrating parallelism and events in the core of the language semantics.
headPan.val += camera.xfov * face.x
headTilt.val += camera.yfov * face.y
The above code will move the
headTilt motors in parallel to make the robot head follow the human face visible on the video taken by its camera whenever a face is seen by the robot.
Robotics Software Projects
- ARIA robot API libraries Source available under GNU; compatible with pioneers, peoplebot, seekur, amigobot, powerbot and other robots; programmable with Java, C++, Python under WIN/Linux.
- CLARAty - Coupled-Layer Architecture for Robotic Autonomy. It is a collaborative effort among four institutions: NASA Jet Propulsion Laboratory, NASA Ames Research Center, Carnegie Mellon, and the University of Minnesota.
- Dave's Robotic Operating System (DROS) Free Software for the robotics researcher or hobbyist.
- ERSP - A commercial robot software system by Evolution Robotics.
- Experimental Robotics Framework - A software for making experiments with multiple robots in 3d, with support for the latest technologies, that sits on top of Player/Stage and Open/CV.
- MARIE - Mobile and Autonomous Robotics Integration Environment - is a Free Software using a component-based approach to build robotics software systems by integrating previously-existing and new software components.
- Microsoft Robotics Studio - Uses a component based approach. Each component is a service. Services are orchestrated through a concurrency library called the CCR. Current version (1.5) includes a Microsoft XNA-Framework based simulator with physics simulation and a Visual Programming Language.
- MobileSIM, built on the Stage simulator platform. MobileSim provides access to simulated robots and their environment with ARIA programs.
- The Mobile Robot Programming Toolkit (MRPT) - An open-source set of C++ libraries and applications which cover grabbing, visualizing and manipulating datasets, particle filter and Kalman filter-based SLAM, linear algebra, robotics sensors and MATLAB-like plot rendering.
- OpenJAUS - An open-source component based approach that uses standarized messages and transport methods to create interoperable robotic systems.
- Orca - an open-source framework for developing component-based robotic systems. It provides the means for defining and developing the building-blocks which can be pieced together to form arbitrarily complex robotic systems, from single vehicles to distributed sensor networks. Inter-component communication is implemented using Ice middleware.
- Orchestra Control Engine - A suite of software components (based on Linux/RTAI) for realtime industrial robots and machines control.
- OROCOS - the Open Robot Control Software project provides a Free Software toolkit for realtime robot arm and machine tool control.
- Player/Stage Project - A very popular Free Software robot interface and simulation system, used for robotics research and teaching worldwide.
- Programblue - A growing project of 80's fans from the showbiz pizza era creating custom shows on their robot bands in their garages. See how music can be enjoyed visually through these robots using programblue software.
- Pyro, Python Robotics - Popular robotics Free Software used in universities and colleges. Easy to use, yet powerful, allows students and researchers to write high-level programs to explore Artificial Intelligence and robotics without worrying about low-level details.
- roboDNA - RoboDNA researches Dashboard technologies used to operate robots from a PC, including a free version for the Lego NXT.
- RoboMind - Educational software to learn the basics of robotics and programming.
- Robot Intelligence Kernel
- Skilligent - a commercial control system for autonomous service robots. The control system enables creation of robots which can be trained by end users - vs. programmed by a software engineer.
- URBI - Universal Real-time Behavior Interface from Gostai.
- Webots - A commercial robot simulation package that allows physically realistic simulations and allows you to prototype your own robot. It also comes with a broad palette of predesigned robot models, e.g. Aibo, e-puck, khepera, hoap2, hemisson, pioneer, etc.
Robotics Linux Kernel Drivers