Tuesday, May 11, 2021
Home » Flowstone Workshop » Flowstone Workshop 2

Flowstone Workshop 2

Flowstone-HeaderA New, Modular Approach To Graphical User Interface (GUI) Programming

Example of a PC to Boe-Bot communications link using XBee transceivers.

Robotic First Steps When looking at taking the first steps into robotics there are many technical issues you need to consider before choosing your hardware, be it a biped, humanoid, robot arm or hexapod. Having now programmed all of these to some level it is clear to me that there are only two ways to go for the beginner, robot Arm or hexapod. The reason I say this is twofold, firstly as a rule they are stable and don’t fall over all the time, and secondly, it is the wide range of functions you can create from a programming point of view with relative ease. Robot arms are great as a first step as you can program them to move using IK and then pick things up or systematically move levers, etc. These are great for education. Hexapods are basically six robot arms on one body and can also be programmed with IK, but they offer so much more to keep you interested in the future, e.g., organic movement to mimic nature, and various walking Gaits to simulate different insects and creatures. Plus they walk without falling down on uneven surfaces, etc. So, as you can probably tell, I’m a total hexapod convert!

I’ve been writing software for the past 35 years (yes, we had computers back then) and during that time I‘ve seen programming languages come and go. Languages like C, C++, and Java have remained popular while languages such as Pascal, COBOL, and FORTRAN have faded into obscurity. There have also been many attempts to create “graphical” programming environments that allow you to express the logic by drawing it instead of writing it out in code. For the most part these graphical tools have failed to catch on due to their lack of expressive power. Inevitably you always needed to drop down and write some code to express more complex logic.

Despite this dubious history I was curious to experiment with a new graphical programming tool from DSP Robotics called FlowStone. Most graphical programming tools express their logic in the form of flow charts or decision trees. FlowStone takes a novel approach by treating software modules as components. Like electronic components, FlowStone components have both inputs and outputs that you “wire” together in the form of a “Schematic” to create complete software applications. For the rest of this article the words module and component will be used interchangeably.


To assist in the creation of applications, FlowStone contains a toolbox filled with several hundred low level primitives and pre-built modules. An example of a primitive would be a function like “Float ADD” and an example of a module would be ComPort or Servo. At any time you can tweak a module’s look or function. Once modified, you can save this new module back to the toolbox. This allows you to build up a personal library of your own custom modules. In addition, FlowStone has an extensive set of GUI components allowing you to customize the look and feel of your application.

As mentioned, components are wired together in a schematic to create an application. The inputs and outputs of a component are located on its left and a right side and are called connectors. Using the mouse you can click and drag the output of a component and link it to the input of a different component. Instead of electrons flowing through these wires, data is actually passed in the form of integers, strings, Boolean values, or floats. If there is a type mismatch, FlowStone will attempt to auto converts the values passed. There are also some interesting Buss components that allow you to pass discrete values over a common wire and then break them out individually on the other side.

Since FlowStone is hierarchical (modules can contain modules) a Navigator window is provided that lets you view and jump between levels quickly. If you have a single module as your top level you can double click it and enter into that module one level down. This will be displayed in the navigator window so you can see where you are at any time in the hierarchy.

FlowStone Enterprise is for medium size projects with all the features of FlowStone. It allows you to deploy an EXE but with limited I/O and project size. Finally, FlowStone Professional is the full version including features to deploy to an EXE, networking, unlimited project size, and unlimited I/O.

FlowStone can connect to a large range of third party hardware. There is support for USB devices, I/O cards, webcams and audio hardware. COM ports communication is also built in so there’s potential support for robotics and legacy systems. Networking allows you to connect to IP cameras or even other FlowStone applications running remotely. There is even support for home automation using X10 based hardware. Supported hardware vendors include Lynxmotion, Crustcrawler, Phidgets, Nintendo (Wiimote and Nunchuck) and Active Home, among others.


The big addition with this version is the support for building your own components using the Ruby programming language. Ruby is a dynamic, open source programming language based on parts of other languages such as Perl, Smalltalk, Eiffel, Ada, and Lisp. It is an interesting balance of functional and imperative programming. It was created by Yukihiro Matsumoto and since 1992 it has achieved mass acceptance with a very active and devout following of software engineers and user groups. So what does this add? You can create your own Ruby Modules with formulas, use is as an SDK or program an API, or even access external DLL’s etc.


If you decide to use FlowStone for your next robotics project you will need to carefully consider your deployment options. FlowStone is Windows based and therefore will require a PC. These would be the same considerations if you were planning on using RobotBasic or the Microsoft Robotics Developer Studio.

If your robot hardware is directly attached to the PC (such as a robotic arm or servo controller) deployment will not be much of an issue. If however, you are developing a mobile robot you will need to weigh your options. The first and easiest is to mount a laptop or netbook PC directly on the robot and communicate with the actuators using the USB or serial port. Your platform will need to be large enough and with sufficient power to carry the PC.

There is no “run” button per say to execute your application. Instead FlowStone is always running the current schematic and allows you to connect up new modules while it continues to execute.

Once you have completed and debugged your application you can click the Export to EXE button and export into a single, standalone program file that you can run and distribute freely. Exported executables can be run on any Windows based PC or laptop.


You can also deploy to a DSP Robotics turnkey OEM Embedded Development System. This system uses an embedded PC called a FitPC, and a Solid State Hard Drive (SSHD) called FlowDrive which is pre-installed with Windows Embedded. It has a built-in Micro SD card that contains your FlowStone application and is run automatically after booting.

FlowStone schematic of a CrustCrawler Arm control application.

There are three versions of FlowStone software. FlowStone FREE is available for all to use free of charge and is ideal for students who work on small projects at home or school. It is also useful for potential professional users who want to evaluate FlowStone before buying

If you plan to use a small robotic platform (like a Parallax Boe- Bot) you will have to keep your PC remote and use some sort of wireless communications to control the robot and receive telemetry from its sensors. This will require developing a communications protocol and attaching the necessary wireless communication hardware to both the PC and the robot. In the past I have used the ever popular XBee RF modules to achieve this goal. The XBee modules provide a simple serial method of transmit/receive on which I have implemented my own communications protocol. I have described this protocol in prior articles but to reiterate, all transmitted and received packets start with a three character header and end with an ASCII Return character. The first character of the header is always an “>” indicating a send operation and the second character is the Network ID such as “R” for robot. The third is the destination device (robot) ID. The special character “#” is used to specify a broadcast to all devices. Data following the three character header is device dependent.

Ruby code imbedded in the CrustCrawler Arm control application.

You could use my control protocol, build your own, or implement the protocol used by RobotBasic. In any case you will need to develop code (i.e. in PBASIC on a Boe-Bot) that runs on the robot and understands the protocol. You then will develop your main application in FlowStone which will run on the remote PC.


FlowStone is an elegant and well constructed graphical development environment. It is also well documented with plenty of examples and tutorials. Potentially, with time, there could be a large library of pre-written components being shared within a community of users. Whether FlowStone is right for you depends largely on your level of software expertise and your own internal “wiring.” If you are an old software engineer like me it may take some time to get use to thinking about software code in such a hardware oriented visual manner. On the other hand if you have limited software experience or are a hardware engineer dreading the thought of writing code then FlowStone may be just the solution you are looking for.


DSP Robotics, www.dsprobotics.com
Parallax, www.parallax.com
Steve Norris website, www.norrislabs.com