communication issues when using bi directional in radio
This commit is contained in:
parent
23c73c6e91
commit
ead80f3361
|
|
@ -1 +1 @@
|
||||||
Subproject commit 4f731edaead51a644270d2bf183a8a43cae33454
|
Subproject commit 86d682313234556720dc63ad53aace47ab3d190c
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 034caf2f11a15c67a8a1985b9a02ac3d5026671b
|
Subproject commit 9b083db90723c4911ac79edb6c1aa35c4c127cb8
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit d58740e83368c9f2cc2b641ff729d04e7033d007
|
Subproject commit bb38f95e0de4868b2f84b3fa8ab3025f3496e37b
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit ac127154714cf9ce781757d7203651fed214b5ff
|
Subproject commit 3504bc479075bbc363697edc4123978e4342c823
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 3df2e79d866d1a46fe79f9094a8647a3fd8c5c40
|
Subproject commit 06ee1eea5a5073337591edc713a755306cea1331
|
||||||
|
|
@ -18,8 +18,7 @@
|
||||||
#include "nav.h"
|
#include "nav.h"
|
||||||
#include "packet_handler.h"
|
#include "packet_handler.h"
|
||||||
#include "sens_fus.h"
|
#include "sens_fus.h"
|
||||||
#include "soc/gpio_num.h"
|
#include "soc/gpio_num.h" #include < cstdint>
|
||||||
#include <cstdint>
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
@ -103,7 +102,7 @@ void motor_throttles_task(void *params) {
|
||||||
motor_throttles = (float *)malloc(sizeof(float) * 4);
|
motor_throttles = (float *)malloc(sizeof(float) * 4);
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
motor_throttles[i] = 0;
|
motor_throttles[i] = 0.02;
|
||||||
motors[i] = new DShotRMT(motor_pins[i], DSHOT300, false);
|
motors[i] = new DShotRMT(motor_pins[i], DSHOT300, false);
|
||||||
motors[i]->begin();
|
motors[i]->begin();
|
||||||
}
|
}
|
||||||
|
|
@ -123,7 +122,7 @@ void motor_throttles_task(void *params) {
|
||||||
if (atomic_load(&killswitch_active)) {
|
if (atomic_load(&killswitch_active)) {
|
||||||
throttle = 0.0;
|
throttle = 0.0;
|
||||||
}
|
}
|
||||||
motors[i]->sendThrottlePercent(motor_throttles[i] * 100.0f * 0.7f);
|
motors[i]->sendThrottlePercent(throttle);
|
||||||
}
|
}
|
||||||
vTaskDelay(2);
|
vTaskDelay(2);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,7 @@
|
||||||
#include "drone.h"
|
#include "drone.h"
|
||||||
#include "drone_comms.h"
|
#include "drone_comms.h"
|
||||||
#include "drone_controller.h"
|
#include "drone_controller.h"
|
||||||
#include "esp32-hal.h"
|
#include "esp32-hal.h" #include "esp_log.h"
|
||||||
#include "esp_log.h"
|
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/idf_additions.h"
|
#include "freertos/idf_additions.h"
|
||||||
#include "freertos/projdefs.h"
|
#include "freertos/projdefs.h"
|
||||||
|
|
@ -21,10 +20,11 @@
|
||||||
#include "packet_handler.h"
|
#include "packet_handler.h"
|
||||||
#include "radio.h"
|
#include "radio.h"
|
||||||
#include "sens_fus.h"
|
#include "sens_fus.h"
|
||||||
|
#include "servo.h"
|
||||||
|
|
||||||
static const char *TAG = "MAIN";
|
static const char *TAG = "MAIN";
|
||||||
|
|
||||||
#define TIME_RELEASE_QUEUE_TO_ACTIVATION 1000
|
#define TIME_RELEASE_QUEUE_TO_ACTIVATION 500
|
||||||
|
|
||||||
extern "C" void app_main(void) {
|
extern "C" void app_main(void) {
|
||||||
|
|
||||||
|
|
@ -59,16 +59,17 @@ extern "C" void app_main(void) {
|
||||||
// 1 // Core ID
|
// 1 // Core ID
|
||||||
// );
|
// );
|
||||||
|
|
||||||
// xTaskCreatePinnedToCore(motor_throttles_task, // Function name
|
xTaskCreatePinnedToCore(motor_throttles_task, // Function name
|
||||||
// "motor_throttles_task", // Name for debugging
|
"motor_throttles_task", // Name for debugging
|
||||||
// 1024 * 4, // Stack size in bytes
|
1024 * 4, // Stack size in bytes
|
||||||
// NULL, // Parameters
|
NULL, // Parameters
|
||||||
// 24, // Priority (higher = more urgent)
|
24, // Priority (higher = more urgent)
|
||||||
// NULL, // Task handle
|
NULL, // Task handle
|
||||||
// 1 // Core ID
|
1 // Core ID
|
||||||
// );
|
);
|
||||||
|
|
||||||
setup_imu();
|
setup_imu();
|
||||||
|
servo_init();
|
||||||
ESP_LOGI("MAIN", "All tasks spawned. Main loop free.");
|
ESP_LOGI("MAIN", "All tasks spawned. Main loop free.");
|
||||||
|
|
||||||
Eigen::Vector3f local_pos = {0, 0, 0};
|
Eigen::Vector3f local_pos = {0, 0, 0};
|
||||||
|
|
@ -83,7 +84,7 @@ extern "C" void app_main(void) {
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
while (packet_rx_queue &&
|
while (packet_rx_queue &&
|
||||||
xQueueReceive(packet_rx_queue, &packet_data[0], 1)) {
|
xQueueReceive(packet_rx_queue, &packet_data[0], 20)) {
|
||||||
handle_packet(&packet_data[0]);
|
handle_packet(&packet_data[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -124,15 +125,20 @@ extern "C" void app_main(void) {
|
||||||
time_activation_queue = millis();
|
time_activation_queue = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (released &&
|
if (released && drone_cont &&
|
||||||
std::atomic_load(&drone_cont->current_input_mode) ==
|
std::atomic_load(&drone_cont->current_input_mode) ==
|
||||||
INPUT_TYPE::AUTO_NAV &&
|
INPUT_TYPE::AUTO_NAV &&
|
||||||
millis() - time_activation_queue > TIME_RELEASE_QUEUE_TO_ACTIVATION) {
|
millis() - time_activation_queue > TIME_RELEASE_QUEUE_TO_ACTIVATION) {
|
||||||
|
|
||||||
dcont::reset_pid_states(drone_cont->drone_controller);
|
dcont::reset_pid_states(drone_cont->drone_controller);
|
||||||
|
servo_set(SERVO_OPTIONS::UP);
|
||||||
|
|
||||||
|
xTaskCreate(
|
||||||
|
[](void *pvParameters) {
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(700));
|
||||||
std::atomic_store(&killswitch_active, false);
|
std::atomic_store(&killswitch_active, false);
|
||||||
// std::atomic_store(&drone_cont->current_input_mode,
|
},
|
||||||
// INPUT_TYPE::AUTO_NAV);
|
"lambda_task", 2048, NULL, 5, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
|
|
@ -203,6 +209,6 @@ extern "C" void app_main(void) {
|
||||||
// imu_state_var.rot_euler.y(), imu_state_var.rot_euler.z());
|
// imu_state_var.rot_euler.y(), imu_state_var.rot_euler.z());
|
||||||
}
|
}
|
||||||
|
|
||||||
vTaskDelay(pdMS_TO_TICKS(50));
|
vTaskDelay(pdMS_TO_TICKS(5));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
#include "portmacro.h"
|
#include "portmacro.h"
|
||||||
#include "radio.h"
|
#include "radio.h"
|
||||||
#include "sens_fus.h"
|
#include "sens_fus.h"
|
||||||
|
#include <atomic>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <sys/unistd.h>
|
#include <sys/unistd.h>
|
||||||
|
|
||||||
|
|
@ -49,7 +50,10 @@ void handle_packet(uint8_t *packet_addr) {
|
||||||
} else if (packet_type == PACKET_TYPE::KILLSWITCH_TOGGLE) {
|
} else if (packet_type == PACKET_TYPE::KILLSWITCH_TOGGLE) {
|
||||||
packet_killswitch_toggle *packet =
|
packet_killswitch_toggle *packet =
|
||||||
(packet_killswitch_toggle *)(packet_addr + sizeof(PACKET_TYPE));
|
(packet_killswitch_toggle *)(packet_addr + sizeof(PACKET_TYPE));
|
||||||
killswitch_active = packet->killswitch_active;
|
std::atomic_store(&killswitch_active, packet->killswitch_active);
|
||||||
|
ESP_LOGI("RADIO_RX", "KILLSWITCH PAACKET");
|
||||||
|
ESP_LOGE("switch_set", "killswitch set to: %d, packet: %d",
|
||||||
|
atomic_load(&killswitch_active), packet->killswitch_active);
|
||||||
|
|
||||||
} else if (packet_type == PACKET_TYPE::MODE_INPUT) {
|
} else if (packet_type == PACKET_TYPE::MODE_INPUT) {
|
||||||
packet_mode_input *packet =
|
packet_mode_input *packet =
|
||||||
|
|
@ -106,9 +110,6 @@ void send_packet_getter(PACKET_TYPE requested_type) {
|
||||||
packet_info_drone_position{
|
packet_info_drone_position{
|
||||||
.trans = {sens_fus.position.x(), sens_fus.position.y(),
|
.trans = {sens_fus.position.x(), sens_fus.position.y(),
|
||||||
sens_fus.position.z()},
|
sens_fus.position.z()},
|
||||||
.accel = {imu_state_var.lin_accel_global.x,
|
|
||||||
imu_state_var.lin_accel_global.y,
|
|
||||||
imu_state_var.lin_accel_global.z},
|
|
||||||
.vel = {local_vel.x(), local_vel.y(), local_vel.z()},
|
.vel = {local_vel.x(), local_vel.y(), local_vel.z()},
|
||||||
.rot = {imu_state_var.rot.w(), imu_state_var.rot.x(),
|
.rot = {imu_state_var.rot.w(), imu_state_var.rot.x(),
|
||||||
imu_state_var.rot.y(), imu_state_var.rot.z()},
|
imu_state_var.rot.y(), imu_state_var.rot.z()},
|
||||||
|
|
@ -147,14 +148,16 @@ void send_packet_getter(PACKET_TYPE requested_type) {
|
||||||
uint8_t index = requested_type - PACKET_TYPE::DRONE_NAV_WAYPOINT_0;
|
uint8_t index = requested_type - PACKET_TYPE::DRONE_NAV_WAYPOINT_0;
|
||||||
|
|
||||||
Eigen::Vector3f coords;
|
Eigen::Vector3f coords;
|
||||||
|
bool land = false;
|
||||||
if (xSemaphoreTake(nav_mutex, portMAX_DELAY)) {
|
if (xSemaphoreTake(nav_mutex, portMAX_DELAY)) {
|
||||||
coords = nav_man.waypoints[index].coords;
|
coords = nav_man.waypoints[index].coords;
|
||||||
|
land = nav_man.waypoints[index].landing;
|
||||||
xSemaphoreGive(nav_mutex);
|
xSemaphoreGive(nav_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
resp_packet = create_packet_pooled(
|
resp_packet = create_packet_pooled(
|
||||||
requested_type,
|
requested_type,
|
||||||
packet_drone_nav_waypoint{{coords[0], coords[1], coords[2]}});
|
packet_drone_nav_waypoint{{coords[0], coords[1], coords[2]}, land});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resp_packet.first != nullptr) {
|
if (resp_packet.first != nullptr) {
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ void radio_task(void *pvParameters) {
|
||||||
if (radio.initialize(FREQUENCY, NODEID, NETWORKID)) {
|
if (radio.initialize(FREQUENCY, NODEID, NETWORKID)) {
|
||||||
radio.setPowerLevel(31);
|
radio.setPowerLevel(31);
|
||||||
radio.setHighPower(true);
|
radio.setHighPower(true);
|
||||||
radio.setCustomBitrate(DEFAULT_COMMS_BITRATE);
|
// radio.setCustomBitrate(DEFAULT_COMMS_BITRATE);
|
||||||
ESP_LOGI(TAG, "Radio Initialized. Version: 0x%02X", radio.readReg(0x10));
|
ESP_LOGI(TAG, "Radio Initialized. Version: 0x%02X", radio.readReg(0x10));
|
||||||
radio.readAllRegsCompact();
|
radio.readAllRegsCompact();
|
||||||
|
|
||||||
|
|
@ -102,6 +102,7 @@ void radio_task(void *pvParameters) {
|
||||||
ESP_LOGI(TAG, "Datarate change requested: %d. Switching in 100ms...",
|
ESP_LOGI(TAG, "Datarate change requested: %d. Switching in 100ms...",
|
||||||
target_bitrate);
|
target_bitrate);
|
||||||
} else {
|
} else {
|
||||||
|
ESP_LOGI(TAG, "RECVD PACKET");
|
||||||
xQueueSend(packet_rx_queue, &packet_data[0], portMAX_DELAY);
|
xQueueSend(packet_rx_queue, &packet_data[0], portMAX_DELAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -139,6 +140,6 @@ void radio_task(void *pvParameters) {
|
||||||
confirmed_at_new_rate = false;
|
confirmed_at_new_rate = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
vTaskDelay(pdMS_TO_TICKS(10));
|
vTaskDelay(pdMS_TO_TICKS(1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,8 @@
|
||||||
|
#include "servo.h"
|
||||||
|
|
||||||
#include "driver/ledc.h"
|
#include "driver/ledc.h"
|
||||||
#include "esp_log_level.h"
|
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "esp_log.h"
|
|
||||||
|
|
||||||
#define SERVO_PIN 7
|
#define SERVO_PIN 7
|
||||||
#define LEDC_TIMER LEDC_TIMER_0
|
#define LEDC_TIMER LEDC_TIMER_0
|
||||||
|
|
@ -39,13 +36,7 @@ void servo_init() {
|
||||||
#define DUTY_CYCLE_DOWN 2000
|
#define DUTY_CYCLE_DOWN 2000
|
||||||
#define DUTY_CYCLE_UP 850
|
#define DUTY_CYCLE_UP 850
|
||||||
|
|
||||||
enum SERVO_OPTIONS {
|
void servo_set(SERVO_OPTIONS opt) {
|
||||||
UP,
|
|
||||||
DOWN,
|
|
||||||
OFF,
|
|
||||||
};
|
|
||||||
|
|
||||||
void set_servo(SERVO_OPTIONS opt) {
|
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case UP:
|
case UP:
|
||||||
ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, us_to_duty(DUTY_CYCLE_UP));
|
ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, us_to_duty(DUTY_CYCLE_UP));
|
||||||
|
|
|
||||||
11
main/servo.h
11
main/servo.h
|
|
@ -0,0 +1,11 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
enum SERVO_OPTIONS {
|
||||||
|
UP,
|
||||||
|
DOWN,
|
||||||
|
OFF,
|
||||||
|
};
|
||||||
|
|
||||||
|
void servo_init();
|
||||||
|
|
||||||
|
void servo_set(SERVO_OPTIONS opt);
|
||||||
Loading…
Reference in New Issue