Welcome to our Community
Wanting to join the rest of our members? Feel free to sign up today.
Sign up

Making Bebop 2 Power fly for 40 min in 2022 using 21700 liion cells

Assemblybhz

Active member
Joined
Aug 7, 2022
Messages
36
Reaction score
12
Hello,

For some weeks ago i bought a Bebop 2 Power with 3 batteries , and I think Bebop is a fantastic drone, unfortunately one battery was in bad shape, so i decided to change to change to 3 21700 cells and make the changes in the software to fully enjoy the batteries

I made i pack with 3 Samsung inr21700-40T 4000mAh 35A and this batteries costs me only 4.75 Euro per cell. The new pack was only 18.1grams heavier than the original one with 25% more mAh.

But i more expensive one INR21700-50S 5000mAh 35A give me 5000mAh but it costs more then 8 Euros per cell


Utilizing the old parrot guide An unofficial Bebop drone hacking guide 1.6 i changed the /etc/colibri/common/estimator.cfg and /etc/colibri/milosblack/estimator.cfg to adapt to the discharge curves and minimal voltage

Samsung%20INR21700-40T%204000mAh%20(Cyan)-Capacity.png


I made also a short Youtube video here:

I changed also the /bin/onoffbutton/ folder to make compatible with all the three cell types

shortpress_5.sh to Li-ion Cell pack (My pack with 4000mAh)
shortpress_6.sh to Li-Po Cell pack (Original bebop 2 2700mAh)
shortpress_7.sh to Li-hv Cell pack (Original bebop 2 power 3300mAh)

So i can just press the on/off button to reconfigure the drone to different types of battery easily

Please let me know what you think about the project and how to make it better.

Questions are also welcome :)

BR Rafael
 
Thanks for the post. I wanted to ask, how do you charge these batteries? Can I charge them using the standart parrot charger? Did you modify the stock battery's circuit board at all? Because I've seen some videos on youtube where people cut off some lines in PCB on the charging controller when adding the custom battery's. Would be great if you made a video with more details.
 
Thanks for the post. I wanted to ask, how do you charge these batteries? Can I charge them using the standart parrot charger? Did you modify the stock battery's circuit board at all? Because I've seen some videos on youtube where people cut off some lines in PCB on the charging controller when adding the custom battery's. Would be great if you made a video with more details.
Hello Arm1nas, No you can't use the charger from parrot. I cutted the lines because my battery was original from parrot, i believe those GIFI etc.. don't have the BMS circuit. And I charge my batteries with a hobby grate charger my is this one: Rc Hobby Battery Balance Charger.
Remember to change also the values in the /etc/colibry/milosblack/ (im my case Bebop 2 power) if normal bebop2 the folder is /etc/colibry/milosboard/
And i have three diferrent files one to liion one to lipo and one to lihv so i can continue to use my original bebpo 2 power batteries using onoffbutton scripts

Code:
/etc/colibry/milosblack # cat estimator.cfg.liion
#-----------
# Estimators
#-----------

# Global
    #Sensor Monitoring Algorithm
        #Vision Monitoring
altitudeVisionSensorToGround = 0.04; # [m]
        #Pressure observation
heightGroundEffect = 0.5; # [m]
durationLandingWithoutPress = 5.0; # [s]

# Vertical Model

verticalModelInitCz = 0.9; # [s-1]

# Battery

batteryPercentageTableVoltage = [8.400,
   8.4400,
   8.4900,
   8.6100,
   8.7000,
   8.7600,
   8.8500,
   9.0100,
   9.0600,
   9.3000,
   9.8100,
   10.0200,
   10.4100,
   10.7700,
   10.9200,
   10.9800,
   11.1750,
   11.2500,
   11.4900,
   11.5650,
   11.6100,
   11.7100,
   11.9000,
   11.9200,
   11.9500,
   11.9900,
   12.0500,
   12.1500,
   12.3000];

batteryPercentageTablePercentage = [0.0,
   0.54,
   1.11,
   1.72,
   2.37,
   3.09,
   3.9,
   4.85,
   6.06,
   8.14,
   17.33,
   22.84,
   37.54,
   43.98,
   54.99,
   60.49,
   73.32,
   76.54,
   79.83,
   84.22,
   86.97,
   91.42,
   96.52,
   97.72,
   98.42,
   98.95,
   99.38,
   99.74,
   100.0];


and /etc/colibry/common/estimator.cfg

shutdownVoltage = 8.3; # [V] Will be compared with the estimated no load voltage

Code:
/etc/colibry/common # cat estimator.cfg.liion
#-----------
# Estimators
#-----------

# Global
    #Covariance Matrix (P)
PinitVit =
(
    "PinitVitInitValue",
    ("Default", 10.0), # [mm/s]
    ("Freefall", 2000.0) # [mm/s]
);
PinitAngle = 3.0; # In degrees
PinitAlt = 10.0; # In mm
PinitHorizontalBias = 2.0; # In mg
PinitDerive =
(
    "PinitDeriveInitValue",
    ("Default", 0.5), # [deg/s]
    ("Immobility", 5.0), # [deg/s]
    ("Calibration", 0.04) # [deg/s]
);
PinitBP = 0.0; # In Pascals
PinitCap = 0.0; # In degrees
PinitPosition = 0.0;
PinitVent = 0.0;
PinitVerticalBias = 30.0; # In mg
pathToAccBiasFile = "/data/acc_calibration_v1.bin";
    #Process Noise (Q)
bruitAcc = 2.5; # In thousandth's of g, the actual value will be : (bruitAcc * dt)^2
bruitVol = 2.0; # the actual value will be (bruitVol*_SQRT_MIN)^2 * adcTs
bruitVolVert = 0.4; # the actual value will be (bruitVolVert*_SQRT_MIN)^2 * adcTs
bruitAccVol = 40.0; # the actual value will be (bruitAccVol * MG)^2
rdw = 0.5; # the actual value will be (rdw*DEG_TO_RAD*adcTs)^2
rdwSol = 5.5; # the actual value will be (rdwSol*DEG_RAC_MIN)^2
feGyro = 0.01;
feSol = 0.02;
dBiais = 0.3; # the actual value will be (dBiais*MG*_SQRT_MIN)^2 * adcTs
dBiaisZ = 0.65; # the actual value will be (dBiaisZ*MG*_SQRT_MIN)^2 * adcTs
dDerive = 0.03; # the actual value will be (dDerive*DEG_TO_RAD*_SQRT_MIN)^2 *adcTs
dBiaisPression = 1.0; # the actual value will be (dBiaisPression*_SQRT_10MIN)^2 *adcTs
dBiaisTh = 15.0; # In thousandth's of g
dBiaisMvt = 2.0; # dBiaisMvt/90*MG
dDeriveTh = 0.2; # In degrees/s
dVent = 0.02;
TauVent = 0.5;
tauWindToZero = 1.5; # [s]
dPosition = 0.5;
    #Observation Noise (R)
RAero = 200.0; # the actual value will be (RAero * MG)^2
RSpeedGPS = 0.2; # the actual value will be (RSpeedGPS)^2
Rderive = 1.0; # (Rderive*DEG_S)^2
RbiaisZ = 10.0; # (RbiaisZ*MG)^2
RPression = 0.3; # (RPression)^2
RUs = 50.0; # (RUs*MM)
RPositionGPS = 2.0; # the actual value will be (RPositionGPS)^2
    #Sensor Monitoring Algorithm
        #Dynamic Inclinometer
bruitInclinoMax = 30.0; # the actual value will be (bruitInclinoMax*DEG)^2
bruitInclinoMin = 5.0; # the actual value will be (bruitInclinoMin*DEG)^2
normAccMax = 0.5;
normAccMin = 0.015;
reductionBruitInclino = 5.0; # the actual value will be (reductionBruitInclino*DEG)^2
        #Vision Monitoring
fusionVisionVz = false;
visionIndicatorActive = false;
            #1st order low-pass (tau=0.05s / fe=66Hz)
visionFilterB = [ 0.0, 0.2591818];
visionFilterA = [ 1.0, -0.7408182];
            #1st order low-pass (tau=0.5s / fe=66Hz)
visionSigmaFilterB = [ 0.0, 0.0295545];
visionSigmaFilterA = [ 1.0, -0.9704455];
visionSigmaMin = 0.15;
gpsVisionSensitivity = 0.3;
gpsVisionSensitivityMin = 0.3;
cptVisionFail = 100;
visionIndicatorRejectThreshold = 0.8;
visionIndicatorRejectThresholdHoveringNoGps = 1.5;
visionSpeedRminSet =
(
    "visionSpeedRminInitValue", # already squared!
    ("Default", 0.25), # [m/s]^2
    ("GPS",     1.0)  # [m/s]^2
);
visionSpeedRminAltitudeGain = 0.0011; #[ (m/s)^2/(m^2)]
dRVisionSpeedZ = 0.3; # [no unit]
altitudeVisionSensorToGround = 0.04; # [m]
        #Magic Carpet Dynamic Noise
RCarpetHorizontalMax = 20.0; # In cm
RCarpetHorizontalMin = 10.0; # In cm
NbPaternsForMaxCarpetHorizontalPrecision = 5.0;
minNbPatternForEstimation = 2;
RCarpetAltitudeMax = 15.0; # In cm
RCarpetAltitudeMin = 5.0; # In cm
NbPatternsForMaxCarpetAltitudePrecision = 5.0;
        #Ultrasound Algorithm
nbSamplesUS = 5;
thresholdCoherenceUS = 0.15;
UsRejectionStepThreshold = 0.12;
UsRejectionPredictionThreshold = 0.12;
UsRejectionNewGroundHeightThreshold = 0.07;
UsRejectionFirstGroundHeightThreshold = 0.3;
UsAltMinForPresence = 2.0;
UsAltMaxForPresence = 3.5;
ultrasoundFrequency = 15.0; # [Hz]
timeToLossUsSignal = 1.0; # [s]
SamplesNb = 5;
nbNoUsMeasuresToResetBuffers = 67;   # 5 samples at 15 Hz over 200 Hz
thresholdUsCarpetLowHeightEstimator = 0.0799999982118607;
thresholdUsCarpetHighHeightEstimator = 0.200000002980232;
thresholdTimeWihtoutCarpetInEstimator = 100.0;
gainRejetUsHeightEstimator = 0.00219999998807907;
        #Pressure observation
diffAltitudePressMax = 8.0; # [m]
altitudePressMinForTakeOff = 0.6; # [m]
heightGroundEffect = 0.0; # [m]
durationLandingWithoutPress = 0.0; # [s]
        #Aerodynamic observation
normAccHorMax = 1.0; # In g
timeBeforeObsAcc = 200.0;
    #Various tests
BiasZInclThreshold = 45.0; # In degrees
accHorizontalityTest = 30.0; # the actual value will be (accHorizontalityTest*DEG*GRAVITY)
maxEstimatedHorizontalBias = 100.0; # In mg
maxEstimatedVerticalBias = 350.0; # In mg
AccThresholdForAngleInit = 3.4;
    #GPS settings
gpsLag = 1;
timeToResetPastSpeed = 0.400000005960464; # 2*dtGps
# Butterworth filter 1st order (Fc = 0.1Hz, Fe=5Hz)
takeoffAltitudeFilterB = [3.0468747e-2,
                          3.0468747e-2];
takeoffAltitudeFilterA = [1.0000000,
                          -9.3906251e-1];
    # States activation
alwaysIntegratePosition = false; # For Kalamos and Pix4D
    # Sensor Activation
xsensFusion =
{
    pos = true;
    speed = false;
    angles = false;
};
pathToGyroBiasFile = "/data/gyro_calibration_v1.bin";
minBiasDiffToSaveGyroCalib = 0.18; # [deg/s]
minTemperatureToSaveGyroCalib = 49.5; # [degree Celcius]


# Vertical Model
# All cov are squared in config manager

verticalModelInitCz = 0.9; # [s-1]
verticalModelInitCovGamma = 0.0667; # [kg-1]
verticalModelInitCovCz = 0.0167; # [s-1]
verticalModelCovR = 1.6; # [m.s-2]
verticalModelBruitGamma = 0.002; # [kg-1]
verticalModelBruitCz = 0.0; # [s-1]
verticalModelMinGamma = 1.0; # [kg-1]
verticalModelMinCz = 0.0; # [s-1]
verticalModelMaxGamma = 3.0; # [kg-1]
verticalModelMaxCz = 1.5; # [s-1]
verticalModelMotorHistorySize = 3;

# Aerodynamic Torque

aerodynamicTorqueInitCov = 1.0;
aerodynamicTorqueProcessNoise = 0.015;
aerodynamicTorqueMeasureNoise = 5.0;
aerodynamicTorqueRotationalLag = 2;
aerodynamicTorqueInitialModel = [ -0.008500000461936, 0.442699998617172, -0.173199996352196, 15.7835998535156, -1.01530003547668, 4.92819976806641, 312.894104003906, -7.81479978561401, 14.4722995758057, 50.79090023040771 ];
    # Butter order 2, fc=40Hz, fs=200Hz
aerodynamicTorqueZFilterB = [ 0.206572083826148,   0.413144167652296,   0.206572083826148 ];
aerodynamicTorqueZFilterA = [ 1.000000000000000,  -0.369527377351241,   0.195815712655833 ];

# Heading

pathToMagnetoBiasFile = "/data/magneto_calibration_v1.bin";
thresholdTimeToAbortCalibration = 30.0; # [s]
noiseMagnetoMeasurement = 60.0; # [mG] - the actual value will be (noiseMagnetoMeasurement)^2 [mG^2]
noiseProcessMag = 300.0; # [mG/(rad/s)] - the actual value will be (2*PdriftGyro*noiseProcessMag)^2 [mG^2]
noiseProcessMagBias = 50.0; # [mG] - the actual value will be (noiseProcessMagBias*_SQRT_30MIN)^2 *adcTs)  [mG^2]
thresholdMagBiasCov =
(
    "thresholdMagBiasCovInitValue",
    ("HighAccuracy", [180.0, 180.0, 180.0]), # [mG^2]
    ("MediumAccuracy", [400.0, 400.0, 900.0]), # [mG^2]
    ("LowAccuracy", [3600.0, 3600.0, 8100.0]) # [mG^2]
);
magneticFieldCovInit = 2500.0; # [mG^2]
magnetoBiasCovInit = 40000.0; # [mG^2]
magnetoInnovationTestSigmaLevel = 2.0; # []
minMagnetoCalibInnovationRatioToValidateAxis = 0.95; # []
magnetoBiasValiditySigmaLevel = 4.0; # []
biasUpdateAllowedSigmaLevel = 1.0; # []
invalidCalibrationDetectionDuration = 2.0; # [s]

headingFusionGainMagneto = 0.0015; # []
headingFusionGainCarpet = 0.3; # []
headingFusionGainXsens = 0.1; # []
magicCarpetMinCovPsi = 5.0; # [deg]
magicCarpetHeadingProcessNoise = 2000.0; # [deg/s]
magicCarpetMinPatternsForHeading = 2; # []
magicCarpetDelay = 0.1; # [s]

# User Trajectory
userTrajectoryConfig =
{
    positionStdInit = 100.0 # [m]
    positionProcessNoise = 0.3 # [m/s]
    speedProcessNoise = 2.0 # [m/s2]
    initialHeight = 1.5; # [m]
    minDistance = 2.0; # [m]
    defaultDistance = 10.0; # [m]
    barometerMaxFrequency = 1.0; # [Hz]
    barometerFilterGain = 0.5; # []
    barometerHeightNoise = 3.0; # [m]
    barometerSpeedNoise = 0.5; # [m/s]
    barometerObsGpsTimeout = 2.0; # [s]
    barometerMinNewDataForHeightInit = 3; # []
    barometerMaxGapForValidity = 60.0; # [Pa]
    # Butterworth 1st order, fc/(fs/2) = 0.07
    barometerValidPressureFilterB = [9.9424465e-2, 9.9424465e-2];
    barometerValidPressureFilterA = [1.0, -0.8011511];
    targetImageLagToNoise = 25.0; # [deg/s]
    targetImageMinNoise = 6.0; # [deg]
    targetImageConstantRangeNoise = 0.1; # [1/m]
    targetImageLostUnvalidCount = 20; # [No unit]
    gpsPositionMinNoise = 1.0; # [m]
    gpsSpeedNoise = 0.2; # [m/s]
    gpsPositionErrorForReset = 100.0; # [m]
    gpsDistanceMax = 1000.0; # [m]
    gpsMinNewDataForPosition = 3; # []
    securityPositionNoise = [0.5, 0.5, 0.3]; # [(m/s)^2*sqrt(dt)]
    brakingTime = 20.0; # [s]
    accuracyForPosition = 20.0; # [m]
    accuracyForDirectionOK = 6.0; # [deg]
    accuracyForDirectionKO = 10.0; # [deg]
    directionUnknownTimeout = 1.5; # [s]
};
userCourseFilterTimeConstant = 1.0; # [s]
userCourseFilterMinSpeed = 1.0; # [m/s]

# Battery

smartBatteryIsUsed = false;
batteryType = 0;
vbatFilterBCoef = [ 0.0015683340607211, 0.0015683340607211 ];
vbatFilterACoef = [ 1.0, -0.996863305568695 ];


shutdownVoltage = 8.3; # [V] Will be compared with the estimated no load voltage

# Parameters Kalman filter
vBatRawDiff = 0.1; #[V]
batteryModelInitBeta = 0.05; # []
batteryModelMinBeta = 0.02; # []
batteryModelMaxBeta = 0.26; # []
batteryModelInitCovE = 2.5e-07; # [V²]
batteryModelInitCovBeta = 6.25e-06; # [] (pow2(0.05*batteryModelInitBeta))
batteryModelMeasurementNoise = 1.0e-02; # [V²]
batteryModelNoiseE = 5.0e-07; # (pow2(0.01)*ADC_TS);
batteryModelNoiseBetaNoEstimation = 0.0;
batteryModelNoiseBetaFastEstimation = 5.0e-09; # (pow2(0.05*batteryModelInitBeta)*ADC_TS)
batteryModelMinMotorsVoltage = 0.0; #[V]

# Velocities

nbPtMCMem = 3;
positionMCVarThreshold = 0.00999999977648258;
gainEstPos = 0.5;
maxMCPattern = 7;
gainRejetVisionPos = 0.200000002980232;
offsetRejetVisionPos = 0.0500000007450581;
velocitiesAccGain = 0.5;
maxTimeNotVisionS = 20.0;

# ESC motor speed control

motorSpeedsFilterB = [ 1.0000,   0.0000 ];
motorSpeedsFilterA = [ 1.0000,   0.0000 ];

Good luck
/Rafael
 
  • Like
Reactions: RainyShadow
Hello Arm1nas, No you can't use the charger from parrot. I cutted the lines because my battery was original from parrot, i believe those GIFI etc.. don't have the BMS circuit. And I charge my batteries with a hobby grate charger my is this one: Rc Hobby Battery Balance Charger.
Remember to change also the values in the /etc/colibry/milosblack/ (im my case Bebop 2 power) if normal bebop2 the folder is /etc/colibry/milosboard/
And i have three diferrent files one to liion one to lipo and one to lihv so i can continue to use my original bebpo 2 power batteries using onoffbutton scripts

Code:
/etc/colibry/milosblack # cat estimator.cfg.liion
#-----------
# Estimators
#-----------

# Global
    #Sensor Monitoring Algorithm
        #Vision Monitoring
altitudeVisionSensorToGround = 0.04; # [m]
        #Pressure observation
heightGroundEffect = 0.5; # [m]
durationLandingWithoutPress = 5.0; # [s]

# Vertical Model

verticalModelInitCz = 0.9; # [s-1]

# Battery

batteryPercentageTableVoltage = [8.400,
   8.4400,
   8.4900,
   8.6100,
   8.7000,
   8.7600,
   8.8500,
   9.0100,
   9.0600,
   9.3000,
   9.8100,
   10.0200,
   10.4100,
   10.7700,
   10.9200,
   10.9800,
   11.1750,
   11.2500,
   11.4900,
   11.5650,
   11.6100,
   11.7100,
   11.9000,
   11.9200,
   11.9500,
   11.9900,
   12.0500,
   12.1500,
   12.3000];

batteryPercentageTablePercentage = [0.0,
   0.54,
   1.11,
   1.72,
   2.37,
   3.09,
   3.9,
   4.85,
   6.06,
   8.14,
   17.33,
   22.84,
   37.54,
   43.98,
   54.99,
   60.49,
   73.32,
   76.54,
   79.83,
   84.22,
   86.97,
   91.42,
   96.52,
   97.72,
   98.42,
   98.95,
   99.38,
   99.74,
   100.0];


and /etc/colibry/common/estimator.cfg

shutdownVoltage = 8.3; # [V] Will be compared with the estimated no load voltage

Code:
/etc/colibry/common # cat estimator.cfg.liion
#-----------
# Estimators
#-----------

# Global
    #Covariance Matrix (P)
PinitVit =
(
    "PinitVitInitValue",
    ("Default", 10.0), # [mm/s]
    ("Freefall", 2000.0) # [mm/s]
);
PinitAngle = 3.0; # In degrees
PinitAlt = 10.0; # In mm
PinitHorizontalBias = 2.0; # In mg
PinitDerive =
(
    "PinitDeriveInitValue",
    ("Default", 0.5), # [deg/s]
    ("Immobility", 5.0), # [deg/s]
    ("Calibration", 0.04) # [deg/s]
);
PinitBP = 0.0; # In Pascals
PinitCap = 0.0; # In degrees
PinitPosition = 0.0;
PinitVent = 0.0;
PinitVerticalBias = 30.0; # In mg
pathToAccBiasFile = "/data/acc_calibration_v1.bin";
    #Process Noise (Q)
bruitAcc = 2.5; # In thousandth's of g, the actual value will be : (bruitAcc * dt)^2
bruitVol = 2.0; # the actual value will be (bruitVol*_SQRT_MIN)^2 * adcTs
bruitVolVert = 0.4; # the actual value will be (bruitVolVert*_SQRT_MIN)^2 * adcTs
bruitAccVol = 40.0; # the actual value will be (bruitAccVol * MG)^2
rdw = 0.5; # the actual value will be (rdw*DEG_TO_RAD*adcTs)^2
rdwSol = 5.5; # the actual value will be (rdwSol*DEG_RAC_MIN)^2
feGyro = 0.01;
feSol = 0.02;
dBiais = 0.3; # the actual value will be (dBiais*MG*_SQRT_MIN)^2 * adcTs
dBiaisZ = 0.65; # the actual value will be (dBiaisZ*MG*_SQRT_MIN)^2 * adcTs
dDerive = 0.03; # the actual value will be (dDerive*DEG_TO_RAD*_SQRT_MIN)^2 *adcTs
dBiaisPression = 1.0; # the actual value will be (dBiaisPression*_SQRT_10MIN)^2 *adcTs
dBiaisTh = 15.0; # In thousandth's of g
dBiaisMvt = 2.0; # dBiaisMvt/90*MG
dDeriveTh = 0.2; # In degrees/s
dVent = 0.02;
TauVent = 0.5;
tauWindToZero = 1.5; # [s]
dPosition = 0.5;
    #Observation Noise (R)
RAero = 200.0; # the actual value will be (RAero * MG)^2
RSpeedGPS = 0.2; # the actual value will be (RSpeedGPS)^2
Rderive = 1.0; # (Rderive*DEG_S)^2
RbiaisZ = 10.0; # (RbiaisZ*MG)^2
RPression = 0.3; # (RPression)^2
RUs = 50.0; # (RUs*MM)
RPositionGPS = 2.0; # the actual value will be (RPositionGPS)^2
    #Sensor Monitoring Algorithm
        #Dynamic Inclinometer
bruitInclinoMax = 30.0; # the actual value will be (bruitInclinoMax*DEG)^2
bruitInclinoMin = 5.0; # the actual value will be (bruitInclinoMin*DEG)^2
normAccMax = 0.5;
normAccMin = 0.015;
reductionBruitInclino = 5.0; # the actual value will be (reductionBruitInclino*DEG)^2
        #Vision Monitoring
fusionVisionVz = false;
visionIndicatorActive = false;
            #1st order low-pass (tau=0.05s / fe=66Hz)
visionFilterB = [ 0.0, 0.2591818];
visionFilterA = [ 1.0, -0.7408182];
            #1st order low-pass (tau=0.5s / fe=66Hz)
visionSigmaFilterB = [ 0.0, 0.0295545];
visionSigmaFilterA = [ 1.0, -0.9704455];
visionSigmaMin = 0.15;
gpsVisionSensitivity = 0.3;
gpsVisionSensitivityMin = 0.3;
cptVisionFail = 100;
visionIndicatorRejectThreshold = 0.8;
visionIndicatorRejectThresholdHoveringNoGps = 1.5;
visionSpeedRminSet =
(
    "visionSpeedRminInitValue", # already squared!
    ("Default", 0.25), # [m/s]^2
    ("GPS",     1.0)  # [m/s]^2
);
visionSpeedRminAltitudeGain = 0.0011; #[ (m/s)^2/(m^2)]
dRVisionSpeedZ = 0.3; # [no unit]
altitudeVisionSensorToGround = 0.04; # [m]
        #Magic Carpet Dynamic Noise
RCarpetHorizontalMax = 20.0; # In cm
RCarpetHorizontalMin = 10.0; # In cm
NbPaternsForMaxCarpetHorizontalPrecision = 5.0;
minNbPatternForEstimation = 2;
RCarpetAltitudeMax = 15.0; # In cm
RCarpetAltitudeMin = 5.0; # In cm
NbPatternsForMaxCarpetAltitudePrecision = 5.0;
        #Ultrasound Algorithm
nbSamplesUS = 5;
thresholdCoherenceUS = 0.15;
UsRejectionStepThreshold = 0.12;
UsRejectionPredictionThreshold = 0.12;
UsRejectionNewGroundHeightThreshold = 0.07;
UsRejectionFirstGroundHeightThreshold = 0.3;
UsAltMinForPresence = 2.0;
UsAltMaxForPresence = 3.5;
ultrasoundFrequency = 15.0; # [Hz]
timeToLossUsSignal = 1.0; # [s]
SamplesNb = 5;
nbNoUsMeasuresToResetBuffers = 67;   # 5 samples at 15 Hz over 200 Hz
thresholdUsCarpetLowHeightEstimator = 0.0799999982118607;
thresholdUsCarpetHighHeightEstimator = 0.200000002980232;
thresholdTimeWihtoutCarpetInEstimator = 100.0;
gainRejetUsHeightEstimator = 0.00219999998807907;
        #Pressure observation
diffAltitudePressMax = 8.0; # [m]
altitudePressMinForTakeOff = 0.6; # [m]
heightGroundEffect = 0.0; # [m]
durationLandingWithoutPress = 0.0; # [s]
        #Aerodynamic observation
normAccHorMax = 1.0; # In g
timeBeforeObsAcc = 200.0;
    #Various tests
BiasZInclThreshold = 45.0; # In degrees
accHorizontalityTest = 30.0; # the actual value will be (accHorizontalityTest*DEG*GRAVITY)
maxEstimatedHorizontalBias = 100.0; # In mg
maxEstimatedVerticalBias = 350.0; # In mg
AccThresholdForAngleInit = 3.4;
    #GPS settings
gpsLag = 1;
timeToResetPastSpeed = 0.400000005960464; # 2*dtGps
# Butterworth filter 1st order (Fc = 0.1Hz, Fe=5Hz)
takeoffAltitudeFilterB = [3.0468747e-2,
                          3.0468747e-2];
takeoffAltitudeFilterA = [1.0000000,
                          -9.3906251e-1];
    # States activation
alwaysIntegratePosition = false; # For Kalamos and Pix4D
    # Sensor Activation
xsensFusion =
{
    pos = true;
    speed = false;
    angles = false;
};
pathToGyroBiasFile = "/data/gyro_calibration_v1.bin";
minBiasDiffToSaveGyroCalib = 0.18; # [deg/s]
minTemperatureToSaveGyroCalib = 49.5; # [degree Celcius]


# Vertical Model
# All cov are squared in config manager

verticalModelInitCz = 0.9; # [s-1]
verticalModelInitCovGamma = 0.0667; # [kg-1]
verticalModelInitCovCz = 0.0167; # [s-1]
verticalModelCovR = 1.6; # [m.s-2]
verticalModelBruitGamma = 0.002; # [kg-1]
verticalModelBruitCz = 0.0; # [s-1]
verticalModelMinGamma = 1.0; # [kg-1]
verticalModelMinCz = 0.0; # [s-1]
verticalModelMaxGamma = 3.0; # [kg-1]
verticalModelMaxCz = 1.5; # [s-1]
verticalModelMotorHistorySize = 3;

# Aerodynamic Torque

aerodynamicTorqueInitCov = 1.0;
aerodynamicTorqueProcessNoise = 0.015;
aerodynamicTorqueMeasureNoise = 5.0;
aerodynamicTorqueRotationalLag = 2;
aerodynamicTorqueInitialModel = [ -0.008500000461936, 0.442699998617172, -0.173199996352196, 15.7835998535156, -1.01530003547668, 4.92819976806641, 312.894104003906, -7.81479978561401, 14.4722995758057, 50.79090023040771 ];
    # Butter order 2, fc=40Hz, fs=200Hz
aerodynamicTorqueZFilterB = [ 0.206572083826148,   0.413144167652296,   0.206572083826148 ];
aerodynamicTorqueZFilterA = [ 1.000000000000000,  -0.369527377351241,   0.195815712655833 ];

# Heading

pathToMagnetoBiasFile = "/data/magneto_calibration_v1.bin";
thresholdTimeToAbortCalibration = 30.0; # [s]
noiseMagnetoMeasurement = 60.0; # [mG] - the actual value will be (noiseMagnetoMeasurement)^2 [mG^2]
noiseProcessMag = 300.0; # [mG/(rad/s)] - the actual value will be (2*PdriftGyro*noiseProcessMag)^2 [mG^2]
noiseProcessMagBias = 50.0; # [mG] - the actual value will be (noiseProcessMagBias*_SQRT_30MIN)^2 *adcTs)  [mG^2]
thresholdMagBiasCov =
(
    "thresholdMagBiasCovInitValue",
    ("HighAccuracy", [180.0, 180.0, 180.0]), # [mG^2]
    ("MediumAccuracy", [400.0, 400.0, 900.0]), # [mG^2]
    ("LowAccuracy", [3600.0, 3600.0, 8100.0]) # [mG^2]
);
magneticFieldCovInit = 2500.0; # [mG^2]
magnetoBiasCovInit = 40000.0; # [mG^2]
magnetoInnovationTestSigmaLevel = 2.0; # []
minMagnetoCalibInnovationRatioToValidateAxis = 0.95; # []
magnetoBiasValiditySigmaLevel = 4.0; # []
biasUpdateAllowedSigmaLevel = 1.0; # []
invalidCalibrationDetectionDuration = 2.0; # [s]

headingFusionGainMagneto = 0.0015; # []
headingFusionGainCarpet = 0.3; # []
headingFusionGainXsens = 0.1; # []
magicCarpetMinCovPsi = 5.0; # [deg]
magicCarpetHeadingProcessNoise = 2000.0; # [deg/s]
magicCarpetMinPatternsForHeading = 2; # []
magicCarpetDelay = 0.1; # [s]

# User Trajectory
userTrajectoryConfig =
{
    positionStdInit = 100.0 # [m]
    positionProcessNoise = 0.3 # [m/s]
    speedProcessNoise = 2.0 # [m/s2]
    initialHeight = 1.5; # [m]
    minDistance = 2.0; # [m]
    defaultDistance = 10.0; # [m]
    barometerMaxFrequency = 1.0; # [Hz]
    barometerFilterGain = 0.5; # []
    barometerHeightNoise = 3.0; # [m]
    barometerSpeedNoise = 0.5; # [m/s]
    barometerObsGpsTimeout = 2.0; # [s]
    barometerMinNewDataForHeightInit = 3; # []
    barometerMaxGapForValidity = 60.0; # [Pa]
    # Butterworth 1st order, fc/(fs/2) = 0.07
    barometerValidPressureFilterB = [9.9424465e-2, 9.9424465e-2];
    barometerValidPressureFilterA = [1.0, -0.8011511];
    targetImageLagToNoise = 25.0; # [deg/s]
    targetImageMinNoise = 6.0; # [deg]
    targetImageConstantRangeNoise = 0.1; # [1/m]
    targetImageLostUnvalidCount = 20; # [No unit]
    gpsPositionMinNoise = 1.0; # [m]
    gpsSpeedNoise = 0.2; # [m/s]
    gpsPositionErrorForReset = 100.0; # [m]
    gpsDistanceMax = 1000.0; # [m]
    gpsMinNewDataForPosition = 3; # []
    securityPositionNoise = [0.5, 0.5, 0.3]; # [(m/s)^2*sqrt(dt)]
    brakingTime = 20.0; # [s]
    accuracyForPosition = 20.0; # [m]
    accuracyForDirectionOK = 6.0; # [deg]
    accuracyForDirectionKO = 10.0; # [deg]
    directionUnknownTimeout = 1.5; # [s]
};
userCourseFilterTimeConstant = 1.0; # [s]
userCourseFilterMinSpeed = 1.0; # [m/s]

# Battery

smartBatteryIsUsed = false;
batteryType = 0;
vbatFilterBCoef = [ 0.0015683340607211, 0.0015683340607211 ];
vbatFilterACoef = [ 1.0, -0.996863305568695 ];


shutdownVoltage = 8.3; # [V] Will be compared with the estimated no load voltage

# Parameters Kalman filter
vBatRawDiff = 0.1; #[V]
batteryModelInitBeta = 0.05; # []
batteryModelMinBeta = 0.02; # []
batteryModelMaxBeta = 0.26; # []
batteryModelInitCovE = 2.5e-07; # [V²]
batteryModelInitCovBeta = 6.25e-06; # [] (pow2(0.05*batteryModelInitBeta))
batteryModelMeasurementNoise = 1.0e-02; # [V²]
batteryModelNoiseE = 5.0e-07; # (pow2(0.01)*ADC_TS);
batteryModelNoiseBetaNoEstimation = 0.0;
batteryModelNoiseBetaFastEstimation = 5.0e-09; # (pow2(0.05*batteryModelInitBeta)*ADC_TS)
batteryModelMinMotorsVoltage = 0.0; #[V]

# Velocities

nbPtMCMem = 3;
positionMCVarThreshold = 0.00999999977648258;
gainEstPos = 0.5;
maxMCPattern = 7;
gainRejetVisionPos = 0.200000002980232;
offsetRejetVisionPos = 0.0500000007450581;
velocitiesAccGain = 0.5;
maxTimeNotVisionS = 20.0;

# ESC motor speed control

motorSpeedsFilterB = [ 1.0000,   0.0000 ];
motorSpeedsFilterA = [ 1.0000,   0.0000 ];

Good luck
/Rafael
How can I know what to modify? I will be buying the 5000mAh batteries from the link you provided.
 
How can I know what to modify? I will be buying the 5000mAh batteries from the link you provided.
OK. But i never bought this ones because for me they are too expensive, but if you have the money why not ;) (20% more power for 4 euros)

Here is a short to do list but you need to dive in in the topics. or have a friend to help in some topics.

1) You need to have basic linux knowledge (maybe you know already this one)
2) Need to read this guide Beebop Hacking Guide. This guide explain how the ardrone in the bebop works. gps, files, log, flash memory, dragon etc...
3) Buy the cells (maybe you have this one now)
3) You need to solder. Here is very good tutorial
4) Make the changes in the Bebop battery
5) draw the discharge curves from your battery or check from the internet i did both and the site i used was www.lygte-info.dk
6) Write the discharge curves in the files (estimator.cfg). The thread above. They never gets right at first time and always need to tune the table a little bit.
7) Have fun :)

Good luck
/Rafael
 
  • Like
Reactions: RainyShadow
The bebop power has actually more power than li-ion packs running on what it is suppose to run on
(3s HV Lipos)

I can get 35 min with mine, with the 3s hv pack 5min not enough for me to switch to li-ion, and I also get more power than li-ions.
 
The bebop power has actually more power than li-ion packs running on what it is suppose to run on
(3s HV Lipos)

I can get 35 min with mine, with the 3s hv pack 5min not enough for me to switch to li-ion, and I also get more power than li-ions.
Can’t disagree
 
OK. But i never bought this ones because for me they are too expensive, but if you have the money why not ;) (20% more power for 4 euros)

Here is a short to do list but you need to dive in in the topics. or have a friend to help in some topics.

1) You need to have basic linux knowledge (maybe you know already this one)
2) Need to read this guide Beebop Hacking Guide. This guide explain how the ardrone in the bebop works. gps, files, log, flash memory, dragon etc...
3) Buy the cells (maybe you have this one now)
3) You need to solder. Here is very good tutorial
4) Make the changes in the Bebop battery
5) draw the discharge curves from your battery or check from the internet i did both and the site i used was www.lygte-info.dk
6) Write the discharge curves in the files (estimator.cfg). The thread above. They never gets right at first time and always need to tune the table a little bit.
7) Have fun :)

Good luck
/Rafael
I have linux knowledge and I looked up all the information about building a Li-Ion battery pack. What I still don't understand is how do I use the discharge curves from the battery when changing the estimator.cfg file. So I need to modify the different voltage that corresponds to battery percentage? But how would I do that using the discharge curve?
 
Hope this thread isn't dead yet lol Hey Armnas! I'm actually trying to do this on my Bebop 1 with 18650's. I've gotten to opening the telnet session, and I found the battery tables in etc/colibry/common estimator.cfg and mykonos3/estimator cfg. Milos is empty. Why are there two very different battery tables? The one in common actually looks usable, but the one in mykonos3 is cutting off my batteries too early. I still had 11.85v left after flying for only 6 minutes. But the bebop said 0%
 
Hope this thread isn't dead yet lol Hey Armnas! I'm actually trying to do this on my Bebop 1 with 18650's. I've gotten to opening the telnet session, and I found the battery tables in etc/colibry/common estimator.cfg and mykonos3/estimator cfg. Milos is empty. Why are there two very different battery tables? The one in common actually looks usable, but the one in mykonos3 is cutting off my batteries too early. I still had 11.85v left after flying for only 6 minutes. But the bebop said 0%
Maybe the firmware is used for other drones and the other directory was just left there? I only have one file with battery tables.
 
I see now how you did alter both Common and Milos files. But your common file didn't seem to have the table. This is how my common estimator file looks:
 

Attachments

  • Screenshot_20231022_020323_Termius.jpg
    Screenshot_20231022_020323_Termius.jpg
    56 KB · Views: 7
And these are the tables in mykonos3board estimator:
 

Attachments

  • Screenshot_20231022_024840_Termius.jpg
    Screenshot_20231022_024840_Termius.jpg
    70 KB · Views: 6
  • Screenshot_20231022_024528_Termius.jpg
    Screenshot_20231022_024528_Termius.jpg
    72.1 KB · Views: 6

New Posts

Members online

No members online now.

Forum statistics

Threads
5,295
Messages
45,052
Members
7,965
Latest member
Peanut