11/12/2020 at 09:36 •
Betaflight has evolved over the past few years - new features are constantly being added to further improve the flight behavior of racing drones.
To put it bluntly, turn everything off and stick to the basics!
This is of course a bit of an exaggeration, but many of Betaflight's advanced controller functions are not needed and even make the drone's flight behavior unstable. The reason for this is relatively simple. With "normal" 4x drones, each of the rotors can intervene directly in the system. However, the ball drone requires a minimal amount of thrust in order to exert effective forces on the system through the air guide flaps. PID control of the vanes is required, based solely on the position information from the accelerometer and gyroscope. In order to generate this location information, Betaflight also offers a number of setting options, in particular for signal processing (filters), which I would like to investigate in more detail in the future.
The test flights that I have carried out so far worked best with the displayed settings:
Note the high percentage of P compared to a classic x-220 racer. The drone will be more stable with a good part of the D component and a small I component.
I would also like to point out the angle limitation: Here the risk of a possible tip over of the drone can be reduced by setting an angle limitation.
In the future I would like to look at BF's black box logging and hopefully be able to derive important information about the PID setting from it.
PS: I look forward to your comments and messages!
11/01/2020 at 16:45 •
Contrary to the previous ball drone, I now wanted to use a flight controller and software that is virtually freely accessible to everyone. There are a lot of open source projects, but Betaflight is currently the standard for racing drones, there are many tutorials and resources on the internet what makes me not to explain betaflight again. But how do you get from a racing quad to a single-rotor drone? Here's how:
Basically you need a motor and four servos to control your single-rotor copter. Most flight controls have four motors and some of them have some servo outputs as well. What I did is remapping the Betaflight servo controls to the "standard" four motor outputs. Now a connection for the motor is needed. Via the configuration of the flight controller I used, I was able to see at which connections timers are available. You often read about using the LED_strip port for a motor, but I wanted to use the LED_strip port and decided to remap the PPM input as a motor output. What resource remapping is and how to is shown for e.g. in this video.
The CLI commands I used:
resource MOTOR 1 NONE
resource MOTOR 2 NONE
resource MOTOR 3 NONE
resource MOTOR 4 NONE
resource PPM1 NONE
resource SERVO 1 A03
resource SERVO 2 B01
resource SERVO 3 B00
resource SERVO 4 A02
resource MOTOR 1 C09
Mixer configuration, mmix, smix:
Next, the flight controller must be made to send the correct signals to the servos and the motor ... For this, adjustments must be made in the so-called mixer. Select "Custom Airplane" under the configuration tab.
Handle this via the command line:
# smix script for singlecopter on MambaF405_MK2 (by Benjamin Prescher)
# load a standard motor mix
mmix load airplane # Motor1 as ESC output
#mmix 0 1.000 0.000 0.000 0.000
smix 0 3 0 100 0 0 100 0
smix 1 2 0 -100 0 0 100 0
smix 2 4 1 100 0 0 100 0
smix 3 5 1 -100 0 0 100 0
smix 4 3 2 50 0 0 100 0
smix 5 2 2 50 0 0 100 0
smix 6 4 2 50 0 0 100 0
smix 7 5 2 50 0 0 100 0
If you want to find out more about what is actually happening here, take a look at these links:
Configs on the servos:
As you can see in the picture of mixer config, I have set a relatively low PID loop rate. The servos that control the copter can usually be operated with a servo_pwm_rate of max. ~ 333Hz (there are also servos that can certainly handle more). I have set my servo_pwm_rate to 250Hz, which corresponds to a quarter of the PID loop rate. As far as I understand the algorithms in betaflight, there is no point in setting the PID rate artificially high if the command for the actuators can only be updated a fraction of it anyway. For the PIDs (more on this later in another log) I use strong P values. The servos with the vanes then tend to jitter. Betaflight has a great feature to solve the problem, this is called a servo low pass filter:
Handle this via the command line:
set servo_lowpass_hz = 20
set servo_pwm_rate = 250
Time for testing:
If you have already set up the drone, connected everything and also implemented the configuration, then your drone should behave as follows:
- transmitter roll right makes forward and back fins move right
- transmitter pitch forward causes left and right fins to move forward
- transmitter yaw right causes forward fin to move left, right fin to move forward, back fin to move right, left fin to move back
A personal note on Betaflight:
Betaflight is just one option I used to get your drone in the air. All of the above steps can be done (not tested) using iNav as well, and I heard Ardupilot should do the job too!
11/01/2020 at 15:33 •
- order parts
- print parts
- Assemble servos
- Center seros to middle position (with servo controller, or easy sketch: Arduino servo)
- Add servo horn when servo is aligned
- Mount vanes one by one . The servo horn (ES9052) fits exactly into the fitting on the wing. I used M3x12mm screws to make a positioning screw on the opposite side.
- Mount motor first
- Add screws for the flight controller from "underneath"
- Fix the flight controller with M3 circuit board spacers
- I attached (daisy chained) WS2812b lights on the inside of the drone legs and used them to connect the servo power lines on
- The signal lines of the servos must definitely be extended
- Connect Motor and receiver lines to your (betaflight) flight controller (more to betaflight comming up!)
I attached the ESC and receiver on the bottom side with cable ties (there are also the notches in the holder). A standard buzzer will fit into the round of the bat. holder.
10/27/2020 at 18:34 •
All the parts are now available on thingiverse!
I printed the drone from PLA, but would use PETG in the future because of its strength. The construction is designed for a layer height of 0.2mm and a nozzle diameter of 0.4mm. Support is not required. Happy printing!
10/23/2020 at 13:45 •
In the end, The Ball Drone (MK I) had a lot of components and was correspondingly heavy. The current version shows itself with significantly fewer components, which can also be printed easily and usually without support material ...
10/22/2020 at 19:24 •
In the previous project The Ball-Drone Project I was faced with the challenge of building a slightly different drone. Now I don't really come from the field of flight dynamics and still had to learn a lot. In principle, the first ball drone flew. Correct maneuvering was nevertheless not possible, however, as the drone tended to "tip over". I was unable to get the problem under control by making adjustments to the flight controls. I found a very good video Drone Pendulum Fallacy by Tom Stanton that shows the subject of center of gravity of drones clearly. The leverage of the wings in relation to the center of gravity was insufficient to safely control the drone. So I threw the whole concept overboard and tried again.
Some good information about single-rotor drones: ArduPilot