Thursday, December 3, 2015

Building the DSLR CableCam non-demountable

This Blog post is one of an entire series
Motivation and Design
Download Link for CAD drawings (updated regular)
Bill of Materials
Motor and ESC considerations
CableCam rope
Building the DSLR CableCam
CableCam controller board
In order to simplify manufacturing, we came up with a couple of changes. Most important, the cablecam does no longer consist of three pieces - two arms plus centerpiece - but just one. And some modifications on the gimbal plate have been made.
All of these changes impact manufacturing only. If you find it more appealing being able to demount it into three pieces for easier transportation, feel free to use the previous version instead. The drawing contains both at the same standard.

Bill of Materials found here.

Step 1 - Backside

First all 25mm distance nuts are screwed into the back side plate including the two M5 ones for the running wheels. It does not matter at which side as the pieces are symmetrical. But you might want to check both plates if they have a better surface on one side or the other.

Step 2 - Drive shaft

The drive unit consist of one ball bearing with a collar and two aluminium pieces to hold the bearing's collar between them. Press the bearing into the first piece as shown below, the left part.

This is then forced into the back side plane from the other side of the cablecam, opposite the distance nuts.

To hold the bearing in place, put the 4 M3x16 screws from the inside(!) into the holes.

Add the outer collar plate and tighten all with 4 washers and stop nuts.

Put the d6x3mm washer onto the drive shaft and push it all into the ball bearing.

Secure the drive shaft from the other side with the shaft lock.

Next step is to mount the motor and the pulley into the other side plate.

And before screwing both side plates together, add the timing belt.

Then push the plate through the drive drive dog into the second ball bearing on the rive shaft.

This is how it all comes together. On the left side the collar bearing is held in axial direction, on the right hand side the bearing is fixed on the drive shaft but can move in axial direction if needed.

Put the M3x16mm stud screws into the 5 distance nuts at the end of each arm.

And mount the M3x30 distance nuts there.

On the bottom side, next to the running wheels, add one M3x10 one each side. The other right next to it will remain without a screw.

The gimbal mounting plate comes next. This block consists of 5 M3x45 screws and 5 d3x25 tubes plus the 2 8mm thick aluminium pieces. When assembling, watchout the direction and what is upside. The large plate goes under the motor. And the wholes in both pieces are not in the middle but slightly off center. This should ensure the cablecam frame does not get into the way.

Here you can see the plates are above the cablecam frame side plates.

The battery holder is built using the two X pieces, 2 M3x10 and 2 M3x16 screws, 2 M3x45 screws on 2 distance nuts.

The running wheel has the ball bearings mounted and using 2 washers on the inner side the wheel has the same distance from the frame as the drive wheel will have, hence the rope will be in one line.

The two cages are to be assembled next with 5 M3x10 screws and 1 M3x40 for each. The M3x40 only use is to make sure the cable cam can never fall off the rope, even if it flips. So when putting it on the rope you will first remove those two screws, set it on the rope and then add those screws again as safety measure.

Now it is time to add the remaining 21 M3x10 screws to give the frame its stability. In case the battery holder was not used on one or even both sides, add 2 of these screws in addition for each.

The drive wheel is added again with its 4 M3x25mm screws and 4 washers.

Depending on what ESC you are using, you can mount the ESC onto the frame directly. The SkyRC TS160 ESC requires 4 M2.5x10 screws and the required holes have been added to the frame already.

Thursday, February 19, 2015

Cablecam rope considerations

This Blog post is one of an entire series
Motivation and Design
Download Link for CAD drawings (updated regular)
Bill of Materials
Motor and ESC considerations
CableCam rope
Building the DSLR CableCam
CableCam controller board

Rope to use

Initially we discussed various options, steel cables, different types of ropes and at the end after some trial and error the conclusion was, a Dyneema rope with sheath is what we need. It is strong and yet lightweight. Its surface allows for smooth driving without much vibrations. Most important: Its prolongation under load is under 5%.
But it is very expensive.

The best rope currently is this one

The 6mm rope has 2500daN maximum load, it should be used with no more than 60% of that, which is 1500daN or about 1.5tons.


The formula to calculate the rope force is shown here

Let's try a simple calculation.

The distance to cover is l=100m. The weight of our cablecam is p=3kg. The tolerated maximum slack when in the middle is f=1m.

sqrt( (3/2)² + (3*100/ (4*1)² ) = sqrt ( 1.5² + 75² ) = 75kg

CableCam Controller Board

This Blog post is one of an entire series
Motivation and Design
Download Link for CAD drawings (updated regular)
Bill of Materials
Motor and ESC considerations
CableCam rope
Building the DSLR CableCam
CableCam controller board


The goal from the outset was to automate the cablecam as much as possible. While it is okay for one person to drive the cablecam and operate the gimbal at the same time, I cannot film myself without help. It should have a mode where it repeats the same movements on a trigger signal and drives back to start all by itself.

When discussing we came up with a first list of features
  1. Safety mechanism to stay between the start and endpoint always: No matter what the user does with the stick, never drive into the pole the rope is attached on. It is so easy to focus on the live stream of the camera, completely forgetting the braking and as result crash into something.
  2. Acceleration/Deceleration limiter: If you push the stick brutally forward, the wheels would be spinning, the timing belt of the gear might jump over some teeth,... Hence the controller should increase the speed linear.
  3. Point of interest: At a first position you point the gimbal to fixed point, then you drive to a second position and retarget the camera to the some point. With this information the controller can calculate the relative position and when driving the cablecam, it can turn the gimbal automatically facing the same object. Great for introduction shots, when filming once from front, driving by and then from the rear.
  4. Hold position: If the cablecam is driving downhill, the initial brake force might be too weak, the cablecam keeps rolling downhill slowly. But neutral means "Stay where you are".
  5. Record a run and repeat it
Of course we can later add more functionality and more sensors if needed, e.g. LiPo voltage control, alerts, monitoring,....


In order to use this controller you need
  1. The OpenPilot CC3D board. No software, just the board.
  2. A receiver sending a Sum-PPMS signal or S-Bus
  3. A way to program the CC3D with a new firmware, best is buying a STM32F4 Discovery board and using its ST-Link Programmer and Debugger
  4. The sensor board with a matching sensor wheel - see below
  5. The Firmware either as source code or the hex file, latest version to be found on github.
  6. Either an FTDI adapter or a Bluetooth module with an on board 7V voltage regulator.


Without the controller the RC receiver would be connected directly to the ESC and gimbal. Our controller acts as a preprocessor to the receiver signal with various additional inputs like the current position.

For the gimbal signal the most common behavior of the controller will to simply route the signals through, logically unchanged. The ESC is a problem. When you read our wishlist from above, we actually want the stick to control the speed. 0% means stop, 100% full speed forward. That sounds obvious but actually it is not. Imagine the cablecam is driving downhill a steep slope. For the ESC a 0% means 0% energy - let it roll downhill. And 100% thrust means full energy whatever the speed will be. And downhill, that is going to be fast.
Hence the controller takes the RC input signal as the desired speed and has to turn that into an energy/thrust value for the ESC.
On the steep hill the input of 0% means zero speed and the ESC might get -10% thrust to hold the cablecam at its current position instead of rolling downhill. And +100% speed might mean  20% forward thrust because with this little it rolls downhill already at 50mph.
Regarding the position information, my immediate thought was to use the motor hall sensors. I wanted to avoid any complex mechanics and would have accepted the slippage of the motor as error. Over the months of discussions and testing we found that the mechanics are quite simple and the slippage of the motor wheel not as little as I thought, hence changed my mind.
We drilled into the skate wheel 22 holes, 9mm deep and 3mm in diameter, equidistant on a d=60mm circle. In we gave d3x8mm magnets alternating north/south pole. These are then secured with Loctite.

The distance between two magnets is 8.6mm (=60mm*pi/22), the distance between two magnets with the same orientation 17.2mm. In order to not only measure the rotation speed but also its direction, we need to use two hall sensors where one is always a bit behind in measuring a north/south switch. I have put the two sensors 13mm apart.

These hall sensors (AN1120) work from 3V onwards to 24V and output their supply voltage. Hence a voltage regulator (LM1117 MP3,3 low drop) and its required tantalum capacitor (10uF 16V Typ C) was added to get a proper 3V input to the microprocessor.

Another huge discussion was the microprocessor to use. I insisted on one with enough UART channels, a 16bit hardware quadruple counter for the hall sensor and a convenient way to measure the input RC signals and create my own. The break through idea was to hijack the hardware of a flight controller, the OpenPilot CC3D board.
The 16bit counter makes life much easier and allows counting from 0 to 295m (or from 0 to -295m).

It has a powerful STM32 MCU, lots of timers, even SPI and an EEPROM for saving settings and monitoring information.

Best of all, you get in easily and costs just 20USD.


The controller should get input mostly from the rc receiver, later support Bluetooth as alternative command input.
The cablecam is turned on and this current position is hence zero. The start and end position is set to -32768 and +32768. Using the RC stick the cablecam is driven either forward or reverse towards the desired end position. The controller checks the rc input and allows the cablecam to drive normally, only the max speed is greatly reduced. If no RC input is received for 30 seconds, the current position is assumed to be the end position, the start position is zero.
From now on the cablecam can be driven between those two points with the programmed speed and acceleration limits. If at any time the speed is so high that the remaining braking distance would not suffice, the controller does reduce the speed at max acceleration.
This video gives a first impression of the positional control

Hardware installation

The CC3D comes with a couple of cables which we use for the various connectivity.

Motor ESC

The Motor ESC with all its three pins is connected to Servo Out 1, the multi-pin connector with the label "1". The ESC does also power the CC3D and all its connected peripherials, hence we need all three wires connected: Gnd, Vcc and Signal-


The Conn1 connector is the broadest JST-SH 8 pin plug and we use the two outer pins of it.
Pin1 - black - Gnd <--> Gnd
Pin2 - red - Vcc <--> Vcc
Pin7 - grey - Sensor1 <--> S1
Pin8 - white - Sensor2 <--> S2

RC Receiver

Program your RC receiver to produce a SumPPM signal and connect its 3 Pins to the Pin called Servo out 4. In the image above it is the multipin connector with the label "4". Yes(!), the Input from the receiver goes into the Servo Out 4, it is reprogrammed as input.


Servo Out 2 and 3 does produce a normal PWM Signal for Pitch (2) and Yaw (3). As the gimbal board is powered from the same battery like the ESC, they share a common Gnd already and hence connect the signal pins only. Two wires only!

UART for Debugging and settings

The Flexiport provides a serial port to send commands to the CC3D firmware and provide debugging information. The port settings are 38400 baud, one stop bit, no parity.
Attention! Do not connect Pin2 with your FTDI UART-to-USB.
In my case I have connected a pre-configured Bluetooth module here and can use the tablet with a bluetooth serial terminal to send commands.

Installing and using the software

In the google drive folder there is the "CC3D Cablecam" file, which contains all the source code and the CooCox IDE project files. In the bin subfolder the compiled hex file is found.
Flash the CC3D with this hex file by whatever standard methods available to you.

Once all is powered up, open a terminal session with the board and type a first command "$h" followed by a sequence. This will print the help text with all further commands.

One of the first settings you have to make is setting the channels. So type "$i" and you will see the current RC values for each channel and what channel is used for which input function. The first 8 channels are from regular PWM inputs which we haven't talked about yet and the next 8 channels are the first 8 Sum-PPMS channels. Using the command "$i 9,11,12" you would set the Speed Input to the first channel (8+1) of the SumPPMS, channel 3 (8+3) is pitch and channel 4 (8+4) is yaw input.

To make save these changes permanently to the eeprom of the CC3D use the command "$w".

The first test you can make is moving the cablecam manually on the rope. Thus the sensor board will recognize the move, the controller finds that it is no longer at position 0 and will start to engage the ESC to move it back into the proper positon. Hopefully the P, I and D values are a good enough match for your cable cam.

Software implementation

The basic principle is that we read the rc input, based on the last position and current speed calculate the new target position. In parallel a PIC control loop does whatever it takes to drive the cablecam to this target position.

Building the GoPro CableCam - Part 4 - Final Assembly

This Blog post is one of an entire series
Motivation and Design
Download Link for CAD drawings (updated regular)
Motor and ESC considerations
CableCam rope
DSLR CableCam - Bill of Material
DSLR CableCam - Assembly of the two arms
DSLR CableCam - Assembly of the main body
DSLR CableCam - Final assembly
GoPro CableCam - Bill of Material
GoPro CableCam - Assembly of the upper body
GoPro CableCam - Assembly of the lower body
GoPro CableCam - Final assembly
CableCam controller board

Final assembly

To connect the two parts two lock pins d6 50mm (or slightly longer) with extra safety is used.
When connecting the two, the battery holder is on one side, the motor on the other side to balance the CableCam.

The lower body has four holes for mounting a regular sized brushless gimbal control board already and the gimbal itself has to be adapted to the center plate at the bottom.