CM6 - Compliant 3D printed robotic arm

Cheap, safe, and compliant 6 - Axis 3d printed robotic arm based on Quasi direct drive BLDC drives.

Similar projects worth following
The goal of CM6 is to be a go-to robotic arm framework for people interested in robotics. CM6 uses 6 gimbal BLDC motors paired with small gear ratio gearboxes ( from 5:1 to 9:1), by doing that it is passively compliant and safe. Each Joint is using an S-Drive BLDC driver that is mounted on modular actuator designs for specific gimbal motors. Design can be changed easily by using different size aluminum extrusions or changing the gear ratio of modular gearboxes.

The total price of this first version is around 1000 dollars in raw materials. But I believe that the future version could be pushed to around 700-800 dollars.

The Problem

Today every engineer, maker, and tinkerer can get access to a decent 3D printer for less than 300$ and start creating. Many of those people that have 3D printers also want to play and experiment with robotic arms that are close to the size or performance of human arms. While industrial robotic arms are too expensive, the only alternative is DIY robotic arms that are in most cases not really easy to program or capable of doing useful tasks.

Also, the DIY arm that will be used at home or near other people needs to be safe. That can be hard if using large reduction gearboxes or building a robotic arm that weighs a lot.

The Solution

CM6 is a robotic arm that could fill that gap. It is safe, compliant, and most of all cheap. CM6 is a 3D printable COBOT robotic arm that uses QDD (Quasi direct drive actuators). QDD gives CM6 passive compliance which makes it behave like a human arm. 


Actuators of choice for CM6 unlike most DIY robotic arms are BLDC gimbal motors. Also, this robot arm uses small reduction gearboxes (from 5:1- 9:1). These two aspects are what make this arm different from other arms. The inherited high torque and low-speed operation of BLDC gimbal motors allow great responsiveness to external disturbances and accurate current measurement. Paired with a small reduction gearbox to increase the torque a bit but still keep those great aspects of BLDC are crucial to the operation of this arm.

All actuators of this robot are 3d printed planetary gearboxes with single-stage reduction. They are designed to be easy to print, compact and most of all modular. With just a few changes in design, you can get a smaller / larger reduction or even add another reduction stage.

BLDC drivers

BLDC drivers are custom-made and are called S-Drive (Small drive). In the picture above you can see the evolution of the design, with the right one being the newest one. The goal of these drivers was to use the smallest amount of components possible and to keep the price low. 

Key features of the driver are: 

  • L6234 Three-phase motor driver
  • AS5040 10 bit encoder
  • stm32f103c ARM M3 microcontroller
  • global low side current sensing
  • UART and RS485 comms

More info on the driver: Hackaday page! Github page with firmware or DOCS.

Lightweight mechanical design 

The whole robot (including base holders) weighs less than 5kg. This is achieved by using aluminum profiles to connect parts and using low infill PETG 3d printed parts.

Easy to use software

Another important part of this project was to have software that makes programing robots "easy". GUI software was written in python and heavily relies on Petar Corke's robotic toolbox for python! It was tested on Linux virtual machine, laptop running Linux, and raspberry pi 4!

The software offers real-time monitoring of robots:

  • Motor position, current, speed, temperature
  • End effector position
  • Operating modes, errors...

Available modes at this moment are:

  • Individual motor jogging 
  • freehand teach 
  • move from point to point 

Each of these modes of movement can be recorded and replayed!

  • This is an image of Teach menu. Here you can program your robot by writing code in "gray window" or by freehand movements.
  • This is Move menu of the GUI. It allows you to jog individual motors and in the near future jog robot by XYZ.



  • Weight: 5kg
  • Reach: 
  • repeatability: +- 0.5mm (Needs visual servoing like human arms to be really precise)
  • Max load: 3kg (limited reach)
  • Voltage: 24V 
  • Max motor current: 5A (limited by the motor driver)
  • Power supply power: recommended 24V/10A 


Current BOM for CM6.

sheet - 10.83 kB - 08/31/2021 at 18:13


Simplified assembly of this robot arm made in Solidworks.

x-zip-compressed - 9.21 MB - 06/29/2021 at 18:48


All step files for this robot.

x-zip-compressed - 4.78 MB - 06/29/2021 at 18:48


  • 7 × Radial Ball bearing 35x47x7
  • 3 × Radial Ball bearing 50x67x7
  • 4 × Radial Ball bearing 25x32x4
  • 4 × Radial Ball bearing 3x8x4
  • 1 × Thrust Ball Bearing 50x70x14

View all 29 components

  • Current sense method used

    Petar Crnjak2 days ago 0 comments

    Good read about this topic and where i pulled most of the data:

    In this project, I used the simplest current sensing method and that is low side global current sensing. It is cheapest but generally used when you need to detect faults or some current limits. Not really good for torque control. Not really use din FOC

    Here are the methods I will use in the next iteration.

    The low-side configuration allows the use of a low-power op-amp as the common mode is close to the ground. This topology is largely used in FOC. The third current measurement branch is optional and can be calculated in the controller. The limitation is that low-side current sensing can only be executed while the low-side transistor of that leg is on.

    This current measurement offers the best information that can be used in feedback motor control, in order to optimize motor performance. As the shunt resistance is placed directly in line with the PWM driver, it uses dedicated current sensing, which rejects the fast common mode variation. The main advantage of this topology is that the current can be read without a strong linkage to the PWM status and without timing limitations in the case of very small PWM applied to the phase.

  • Mechanical design of the robot

    Petar Crnjak4 days ago 0 comments

    General idea was to make as much as I can 3d printed without sacrificing weight. Idea was to make all joint links made out of aluminum extrusions. That was possible for the connection of joint2 and joint3. That way weight of the arm was drastically reduced, it has improved stiffness, and is cheaper. I planned to make the forearm use aluminum extrusions also but it was hard to do that and have a spherical wrist at the same time. That is definitely on the to-do list for the next iteration of the robot.

    Infill used for the most parts was around 50%. The total weight of the arm is around 5KG. The weakest point is 3d printed wrist part as you can see from the picture below where it hit my arm during testing and broke. 

    Aluminum profiles that are on the base of the robot (joint 1) are used to secure the robot to the tables by using clamps or you can place weights on the aluminum profiles to hold the arm in place.

  • General idea of the robot

    Petar Crnjak10/09/2021 at 10:43 0 comments

    So this is more a story about how I decided to build this robot and why. Before the CM6 robotic arm, I made Faze4 robotic arm

    Faze4 is a massive 6 axis 3d printed robotic arm that weighed 15 kg. It uses 3d printed cycloidal gearboxes and stepper motors. It was designed to look nice and clean (let's not kid ourselves CM6 is crude and all over the place) but Faze4 was too massive and stiff for what I had planned to do with robotic arms. I could have closed the stepper loop with encoders but I still had problem of using heavy and inefficient steppers and not to mention high gear ratio cycloidals that are hard to backdrive. I wanted to build robotic arm like BLUE from UC Berkeley. 

    BLUE used high torque density BLDC motors, custom-made drivers, and belts to get more torque. That combination gave it quasi-direct drives, making the robotic arm compliant, able to change its stiffness, and interact safely with the environment. 

    Another project that inspired me was that of Ben Katz, where he used legs of his mini cheetah to create 2 arms that performed bilateral teleoperation.

  • Connection scheme

    Petar Crnjak09/18/2021 at 08:02 0 comments

    BLDC drivers are connected to connector board using modified IDC cables. More can be found in this folder: under building instructions 

    • RX1 = PIN0
    • TX1 = PIN1
    • RX2 = PIN7
    • TX2= PIN8
    • RX3= PIN15
    • TX3 = PIN14
    • RX4= PIN16
    • TX4 = PIN17
    • RX5 = PIN21
    • TX5 = PIN20
    • RX6 = PIN25
    • TX6 = PIN24

    Each distribution board is connected to 24V thru screw terminals. Also each distribution board needs to be connected to 5V and GND.

  • BLDC driver needed libraries

    Petar Crnjak09/18/2021 at 07:12 0 comments

    Added folder with needed libraries for S-drive bldc driver. 

  • Excel BOM on github!

    Petar Crnjak09/13/2021 at 16:31 0 comments
  • Distribution/connector board info!

    Petar Crnjak09/13/2021 at 16:26 0 comments

    A Connector board is used to connect the S-drive BLDC driver to the 24 power supply and to the teensy microcontroller.  They are designed to be stacked one on one with brass spacers.

  • Added assembly instructions on github

    Petar Crnjak09/13/2021 at 16:19 0 comments

    It will be updated regularly. Atm only mechanical assembly instructions!

  • S-Drive BLDC driver firmware

    Petar Crnjak09/09/2021 at 15:23 0 comments
  • CM6 control software github

    Petar Crnjak09/09/2021 at 15:21 0 comments

    Instructions on how to install and use it are in the github repo!!

View all 13 project logs

View all instructions

Enjoy this project?



Nathann wrote 10/10/2021 at 12:58 point


Thanks for this awesome project.

I'm really interested in the BLDC drive. Would you happen to have the price it cost you to build one and the max torque + max speed (a graph would be even betterwith the relation between torque and speed) (i roughly estimated 10-30N/m with an actuator costing 120-150$)

  Are you sure? yes | no

Petar Crnjak wrote 10/10/2021 at 16:52 point

Hey there are 3 different bldc motors used in this robot arm but using same driver. Driver is rated around 100W. It is hard to estimate cost since the chip crisis but when i was building them i was able to make them (with smt assembly) for about 8-10 euros.

  Are you sure? yes | no

Maximilian Schommer wrote 10/10/2021 at 00:52 point

This is great! I've had some problems in the past using 3D printed gears in high-torque applications. How are yours holding up over time? Do you think it might be worth making a configuration using machined delrin or metal gears?

  Are you sure? yes | no

Petar Crnjak wrote 10/10/2021 at 10:39 point

I preload all the gears and that makes them worn out quicker than usual. It would definitely be better to use machined gears. Hell, it would be better to make a whole arm out of metal :D hahaha

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates