Li Bo
2024-08-13 21:28:46 +08:00
parent f1178fb167
commit 9a14c4a47c
21 changed files with 186 additions and 300 deletions
+2 -2
View File
@@ -23,7 +23,7 @@ For more information, please check the sections below:
2. Height-hold Mode
3. Position-hold Mode
4. APP Control
5. CFclient Supported
5. cfclient Supported, refer https://github.com/leeebo/crazyflie-clients-python
6. ESP-BOX3 Joystick Control (through esp-now)
Note: to implement Height-hold/Position-hold mode, extension boards are needed. For more information, see Hardware Reference.
@@ -34,7 +34,7 @@ Additional third party copyrighted code is included under the following licenses
| Component | License | Origin |Commit ID |
| :---: | :---: | :---: |:---: |
| core/crazyflie | GPL3.0 |[Crazyflie](https://github.com/bitcraze/crazyflie-firmware) |tag_2021_01 b448553|
| core/crazyflie | GPL3.0 |[Crazyflie](https://github.com/bitcraze/crazyflie-firmware/tree/2021.01) |tag_2021_01 b448553|
| lib/dsp_lib | | [esp32-lin](https://github.com/whyengineer/esp32-lin/tree/master/components/dsp_lib) |6fa39f4c|
### Support Policy
+2 -2
View File
@@ -22,7 +22,7 @@ ESP-Drone 是基于乐鑫 ESP32/ESP32-S2/ESP32-S3 开发的小型无人机解决
2. 定高模式
3. 定点模式
4. APP 控制
5. 适配 cfclient 上位机
5. 适配 cfclient 上位机,参考 https://github.com/leeebo/crazyflie-clients-python
注意,定高模式及定点模式需外接扩展板,详情见硬件参考。
@@ -36,7 +36,7 @@ ESP-Drone 是基于乐鑫 ESP32/ESP32-S2/ESP32-S3 开发的小型无人机解决
| 组件 | License | 源代码 |Commit ID |
| :---: | :---: | :---: |:---: |
| core/crazyflie | GPL-3.0 |[Crazyflie](https://github.com/bitcraze/crazyflie-firmware) |tag_2021_01 b448553|
| core/crazyflie | GPL-3.0 |[Crazyflie](https://github.com/bitcraze/crazyflie-firmware/tree/2021.01) |tag_2021_01 b448553|
| lib/dsp_lib | | [esp32-lin](https://github.com/whyengineer/esp32-lin/tree/master/components/dsp_lib) |6fa39f4c|
### 致谢
+58 -112
View File
@@ -41,7 +41,7 @@
//#include "trace.h"
#include "usec_time.h"
#include "sdkconfig.h"
#define PROTOCOL_VERSION 4
#define QUAD_FORMATION_X
@@ -61,7 +61,6 @@
#endif
#ifdef STM32F4XX
#define CONFIG_BLOCK_ADDRESS (2048 * (64-1))
#define MCU_ID_ADDRESS 0x1FFF7A10
#define MCU_FLASH_SIZE_ADDRESS 0x1FFF7A22
@@ -81,147 +80,94 @@
//#define DEBUG_EP2
// Task priorities. Higher number higher priority
#define STABILIZER_TASK_PRI 5
#define SENSORS_TASK_PRI 4
#define ADC_TASK_PRI 3
#define FLOW_TASK_PRI 3
#define MULTIRANGER_TASK_PRI 3
#define SYSTEM_TASK_PRI 2
#define CRTP_TX_TASK_PRI 2
#define CRTP_RX_TASK_PRI 2
#define EXTRX_TASK_PRI 2
#define ZRANGER_TASK_PRI 2
#define ZRANGER2_TASK_PRI 2
#define PROXIMITY_TASK_PRI 0
#define PM_TASK_PRI 0
#define USDLOG_TASK_PRI 1
#define USDWRITE_TASK_PRI 0
#define PCA9685_TASK_PRI 2
#define CMD_HIGH_LEVEL_TASK_PRI 2
#define BQ_OSD_TASK_PRI 1
#define GTGPS_DECK_TASK_PRI 1
#define LIGHTHOUSE_TASK_PRI 3
#define LPS_DECK_TASK_PRI 5
#define OA_DECK_TASK_PRI 3
#define UART1_TEST_TASK_PRI 1
#define UART2_TEST_TASK_PRI 1
// system state tasks
#define SYSTEM_TASK_PRI 1
#define PM_TASK_PRI 1
#define LEDSEQCMD_TASK_PRI 1
//if task watchdog triggered,KALMAN_TASK_PRI should set lower or set lower flow frequency
#ifdef TARGET_MCU_ESP32
#define KALMAN_TASK_PRI 2
#define LOG_TASK_PRI 1
#define MEM_TASK_PRI 1
#define PARAM_TASK_PRI 1
#else
#define KALMAN_TASK_PRI 1
#define LOG_TASK_PRI 2
#define MEM_TASK_PRI 2
#define PARAM_TASK_PRI 2
#endif
#define SYSLINK_TASK_PRI 3
#define USBLINK_TASK_PRI 3
#define ACTIVE_MARKER_TASK_PRI 3
#define AI_DECK_TASK_PRI 3
#define UART2_TASK_PRI 3
#define WIFILINK_TASK_PRI 3
#define UDP_TX_TASK_PRI 3
// communication TX tasks
#define UDP_TX_TASK_PRI 2
#define CRTP_TX_TASK_PRI 2
// communication RX tasks
#define UDP_RX_TASK_PRI 2
#define EXTRX_TASK_PRI 2
#define UART2_TASK_PRI 2
#define SYSLINK_TASK_PRI 2
#define USBLINK_TASK_PRI 2
#define WIFILINK_TASK_PRI 2
#define CRTP_RX_TASK_PRI 2
#define CMD_HIGH_LEVEL_TASK_PRI 3
#define INFO_TASK_PRI 2
#define LOG_TASK_PRI 2
#define MEM_TASK_PRI 2
#define PARAM_TASK_PRI 2
// sensors and stabilize related tasks
#define PROXIMITY_TASK_PRI 5
#define FLOW_TASK_PRI 5
#define ZRANGER2_TASK_PRI 5
#define ZRANGER_TASK_PRI 5
#define SENSORS_TASK_PRI 6
#define STABILIZER_TASK_PRI 7
#define KALMAN_TASK_PRI 4
// Not compiled
#if 0
#define INFO_TASK_PRI 2
#define PID_CTRL_TASK_PRI 2
// the kalman filter consumes a lot of CPU
// for single core systems, we need to lower the priority
#if CONFIG_FREERTOS_UNICORE
#undef KALMAN_TASK_PRI
#define KALMAN_TASK_PRI 1
#endif
// Task names
#define SYSTEM_TASK_NAME "SYSTEM"
#define LEDSEQCMD_TASK_NAME "LEDSEQCMD"
#define ADC_TASK_NAME "ADC"
#define PM_TASK_NAME "PWRMGNT"
#define CRTP_TX_TASK_NAME "CRTP-TX"
#define CMD_HIGH_LEVEL_TASK_NAME "CMDHL"
#define CRTP_RX_TASK_NAME "CRTP-RX"
#define CRTP_RXTX_TASK_NAME "CRTP-RXTX"
#define CRTP_TX_TASK_NAME "CRTP-TX"
#define EXTRX_TASK_NAME "EXTRX"
#define FLOW_TASK_NAME "FLOW"
#define KALMAN_TASK_NAME "KALMAN"
#define LEDSEQCMD_TASK_NAME "LEDSEQCMD"
#define LOG_TASK_NAME "LOG"
#define MEM_TASK_NAME "MEM"
#define PARAM_TASK_NAME "PARAM"
#define PM_TASK_NAME "PWRMGNT"
#define PROXIMITY_TASK_NAME "PROXIMITY"
#define SENSORS_TASK_NAME "SENSORS"
#define STABILIZER_TASK_NAME "STABILIZER"
#define NRF24LINK_TASK_NAME "NRF24LINK"
#define ESKYLINK_TASK_NAME "ESKYLINK"
#define SYSLINK_TASK_NAME "SYSLINK"
#define SYSTEM_TASK_NAME "SYSTEM"
#define UART2_TASK_NAME "UART2"
#define UDP_RX_TASK_NAME "UDP_RX"
#define UDP_TX_TASK_NAME "UDP_TX"
#define USBLINK_TASK_NAME "USBLINK"
#define WIFILINK_TASK_NAME "WIFILINK"
#define UDP_TX_TASK_NAME "UDP_TX"
#define UDP_RX_TASK_NAME "UDP_RX"
#define UDP_RX2_TASK_NAME "UDP_RX2"
#define PROXIMITY_TASK_NAME "PROXIMITY"
#define EXTRX_TASK_NAME "EXTRX"
#define UART_RX_TASK_NAME "UART"
#define ZRANGER_TASK_NAME "ZRANGER"
#define ZRANGER2_TASK_NAME "ZRANGER2"
#define FLOW_TASK_NAME "FLOW"
#define USDLOG_TASK_NAME "USDLOG"
#define USDWRITE_TASK_NAME "USDWRITE"
#define PCA9685_TASK_NAME "PCA9685"
#define CMD_HIGH_LEVEL_TASK_NAME "CMDHL"
#define MULTIRANGER_TASK_NAME "MR"
#define BQ_OSD_TASK_NAME "BQ_OSDTASK"
#define GTGPS_DECK_TASK_NAME "GTGPS"
#define LIGHTHOUSE_TASK_NAME "LH"
#define LPS_DECK_TASK_NAME "LPS"
#define OA_DECK_TASK_NAME "OA"
#define UART1_TEST_TASK_NAME "UART1TEST"
#define UART2_TEST_TASK_NAME "UART2TEST"
#define KALMAN_TASK_NAME "KALMAN"
#define ACTIVE_MARKER_TASK_NAME "ACTIVEMARKER-DECK"
#define AI_DECK_GAP_TASK_NAME "AI-DECK-GAP"
#define AI_DECK_NINA_TASK_NAME "AI-DECK-NINA"
#define UART2_TASK_NAME "UART2"
#define configBASE_STACK_SIZE CONFIG_BASE_STACK_SIZE
#define ZRANGER_TASK_NAME "ZRANGER"
//Task stack sizes
#define SYSTEM_TASK_STACKSIZE (6 * configBASE_STACK_SIZE)
#define configBASE_STACK_SIZE CONFIG_BASE_STACK_SIZE
#define CMD_HIGH_LEVEL_TASK_STACKSIZE (2 * configBASE_STACK_SIZE)
#define CRTP_RX_TASK_STACKSIZE (3 * configBASE_STACK_SIZE)
#define CRTP_TX_TASK_STACKSIZE (3 * configBASE_STACK_SIZE)
#define EXTRX_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define FLOW_TASK_STACKSIZE (3 * configBASE_STACK_SIZE)
#define KALMAN_TASK_STACKSIZE (3 * configBASE_STACK_SIZE)
#define LEDSEQCMD_TASK_STACKSIZE (2 * configBASE_STACK_SIZE)
#define ADC_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define PM_TASK_STACKSIZE (4 * configBASE_STACK_SIZE)
#define CRTP_TX_TASK_STACKSIZE (2 * configBASE_STACK_SIZE)
#define CRTP_RX_TASK_STACKSIZE (6 * configBASE_STACK_SIZE)
#define CRTP_RXTX_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define LOG_TASK_STACKSIZE (3 * configBASE_STACK_SIZE)
#define MEM_TASK_STACKSIZE (2 * configBASE_STACK_SIZE)
#define PARAM_TASK_STACKSIZE (2 * configBASE_STACK_SIZE)
#define PM_TASK_STACKSIZE (4 * configBASE_STACK_SIZE)
#define SENSORS_TASK_STACKSIZE (5 * configBASE_STACK_SIZE)
#define STABILIZER_TASK_STACKSIZE (5 * configBASE_STACK_SIZE)
#define NRF24LINK_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define ESKYLINK_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define SYSLINK_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define SYSTEM_TASK_STACKSIZE (6 * configBASE_STACK_SIZE)
#define UART2_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define UDP_RX_TASK_STACKSIZE (4 * configBASE_STACK_SIZE)
#define UDP_TX_TASK_STACKSIZE (4 * configBASE_STACK_SIZE)
#define USBLINK_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define WIFILINK_TASK_STACKSIZE (4 * configBASE_STACK_SIZE)
#define UDP_TX_TASK_STACKSIZE (2 * configBASE_STACK_SIZE)
#define UDP_RX_TASK_STACKSIZE (4 * configBASE_STACK_SIZE)
#define UDP_RX2_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define PROXIMITY_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define EXTRX_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define UART_RX_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define ZRANGER_TASK_STACKSIZE (2 * configBASE_STACK_SIZE)
#define ZRANGER2_TASK_STACKSIZE (4 * configBASE_STACK_SIZE)
#define FLOW_TASK_STACKSIZE (3 * configBASE_STACK_SIZE)
#define USDLOG_TASK_STACKSIZE (2 * configBASE_STACK_SIZE)
#define USDWRITE_TASK_STACKSIZE (2 * configBASE_STACK_SIZE)
#define PCA9685_TASK_STACKSIZE (2 * configBASE_STACK_SIZE)
#define CMD_HIGH_LEVEL_TASK_STACKSIZE (2 * configBASE_STACK_SIZE)
#define MULTIRANGER_TASK_STACKSIZE (2 * configBASE_STACK_SIZE)
#define ACTIVEMARKER_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define AI_DECK_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define UART2_TASK_STACKSIZE (1 * configBASE_STACK_SIZE)
#define ZRANGER_TASK_STACKSIZE (2 * configBASE_STACK_SIZE)
//The radio channel. From 0 to 125
//TODO:
#define RADIO_RATE_2M 2
#define RADIO_CHANNEL 80
#define RADIO_DATARATE RADIO_RATE_2M
#define RADIO_ADDRESS 0xE7E7E7E7E7ULL
+2 -1
View File
@@ -79,4 +79,5 @@ target_compile_options(${COMPONENT_LIB} PRIVATE "-fno-strict-aliasing"
"-Wno-error=stringop-truncation"
"-Wno-absolute-value"
"-Wno-address-of-packed-member"
"-Wno-stringop-truncation")
"-Wno-stringop-truncation"
"-Wno-format")
+11 -25
View File
@@ -51,10 +51,7 @@
static bool isInit = false;
static xQueueHandle crtpPacketDelivery;
STATIC_MEM_QUEUE_ALLOC(crtpPacketDelivery, 16, sizeof(CRTPPacket));
static uint8_t sendBuffer[64];
static UDPPacket wifiIn;
static CRTPPacket p;
static uint32_t lastPacketTick;
static int wifilinkSendPacket(CRTPPacket *p);
@@ -99,10 +96,12 @@ static bool detectEspNow(UDPPacket *in)
static void wifilinkTask(void *param)
{
CRTPPacket p = {0};
while (1) {
/* command step - receive 03 Fetch a wifi packet off the queue */
wifiGetDataBlocking(&wifiIn);
lastPacketTick = xTaskGetTickCount();
uint16_t sendWaitMs = 0;
#ifdef CONFIG_ENABLE_LEGACY_APP
float rch, pch, ych;
uint16_t tch;
@@ -111,7 +110,7 @@ static void wifilinkTask(void *param)
pch = (-1.0) * (float)(((((uint16_t)wifiIn.data[3] << 8) + (uint16_t)wifiIn.data[4]) - 296) * 15.0 / 150.0); //-15~+15
tch = (((uint16_t)wifiIn.data[5] << 8) + (uint16_t)wifiIn.data[6]) * 59000.0 / 600.0;
ych = (float)(((((uint16_t)wifiIn.data[7] << 8) + (uint16_t)wifiIn.data[8]) - 296) * 15.0 / 150.0); //-15~+15
p.size = wifiIn.size + 1 ; //add cksum size
p.size = wifiIn.size - 1;
p.header = CRTP_HEADER(CRTP_PORT_SETPOINT, 0x00); //head redefine
memcpy(&p.data[0], &rch, 4);
@@ -131,11 +130,10 @@ static void wifilinkTask(void *param)
tch = (int8_t)wifiIn.data[4] * 59000.0 / 128;
}
ych = (float)((int8_t)wifiIn.data[3] * 15.0 / 128); //-15~+15
p.size = wifiIn.size + 1 ; //add cksum size
p.size = wifiIn.size - 1;
p.header = CRTP_HEADER(CRTP_PORT_SETPOINT, 0x00); //head redefine
//printf("rch: %.2f, pch: %.2f, tch: %d, ych: %.2f\n", rch, pch, tch, ych);
memcpy(&p.data[0], &rch, 4);
memcpy(&p.data[4], &pch, 4);
memcpy(&p.data[8], &ych, 4);
@@ -144,11 +142,13 @@ static void wifilinkTask(void *param)
{
/* command step - receive 04 copy CRTP part from packet, the size not contain head */
p.size = wifiIn.size - 1;
ASSERT(p.size <= CRTP_MAX_DATA_SIZE);
memcpy(&p.raw, wifiIn.data, wifiIn.size);
sendWaitMs = 10;
}
/* command step - receive 05 send to crtpPacketDelivery queue */
xQueueSend(crtpPacketDelivery, &p, 0) ;
xQueueSend(crtpPacketDelivery, &p, M2T(sendWaitMs));
}
}
@@ -165,22 +165,9 @@ static int wifilinkReceiveCRTPPacket(CRTPPacket *p)
static int wifilinkSendPacket(CRTPPacket *p)
{
int dataSize;
ASSERT(p->size < SYSLINK_MTU);
sendBuffer[0] = p->header;
if (p->size <= CRTP_MAX_DATA_SIZE) {
memcpy(&sendBuffer[1], p->data, p->size);
}
dataSize = p->size + 1;
/*ledseqRun(&seq_linkDown);*/
return wifiSendData(dataSize, sendBuffer);
ASSERT(p->size <= CRTP_MAX_DATA_SIZE);
ledseqRun(&seq_linkDown);
return wifiSendData(p->size + 1, p->raw);
}
static int wifilinkSetEnable(bool enable)
@@ -198,11 +185,10 @@ void wifilinkInit()
return;
}
crtpPacketDelivery = STATIC_MEM_QUEUE_CREATE(crtpPacketDelivery);
DEBUG_QUEUE_MONITOR_REGISTER(crtpPacketDelivery);
STATIC_MEM_TASK_CREATE(wifilinkTask, wifilinkTask,WIFILINK_TASK_NAME,NULL, WIFILINK_TASK_PRI);
STATIC_MEM_TASK_CREATE(wifilinkTask, wifilinkTask, WIFILINK_TASK_NAME,NULL, WIFILINK_TASK_PRI);
isInit = true;
}
+16 -16
View File
@@ -45,28 +45,29 @@ static bool isInit;
void commInit(void)
{
if (isInit) {
return;}
return;
}
/* These functions are moved to be initialized early so
* that DEBUG_PRINTD can be used early */
//wifilinkInit();
//crtpInit();
//consoleInit();
/* These functions are moved to be initialized early so
* that DEBUG_PRINTD can be used early */
//wifilinkInit();
//crtpInit();
//consoleInit();
crtpSetLink(wifilinkGetLink());
crtpserviceInit();
platformserviceInit();
logInit();
paramInit();
//locSrvInit();
crtpSetLink(wifilinkGetLink());
crtpserviceInit();
platformserviceInit();
logInit();
paramInit();
//locSrvInit();
//setup CRTP communication channel
//TODO: check for USB first and prefer USB over radio
//setup CRTP communication channel
//if (usbTest())
// crtpSetLink(usbGetLink);
//else if(radiolinkTest())
// crtpSetLink(radiolinkGetLink());
isInit = true;
isInit = true;
}
bool commTest(void)
@@ -84,7 +85,6 @@ bool commTest(void)
DEBUG_PRINTI("consoleTest = %d ", pass);
pass &= paramTest();
DEBUG_PRINTI("paramTest = %d ", pass);
return pass;
return pass;
}
@@ -186,6 +186,8 @@ void crtpRxTask(void *param)
if (xQueueSend(queues[p.port], &p, 0) == errQUEUE_FULL)
{
// We should never drop packet
printf("CRTP RX queue full\n");
printf("Port: %d\n", p.port);
ASSERT(0);
}
}
@@ -109,17 +109,16 @@ static StaticSemaphore_t lockTrajBuffer;
static float defaultTakeoffVelocity = 0.5f;
static float defaultLandingVelocity = 0.5f;
// TODO
// Trajectory memory handling from the memory module
// static uint32_t handleMemGetSize(void) { return crtpCommanderHighLevelTrajectoryMemSize(); }
// static bool handleMemRead(const uint32_t memAddr, const uint8_t readLen, uint8_t* buffer);
// static bool handleMemWrite(const uint32_t memAddr, const uint8_t writeLen, const uint8_t* buffer);
// static const MemoryHandlerDef_t memDef = {
// .type = MEM_TYPE_TRAJ,
// .getSize = handleMemGetSize,
// .read = handleMemRead,
// .write = handleMemWrite,
// };
static uint32_t handleMemGetSize(void) { return crtpCommanderHighLevelTrajectoryMemSize(); }
static bool handleMemRead(const uint32_t memAddr, const uint8_t readLen, uint8_t* buffer);
static bool handleMemWrite(const uint32_t memAddr, const uint8_t writeLen, const uint8_t* buffer);
static const MemoryHandlerDef_t memDef = {
.type = MEM_TYPE_TRAJ,
.getSize = handleMemGetSize,
.read = handleMemRead,
.write = handleMemWrite,
};
STATIC_MEM_TASK_ALLOC(crtpCommanderHighLevelTask, CMD_HIGH_LEVEL_TASK_STACKSIZE);
@@ -262,7 +261,7 @@ void crtpCommanderHighLevelInit(void)
return;
}
//memoryRegisterHandler(&memDef);
memoryRegisterHandler(&memDef);
plan_init(&planner);
//Start the trajectory task
@@ -629,13 +628,13 @@ int define_trajectory(const struct data_define_trajectory* data)
return 0;
}
// static bool handleMemRead(const uint32_t memAddr, const uint8_t readLen, uint8_t* buffer) {
// return crtpCommanderHighLevelReadTrajectory(memAddr, readLen, buffer);
// }
static bool handleMemRead(const uint32_t memAddr, const uint8_t readLen, uint8_t* buffer) {
return crtpCommanderHighLevelReadTrajectory(memAddr, readLen, buffer);
}
// static bool handleMemWrite(const uint32_t memAddr, const uint8_t writeLen, const uint8_t* buffer) {
// return crtpCommanderHighLevelWriteTrajectory(memAddr, writeLen, buffer);
// }
static bool handleMemWrite(const uint32_t memAddr, const uint8_t writeLen, const uint8_t* buffer) {
return crtpCommanderHighLevelWriteTrajectory(memAddr, writeLen, buffer);
}
uint8_t* initCrtpPacket(CRTPPacket* packet, const enum TrajectoryCommand_e command)
{
@@ -263,7 +263,7 @@ static void kalmanTask(void* parameters);
static bool predictStateForward(uint32_t osTick, float dt);
static bool updateQueuedMeasurments(const Axis3f *gyro, const uint32_t tick);
STATIC_MEM_TASK_ALLOC_STACK_NO_DMA_CCM_SAFE(kalmanTask, 3 * configMINIMAL_STACK_SIZE);
STATIC_MEM_TASK_ALLOC_STACK_NO_DMA_CCM_SAFE(kalmanTask, KALMAN_TASK_STACKSIZE);
// --------------------------------------------------
+4 -2
View File
@@ -125,7 +125,9 @@ bool memTest(void) {
}
if (owMemHandler == 0) {
return false;
printf("No one-wire memory handler registered\n");
//TODO:
return true;
}
return true;
@@ -218,7 +220,7 @@ static void createInfoResponse(CRTPPacket* p, uint8_t memId) {
uint8_t serialNr[MEMORY_SERIAL_LENGTH];
// No error code if we fail, just send an empty packet back
if (owMemHandler->getSerialNr(selectedMem, serialNr)) {
if (owMemHandler->getSerialNr && owMemHandler->getSerialNr(selectedMem, serialNr)) {
createInfoResponseBody(p, MEM_TYPE_OW, owMemHandler->size, serialNr);
}
}
@@ -223,8 +223,9 @@ void systemTask(void *arg)
pass &= estimatorKalmanTaskTest();
DEBUG_PRINTI("estimatorKalmanTaskTest = %d ", pass);
//pass &= deckTest();
//pass &= soundTest();
//pass &= memTest();
pass &= soundTest();
DEBUG_PRINTI("soundTest = %d ", pass);
pass &= memTest();
DEBUG_PRINTI("memTest = %d ", pass);
//pass &= watchdogNormalStartTest();
pass &= cfAssertNormalStartTest();
@@ -273,7 +274,6 @@ void systemTask(void *arg)
vTaskDelay(portMAX_DELAY);
}
/* Global system variables */
void systemStart()
{
@@ -3,7 +3,8 @@
#include <stdbool.h>
#include <stdint.h>
#define WIFI_RX_TX_PACKET_SIZE (64)
// 32 bytes is enough for CRTP packets (30+1) + checksum 1
#define WIFI_RX_TX_PACKET_SIZE (32)
/* Structure used for in/out data via USB */
typedef struct
+38 -42
View File
@@ -27,9 +27,9 @@
#include "espnow_utils.h"
#define UDP_SERVER_PORT 2390
#define UDP_SERVER_BUFSIZE 128
#define UDP_SERVER_BUFSIZE 64
static struct sockaddr_in6 source_addr;
static struct sockaddr_storage source_addr;
static char WIFI_SSID[32] = "";
static char WIFI_PWD[64] = CONFIG_WIFI_PASSWORD;
@@ -41,17 +41,9 @@ static uint8_t WIFI_CH = CONFIG_WIFI_CHANNEL;
#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
#endif
static char rx_buffer[UDP_SERVER_BUFSIZE];
static char tx_buffer[UDP_SERVER_BUFSIZE];
const int addr_family = (int)AF_INET;
const int ip_protocol = IPPROTO_IP;
static struct sockaddr_in dest_addr;
static int sock;
static xQueueHandle udpDataRx;
static xQueueHandle udpDataTx;
static UDPPacket inPacket;
static UDPPacket outPacket;
static bool isInit = false;
static bool isUDPInit = false;
@@ -94,7 +86,7 @@ bool wifiGetDataBlocking(UDPPacket *in)
{
/* command step - receive 02 from udp rx queue */
while (xQueueReceive(udpDataRx, in, portMAX_DELAY) != pdTRUE) {
vTaskDelay(1);
vTaskDelay(M2T(10));
}; // Don't return until we get some data on the UDP
return true;
@@ -102,7 +94,7 @@ bool wifiGetDataBlocking(UDPPacket *in)
bool wifiSendData(uint32_t size, uint8_t *data)
{
static UDPPacket outStage;
UDPPacket outStage = {0};
outStage.size = size;
memcpy(outStage.data, data, size);
// Dont' block when sending
@@ -115,12 +107,12 @@ static esp_err_t udp_server_create(void *arg)
return ESP_OK;
}
struct sockaddr_in *pdest_addr = &dest_addr;
pdest_addr->sin_addr.s_addr = htonl(INADDR_ANY);
pdest_addr->sin_family = AF_INET;
pdest_addr->sin_port = htons(UDP_SERVER_PORT);
static struct sockaddr_in dest_addr = {0};
dest_addr.sin_addr.s_addr = htonl(INADDR_ANY);
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(UDP_SERVER_PORT);
sock = socket(addr_family, SOCK_DGRAM, ip_protocol);
sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
if (sock < 0) {
DEBUG_PRINT_LOCAL("Unable to create socket: errno %d", errno);
return ESP_FAIL;
@@ -139,41 +131,43 @@ static esp_err_t udp_server_create(void *arg)
static void udp_server_rx_task(void *pvParameters)
{
uint8_t cksum = 0;
socklen_t socklen = sizeof(source_addr);
char rx_buffer[UDP_SERVER_BUFSIZE];
UDPPacket inPacket = {0};
while (true) {
if(isUDPInit == false) {
vTaskDelay(20);
continue;
}
int len = recvfrom(sock, rx_buffer, sizeof(rx_buffer) - 1, 0, (struct sockaddr *)&source_addr, &socklen);
int len = recvfrom(sock, rx_buffer, sizeof(rx_buffer), 0, (struct sockaddr *)&source_addr, &socklen);
/* command step - receive 01 from Wi-Fi UDP */
if (len < 0) {
DEBUG_PRINT_LOCAL("recvfrom failed: errno %d", errno);
break;
} else if(len > WIFI_RX_TX_PACKET_SIZE - 4) {
DEBUG_PRINT_LOCAL("Received data length = %d > 64", len);
continue;
} else if(len > WIFI_RX_TX_PACKET_SIZE) {
DEBUG_PRINT_LOCAL("Received data length = %d > %d", len, WIFI_RX_TX_PACKET_SIZE);
continue;
} else {
//copy part of the UDP packet
rx_buffer[len] = 0;// Null-terminate whatever we received and treat like a string...
memcpy(inPacket.data, rx_buffer, len);
cksum = inPacket.data[len - 1];
uint8_t cksum = rx_buffer[len - 1];
//remove cksum, do not belong to CRTP
inPacket.size = len - 1;
//check packet
if (cksum == calculate_cksum(inPacket.data, len - 1) && inPacket.size < 64){
xQueueSend(udpDataRx, &inPacket, M2T(2));
if (cksum == calculate_cksum(rx_buffer, len - 1)) {
//copy part of the UDP packet, the size not include cksum
inPacket.size = len - 1;
memcpy(inPacket.data, rx_buffer, inPacket.size);
xQueueSend(udpDataRx, &inPacket, M2T(10));
if(!isUDPConnected) isUDPConnected = true;
}else{
DEBUG_PRINT_LOCAL("udp packet cksum unmatched");
}
#ifdef DEBUG_UDP
DEBUG_PRINT_LOCAL("1.Received data size = %d %02X \n cksum = %02X", len, inPacket.data[0], cksum);
for (size_t i = 0; i < len; i++) {
DEBUG_PRINT_LOCAL(" data[%d] = %02X ", i, inPacket.data[i]);
printf("\nReceived size = %d cksum = %02X\n", inPacket.size, cksum);
for (size_t i = 0; i < inPacket.size; i++) {
printf("%02X ", inPacket.data[i]);
}
printf("\n");
#endif
}
}
@@ -181,26 +175,28 @@ static void udp_server_rx_task(void *pvParameters)
static void udp_server_tx_task(void *pvParameters)
{
UDPPacket outPacket = {0};
while (TRUE) {
if(isUDPInit == false) {
vTaskDelay(20);
continue;
}
if ((xQueueReceive(udpDataTx, &outPacket, 5) == pdTRUE) && isUDPConnected) {
memcpy(tx_buffer, outPacket.data, outPacket.size);
tx_buffer[outPacket.size] = calculate_cksum(tx_buffer, outPacket.size);
tx_buffer[outPacket.size + 1] = 0;
if ((xQueueReceive(udpDataTx, &outPacket, portMAX_DELAY) == pdTRUE) && isUDPConnected) {
// append cksum to the packet
outPacket.data[outPacket.size] = calculate_cksum(outPacket.data, outPacket.size);
outPacket.size += 1;
int err = sendto(sock, tx_buffer, outPacket.size + 1, 0, (struct sockaddr *)&source_addr, sizeof(source_addr));
int err = sendto(sock, outPacket.data, outPacket.size, 0, (struct sockaddr *)&source_addr, sizeof(source_addr));
if (err < 0) {
DEBUG_PRINT_LOCAL("Error occurred during sending: errno %d", errno);
continue;
}
#ifdef DEBUG_UDP
DEBUG_PRINT_LOCAL("Send data to");
for (size_t i = 0; i < outPacket.size + 1; i++) {
DEBUG_PRINT_LOCAL(" data_send[%d] = %02X ", i, tx_buffer[i]);
printf("\nSend size = %d checksum = %02X\n", outPacket.size, outPacket.data[outPacket.size - 1]);
for (size_t i = 0; i < outPacket.size; i++) {
printf("%02X ", outPacket.data[i]);
}
printf("\n");
#endif
}
}
@@ -259,9 +255,9 @@ void wifiInit(void)
return;
}
// This should probably be reduced to a CRTP packet size
udpDataRx = xQueueCreate(5, sizeof(UDPPacket)); /* Buffer packets (max 64 bytes) */
udpDataRx = xQueueCreate(16, sizeof(UDPPacket));
DEBUG_QUEUE_MONITOR_REGISTER(udpDataRx);
udpDataTx = xQueueCreate(5, sizeof(UDPPacket)); /* Buffer packets (max 64 bytes) */
udpDataTx = xQueueCreate(16, sizeof(UDPPacket));
DEBUG_QUEUE_MONITOR_REGISTER(udpDataTx);
espnow_storage_init();
@@ -101,7 +101,8 @@ bool eepromTestConnection(void)
bool eepromReadBuffer(uint8_t *buffer, size_t readAddr, size_t len)
{
bool status = false;
esp_err_t err = ESP_OK; //TODO spi_flash_read(readAddr, buffer, len);
esp_err_t err = ESP_OK;
//TODO spi_flash_read(readAddr, buffer, len);
if (err == ESP_OK) {
@@ -119,7 +120,6 @@ bool eepromWriteBuffer(uint8_t *buffer, size_t writeAddr, size_t len)
{
bool status = false;
writeAddr += EEPROM_IN_FLASH_ADDR;
//TODO if (spi_flash_write(writeAddr, buffer, len) == ESP_OK) {
if (1) {
@@ -142,6 +142,10 @@ void zRanger2Task(void* arg)
}
}
static uint8_t disable = 0;
PARAM_GROUP_START(deck)
PARAM_ADD(PARAM_UINT8 | PARAM_RONLY, bcZRanger2, &isInit)
PARAM_ADD(PARAM_UINT8 | PARAM_RONLY, bcZRanger, &disable)
PARAM_ADD(PARAM_UINT8 | PARAM_RONLY, deck, &disable)
PARAM_GROUP_STOP(deck)
@@ -86,9 +86,9 @@ static void flowdeckTask(void *param)
while (1) {
// if task watchdog triggered,flow frequency should set lower
#ifdef CONFIG_IDF_TARGET_ESP32S2
#if CONFIG_FREERTOS_UNICORE
vTaskDelay(10);
#elif defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32)
#else
vTaskDelay(5);
#endif
@@ -122,9 +122,9 @@ static void flowdeckTask(void *param)
flowData.stdDevY = stdFlow; // [pixels] should perhaps be made larger?
// if task watchdog triggered,flow frequency should set lower
#ifdef CONFIG_IDF_TARGET_ESP32S2
#if CONFIG_FREERTOS_UNICORE
flowData.dt = 0.01;
#elif defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32)
#else
flowData.dt = 0.005;
#endif
+1 -1
View File
@@ -10,4 +10,4 @@ idf_component_register(SRC_DIRS "BasicMathFunctions"
INCLUDE_DIRS "include"
)
target_compile_options(${COMPONENT_LIB} PUBLIC "-fno-strict-aliasing")
target_compile_options(${COMPONENT_LIB} PUBLIC "-fno-strict-aliasing" "-Wno-format")
+7 -32
View File
@@ -156,53 +156,28 @@ This step is optional, only for advanced debugging.
cfclient Interface
**1. Install CRTP protocol package**
**1. Install cfclient**
1.1 Download the source code
.. code:: text
git clone -b esp-drone https://github.com/qljz1993/crazyflie-lib-python.git
git clone https://github.com/qljz1993/crazyflie-clients-python.git
1.2 Navigate to the source code directory, and install the requirements
.. code:: text
pip3 install -r requirements.txt
1.3 Install CRTP package
1.2 Install cfclient
.. code:: text
pip3 install -e .
**2. Install cfclient**
2.1 Download the source code
.. code:: text
git clone -b esp-drone https://github.com/qljz1993/crazyflie-clients-python.git
2.2 Navigate to the source code directory, and install the requirements
.. code:: text
sudo apt-get install python3 python3-pip python3-pyqt5 python3-pyqt5.qtsvg
2.3 Install cfclient
.. code:: text
pip3 install -e .
2.4 Start cfclient
1.3 Start cfclient
.. code:: text
python3 ./bin/cfclient
**3. Configure the controllers**
**2. Configure the controllers**
.. figure:: ../../_static/gamepad_settings.png
:align: center
@@ -211,9 +186,9 @@ This step is optional, only for advanced debugging.
Controller Configuration
3.1 Configure the four main dimensions of controls: ``Roll, Pitch, Yaw, Thrust``.
2.1 Configure the four main dimensions of controls: ``Roll, Pitch, Yaw, Thrust``.
3.2 Configure button ``Assisted control`` for flight mode switching.
2.2 Configure button ``Assisted control`` for flight mode switching.
ESP-Drone APP Guide
=====================
+7 -33
View File
@@ -134,53 +134,27 @@ ESP-Drone APP 同时支持 Android 系统和 iOS 系统。
cfclient 上位机界面
**1. 安装 CRTP 协议支持包**
**1. 安装 cfclient**
1.1 下载源代码
.. code:: text
git clone -b esp-drone https://github.com/qljz1993/crazyflie-lib-python.git
git clone https://github.com/qljz1993/crazyflie-clients-python.git
1.2 进入源码目录,安装依赖
.. code:: text
pip3 install -r requirements.txt
1.3 安装 CRTP 包
1.2 安装 cfclient 客户端
.. code:: text
pip3 install -e .
**2. 安装 cfclient**
2.1 下载源代码
.. code:: text
git clone -b esp-drone https://github.com/qljz1993/crazyflie-clients-python.git
2.2 进入源码目录,安装依赖
.. code:: text
sudo apt-get install python3 python3-pip python3-pyqt5 python3-pyqt5.qtsvg
2.3 安装 cfclient 客户端
.. code:: text
pip3 install -e .
2.4 启动客户端
1.3 启动客户端
.. code:: text
python3 ./bin/cfclient
**3. 配置遥控器**
**2. 配置遥控器**
.. figure:: ../../_static/gamepad_settings.png
:align: center
@@ -189,9 +163,9 @@ ESP-Drone APP 同时支持 Android 系统和 iOS 系统。
遥控器配置
3.1 配置 4 个控制轴:``Roll 、Pitch、Yaw、Thrust``
2.1 配置 4 个控制轴:``Roll 、Pitch、Yaw、Thrust``
3.2 配置一个按键为 ``Assisted control``,用于飞行模式切换。
2.2 配置一个按键为 ``Assisted control``,用于飞行模式切换。
手机 APP 使用指南
========================
+1 -1
View File
@@ -64,7 +64,7 @@ menu "ESPDrone Config"
config WIFI_CHANNEL
int "Wi-Fi/ESP-Now Channel"
range 1 13
default 13
default 6
help
Wi-Fi/ESP-Now Channel, 1-13
config WIFI_MAX_STA_CONN
+3 -3
View File
@@ -7,9 +7,6 @@ CONFIG_FREERTOS_CORETIMER_0=y
CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
CONFIG_FREERTOS_HZ=1000
CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y
CONFIG_FREERTOS_USE_TRACE_FACILITY=y
CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID=y
CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=2048
CONFIG_FREERTOS_ISR_STACKSIZE=2048
@@ -23,3 +20,6 @@ CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=4096
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID=y
CONFIG_FREERTOS_USE_TRACE_FACILITY=y
CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y