mirror of
https://github.com/espressif/esp-drone.git
synced 2026-07-21 02:05:37 +00:00
fix: fix cfclient communication
refer https://github.com/qljz1993/crazyflie-clients-python.git Fixed https://github.com/espressif/esp-drone/issues/24, Fixed https://github.com/espressif/esp-drone/issues/54, Fixed https://github.com/espressif/esp-drone/issues/57, Fixed https://github.com/espressif/esp-drone/issues/58, Fixed https://github.com/espressif/esp-drone/issues/59, Fixed https://github.com/espressif/esp-drone/issues/66, Fixed https://github.com/espressif/esp-drone/issues/69,
This commit is contained in:
@@ -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
@@ -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|
|
||||
|
||||
### 致谢
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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")
|
||||
@@ -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
|
||||
=====================
|
||||
|
||||
@@ -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 使用指南
|
||||
========================
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user