From 404389af0b953d9ac7cccc0cc97bd896ac22a1f0 Mon Sep 17 00:00:00 2001 From: franchioping Date: Wed, 18 Mar 2026 15:49:09 +0000 Subject: [PATCH] update drone_controller. add arduino library support. add adafruit gps library. add managed dependencies. update flake.lock. --- .gitignore | 1 + .gitmodules | 3 + CMakeLists.txt | 3 + components/drone_controller | 2 +- components/esp32_Adafruit_GPS | 1 + dependencies.lock | 468 ++++++++++++++++++++++++++++++++++ flake.lock | 10 +- main/CMakeLists.txt | 5 - main/idf_component.yml | 17 ++ main/main.cpp | 35 ++- 10 files changed, 523 insertions(+), 22 deletions(-) create mode 160000 components/esp32_Adafruit_GPS create mode 100644 dependencies.lock create mode 100644 main/idf_component.yml diff --git a/.gitignore b/.gitignore index 284457f..cb0bcca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .vscode/ build/ target/ +managed_components/ .direnv diff --git a/.gitmodules b/.gitmodules index bd1897b..9ab5d66 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,3 +5,6 @@ [submodule "components/esp32_BNO08x"] path = components/esp32_BNO08x url = ssh://git@forgejo.galard.uk:222/Cansat/esp32_BNO08x.git +[submodule "components/esp32_Adafruit_GPS"] + path = components/esp32_Adafruit_GPS + url = ssh://git@forgejo.galard.uk:222/Cansat/esp32_Adafruit_GPS.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 87e1e18..ea7bc33 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,4 +3,7 @@ cmake_minimum_required(VERSION 3.5) include($ENV{IDF_PATH}/tools/cmake/project.cmake) + +idf_build_replace_option_from_property(COMPILE_OPTIONS "-Werror" "") + project(esp32-hello-rust) diff --git a/components/drone_controller b/components/drone_controller index c3a3a35..13e27fe 160000 --- a/components/drone_controller +++ b/components/drone_controller @@ -1 +1 @@ -Subproject commit c3a3a356edf2375bf5a7a7d93e3ed7cbc4c934f3 +Subproject commit 13e27fe7251a4e92c875147b59bec20bb507736c diff --git a/components/esp32_Adafruit_GPS b/components/esp32_Adafruit_GPS new file mode 160000 index 0000000..3df2e79 --- /dev/null +++ b/components/esp32_Adafruit_GPS @@ -0,0 +1 @@ +Subproject commit 3df2e79d866d1a46fe79f9094a8647a3fd8c5c40 diff --git a/dependencies.lock b/dependencies.lock new file mode 100644 index 0000000..3883a1a --- /dev/null +++ b/dependencies.lock @@ -0,0 +1,468 @@ +dependencies: + chmorgan/esp-libhelix-mp3: + component_hash: cbb76089dc2c5749f7b470e2e70aedc44c9da519e04eb9a67d4c7ec275229e53 + dependencies: + - name: idf + require: private + version: '>=4.1.0' + source: + registry_url: https://components.espressif.com + type: service + version: 1.0.3 + espressif/arduino-esp32: + component_hash: c1ed9d8ca2790678814eaa09bde8ee95c35810167bf397e93cbb1ead36799bb7 + dependencies: + - name: chmorgan/esp-libhelix-mp3 + registry_url: https://components.espressif.com + require: private + version: 1.0.3 + - name: espressif/cbor + registry_url: https://components.espressif.com + require: private + rules: + - if: target not in [esp32c2, esp32p4] + version: 0.6.1~4 + - name: espressif/esp-dsp + registry_url: https://components.espressif.com + require: private + rules: + - if: target not in [esp32c2, esp32c61] + version: ^1.3.4 + - name: espressif/esp-modbus + registry_url: https://components.espressif.com + require: private + version: ^1.0.15 + - name: espressif/esp-sr + registry_url: https://components.espressif.com + require: private + rules: + - if: target in [esp32s3, esp32p4] + version: ^2.1.5 + - name: espressif/esp-zboss-lib + registry_url: https://components.espressif.com + require: private + rules: + - if: target not in [esp32c2, esp32c61, esp32p4] + version: ==1.6.4 + - name: espressif/esp-zigbee-lib + registry_url: https://components.espressif.com + require: private + rules: + - if: target not in [esp32c2, esp32c61, esp32p4] + version: ==1.6.8 + - name: espressif/esp_diag_data_store + registry_url: https://components.espressif.com + require: private + rules: + - if: target not in [esp32c2, esp32p4] + version: 1.0.2 + - name: espressif/esp_diagnostics + registry_url: https://components.espressif.com + require: private + rules: + - if: target not in [esp32c2, esp32p4] + version: 1.2.1 + - name: espressif/esp_hosted + registry_url: https://components.espressif.com + require: private + rules: + - if: target == esp32p4 + version: ^2.9.2 + - name: espressif/esp_insights + registry_url: https://components.espressif.com + require: private + rules: + - if: target not in [esp32c2, esp32p4] + version: 1.2.2 + - name: espressif/esp_modem + registry_url: https://components.espressif.com + require: private + version: ^2.0.0 + - name: espressif/esp_rainmaker + registry_url: https://components.espressif.com + require: private + rules: + - if: target not in [esp32c2, esp32p4] + version: 1.5.2 + - name: espressif/esp_wifi_remote + registry_url: https://components.espressif.com + require: private + rules: + - if: target == esp32p4 + version: ^1.2.2 + - name: espressif/lan867x + registry_url: https://components.espressif.com + require: private + rules: + - if: target in [esp32, esp32p4] + version: ^2.0.0 + - name: espressif/libsodium + registry_url: https://components.espressif.com + require: private + version: ^1.0.20~1 + - name: espressif/mdns + registry_url: https://components.espressif.com + require: private + version: ^1.2.3 + - name: espressif/network_provisioning + registry_url: https://components.espressif.com + require: private + rules: + - if: target != esp32c2 + version: 1.0.2 + - name: espressif/qrcode + registry_url: https://components.espressif.com + require: private + rules: + - if: target not in [esp32c2, esp32p4] + version: 0.1.0~2 + - name: espressif/rmaker_common + registry_url: https://components.espressif.com + require: private + rules: + - if: target not in [esp32c2, esp32p4] + version: 1.4.6 + - name: idf + require: private + version: '>=5.3,<5.6' + - name: joltwallet/littlefs + registry_url: https://components.espressif.com + require: private + version: ^1.10.2 + source: + registry_url: https://components.espressif.com/ + type: service + targets: + - esp32 + - esp32c2 + - esp32c3 + - esp32c5 + - esp32c6 + - esp32c61 + - esp32h2 + - esp32p4 + - esp32s2 + - esp32s3 + version: 3.3.7 + espressif/cbor: + component_hash: dad9ca860963e930366510a10b422b3125a4fb27b979712ed65efcbcd742de50 + dependencies: + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com + type: service + version: 0.6.1~4 + espressif/esp-dsp: + component_hash: 939e9c053487d6e7b7320a5cb761b2200e4b331730d6721668755ef76ab9f067 + dependencies: + - name: idf + require: private + version: '>=4.2' + source: + registry_url: https://components.espressif.com + type: service + version: 1.7.1 + espressif/esp-modbus: + component_hash: 5d5e90b9e55721a8a194b301ad8102d4affb647f47b74cd413ff7d1ce2c1169c + dependencies: + - name: idf + require: private + version: '>=4.3' + source: + registry_url: https://components.espressif.com + type: service + version: 1.0.18 + espressif/esp-serial-flasher: + component_hash: dcc42a16712a1a636509cf0bf90e14032d7f2141784b533613b267b6aa318d52 + dependencies: [] + source: + registry_url: https://components.espressif.com + type: service + version: 0.0.11 + espressif/esp-zboss-lib: + component_hash: 321883d142421f65009972408287441794250057668a11abbdfd8bec77c3309a + dependencies: + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com + type: service + version: 1.6.4 + espressif/esp-zigbee-lib: + component_hash: fa0812e6743e2a7d999af9f44ccdcea17ccb1e80f98d6b2956f44687503a88fd + dependencies: + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com + type: service + version: 1.6.8 + espressif/esp_diag_data_store: + component_hash: c1e5cf62f545d2b136db299f4df1b228b9840be5bc3410c9ad2d2a882b5c0d64 + dependencies: + - name: idf + require: private + version: '>=4.1' + source: + registry_url: https://components.espressif.com + type: service + version: 1.0.2 + espressif/esp_diagnostics: + component_hash: 5ea8e8da8217ed9ed778db3973139e726e17cd27ef5cf6429c787d19226c79f3 + dependencies: + - name: idf + require: private + version: '>=4.1' + - name: espressif/rmaker_common + registry_url: https://components.espressif.com + require: private + version: ~1.4.0 + source: + registry_url: https://components.espressif.com + type: service + version: 1.2.1 + espressif/esp_insights: + component_hash: 4015c524b9955528f941268cf080174076b195800de910d061efc46113bc2e0c + dependencies: + - name: idf + require: private + version: '>=4.1' + - name: espressif/cbor + registry_url: https://components.espressif.com + require: private + rules: + - if: idf_version >=5.0 + version: ~0.6 + - name: espressif/esp_diag_data_store + registry_url: https://components.espressif.com + require: private + version: 1.0.2 + - name: espressif/esp_diagnostics + registry_url: https://components.espressif.com + require: private + version: 1.2.1 + - name: espressif/rmaker_common + registry_url: https://components.espressif.com + require: private + version: ~1.4.0 + source: + registry_url: https://components.espressif.com + type: service + version: 1.2.2 + espressif/esp_modem: + component_hash: 07b6ca85dc0c1edbcd76f650005c74067001db138db6bfa106bf05567adca4af + dependencies: + - name: idf + require: private + version: '>=4.1' + source: + registry_url: https://components.espressif.com + type: service + version: 2.0.0 + espressif/esp_rainmaker: + component_hash: f6fe458fc7a0102ee2879f0247da4b41419e6c07de12031f66e5e9454d25baaa + dependencies: + - name: espressif/esp_rcp_update + registry_url: https://components.espressif.com + require: private + rules: + - if: idf_version >= 5.1 + version: ~1.2.0 + - name: espressif/esp_schedule + registry_url: https://components.espressif.com + require: private + version: ~1.2.0 + - name: espressif/esp_secure_cert_mgr + registry_url: https://components.espressif.com + require: private + rules: + - if: idf_version >=4.3 + version: ^2.2.1 + - name: espressif/json_generator + registry_url: https://components.espressif.com + require: private + version: ~1.1.1 + - name: espressif/json_parser + registry_url: https://components.espressif.com + require: private + version: ~1.0.3 + - name: espressif/mdns + registry_url: https://components.espressif.com + require: private + rules: + - if: idf_version >=5.0 + version: ^1.2.0 + - name: espressif/network_provisioning + registry_url: https://components.espressif.com + require: private + rules: + - if: idf_version >= 5.1 + version: ~1.0.0 + - name: espressif/rmaker_common + registry_url: https://components.espressif.com + require: private + version: ~1.4.6 + source: + registry_url: https://components.espressif.com + type: service + version: 1.5.2 + espressif/esp_rcp_update: + component_hash: c10afbd54a17f27eed880e61262b161656e6d36ad63376c307f9273e99d0abcd + dependencies: + - name: espressif/esp-serial-flasher + registry_url: https://components.espressif.com + require: private + version: ~0.0.0 + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com + type: service + version: 1.2.0 + espressif/esp_schedule: + component_hash: e202a9c688f7f1ab601efb91d682e4bcfaebc508dcceee1a1e0a0d2d1ca75a26 + dependencies: + - name: espressif/rmaker_common + registry_url: https://components.espressif.com + require: private + version: ~1.4.2 + source: + registry_url: https://components.espressif.com + type: service + version: 1.2.0 + espressif/esp_secure_cert_mgr: + component_hash: 2587797e68395edb67f30a7f9a7ce6a529492fa5fa6468592e912bc7ea34dbae + dependencies: + - name: idf + require: private + version: '>=4.3' + source: + registry_url: https://components.espressif.com + type: service + version: 2.9.1 + espressif/jsmn: + component_hash: d80350c41bbaa827c98a25b6072df00884e72f54885996fab4a4f0aebce6b6c3 + dependencies: + - name: idf + require: private + version: '>=4.3' + source: + registry_url: https://components.espressif.com + type: service + version: 1.1.0 + espressif/json_generator: + component_hash: 45033e1c199b13f1c8c1b544fb7d4e2df6a8e3071ebdcb1b22582b61a7974ff2 + dependencies: [] + source: + registry_url: https://components.espressif.com + type: service + version: 1.1.2 + espressif/json_parser: + component_hash: d74b81729ad06ec11ff5eb5b1b0d7df1d00e6027fc11471f4b139c70dcf1b1e4 + dependencies: + - name: espressif/jsmn + registry_url: https://components.espressif.com + require: private + rules: + - if: idf_version >=5.0 + version: ~1.1 + source: + registry_url: https://components.espressif.com + type: service + version: 1.0.3 + espressif/lan867x: + component_hash: 651c9d6e3d96acb08bd5066144b12a12e94df0a6241127a0538d8680689de2c4 + dependencies: + - name: espressif/lan86xx_common + registry_url: https://components.espressif.com + require: private + version: '*' + - name: idf + require: private + version: '>=5.3' + source: + registry_url: https://components.espressif.com + type: service + targets: + - esp32 + - esp32p4 + version: 2.0.0 + espressif/lan86xx_common: + component_hash: 6dcb1be9f43ae940979bd628fa5bee278949b66c545e1fe2321e486102e81026 + dependencies: + - name: idf + require: private + version: '>=5.2' + source: + registry_url: https://components.espressif.com + type: service + version: 1.0.0 + espressif/libsodium: + component_hash: ec52dce5da4af52b1908a0e23e2cf8f492edea090450e51f0d1fbe1108b6d58e + dependencies: + - name: idf + require: private + version: '>=4.2' + source: + registry_url: https://components.espressif.com + type: service + version: 1.0.20~4 + espressif/mdns: + component_hash: 7c0fa01a1cd0e72a87ec1928c3b661c0a3a9034a6d3a69dcf4850db8c6f272db + dependencies: + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com + type: service + version: 1.10.1 + espressif/network_provisioning: + component_hash: ef2e10182fd1861e68b821491916327c25416ca7ae70e5a6e43313dbc71fe993 + dependencies: + - name: idf + require: private + version: '>=5.1' + source: + registry_url: https://components.espressif.com + type: service + version: 1.0.2 + espressif/qrcode: + component_hash: 3b493771bc5d6ad30cbf87c25bf784aada8a08c941504355b55d6b75518ed7bc + dependencies: [] + source: + registry_url: https://components.espressif.com + type: service + version: 0.1.0~2 + espressif/rmaker_common: + component_hash: a3a1df881278d0351fc850b77792fe8a196ddd6dcacbea203d606329cc6a0239 + dependencies: [] + source: + registry_url: https://components.espressif.com + type: service + version: 1.4.6 + idf: + source: + type: idf + version: 5.5.2 + joltwallet/littlefs: + component_hash: dcea25bcef2de023f089f5f01e8d8c46ad1b8ffef75861ad5ffb4098555839df + dependencies: + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com + type: service + version: 1.20.4 +direct_dependencies: +- espressif/arduino-esp32 +- idf +manifest_hash: bb586ec925aec51fa9a2f4da694bbf1dd0c5ef5f4f654f1ef56d33c48f29627b +target: esp32 +version: 2.0.0 diff --git a/flake.lock b/flake.lock index f0c1344..4442ab3 100644 --- a/flake.lock +++ b/flake.lock @@ -55,12 +55,12 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1773524153, - "narHash": "sha256-Jms57zzlFf64ayKzzBWSE2SGvJmK+NGt8Gli71d9kmY=", - "rev": "e9f278faa1d0c2fc835bd331d4666b59b505a410", - "revCount": 909435, + "lastModified": 1773705440, + "narHash": "sha256-xB30bbAp0e7ogSEYyc126mAJMt4FRFh8wtm6ADE1xuM=", + "rev": "48652e9d5aea46e555b3df87354280d4f29cd3a3", + "revCount": 909529, "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2511.909435%2Brev-e9f278faa1d0c2fc835bd331d4666b59b505a410/019cf299-7370-7f85-8f75-843d52f00e6c/source.tar.gz" + "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2511.909529%2Brev-48652e9d5aea46e555b3df87354280d4f29cd3a3/019cfa5a-a70b-7a78-8ef9-77b8017859a2/source.tar.gz" }, "original": { "type": "tarball", diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 2ea27a4..b337a4a 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -2,8 +2,3 @@ idf_component_register(SRCS "main.cpp" INCLUDE_DIRS "") -target_compile_options(${COMPONENT_LIB} PRIVATE - "-Wno-gnu-array-member-paren-init" - "-Wno-parentheses-equality" - "-Wno-template-in-declaration-name" -) diff --git a/main/idf_component.yml b/main/idf_component.yml new file mode 100644 index 0000000..9de272c --- /dev/null +++ b/main/idf_component.yml @@ -0,0 +1,17 @@ +## IDF Component Manager Manifest File +dependencies: + ## Required IDF version + idf: + version: '>=4.1.0' + # # Put list of dependencies here + # # For components maintained by Espressif: + # component: "~1.0.0" + # # For 3rd party components: + # username/component: ">=1.0.0,<2.0.0" + # username2/component2: + # version: "~1.0.0" + # # For transient dependencies `public` flag can be set. + # # `public` flag doesn't have an effect dependencies of the `main` component. + # # All dependencies of `main` are public by default. + # public: true + espressif/arduino-esp32: ^3.3.7 diff --git a/main/main.cpp b/main/main.cpp index 5b4d13f..4dca69d 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1,19 +1,22 @@ - #include "BNO08x.hpp" #include "BNO08xGlobalTypes.hpp" #include "drone_controller.h" #include "esp_timer.h" +#include #include #include static const constexpr char *TAG = "Main"; static struct Vec3C accel = {0, 0, 0}; +static struct Vec3C last_accel = {0, 0, 0}; static struct QuatC rot = {0, 0, 0, 0}; static struct Vec3C pos = {0, 0, 0}; static struct Vec3C vel = {0, 0, 0}; static int64_t last_time = -1; +static struct Vec3C euler_ang = {0, 0, 0}; + extern "C" void app_main(void) { BNO08x *imu = new BNO08x(); @@ -22,10 +25,13 @@ extern "C" void app_main(void) { return; } - // Use the pointer in your lambdas - imu->rpt.rv_game.enable(2500UL); - imu->rpt.linear_accelerometer.enable(10000UL); imu->dynamic_calibration_autosave_enable(); + imu->dynamic_calibration_enable(BNO08xCalSel::all); + + // Linear accel at 100Hz (10000UL us) + imu->rpt.rv_game.enable(2500UL); + imu->rpt.linear_accelerometer.enable(2500UL); + imu->rpt.rv_game.tare(); imu->register_cb([imu]() { if (imu->rpt.linear_accelerometer.has_new_data()) { @@ -34,27 +40,34 @@ extern "C" void app_main(void) { int64_t time = esp_timer_get_time(); if (last_time != -1) { - float dt = (time - last_time) / 1000000.0; + float dt = (time - last_time) / 1000000.0f; - Vec3C init_vel = vel; Vec3C delta = apply_rot(&accel, &rot); + delta.x += last_accel.x; + delta.y += last_accel.y; + delta.z += last_accel.z; - multiply_vec_by(&delta, dt); + multiply_vec_by(&delta, dt * 0.5f); add_to_vec(&vel, &delta); - - delta = init_vel; - multiply_vec_by(&delta, dt); - add_to_vec(&pos, &delta); + last_accel = accel; } last_time = time; } + if (imu->rpt.rv_game.has_new_data()) { auto sens_rot = imu->rpt.rv_game.get_quat(); + auto euler = imu->rpt.rv_game.get_euler(); + euler_ang = {euler.x, euler.y, euler.z}; rot = {sens_rot.i, sens_rot.j, sens_rot.k, sens_rot.real}; } }); while (1) { vTaskDelay(pdMS_TO_TICKS(100)); + // Print filtered data to see the difference + printf("accel_filt - %f, %f, %f", accel.x, accel.y, accel.z); + printf("; vel - %f, %f, %f", vel.x, vel.y, vel.z); + printf("; euler - %f, %f, %f\n", euler_ang.x, euler_ang.y, euler_ang.z); + // multiply_vec_by(&vel, 0.99); } }