{"id":19526645,"url":"https://github.com/zju-fast-lab/ground-effect-controller","last_synced_at":"2026-02-04T02:39:18.453Z","repository":{"id":257902698,"uuid":"868901901","full_name":"ZJU-FAST-Lab/Ground-effect-controller","owner":"ZJU-FAST-Lab","description":"Ground-Effect-Aware Modeling and Control for Multicopters","archived":false,"fork":false,"pushed_at":"2024-10-17T14:13:45.000Z","size":74858,"stargazers_count":11,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-08T15:37:44.848Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZJU-FAST-Lab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-07T11:37:50.000Z","updated_at":"2024-12-06T21:41:18.000Z","dependencies_parsed_at":"2024-11-11T01:21:24.770Z","dependency_job_id":null,"html_url":"https://github.com/ZJU-FAST-Lab/Ground-effect-controller","commit_stats":null,"previous_names":["zju-fast-lab/ground-effect-controller"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZJU-FAST-Lab%2FGround-effect-controller","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZJU-FAST-Lab%2FGround-effect-controller/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZJU-FAST-Lab%2FGround-effect-controller/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZJU-FAST-Lab%2FGround-effect-controller/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZJU-FAST-Lab","download_url":"https://codeload.github.com/ZJU-FAST-Lab/Ground-effect-controller/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240777579,"owners_count":19855857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T01:11:13.133Z","updated_at":"2026-02-04T02:39:18.447Z","avatar_url":"https://github.com/ZJU-FAST-Lab.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ground-effect-controller\n\n**Supplementary material** for the paper: Ground-Effect-Aware Modeling and Control for Multicopters.\n\n\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./figs/header.PNG\" alt=\"description\" width=\"400\"/\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./figs/traj.gif\" alt=\"description\" width=\"600\"/\u003e\n\u003c/p\u003e\t\n\n\nThe detailed [***data***](./figs/traj_rmse_plot.pdf) of the above video is in the Part.5. Control algorithm.\n\n\n\n\n\n## 1. The quadrotor\n\n\n\n### 1.1. Firmware for the flight controller \n\nThis firmware is included in a [***VMware***](https://www.vmware.com/) virtual machine environment.\n\nDownlink:  [***Fireware with virtual environment***](http://zjufast.tpddns.cn:9110/share.cgi?ssid=cfde8ecbb0b8432fb59c241b98ab59a9)\n\nDownlink:  [***Fireware***](http://zjufast.tpddns.cn:9110/share.cgi?ssid=d6dd0e1a97cf43f7a9f5feb82fca04d5)\n\nPassword: fastlab@2024\n\n### 1.2. Devices\n\nFlight controller: [***CUAV V5***](https://doc.cuav.net/flight-controller/v5-autopilot/en/v5+.html)\n\nLattice laser sensor: [***Laser***](https://www.nooploop.com/tofsense-m/)\n\nOnboard computer: [***Intel NUC***](https://www.intel.com/content/www/us/en/products/sku/205603/intel-nuc-11-pro-kit-nuc11tnki5/specifications.html)\n\nMotion capture system: [***NOKOV***](https://en.nokov.com/products/motion-capture-cameras/Mars.html)\n\n### 1.3. CAD model\n\nThe [***CAD model***](./CAD/quadrotor.STEP) of  the  quadrotor in this paper.\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./figs/quadrotor1.PNG\" alt=\"description\" width=\"600\"/\u003e\n\u003c/p\u003e\n\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./figs/quadrotor_real.PNG\" alt=\"description\" width=\"600\"/\u003e\n\u003c/p\u003e\n\n### 1.4. BOM list\n\n| **Type**                         | **Name**                                   | **Mass (g)** | **Quantity** | **Gross Mass (g)** |\n| -------------------------------- | ------------------------------------------ | ------------ | ------------ | ------------------ |\n| **Rack**                         | Upper center plate                         | 112.80       | 1            | 112.80             |\n|                                  | Lower center plate                         | 150.00       | 1            | 150.00             |\n|                                  | Flight controller base PCB                 | 14.00        | 1            | 14.00              |\n|                                  | Flight controller core PCB                 | 10.50        | 1            | 10.50              |\n|                                  | Flight controller                          | 41.30        | 1            | 41.30              |\n| **Rack mounting**                | M3 Lockout nuts                            | 0.40         | 20           | 8.00               |\n|                                  | M3 Isolation column (6mm)                  | 0.18         | 20           | 3.56               |\n|                                  | M3 screw (16mm)                            | 1.04         | 20           | 20.80              |\n| **Undercarriage**                | Landing gear carbon clamp                  | 4.90         | 4            | 19.60              |\n|                                  | Landing gear carbon tube spacer            | 4.23         | 4            | 16.93              |\n|                                  | Landing gear carbon tube                   | 2.50         | 4            | 10.00              |\n|                                  | Landing gear carbon tube sponge cylinder   | 3.25         | 4            | 13.00              |\n|                                  | Landing gear carbon tube sponge round pad  | 0.40         | 4            | 1.59               |\n|                                  | Motor                                      | 45.00        | 4            | 180.00             |\n|                                  | Paddle (7 inches)                          | 7.50         | 4            | 30.00              |\n|                                  | M3 screw (20mm)                            | 1.23         | 16           | 19.68              |\n| **Onboard computer and battery** | 3D printed parts (on-board computer fixed) | 56.50        | 1            | 56.50              |\n|                                  | Intel NUC                                  | 494.20       | 1            | 494.20             |\n|                                  | SSD                                        | 8.80         | 1            | 8.80               |\n|                                  | RAM                                        | 8.20         | 2            | 16.40              |\n|                                  | Battery 22.2V 1400mAh                      | 233.80       | 1            | 233.80             |\n|                                  | Reflector bracket                          | 31.50        | 1            | 31.50              |\n|                                  | Reflective (25mm)                          | 6.52         | 5            | 32.60              |\n| **Laser sensor and fixation**    | M3 screw (10mm)                            | 0.77         | 8            | 6.16               |\n|                                  | M3 Lockout nuts                            | 0.40         | 8            | 3.20               |\n|                                  | M3 screw (16mm)                            | 1.04         | 4            | 4.16               |\n|                                  | M3 Isolation column (6mm)                  | 0.18         | 4            | 0.71               |\n|                                  | M3 single pass aluminum column (12mm)      | 0.60         | 4            | 2.40               |\n|                                  | M3 Lockout nuts                            | 0.40         | 4            | 1.60               |\n|                                  | Laser sensors fix carbon plates            | 10.60        | 1            | 10.60              |\n|                                  | Laser sensor                               | 8.30         | 1            | 8.30               |\n| **Total**                        |                                            |              |              | **1562.70**        |\n\n\n\n\n## 2. The quadrotor platform for model validation\n\n### 2.1. CAD model\n\nThe  [***CAD model***](./CAD/platform.step)  of the force measurement platform in this paper.\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./figs/platform.PNG\" alt=\"description\" width=\"500\"/\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./figs/platform.gif\" alt=\"description\" width=\"600\"/\u003e\n\u003c/p\u003e\n\n\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./figs/platform_real.PNG\" alt=\"description\" width=\"700\"/\u003e\n\u003c/p\u003e\n\n\n\n\n### 2.2. Platform data: The leveling torque\n\nThe following [***figure***](./figs/getorque_all_rpmmodel.pdf) shows the data in the leveling torque experiment. The figure shows the relationship between leveling torque **${{\\bf{\\tau }}_G}$** and average rotor speed **$\\left\\| {{n_i}} \\right\\|$**. The black points are sensor data and the blue lines are model-fitting results.\n\n\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./figs/getorque_all_rpmmodel.PNG\" alt=\"description\" width=\"1000\"/\u003e\n\u003c/p\u003e\n\n\n### 2.3. Platform data: ROS bags and processing\n\nTo be uploaded.\n\n\n\n## 3. Motor calibration and rotor speed control\n\n### 3.1. Motor model\n\nTo control the rotors to the desired speeds, the rotors need to be modeled and calibrated.\n\nThe thrust **$T_i$** and torque **$M_i$** generated by a single rotor are:\n\n**$$T_i = k_T n_i^2,$$**\n\n**$${M_i} = {k_I}{n^2} + {J_R}{{\\dot n}_i}.$$**\n\n- **$k_T$** is the thrust coefficient,\n- **$k_I$** is the torque coefficient,\n- **$J_R$** is the moment of inertia of the rotor,\n- **$i$** is the rotor number.\n\n​      The following  [***figure***](./figs/sigle_motor_platform.pdf) is the calibration of the (a)thrust and (b)torque model with the single motor platform in the paper.  The static/dynamic modelmeans: without/with a differential term of rotor speed **$\\dot{n}$**. \n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./figs/sigle_motor_platform.PNG\" alt=\"description\" width=\"500\"/\u003e\n\u003c/p\u003e\n\n\n\n### 3.2. Throttol model of the flight controller\n\nThe rotor speeds are controlled through the throttle input (**$t_i^{des} \\in \\left[ {0,1} \\right]$**), and the rotational speeds are fed back through  [***BDhot***](https://ardupilot.org/copter/docs/common-dshot-escs.html).\nWhen the flight controller receives a throttle control signal (**${t_c} \\in [0,1]$**), the rotor speed will be maintained at a roughly determined value. The relationship between the rotor speed and the throttle, after eliminating the influence of battery voltage, is usually a quadratic function:\n\n**$$n_{esc}(t_c) = c_2 t_c^2 + c_1 t_c + c_0.$$**\n\nWe collect rotor speed and throttle data on the single-motor platform and calibrate the model. The data is illustrated in the following [***figure***](./figs/id_single_motor.pdf).\n\n- (a) The relationship between rotor speed $n$ and throttle $t_c$. \n- (b) The time series of motor speed, with the blue line representing the speed predicted using the throttle model.\n\n\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./figs/id_single_motor.PNG\" alt=\"description\" width=\"500\"/\u003e\n\u003c/p\u003e\n\nIt can be seen that the data demonstrates a strong alignment with the model.\n\n### 3.3. Rotor speed control\n\nThe rotor speeds require closed-loop control; however, we do not implement this control for each motor individually. Instead, we apply closed-loop control to the combined acceleration generated by all rotors along **${\\bf{z}}_B$**. The control method for rotor speed is:\n\n**$$\nt_i^{des} = t_i^{ref} + t_E,\n$$**\n\n**$$\nt_i^{ref} = n_{esc}^{ - 1}(n_i), \n$$**\n\n**$$\nt_E = K_P^T T_a^E + K_I^T \\sum T_a^E,\n$$**\n\n**$$\nT_a^E = \\left( {\\sum\\limits_i {{k_T}n{{_i^{des}}^2}}  - \\sum\\limits_i {{k_T}{n_i}^2} } \\right)/m\n$$**\n\n- **$t_i^{ref}$** is the feedforward throttle obtained by **$n_{esc}^{ - 1}$**, the inverse function of throttol model, \n- **$t_E$** is the throttle from rotor speed error,\n- **$T_a^E$** is the acceleration error by all rotors,\n- **$K_P^T$**, **$K_I^T$** are the parameters of the Proportional-Integral controller.\n\n## 4. Parameters\n\n### 4.1. Model and Control Gain Parameters\n\nThe results of parameter identification in the paper are shown in following table:\n\n| **Symbol**   | **Value**                                                    | **Name**                             | **Method**              |\n| ------------ | ------------------------------------------------------------ | ------------------------------------ | ----------------------- |\n| **$k_T$**    | $4.0083 \\times 10^{-8} \\, \\text{N/rpm}^2$                    | Thrust coefficient                   | Single-rotor platform   |\n|              | $3.7840 \\times 10^{-8} \\, \\text{N/rpm}^2$                    |                                      | Quadrotor platform      |\n|              | $4.2958 \\times 10^{-8} \\, \\text{N/rpm}^2$                    |                                      | Real flight by hovering |\n| **$k_{TX}$** | $4.678 \\times 10^{-8} \\, \\text{N/rpm}^2$                     | Torque by thrust coefficient (roll)  | Quadrotor platform      |\n| **$k_{TY}$** | $3.588 \\times 10^{-8} \\, \\text{N/rpm}^2$                     | Torque by thrust coefficient (pitch) |                         |\n| **$k_I$**    | $6.3859 \\times 10^{-10} \\, \\left( \\text{N} \\cdot \\text{m} \\right) / \\text{rpm}^2$ | Rotor torque coefficient             | Single-rotor platform   |\n| **$J_R$**    | $1.0556 \\times 10^{-4} \\, \\text{kg/m}^2$                     | Rotor inertia                        | Single-rotor platform   |\n| **$g_1$**    | $1.804 \\times 10^{-2}$                                       | Ground effect coefficient            | Quadrotor platform      |\n| **$g_2$**    | $7.339 \\times 10^{-3}$                                       |                                      |                         |\n| **$g_3$**    | $-3.365 \\times 10^{-1}$                                      |                                      |                         |\n| **$g_4$**    | $4.126 \\times 10^{-2}$                                       |                                      |                         |\n| **$g_5$**    | $6.494 \\times 10^{-2}$                                       |                                      |                         |\n| **$c_2$**    | $-1.448471 \\times 10^8$                                      | Throttle curve parameter             | Quadrotor platform      |\n| **$c_1$**    | $5.228928 \\times 10^8$                                       |                                      |                         |\n| **$c_0$**    | $1.033111 \\times 10^8$                                       |                                      |                         |\n| **$d_x$**    | $0.3970 \\, \\text{N/(m/s)}$                                   | Rotor drag coefficient               | Real flight             |\n| **$d_y$**    | $0.3300 \\, \\text{N/(m/s)}$                                   |                                      |                         |\n| **$m$**      | $1.696 \\, \\text{kg}$                                         | Mass of the quadrotor                | Electronic scale        |\n|              | $1.562 \\, \\text{kg}$                                         |                                      | Mechanical model        |\n| **$I_x$**    | $0.00745220 \\, \\text{kg/m}^2$                                | Inertia of the quadrotor             | Mechanical model        |\n| **$I_y$**    | $0.00792752 \\, \\text{kg/m}^2$                                |                                      |                         |\n| **$I_z$**    | $0.01249522 \\, \\text{kg/m}^2$                                |                                      |                         |\n\nThe control gain parameters in the paper are shown in following table:\n\n| Symbol                  | Name                    | Value                                            |\n|-------------------------|-------------------------|--------------------------------------------------|\n| **$$\\mathbf{K}^P$$**          | Position control gain   | **$$(3.0, 3.0, 3.0)$$**                               |\n| **$$\\mathbf{K}^V$$**          | Velocity control gain   | **$$(2.5, 2.5, 2.5)$$**                               |\n| **$$\\mathbf{K}^{\\xi}$$**      | Angle control gain      | **$$(6.0, 6.0, 2.0)$$**                               |\n| **$$\\mathbf{K}^{\\omega}$$**   | Body rate control gain  | **$$(15.0, 15.0, 16.0)$$**                            |\n\n### 4.2. Spearman's rank correlation\n\nThe following table shows the Spearman's rank correlation coefficient between variables.\n\n- **$\\uparrow $** : Strong correlation;\n- **$\\downarrow$** : Weak correlation.\n\n| **Spearman coefficient**          | ${{\\bf{x}}_W}^ \\top {{\\bf{\\tau }}_B}$ | ${{\\bf{z}}_W}^ \\top {{\\bf{\\tau }}_B}$ | ${{\\bf{y}}_W}^ \\top {{\\bf{\\tau }}_G}$ | ${{\\bf{y}}_W}^ \\top {{\\bf{\\tau }}_G}/\\sin \\delta$ | ${{\\bf{f}}_{\\bf{G}}}$ |\n| --------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------------------- | --------------------- |\n| ${\\bf{N}_{base}}\\left( 1 \\right)$ | -                                     | -                                     | $\\uparrow -0.6640$                    | -                                                 | $\\uparrow +0.4703$    |\n| ${\\bf{N}_{base}}\\left( 2 \\right)$ | $\\uparrow +0.8245$                    | -                                     | -                                     | -                                                 | -                     |\n| ${\\bf{N}_{base}}\\left( 3 \\right)$ | -                                     | -                                     | -                                     | -                                                 | -                     |\n| ${\\bf{N}_{base}}\\left( 4 \\right)$ | -                                     | $\\uparrow +0.9251$                    | -                                     | -                                                 | -                     |\n| $h$                               | $\\downarrow +0.0284$                  | $\\downarrow +0.1781$                  | $\\uparrow +0.3384$                    | -                                                 | $\\uparrow -0.5465$    |\n| $\\delta$                          | -                                     | -                                     | -                                     | $\\downarrow +0.0930$                              | $\\downarrow +0.0054$  |\n\n## 5. Control algorithm\n\nThe  following [***figure***](./figs/traj_rmse_plot.pdf) shows the curves of Exp.~7($3m/s$, near-ground) in the paper. Every loop is well-controlled, including the rotor speed, thrust acceleration, body torque, etc.\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./figs/traj.gif\" alt=\"description\" width=\"700\"/\u003e\n\u003c/p\u003e\t\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./figs/traj_rmse_plot.png\" alt=\"description\" width=\"1000\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./figs/traj_rmse_plot_legend.PNG\" alt=\"description\" width=\"1000\"/\u003e\n\u003c/p\u003e\n\n## 6. Future work\n\nThe fluid simulation work is in progress.\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzju-fast-lab%2Fground-effect-controller","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzju-fast-lab%2Fground-effect-controller","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzju-fast-lab%2Fground-effect-controller/lists"}