Skip to content

Getting started

Assembly manual

Assembly manual is located in Github repository.
If you decide to build it or buy a kit you will need to follow the assembly manual to make it.
Assembly manual is also great tool for reparing and upgrading your robot. Make sure you use the latest version of the manual.
Version is marked on the first page in the bottom left corner.
Latest version is: v1 rev1

After you have built the robot follow these steps to get it up and running!

How to follow this guide

It is best to read the whole guide and then go step by step on each step. If you do something wrong you will have to go a few steps back so it is recommended to read or skim through this page.

Do not do this

There are few things you should never do to your PAROL6.


Never spin joint 5 more then one rotation


The image above represents the range of J5.


If you dont have blockers on joint 1 there is possibility to spin it more then 1 rotation. Never do it!


Robot does not have brakes. When you power off your robot steppers will stop producting torque and ROBOT WILL FALL!
Never turn off the robot without you holding it!

SSG48 gripper

If you plan to use SSG48 gripper first make sure that your PAROL6 works and than attach it to the robot!
Check the section in Peripherals on how to connect the gripper!

Powering on


PAROL6 requires 3 connections for normal operation.

  • Power connection -> Marked green on image

  • USB connection -> Marked blue on image

  • ESTOP -> Marked with yellow and pink squares (One lead of ESTOP goes to yellow one to pink)

If you upladed software to the PAROL6 control board its on/off operation will work like this:
First connect power cable (marked green). After that you can turn robot on and off by pressing power button (marked red).
After you press the power button the robots joints will start producing torque. You will hear 6 clicking sounds, that is normal.
Robot is now locked and it is waiting to receive commands.


Robot will power on by itself if you have connected 3v3 supply from the programming port.

Stepper Induced voltage


Because stepper motors create voltage when spun, they can turn the robot on if you spin them.
After you turn off the robot move it to standby position slowly
Never randomly spin the robot when connected to power or you risk powering it on

Powering off

Do not try to power off the robot when it is running!

If robot start to behave unexpectedly USE ESTOP.
If ESTOP is not functional power of the supply.
Reaching for the power button should be the last option.

Because lack of brakes sudden loss of power will result in robot falling down. That may cause damage to the robot or the operator. Robot is powered on and off by pressing a button marked red on the image. When powering the robot on even when USB connection is not available it will energise the the motors. It will produce 6 clicking sounds and that is normal behaviour.

Powering off the robot is also done by pressing button marked in RED. Before you power off the robot GRAB IT BY THE FOREARM and then press the button. This will ensure that robot does not fall down. THESE STEPS ARE MANDATORY Failing to do so will damage your robot!


You will not be able to power off the robot if there is external 3v3 (from the stlink for example)

Installing PAROL6 commander software

Commander software can be located in Github repository.
Install instructions are located there.

Using requirements.txt
CD into commander software folder
pip install -r requirements.txt



Uploading PAROL6 control board code

This code is not the testing code. This code will be able to communicate with commander software. You will need to have working commander software to use this code or build your own API.

Upload the following code Link

If using SSG48 gripper

In the main.cpp file change j5_homing_offset to be equal to 8035

PAROL6 control board


When uploading code with stlink to the robot DISCONNECT THE 24V supply from the robot.
After the code is uploaded disconnect the stlink and connect power supply.

Look at the PAROL6 control board page.

First startup

When first starting the robot biggest and most common problem is that motors will turn in different directions from those they were supposed to move. There are 2 ways to fix this:

  • Open the robot base and replace wires of one of the stepper motor phases
  • RECOMMENDED-> Upload a new code to PAROL6 control board with small changes to the code

If you are going with code edit solution you will need to edit these segments of code:

    file name: motor_init.cpp
    If rotating in wrong direction switch from 0 to 1 or 1 to 0
    The variable to change is:

    Joint__->direction_reversed = 1;


Homing is a process where a robot joint finds a known position in its rotation space, typically by hitting a limit switch or sensor.

The process for PAROL6 and FAZE4 robots is the same as that for 3D printers. After powering up, the robot doesn't know its position and needs to be homed. By hitting a limit switch, we determine the robot joint's position based on our knowledge of the limit switch's location, which we have from the CAD model. For example, when we hit a limit switch on Joint 1, we know that we need xxx steps to reach a witness mark or Joint 1's 0-degree position.

Now that we know our position after homing and the number of steps required from the limit switch to the witness mark, you might think we're done, right? Well, not quite. To be really precise, after hitting the limit switch, you should observe how many steps it actually takes from the limit switch to the witness mark. Each PAROL6 build may have slight differences due to various printers, tolerance variations, and parts.

The Parol6 control board comes preloaded with generic parameters that will work for anyone building the robot. However, if you want to fine-tune your robot, you now have the option to do so.

By default PAROL6 homes in these steps:

  • Joint 1,2 and 3 move to the limit switch at the same time
  • Once all are pressed they move away from them and press again.
  • Now joints 1,2 and 3 move to standby position
  • Now joint 4 homes
  • After joint 4 is homed it moves to its standby position
  • Now Joint6 homes
  • After it homes it goes to positon to home joint 5
  • After joint5 homes joints 5 and 6 move to the standby position

Homing needs to look like shown in this video!

Joints 1,4 and 6 home with inductive sensors make sure they trigger! If they do not trigger the LEDS on the sensors will not light up. To fix that you will need to adjust the screw that homes that joint


Joints 1,4 and 6 home with inductive sensors make sure they trigger!
Failing to adjust their trigger points you risk damaging the robot!


When starting homing procedure Joint 6 will rotate in the NEGATIVE DIRECTION TO FIND THE HOMING PIN!
Make sure that it does not make to much rotations or you risk wires/tubes getting tangled and braking/damaging your robot!


You will need to place the gripper in the position like this. Note that J6 wil rotate in the direction of green arrow during homing. The red circle is location of homing pin and blue arrow indicated the location of the sensor.


If using custom gripper make sure it has a spot that can trigger joint 5 limit switch!


To test PAROL6 control board connection to your robot you can use stock software or use testing software. Testing software is more safe and interactive for users. It can be found at: Link

It is recommended to use testing code to test your components (for example test if Joint1 motor is spinning or does J3 limit switch works).


**Using testing code on assembled robot may cause damage, only use it to test individual components and functions! **


This code will try to spin all the motors, so it is not safe to just upload it to your robot.

Upload the code with only usb connected and Programming adapter. Programming adapter will supply your board with 3v3 and if you configure your COM port you should be able to talk to your board. It will report errors for the stepper drivers since they need 24V to power on.

After you comfirmed that you can communicate; disconnect programming adapter and plug in 24V. Board will stay turned off until you do one of the 2 things:

  • Turn the board by supplying 3v3 from the programming adapter.
  • Attach power button. You will need to hold it pressed to keep the board powered.

PAROL6 control board testing software

The code will try to communicate with stepper drivers. Output1 and Output will go from high to low every 1s and LED1 and LED2 will flash. If everything is ok you will get output like this on serial:


If stepper driver is faulty or not connected you will get:


If stepper drivers are good your stepper motors should spin at a low speed using moderate current of 200-300 mA.

Flash memory test

In serial terminal write # FLASH and press enter. You should get a output like this for successful test.


LIMIT test

In serial terminal write # LIMIT and press enter. You should get a output like this if you activate the switch. For limit switches orientation is also not important (one lead to 24V other to signal. For Inductive sensors: Black - signal, Blue - negative, Brown - positive



In serial terminal write # IO and press enter. You should get a output like this:


If you change the state of ESTOP, INPUT1 or INPUT2 you will see states changing. You will also be able to see voltage of your power supply in mV!

Quick start guide

  • Attach the robot to table or workstation.
  • Make sure you have driver board that has firmware on it!
  • Connect power supply and USB to your robot.
  • Test if you can move your robots joints freely.
  • Turn on your power supply. IT NEEDS TO BE 24V
  • Press the power button. Power button locks all the joints to the current position.
  • After power button is pressed you can turn on commander software.
  • Commander software has a menu at the bottom that allows you to select COM port if it is not correct in the source code
  • If you fail to connect check your COM port number again. If using linux use: sudo chmod 666 /dev/ttyACMx mutiple times
  • After the commander software started you will see 2 windows: Simulator window and GUI window
  • Simulator will not be calibrated to the robot and GUI will display wrong joint and cartesian coordinates.
  • Go to joint jog menu and try to jog the motors.
  • Arrows (OF THE JOG MENU) pointing to the left represent POSITIVE rotation of the joint and arrows pointing to the right NEGATIVE.
  • Positive and negative rotations of the joints are shown on the image below


  • Comfirm that every joint moves coresponding joint in right direction. If not follow first startup guide to callibrate them and only then return here.
  • Once you adjusted your joint rotations repet all the previous steps and confirm correct rotations.
  • Press the home button. All joints of the robot will start to move. Be close to the estop of the robot. If you hear grinding noise when robot is close to the limit switch press the estop emediately. That means your estop for that joint is not working and you need to check your wiring.If you see that J6 is spinning mutiple times press ESTOP and adjust your inductive sensor trigger screw.
  • If the robot homes correctly it will be in position as in the image above but J1 will be rotate for +90 degree. Small deviations are ok since your robot is still not mastered.
  • Simulator is now synchronized to the robot and GUI shows correct values.
  • Congrats you have a functional PAROL6 robot to work with!

Output log

In your terminal you will periodically see this data:

    Position from robot is: [154, 0, 0, 0, 0, 0]
    Speed from robot is: [0, 0, 0, 0, 0, 0]
    Robot homed status is: [0, 0, 0, 0, 0, 0, 1, 1]
    Robot Input/Output status is: [0, 0, 0, 0, 1, 1, 1, 1]
    Robot temperature error status is: [0, 0, 0, 0, 0, 0, 1, 1]
    Robot temperature error status is: [0, 0, 0, 0, 0, 0, 1, 1]
    Timeout_error is: 100
    Time between 2 commands raw is: 7129
    Time between 2 commands in ms is: 0.010139022206380001
    XTR_DATA byte is: 255
    Gripper ID is: 255
    Gripper position is: -100
    Gripper speed is: 2000
    Gripper current is: -3000
    Gripper status is: 123
    Gripper object detection is: 69

    Robot Input/Output status is (OUT): [0, 0, 0, 0, 0, 0, 0, 0]
    Robot Commands is:  255
    Commanded robot speeds are: [0, 0, 0, 0, 0, 0]

    Joint jog buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    Cart jog buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    Home button state:0
    Enable button state:0
    Disable button state:0
    Clear error button state:0
    Real robot state: 1
    Simulator robot state: 1
    Speed slider is: 50
    WRF/TRF is: 0
    Demo app button state: 0
    Shared string is: b'Log: Joint  1  jog  '
    Program execution variable: 0
    [255, 255, 255]
    [0, 1, 1, 1, 1, 0, 1, 1]

This data tells you about the state of the GUI and the robot. What we are interested is the value of Time between 2 commands in ms. This variable needs to be in range of 0.010 s. Monitor it for a few minutes while you jog the robot. If it is in the range of 0.01 your PC can handle the commander software. If it is not in the range your PC is probably too week.

Mastering the robot

Witness marks

In the context of robot arms, "witness marks" typically refer to marks or indicators that are used to verify or witness the alignment, position, or movement of components or parts within the robotic system. These marks can serve various purposes in robot arms and automation; but are usually used to master the robot.

Witness marks can be used during the calibration process to ensure that different components are properly aligned or positioned as per the specified configuration.

Parol6, Faze4, and CM6 robotic arms also have witness marks. These marks are indicated by holes in the mechanical parts, allowing the parts to be aligned by inserting a pin through those holes.


                    Figure: Witness marks of PAROL6 robot

Robot mastering

Mastering the robotic arm is the process of bringing your robots joints to the witness mark of that joint and recording the position that robot is at that point.

When at the position of the witness mark robots position is know because of our knowledge of robots kinematics and CAD. it basically assigns robots encoder ticks / stepper ticks to the know joint angle

Lets take an example of J1 of our PAROL6 robotic arm


                    Figure: Standby position of PAROL6 robotic arm

At this exact position our robots joint is at 0 degrees / 0 steps. If everything was perfect you would place a pin at the witness marks and it would fit with no problems.

In the code you can edit homed_position to adjuct your robot mastering
/// @brief how much steeps need to be made from when limit is hit to standby position
float homed_position



We recommend to periodically check your belt tension and apply greese to the belts. If you see that the belt is not tight enough place another tension bearing as shown in the pictures.

Belts are located on Joints: 1,3,4,5

Joint 5 belt


Joint 4 belt


Joint 3 belt


Joint 1 belt


Use This video as a reference for belt tension! In the video we apply max force we can with the hands to the belt. You can use the belts "stretching" as a reference for your belt. Belts for J1 and J4 need to have a bit less tension on them.

Couplers and threadlocker

In case your joint starts to slip your set screw probably slipped. Tighten them again and make sure you use blue threadlocker. To be safe after you apply do not touch the robot for 24h. Also make sure you place screws in the keyhole! Threadlocker should be applied to all metal mating surfaces. Due the vibrations these parts will get lose screws.