Skip to content

Commit bb9e234

Browse files
committed
update images
1 parent 19ce909 commit bb9e234

File tree

8 files changed

+10
-10
lines changed

8 files changed

+10
-10
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
I"a{"source"=>"/media/user/Storage-Fast/Research/code/github-website/src", "destination"=>"/media/user/Storage-Fast/Research/code/github-website/src/_site", "collections_dir"=>"collections", "cache_dir"=>".jekyll-cache", "plugins_dir"=>"_plugins", "layouts_dir"=>"_layouts", "data_dir"=>"_data", "includes_dir"=>"_includes", "collections"=>{"posts"=>{"output"=>true, "permalink"=>"/:categories/:year/:month/:day/:title:output_ext"}, "projects"=>{"output"=>true}, "blog"=>{"output"=>true}}, "safe"=>false, "include"=>[".htaccess"], "exclude"=>[".sass-cache", ".jekyll-cache", "gemfiles", "Gemfile", "Gemfile.lock", "node_modules", "vendor/bundle/", "vendor/cache/", "vendor/gems/", "vendor/ruby/"], "keep_files"=>[".git", ".svn"], "encoding"=>"utf-8", "markdown_ext"=>"markdown,mkdown,mkdn,mkd,md", "strict_front_matter"=>false, "show_drafts"=>nil, "limit_posts"=>0, "future"=>false, "unpublished"=>false, "whitelist"=>[], "plugins"=>["jekyll-feed", "jekyll-seo-tag", "jekyll-paginate"], "markdown"=>"kramdown", "highlighter"=>"rouge", "lsi"=>false, "excerpt_separator"=>"\n\n", "incremental"=>false, "detach"=>false, "port"=>"4000", "host"=>"127.0.0.1", "baseurl"=>nil, "show_dir_listing"=>false, "permalink"=>"date", "paginate_path"=>"/page:num/", "timezone"=>nil, "quiet"=>false, "verbose"=>false, "defaults"=>[], "liquid"=>{"error_mode"=>"warn", "strict_filters"=>false, "strict_variables"=>false}, "kramdown"=>{"auto_ids"=>true, "toc_levels"=>[1, 2, 3, 4, 5, 6], "entity_output"=>"as_char", "smart_quotes"=>"lsquo,rsquo,ldquo,rdquo", "input"=>"GFM", "hard_wrap"=>false, "guess_lang"=>true, "footnote_nr"=>1, "show_warnings"=>false, "syntax_highlighter"=>"rouge", "syntax_highlighter_opts"=>{:default_lang=>"plaintext", :guess_lang=>true}, "coderay"=>{}}, "title"=>"RCmags", "author"=>"Mags", "email"=>"memoryofatrufestival@gmail.com", "description"=>"Projects and other things", "paginate"=>6, "github_username"=>"RCmags", "youtube_username"=>"XXXmags", "rcgroups_username_id"=>"189488", "google_analytics"=>true, "minima"=>{"date_format"=>"%-d %b, %Y"}, "livereload_port"=>35729, "serving"=>true, "watch"=>true, "url"=>"http://localhost:4000"}:ET
1+
I"�{"source"=>"/media/user/Storage-Fast/Research/code/github-website/src", "destination"=>"/media/user/Storage-Fast/Research/code/github-website/src/_site", "collections_dir"=>"collections", "cache_dir"=>".jekyll-cache", "plugins_dir"=>"_plugins", "layouts_dir"=>"_layouts", "data_dir"=>"_data", "includes_dir"=>"_includes", "collections"=>{"posts"=>{"output"=>true, "permalink"=>"/:categories/:year/:month/:day/:title:output_ext"}, "projects"=>{"output"=>true}, "blog"=>{"output"=>true}}, "safe"=>false, "include"=>[".htaccess"], "exclude"=>[".sass-cache", ".jekyll-cache", "gemfiles", "Gemfile", "Gemfile.lock", "node_modules", "vendor/bundle/", "vendor/cache/", "vendor/gems/", "vendor/ruby/"], "keep_files"=>[".git", ".svn"], "encoding"=>"utf-8", "markdown_ext"=>"markdown,mkdown,mkdn,mkd,md", "strict_front_matter"=>false, "show_drafts"=>nil, "limit_posts"=>0, "future"=>false, "unpublished"=>false, "whitelist"=>[], "plugins"=>["jekyll-feed", "jekyll-seo-tag", "jekyll-paginate"], "markdown"=>"kramdown", "highlighter"=>"rouge", "lsi"=>false, "excerpt_separator"=>"\n\n", "incremental"=>false, "detach"=>false, "port"=>"4000", "host"=>"127.0.0.1", "baseurl"=>nil, "show_dir_listing"=>false, "permalink"=>"date", "paginate_path"=>"/page:num/", "timezone"=>nil, "quiet"=>false, "verbose"=>false, "defaults"=>[], "liquid"=>{"error_mode"=>"warn", "strict_filters"=>false, "strict_variables"=>false}, "kramdown"=>{"auto_ids"=>true, "toc_levels"=>[1, 2, 3, 4, 5, 6], "entity_output"=>"as_char", "smart_quotes"=>"lsquo,rsquo,ldquo,rdquo", "input"=>"GFM", "hard_wrap"=>false, "guess_lang"=>true, "footnote_nr"=>1, "show_warnings"=>false}, "title"=>"RCmags", "author"=>"Mags", "email"=>"memoryofatrufestival@gmail.com", "description"=>"Projects and other things", "paginate"=>6, "github_username"=>"RCmags", "youtube_username"=>"XXXmags", "rcgroups_username_id"=>"189488", "google_analytics"=>true, "minima"=>{"date_format"=>"%-d %b, %Y"}, "livereload_port"=>35729, "serving"=>true, "watch"=>true, "url"=>"http://localhost:4000"}:ET

collections/projects/Helicopters/_posts/2017-07-01-heli_flight_controller.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
---
22
layout: post
3-
title: "Flight controller for a weight-shift RC helicopter"
3+
title: "Review | Flight controller for a weight-shift RC helicopter"
44
---
55

66
# Introduction to concept
77

88
Helicopters are naturally unstable aircraft. Without a system to augment their stability they will inevitably spiral towards the ground. Thankfully, theres a few ways to enhance their stability. A classic approach is to use a heavy bar placed at an angle relative to the rotor blades. Such a
99
system is known as a flybar, stabilizer-bar, or mechanical gyro.
1010

11-
![image](https://www.rchelicopterfun.com/images/HillerHead500pics.gif)
11+
![image](/img/heli_controller/HillerHead500pics.gif)
1212
[See: Bell-Hiller mixing]()
1313

1414
This system works by exploiting the angular momentum of the bar. When disturbed, the bar will tend to stay rotating about its current plane. This "resistance" to changes in orientation can fed to the rotor blades to damp the rotation. There are many examples of this stabilization system, be it in large manned helicopters or in small radio-controlled models. Here is a video of what the bar's motion looks like on a small rc-helicopter:
@@ -17,10 +17,10 @@ This system works by exploiting the angular momentum of the bar. When disturbed,
1717

1818
For helicopters with more than two blades, the bar transforms into a star-shaped object or a ring.
1919

20-
![image](https://www.aviastar.org/foto/lok_xh-51.gif)
20+
![image](/img/heli_controller/lok_xh-51.gif)
2121
[See: Lockheed XH-51](https://www.aviastar.org/helicopters_eng/lok_xh-51.php)
2222

23-
![image](https://www.aviastar.org/foto/lok_cl-475.gif)
23+
![image](/img/heli_controller/lok_cl-475.gif)
2424
[See: Lockheed CL-475](https://sites.google.com/site/stingrayslistofrotorcraft/lockheed-cl-475)
2525

2626
While this system works, it comes at the cost of increased mechanical complexity. One can side-step this issue by using electronics to provide analogous control inputs. This greatly simplifies the rotor head but it transfers the complexity to an electronic circuit. With the onset of cheap microcontrollers, this complexity can be abstracted away and emphasis can be placed on the control algorithm.
@@ -60,7 +60,7 @@ While these functions were programmed succesfully, in practice it became evident
6060

6161
To overcome this problem, a [simple first order low pass filter](http://www.tsdconseil.fr/tutos/tuto-iir1-en.pdf) was used to suppress the vibration noise. While this helped, it did not provide sufficient suppression. A straight forward, albeit naive, solution was to [cascade multiple 1rst order filters](https://2n3904blog.com/cascading-single-pole-filters/). This increased the noise suppression but came at the cost of a larger response delay.
6262

63-
![image](https://wiki.analog.com/_media/university/courses/alm1k/circuits1/cascade_rc_sim.png?w=600&tok=694820)
63+
![image](/img/heli_controller/cascade-response.png)
6464
[See: Cascaded filters](https://wiki.analog.com/university/labs/cascaded_rc_adalm2000)
6565

6666
Unfortunately, this lag caused the PID controller to become unstable as they would not react in synch with the aircraft. This was especially noticeable with the proportional term. Therefore, tuning the filters became a compromise between noise supression and PID stability. After a lot tweaking it was possible to obtain a compromise between filter gain and PID gains. While it worked, the results were generally unsatisfactory as it left the helicopter marginally stable.
@@ -76,7 +76,7 @@ The third iteration focused on improving the low pass filter. It was critical to
7676

7777
The filter performed best when configured as a [Chebychev filter](https://web.archive.org/web/20200706034508/http://www.iowahills.com/IIRChebyshevFilters.html). This provided the best compromise between noise suppression and reponse delay. The step response was very underdamped but it didn't seem to matter. Since the helicopter rotated slowly and smoothly, the ringing was too small to be noticeable.
7878

79-
![image](https://build.openmodelica.org/Documentation/Modelica_LinearSystems2%202.3.2/Resources/Images/LowPassOrder4FiltersStepResponse.png)
79+
![image](/img/heli_controller/filter-step-response.png)
8080

8181
Whatever the IIR configuration, the results were much better than with cascaded 1rst order filters. The noise suppression was stronger and the signal delay was lower. This allowed the PID gains to increase and made aircraft much more stable and easier to fly.
8282

@@ -93,10 +93,10 @@ To complement the filter, the helicopter was adjusted to reduce mechanical vibra
9393

9494
Below is the third version of the helicopter along with improved flight controller:
9595

96-
![image](https://raw.githubusercontent.com/RCmags/HeliFlightController/main//example_pictures/front_view_res.JPG)
96+
![image](https://raw.githubusercontent.com/RCmags/HeliFlightController/refs/heads/main/images/side_view.JPG)
9797
<p align="center">Overview of the helicopter</p>
9898

99-
![image](https://raw.githubusercontent.com/RCmags/HeliFlightController/main//example_pictures/arduino_view_res.JPG)
99+
![image](https://raw.githubusercontent.com/RCmags/HeliFlightController/refs/heads/main/images/arduino_view.JPG)
100100
<p align="center">Closeup of the flight controller</p>
101101

102102
![image](/img/heli_controller/main_rotor.JPG)
@@ -108,7 +108,7 @@ Below is the third version of the helicopter along with improved flight controll
108108
# Arduino Code
109109
The code was designed to receive 4 PWM inputs from an RC receiver operating in MODE 2 and output 3 PWM signals. Two signals go to the cyclic servos and the third goes to a tail-servo or a speed controller. Since it is assumed only two servo motors are used for controlling the rotor, only a [90-degree swashplate](https://www.rchelicopterfun.com/ccpm.html) is supported. See the schematic for the tail-motor variant of the required circuit:
110110

111-
![image](https://raw.githubusercontent.com/RCmags/HeliFlightController/main/heli_flight_control_schem.png)
111+
![image](https://raw.githubusercontent.com/RCmags/HeliFlightController/refs/heads/main/images/diagram/schematic.png)
112112

113113
__Github Repo__:
114114
[HeliFlightController](https://github.com/RCmags/HeliFlightController)
96.3 KB
Loading
91.4 KB
Loading
84.9 KB
Loading

img/heli_controller/lok_cl-475.gif

28.5 KB
Loading

img/heli_controller/lok_xh-51.gif

27.6 KB
Loading
127 KB
Loading

0 commit comments

Comments
 (0)