{"id":16464028,"url":"https://github.com/filipdutescu/uavpc","last_synced_at":"2026-03-12T23:32:01.460Z","repository":{"id":112353261,"uuid":"307073446","full_name":"filipdutescu/uavpc","owner":"filipdutescu","description":"Unmanned Aerial Vehicle Pose-based Control","archived":false,"fork":false,"pushed_at":"2021-08-06T08:22:55.000Z","size":114,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2026-01-20T23:24:41.973Z","etag":null,"topics":["cmake","dji","dji-sdk","drone","drones","flight-controller","imu","imu-data","imu-sensor","kalman-filter","linux","machine-learning","mpu","mpu6050","raspberry-pi","raspberrypi","tello","tello-drone","tello-sdk"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/filipdutescu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"2020-10-25T10:24:53.000Z","updated_at":"2024-01-25T07:54:25.000Z","dependencies_parsed_at":"2023-06-19T12:27:49.139Z","dependency_job_id":null,"html_url":"https://github.com/filipdutescu/uavpc","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":"filipdutescu/modern-cpp-template","purl":"pkg:github/filipdutescu/uavpc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filipdutescu%2Fuavpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filipdutescu%2Fuavpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filipdutescu%2Fuavpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filipdutescu%2Fuavpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/filipdutescu","download_url":"https://codeload.github.com/filipdutescu/uavpc/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filipdutescu%2Fuavpc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30449056,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T21:31:01.033Z","status":"ssl_error","status_checked_at":"2026-03-12T21:30:43.161Z","response_time":114,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["cmake","dji","dji-sdk","drone","drones","flight-controller","imu","imu-data","imu-sensor","kalman-filter","linux","machine-learning","mpu","mpu6050","raspberry-pi","raspberrypi","tello","tello-drone","tello-sdk"],"created_at":"2024-10-11T11:25:46.054Z","updated_at":"2026-03-12T23:32:01.453Z","avatar_url":"https://github.com/filipdutescu.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Actions Status](https://github.com/filipdutescu/uavpc/workflows/Ubuntu/badge.svg)](https://github.com/filipdutescu/uavpc/actions)\n[![codecov](https://codecov.io/gh/filipdutescu/uavpc/branch/master/graph/badge.svg)](https://codecov.io/gh/filipdutescu/uavpc)\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/filipdutescu/uavpc)](https://github.com/filipdutescu/uavpc/releases)\n\n# UAVPC - Unmanned Aerial Vehicle Pose-based Control\n\nA small utility intended to be used with a Raspberry Pi and MPU 6050 IMU. Its goal\nis to control the flight of a drone using hand gestures (made with the MPU 6050)\nand display its video feed. It can also detect poses in the video stream through\n[OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose).\n\nThe names comes from the initial goal, of using the body poses to control the flight\nof the drone, but due to the unreliable nature of the UDP protocol used in my drone\nto send the video stream, it was unreliable. This lead to changing it to use gestures\nmade with the MPU 6050.\n\n## Features\n\n* Gesture recognition with the MPU 6050 using a Kalman filter. Supported gestures\ninclude rotations around the X and Y axis of the IMU.\n* Keyboard commands (as seen in the `uavpc::Joystick` class) for:\n  * Sending commands to the drone, to compensate lack of more gestures\n  * Toggling on/off pose recognition\n  * Toggling on/off video stream saving\n* Drone control using either commands or gestures.\n  * Currently supported drones: DJI Tello (and any drone using the same API by using\nthe existing classes).\n\n## Getting Started\n\nThese instructions will get you a copy of the project up and running on your local\nmachine for development and testing purposes.\n\n### Prerequisites\n\nThe project is meant to run on a Raspberry Pi, connected to a MPU 6050 IMU and a\nDJI Tello Drone. While not required, I found that using USB tethering on my\nsmartphone was a sufficient way to control the Raspberry Pi in a desktop mode\n(using VNC).\n\n* **CMake v3.15+** - found at [https://cmake.org/](https://cmake.org/)\n* **C++ Compiler** - needs to support at least the **C++17** standard, i.e. *GCC*,\n*Clang*\n* **OpenPose v1.7.0** - found at [https://github.com/CMU-Perceptual-Computing-Lab/openpose](https://github.com/CMU-Perceptual-Computing-Lab/openpose)\n  * In order to make [OpenPose v1.7.0](https://github.com/CMU-Perceptual-Computing-Lab/openpose)\nwork with [OpenCV 4.5.0](https://github.com/opencv/opencv), I used the patch found\nat [vendor/openpose-opencv4.patch](vendor/openpose-opencv4.patch).\n* **OpenCV 4.5.0** - found at [https://github.com/opencv/opencv](https://github.com/opencv/opencv)\n* **Linux Kernel I2C module** - found in the official repos of ArchLinux, RaspbianOS\nand Ubuntu. Also found at [https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/](https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/)\n* **Catch2** (for tests) - found at [https://github.com/catchorg/Catch2/](https://github.com/catchorg/Catch2/)\n\n\u003e ***Note:*** *You also need to be able to provide ***CMake*** a supported\n[generator](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html).*\n\n### Installing\n\nIt is fairly easy to install the project, all you need to do is clone or download\nit from [GitHub](https://github.com/filipdutescu/uavpc).\n\nIf you wish to clone the repository, rather than download it, you simply need\nto run:\n\n```bash\ngit clone https://github.com/filipdutescu/uavpc.git\n```\n\nTo install an [already built project](README.md#Building-the-project), you need\nto run the `install` target with CMake. For example:\n\n```bash\ncmake --build build --target install --config Release\n\n# a more general syntax for that command is:\ncmake --build \u003cbuild_directory\u003e --target install --config \u003cdesired_config\u003e\n```\n\nor\n\n```bash\nmake install\n```\n\nwhich will also build the project.\n\n## Building the project\n\nTo build the project, all you need to do, ***after correctly\n[installing the project](README.md#Installing)***, is run a similar **CMake** routine\nto the the one below:\n\n```bash\nmkdir build/ \u0026\u0026 cd build/\ncmake .. -DCMAKE_INSTALL_PREFIX=/absolute/path/to/custom/install/directory\ncmake --build . --target install\n```\n\nor\n\n```bash\nmake release\n```\n\n\u003e ***Note:*** *The custom ``CMAKE_INSTALL_PREFIX`` can be omitted if you wish to\ninstall in [the default install location](https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html).*\n\n## Generating the documentation\n\nIn order to generate documentation for the project, you need to configure the build\nto use Doxygen. This is easily done, by modifying the workflow shown above as follows:\n\n```bash\nmkdir build/ \u0026\u0026 cd build/\ncmake .. -Duavpc_ENABLE_DOXYGEN=1 -DCMAKE_INSTALL_PREFIX=/absolute/path/to/custom/install/directory\ncmake --build . --target doxygen-docs\n```\n\n\u003e ***Note:*** *This will generate a `docs/` directory in the **project's root directory**.*\n\n## Running the tests\n\nBy default, the template uses [Catch2](https://github.com/catchorg/Catch2/) for\nunit testing. Unit testing can be disabled in the options, by setting the\n`ENABLE_UNIT_TESTING` (from\n[cmake/StandardSettings.cmake](cmake/StandardSettings.cmake)) to be false. To run\nthe tests, simply use CTest, from the build directory, passing the desire\nconfiguration for which to run tests for. An example of this procedure is:\n\n```bash\ncd build          # if not in the build directory already\nctest -C Release  # or `ctest -C Debug` or any other configuration you wish to test\n\n# you can also run tests with the `-VV` flag for a more verbose output (i.e.\n#Catch2 output as well)\n```\n\nTo build and run tests you can also use:\n\n```bash\nmake test\n```\n\n## Contributing\n\nPlease read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our how you can\nbecome a contributor and the process for submitting pull requests to us.\n\n## Versioning\n\nThis project makes use of [SemVer](http://semver.org/) for versioning. A list of\nexisting versions can be found in the\n[project's releases](https://github.com/filipdutescu/uavpc/releases).\n\n## Authors\n\n* **Filip-Ioan Dutescu** - [@filipdutescu](https://github.com/filipdutescu)\n\n## License\n\nThis project is licensed under the [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0)\n\\- see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffilipdutescu%2Fuavpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffilipdutescu%2Fuavpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffilipdutescu%2Fuavpc/lists"}