Easyrig and Flowcine Serene arm, DJI Ronin and Canon C200

by Samuele Lilliu | 5 February 2021

Updated review of a Canon C200 mounted on a DJI Ronin-m gimbal mounted on an EASYRIG vest with a Flowcine Serene arm.

An EasyRig vest is a device worn by a camera operator that helps support the weight of a camera, allowing them to shoot for longer periods of time without fatigue. It works by transferring the weight of the camera from the operator’s shoulders to their hips, which helps reduce strain on the back and shoulders. A Flowcine Serene arm is a device that helps stabilize a camera mounted on an EasyRig vest or other support system. It works by counteracting the movement of the camera operator and keeping the camera steady, even when the operator is moving around.

Some advantages of using an EasyRig vest with a Flowcine Serene arm include:

  • Reduced fatigue: The EasyRig vest helps reduce the physical strain on the camera operator, allowing them to shoot for longer periods of time without getting tired. This can be especially useful for long days on set or for shoots that involve a lot of movement.

  • Improved stability: The Flowcine Serene arm helps stabilize the camera, which can be especially useful when shooting handheld or in other situations where there is a lot of movement. This can result in smoother, more stable footage.

  • Increased versatility: The combination of an EasyRig vest and a Flowcine Serene arm allows the camera operator to move freely and capture footage from a variety of angles and perspectives. This can add visual interest to a film and make it more dynamic.

Overall, using an EasyRig vest with a Flowcine Serene arm can help a camera operator shoot for longer periods of time without fatigue, capture smoother, more stable footage, and increase their versatility on set.

In this video you’ll find an update of a review of my previous rig: a Canon C200 mounted on a DJI Ronin-m gimbal mounted on an EASYRIG vest with a Flowcine Serene arm. Even though the Ronin-m is a relatively old gimbal some of the concepts explained here are still relevant. I recently replaced my old Ronin-m with a ronin RS2, which is a big improvement compared to the DJI Ronin-m both in terms of weight, size, portability, and functionalities. I also replaced the EASYRIG with a ThanosPro II Steadicam.

The Ronin-m with the Canon C200 system weighs more than 4Kg (2.3Kg for the ronin, 1.43Kg for the Canon C200 + the weight of a lens), meaning that after a few minutes you’ll probably get tired. Having a vest allows like the EASYRIG allows you to distribute the weight from your arms to your body, so that you can focus more on the shots rather than on the weight.

Gimbals can only compensate for angular vibrations in the pitch, roll, and tilt angles. If you want to get rid of vertical vibrations or the up and down movement you produce when you walk you’ll need something that acts as a low pass filter. When you mount a Flowcine Serene arm on the EASYRIG your rig essentially becomes a spring-mass-damper system or a low pass filter, so it will filter out high frequency vibrations. Here I tried to compare the motion stability between the two setups, handheld ronin-m + Canon C200 and DJI Ronin-m + Canon 200 attached to the EASYRIG system.

I took these shots while walking towards a target. The target position in the shots is tracked in After Effects and processed in MATLAB. Here is the source code.

clear all
name_ = 'MVI_0037';
mainDirectory = 'N:\StabilizerRoninM\softwareProcessing\ExportedTracksFromAE\'
subDirectory  = [name_ 'Plots\'];
load(['N:\StabilizerRoninM\MATLAB_SESSIONS\' name_ '.mat'])
temp = eval(name_);
totalDirectory = [mainDirectory subDirectory];
T = 29.97;             % Sampling period    
Fs = 1/T               % Sampling frequency
%% Plot X vs Y
vectorSize = numel(temp(:,1));
f = figure;
hold on
ax = gca;
COLOR = parula(vectorSize);
for i = 1 :  vectorSize 
    p(i) = plot(temp(i,1),temp(i,2), ...
                'Marker','o', ...
ax.XLabel.String = 'X pixel'
ax.YLabel.String  = 'Y pixel'
ax.DataAspectRatio = [1 1 1];
c = colorbar
c.Ticks = [0 1];
c.TickLabels = {num2str(0) num2str(vectorSize/T,3)}
c.Label.String = 'Time (s)';
print(f, [totalDirectory name_ '_2D'], '-djpeg', '-r300')    
%% Plot 1
X = temp(:,1); X = X - min(X);
Y = temp(:,2); Y = Y - min(Y);
X_wave = (X-smooth(X, 70));
Y_wave = (Y-smooth(Y, 70));
f = figure; ax = gca; hold on
Time = (1:vectorSize)/T;
plot(Time, X_wave,'DisplayName', 'X')
plot(Time, Y_wave,'DisplayName', 'Y')
ax.XLabel.String = 'Time (s)'
ax.YLabel.String  = 'Position (pixel)'
l = legend('show')
l.Box = 'off'
grid on
v = [abs(X_wave) , abs(Y_wave)];
Stat = [max(v) ; std(v)]
print(f, [totalDirectory name_ '_XYcoord'], '-djpeg', '-r300')    
saveas(f, [totalDirectory name_ '_XYcoord.fig'])    
[XX_f, XX_a] = singleSided(X_wave(:,1),T);
[YY_f, YY_a] = singleSided(Y_wave(:,1),T);
f = figure;
ax = gca;
hold on
plot(XX_f, XX_a,'DisplayName', 'X') % One-Sided Amplitude Plot
plot(YY_f, YY_a,'DisplayName', 'Y') % One-Sided Amplitude Plot
ax.YScale = 'log'; ax.XScale = 'log'
xlabel('Frequency (Hz)')
ylabel('FFT Amplitude (a.u.)')
grid on
print(f, [totalDirectory name_ '_XYfft'], '-djpeg', '-r300')    
saveas(f, [totalDirectory name_ '_XYfft.fig'])    
%% Plot trajectory in movie
directory_ = 'N:\StabilizerRoninM\softwareProcessing\ExportedTracksFromAE\MVI_0025\';
directory2 = 'N:\StabilizerRoninM\softwareProcessing\ExportedTracksFromAE\MVI_0025Graph\';
name = dir(directory_);
vectorSize = numel(temp(:,1));
COLOR = parula(vectorSize);
f = figure; ax = gca;
for k = 1 : vectorSize  %fill in the appropriate number
  I0 = imread([directory_ name(k+2).name ]);
  if k == 1 
  i = imshow(I0, 'Parent', ax);
  i.CData = I0;    
  ax.DataAspectRatio = [1 1 1];
  title(thisax, sprintf('Frame #%d', k));
  hold on;
  p(k) = plot(temp(k,1),temp(k,2), ...
                'Marker','o', ...
  print(gcf, [directory2 num2str(k)], '-djpeg', '-r300')

This is the code for the single-sided Fourier transform:

function [XX, YY] = singleSided(Z, T)
  L = numel(Z);           % Length of signal
  Ts = 1/T    ;           % sampling interval in seconds (s)
  Fs = 1/Ts   ;           % sampling frequency (Hz) 
  Fn = Fs/2   ;           % Nyquist frequency (Hz)
  FTa = fft(Z)/L;         % Fourier Transform (Scaled)
  Fv = linspace(0, 1, fix(L/2)+1)*Fn;   % Frequency Vector
  Iv = 1:length(Fv);      % Index Vectorfigure
  XX = Fv';
  YY = (abs(FTa(Iv))*2) ; % One-Sided Amplitude Plot

It turns out that body oscillations along the x axis are always present. These oscillations are due to human walk dynamics and can be reduced by walking in a better way. If you don’t want heavy cables exerting tension on the camera mounted on the ronin-m you can simply use a mobile phone connected to the camera Wi-Fi and access the Canon webpage app from which you can control the camera (you will need to type

Monitoring issues have been fixed with the DJI RS2. So if you can, throw away your ronin m and get an RS2. Based on what I’ve found out I believe a spring arm mounted on a vest should be able to do a better job than the Easyrig shown here. But I haven’t tried yet.