# SC4AC **Repository Path**: reiholdchen/Serial_Communication_for_Auto_Control ## Basic Information - **Project Name**: SC4AC - **Description**: - 面向高可靠/高实时的无人自动化控制场景的通信协议实现 (linux平台) - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2022-05-09 - **Last Updated**: 2025-03-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Serial_Communication_for_Auto_Control (SC4AC) # 大致特性 - 全双工通信 - 多线程读取(每创建一个串口实例新建一个读取线程) - 非阻塞IO - `serial` 存在接收缓冲队列,优先保障数据完整性,不丢包 - 数据链路层完整协议实现,帧头帧尾,校验,... - 请求发送机制,确保负载均衡 - 自定义应用层协议支持 # 使用 构建: ``` make ``` 在源文件目录下生成一个 main 可执行文件 清除: ``` make clean ``` # 通信协议 使用 uart_send/uart_receive 函数前/后按照这个数据协议填充/解析数据 | RPI->ACFLY | msg_type | data_length | params | | --- | --- | --- | --- | | 设置起飞高度 | 1 | 1 | msg[0]=high 起飞高度 单位: m | | 降落 | 2 | 1 | msg[0] = 1 | | 悬停 | 3 | 1 | msg[0]=time 单位: s 秒 | | 速度控制 | 4 | 4 | msg[0]=xspeed,msg[1]=yspeed, msg[2]=zspeed, msg[3] = yawspeed 单位: cm/s | | 指点飞行 | 5 | 2 | msg[0] = pos_x;msg[1] = pos_y; | | ACFLY->RPI | msg_type | data_length | params | | --- | --- | --- | --- | | 飞控初始化完成, 可以准备起飞 | 6 | 1 | msg[0]=1 | | 已收到起飞指令 | 12 | 1 | msg[0] = 5; | | 起飞完成, 已到达起飞高度 | 7 | 1 | msg[0]=2 | | 悬停完成 | 8 | 1 | msg[0]=3 | | 巡线完成 | 9 | 1 | msg[0]=4 | | 回传接收到的数据 | 11 | 5 | msg[0]=rx_type; msg[1]=rx_length; msg[2]=rx[0];msg[3]=rx[1];msg[4]=rx[2]; | | 手动模式/完成飞行, 树莓派退出控制, 由飞手接管控制. | 20 | 1 | masg[0] = 6; | 注: - 飞控初始化完成, 可以准备起飞 - 已收到起飞指令 - 起飞完成, 已到达起飞高度 这三个指令是飞控发给上位机的消息, 上位机需要确保收到相应指令后再发送下一步指令给飞控, 否则会造成逻辑错误. 通常的流程是上位机: `等待飞控初始化完成消息` => `发送起飞高度指令` => `等待确认收到起飞指令回复, 否则一直发起飞指令` => `等待起飞完成消息` => `根据任务需要进行速度控制` => `根据任务需要悬停`/`发送降落指令` # 致谢 - acfly 协议 - others