From a2e4be81a68fc681c086287c798a79ba27138ae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E8=80=B3=E5=88=AE=E5=AD=90?= <2433069615@qq.com> Date: Tue, 3 May 2022 20:32:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Astar/Astar-level6.py | 213 -------------------------- src/Djitellowhite/Djitellowhite.cpp | 106 ------------- src/Djitellowhite/Djitellowhite.h | 72 --------- src/Djitellowhite/Hardwarelistener.h | 6 - src/Djitellowhite/Triplet | Bin 19720 -> 0 bytes src/Djitellowhite/Triplet.cpp | 45 ------ src/Djitellowhite/keyboard | Bin 17408 -> 0 bytes src/Djitellowhite/keyboard.cpp | 52 ------- src/Djitellowhite/libDjitellowhite.so | Bin 18152 -> 0 bytes src/Djitellowhite/server | Bin 17176 -> 0 bytes src/Djitellowhite/server.cpp | 58 ------- 11 files changed, 552 deletions(-) delete mode 100644 src/Astar/Astar-level6.py delete mode 100644 src/Djitellowhite/Djitellowhite.cpp delete mode 100644 src/Djitellowhite/Djitellowhite.h delete mode 100644 src/Djitellowhite/Hardwarelistener.h delete mode 100755 src/Djitellowhite/Triplet delete mode 100644 src/Djitellowhite/Triplet.cpp delete mode 100755 src/Djitellowhite/keyboard delete mode 100644 src/Djitellowhite/keyboard.cpp delete mode 100755 src/Djitellowhite/libDjitellowhite.so delete mode 100755 src/Djitellowhite/server delete mode 100644 src/Djitellowhite/server.cpp diff --git a/src/Astar/Astar-level6.py b/src/Astar/Astar-level6.py deleted file mode 100644 index b4dca24..0000000 --- a/src/Astar/Astar-level6.py +++ /dev/null @@ -1,213 +0,0 @@ -import numpy as np -import matplotlib.pyplot as plt - -#Astar算法 -def A_star(org, des): - open_list = [] - close_list = [] - open_list.append(org) - while len(open_list) > 0: - - temp_node = open_list[0] - for node in open_list: - if node.f < temp_node.f: - temp_node = node - current_node= temp_node - - - open_list.remove(current_node) - close_list.append(current_node) - #找到当前节点的所有邻近节点 - node_list = [] - if Is_valid(current_node.x, current_node.y - 1, open_list, close_list): - node_list.append(Node(current_node.x, current_node.y - 1)) - if Is_valid(current_node.x, current_node.y + 1, open_list, close_list): - node_list.append(Node(current_node.x, current_node.y + 1)) - if Is_valid(current_node.x - 1, current_node.y, open_list, close_list): - node_list.append(Node(current_node.x - 1, current_node.y)) - if Is_valid(current_node.x + 1, current_node.y, open_list, close_list): - node_list.append(Node(current_node.x + 1, current_node.y)) - if Is_valid(current_node.x - 1, current_node.y - 1, open_list, close_list): - node_list.append(Node(current_node.x - 1, current_node.y - 1)) - if Is_valid(current_node.x + 1, current_node.y + 1, open_list, close_list): - node_list.append(Node(current_node.x + 1, current_node.y + 1)) - if Is_valid(current_node.x - 1, current_node.y + 1, open_list, close_list): - node_list.append(Node(current_node.x - 1, current_node.y + 1)) - if Is_valid(current_node.x + 1, current_node.y - 1, open_list, close_list): - node_list.append(Node(current_node.x + 1, current_node.y - 1)) - neighbors = node_list - for node in neighbors: - if node not in open_list: - - node.init_node(current_node, des) - open_list.append(node) - - for node in open_list: - if (node.x == des.x) and (node.y == des.y): - return node - - return None - -#邻点是否可用 -def Is_valid(x,y,open_list=[],close_list=[]): - - - if x < 0 or x >=len(MAZE) or y < 0 or y >= len(MAZE[0]): - return False - - if MAZE[x][y] == 1: - return False - - if Is_contain(open_list,x,y): - return False - - if Is_contain(close_list,x,y): - return False - return True - - -def Is_contain(nodes, x, y): - for node in nodes: - if (node.x == x) and (node.y == y): - return True - return False - - -class Node: - def __init__(self, x, y): - self.x = x - self.y = y - self.f = 0 - self.g = 0 - self.h = 0 - self.parent = None - - -#对角线移动是直行移动代价的1.4倍 -#如果相邻节点已有父节点,则父节点是否更改以使g值最小为准 - def init_node(self, parent, end): - if self.parent is not None: - if parent is not None: - if abs(self.x - parent.x) + abs(self.y - parent.y) == 1: - if self.g > parent.g + 10: - self.g = parent.g + 10 - self.parent = parent - self.h = (abs(self.x - end.x) + abs(self.y - end.y))*10 - self.f = self.g + self.h - else: - if self.g > parent.g + 20: - self.g = parent.g + 20 - self.parent = parent - self.h = (abs(self.x - end.x) + abs(self.y - end.y))*10 - self.f = self.g + self.h - else: - if parent is not None: - if abs(self.x - parent.x) + abs(self.y - parent.y) == 1: - self.g = parent.g + 10 - self.parent = parent - self.h = (abs(self.x - end.x) + abs(self.y - end.y))*10 - self.f = self.g + self.h - else: - self.g = parent.g + 20 - self.parent = parent - self.h = (abs(self.x - end.x) + abs(self.y - end.y))*10 - self.f = self.g + self.h - -def draw_path(map_grid,path): - obstacle_x=[] - obstacle_y=[] - path_x=[] - path_y=[] - close_list_x=[] - close_list_y=[] - open_list_x=[] - open_list_y=[] - for i in range(len(map_grid)): - for j in range(len(map_grid[0])): - if map_grid[i][j]==1: #栅格地图上obstacle为障碍物标识 - obstacle_x.append(j) - obstacle_y.append(len(map_grid)-1-i) - plt.figure(figsize=(10,10)) #为了防止x,y轴间隔不一样长,影响最后的表现效果,所以手动设定等长 - plt.ylim(-0.5,len(map_grid)-0.5) - plt.xlim(-0.5,len(map_grid[0])-0.5) - my_y_ticks = np.arange(0, len(map_grid), 1) - my_x_ticks = np.arange(0, len(map_grid[0]), 1) - plt.xticks(my_x_ticks)#竖线的位置与间隔 - plt.yticks(my_y_ticks) - plt.grid(True) #开启栅格 - for point in path: - path_x.append(point.y) - path_y.append(len(map_grid)-1-point.x) - plt.plot(path_x,path_y,linewidth=3) - plt.scatter(open_list_x,open_list_y,s=500,c='cyan',marker='s') - plt.scatter(obstacle_x,obstacle_y,s=500,c='k',marker='s') - plt.scatter(close_list_x,close_list_y,s=500,c='g',marker='s') - plt.title("grid map simulation ") - plt.show() -""" - if map_grid[i][j]==closelist: #栅格地图上closelist为为闭列表中记录的位置标志 - close_list_x.append(i) - close_list_y.append(j) - if map_grid[i][j]==openlist: #栅格地图上openlist为为闭列表中记录的位置标志 - open_list_x.append(i) - open_list_y.append(j) -""" -#暂时不画closelist和openlist - -#迷宫地图 -MAZE = [ - [0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,1,0], - [0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1], - [0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,1,0,0,1,0,0,1], - [0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0], - [0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0], - [0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,1,0], - [0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0], - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0], - [1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,0,1,0,1], - [0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0], - [1,0,1,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,1], - [0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,1,0,1], - [0,0,0,1,1,1,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,1,1], - [0,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1], - [0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1], - [0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,0,1,0], - [0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1], - [0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,1,0,0,1,0,0,1], - [0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0], - [0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0], - [0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,1,0], - [0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0], - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0], -] - -#设置起始点和终点 -org = Node(22, 0) -des = Node(0, 22) - -result_node = A_star(org, des) - -path = [] - -minpath = result_node.g -count=0 - -while result_node is not None: - path.append(Node(result_node.x, result_node.y)) - if result_node.parent is not None: - if abs(result_node.x - result_node.parent.x) + abs(result_node.y - result_node.parent.y) == 2: - count+=1 - result_node = result_node.parent - -minpath-=count*6 - -for i in range(0,len(MAZE)): - for j in range(0,len(MAZE[0])): - if Is_contain(path, i, j): - MAZE[i][j]='*' - print("*, ", end='') - else: - print(str(MAZE[i][j]) + ", ", end='') - print() -print("最短路为:",minpath) -draw_path(MAZE,path) \ No newline at end of file diff --git a/src/Djitellowhite/Djitellowhite.cpp b/src/Djitellowhite/Djitellowhite.cpp deleted file mode 100644 index 12ad5ed..0000000 --- a/src/Djitellowhite/Djitellowhite.cpp +++ /dev/null @@ -1,106 +0,0 @@ -#include"Djitellowhite.h" -#include -#include - - -#include -#include -#include - -#include -#include - -using namespace cv; -using namespace std; -Tello::Tello(const char* IP) { - this->stream_on=false; - this->host = inet_addr(IP); - cout << "create successfully!" << endl; - -} -Tello::~Tello() {} -void Tello::set_conf(int socket){ - this->sock = socket; -} -void Tello::get_connect(sockaddr_in serveraddr) { - char tmp[10] = {"command"}; - send_message(tmp,serveraddr,0);// 0 -> timeout - cout << "connect successfully!" <host; -} -void Tello::takeoff(sockaddr_in serveraddr) { - char tmp[10] = {"takeoff"}; - send_message(tmp,serveraddr,0);// 0 -> timeout - cout << "takeoff successfully!" < timeout - cout << "land successfully!" <sock,buffer,strlen(buffer),0,(struct sockaddr *)&server_addr, sizeof(server_addr)); - return true; -} -void* Tello::udp_response_receiver(void* arg){ - //int m_SockServer; //创建socket对象 - //sockaddr_in serveraddr; //创建sockaddr_in对象储存自身信息(当有多个端口,可以多个绑定) - //sockaddr_in serveraddrfrom; - - //serveraddr.sin_family = AF_INET; //设置服务器地址家族 - //serveraddr.sin_port = htons(8889); //设置服务器端口号 - //serveraddr.sin_addr.s_addr = inet_addr("0.0.0.0"); - //m_SockServer = socket(AF_INET, SOCK_DGRAM, 0); //创建一个临时变量并赋值给m_SockServer - //int i = bind(m_SockServer, (sockaddr*)&serveraddr, sizeof(serveraddr)); //把名字和套接字绑定 - //std::cout << "bind:" << i << std::endl; - - int socket = *(int *)arg; - - cout << "receive start" << endl; - while(1){ - char buffer[20]; - int iret; - memset(buffer,0,sizeof(buffer)); - - iret = recv(socket, buffer,20,MSG_WAITALL); - if(iret > 0 && iret <10){ - printf("Message from tello: %s\n", buffer); - } - } -} -void Tello::get_video(sockaddr_in serveraddr){ - - char tmp[10] = {"streamon"}; - send_message(tmp,serveraddr,0);// 0 -> timeout -// cout << "stream_on successfully!" <stream_on = true; -// -// cout << "vid"; -// VideoCapture cap("udp://@0.0.0.0:11111"); -// cout << "cap"; -// if(!cap.isOpened()){ -// cout << "fuck off"; -// return; -// } - -// Mat frame; -// cout << "continue!"; -// while(1){ -// cap>>frame; -// if(frame.empty()) -// break; -// imshow("video",frame); -// waitKey(20); -// -// } -// cap.release(); - - -} diff --git a/src/Djitellowhite/Djitellowhite.h b/src/Djitellowhite/Djitellowhite.h deleted file mode 100644 index b311e46..0000000 --- a/src/Djitellowhite/Djitellowhite.h +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef _DJITELLOWHITE_H -#define _DJITELLOWHITE_H -#include -#include -#include -#include -#include -#include -/*Library for interacting with DJI Ryze Tello drones.*/ - - -//coding = utf - 8 - -/* """C++ wrapper to interact with the Ryze Tello drone using the official Tello api. - Tello API documentation: - [1.3](https://dl-cdn.ryzerobotics.com/downloads/tello/20180910/Tello%20SDK%20Documentation%20EN_1.3.pdf) -*/ - -#define RESPONSE_TIMEOUT 7 //in seconds -#define TAKEOFF_TIMEOUT 20 //in seconds -#define FRAME_GRAB_TIMEOUT 3 -#define TIME_BTW_COMMANDS 0.1 //in seconds -#define TIME_BTW_RC_CONTROL_COMMANDS 0.001 //in seconds -#define RETRY_COUNT 3 //number of retries after a failed command - - -//Video stream, server socket -#define VS_UDP_IP "0.0.0.0" -#define VS_UDP_PORT 11111 - -#define CONTROL_UDP_PORT 8889 -#define STATE_UDP_PORT 8890 - -#define BUFFER_SIZE 1024 -//Constants for video settings -#define BITRATE_AUTO 0 -#define BITRATE_1MBPS 1 -#define BITRATE_2MBPS 2 -#define BITRATE_3MBPS 3 -#define BITRATE_4MBPS 4 -#define BITRATE_5MBPS 5 -#define RESOLUTION_480P "low" -#define RESOLUTION_720P "high" -#define FPS_5 "low" -#define FPS_15 "middle" -#define FPS_30 "high" -#define CAMERA_FORWARD 0 -#define CAMERA_DOWNWARD 1 -//日志模块暂时不写 - -class Tello { -private: - int sock; - bool stream_on; - unsigned long host; -public: - Tello(const char* IP); - ~Tello(); - void set_conf(int socket); - unsigned long gethost(); - void get_connect(sockaddr_in serveraddr); - void takeoff(sockaddr_in serveraddr); - void land(sockaddr_in serveraddr); - bool send_message(char* msg,sockaddr_in server_addr,int timeout = RESPONSE_TIMEOUT); - static void *udp_response_receiver(void* arg); - void get_video(sockaddr_in serveraddr); -}; - - - - -#endif diff --git a/src/Djitellowhite/Hardwarelistener.h b/src/Djitellowhite/Hardwarelistener.h deleted file mode 100644 index 176cde8..0000000 --- a/src/Djitellowhite/Hardwarelistener.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _HARDWARELISTENER_H -#define _HARDWARELISTENER_H - -int listenkeyboard(); -int scanKeyboard(); -#endif diff --git a/src/Djitellowhite/Triplet b/src/Djitellowhite/Triplet deleted file mode 100755 index b514f9136a8bd367183adecad580a66f3f0cb1c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19720 zcmeHPe{@vEy`TJosE`B&P0`A#U_oTfh6IC^x`8a*)F3HIDz(zfX7`4yYuMc}pkNtT{t?fbE3W^1Mr}bgAmA2ZZRohKPiz(VXi|+e;=g#-; z-OH}Uo}Tmmcudaj_kKU$AM>5LGjnHW?qqwQV`X_+nc!3*J|rY}fra>$pgO=BLik0C zn2v9cm?NeDuEfW$#BO@5+!8RYR(chnWLHlYMd&3KESPeHM9HpH+A-adFcozcPj*#w zsdzViL)kH9xt*VfjFCL@+om^4r$R7w+ELx?yV}yLR-_WjChm zn0i!wGUfUtH}q*ye%;gq86}VW7Q$_}PT9F>o6=`Wc~I(l*$n?Z`E@G0lOE|txaqSN zESPeBAAud!%b6y=&1+SDrS5~K%FUGSH>GQ$k=`Xu*F?jMqLEl?Xwgv1l0{3Jyvew? zQOYSU%7bqIs+)QQZp#6}lskDZW-6ZK58SpXF?YfC7rxhc&(@#6`sROhZ8!*fvzQ%6SE}}PwLPxn%ZL# zv&|RSY&-8zh%0WE@SlpIN4%Ze-c4citG1-d(w_ zuyRE~Lh+PIMc)_-=}9WNPv||dEs?5V95ra516x31GLlIL97z0VzZ!}D*G+~Co1x+&{A~D0% zgW)h?kV-5WHH<-J-xr};_!RE4PSL2FG7!WKUA1C`z8Gy|#kzH^%iDFIcd=O2(Y_ok z;3n%@Z}c{Lo9*i+G_G>|Rj5y;eMM-c{8ZuF;-<)Pe=0aimQ-GfGW^|!wo1wAu1< z@oAMG)Wpn41T&l}(W(4d`sKDh&rf(>Fs9~z2h{w7@gLNaHzAI=aL>gSe$<6`zu&@- zx$r&8f3@F|vw!A~++gAK%;RSrAx9nfR7*vEA9LU;M2U|%@YxRitOHk}OX&#*eu+bW z(t)cYNok$mQlfitp>-+0{eFv~`N16PQhwJfKNLIJaPl~Cbql3vz60mE1qm7)IM0y? zZ*kyiYD%#1J8 zf!8?ncR27`2mTocPW^<_E(cD}Hcq=8xbwNQ$APP+DNVlOz-d0mX|DsH#USWD2Y!(Q zKj6UM=fKZio~?oZ%NqD|?WJ#NBgdAh>6_1 z7eQ+02-5E-$;9|?bGh6u$uiG5!&or-5l=yw&DuK$;l$**pzI6XTcJJPkk- z<1=iY2A+xWGMlFXXJY*IceuPX(4hP_PXi3fZ}T*;p!_yZ0}9G-^E8m4{5DSm2+Geq zYI~8a?KUCn8~gy~&$V;%yy4>4yZ9a#zuLtIT>LT@-|XTSx%hc5{{1d~mW!Y6;;UTz z+gR>!mhTN0|Ei0B*~P!$;(zAif8yeQU+6KL{^{}<`C;Ra&+>(1>h~8eOrMFFL>C_2rG%$I{ zUnxLOXz9b*PoN2=A172xcUEhe=BjDPEVJxF%Et$xM$)P;ETj+)Y3b*(*Hfc?@}L|C zq<47UwZ4!~r%sZ~(Vmm(x&qnAaX%tCrlp^zT1mg9rTPDcIJ>km?ms(SRFar9$hW7D zJWPIJ{jX5pM-Mt}bTu`WX|i>qv3wZXPr6&hY3+A3aAZ`Z1IMUO;cfw4#EIboNpSE8x0(ZI2X>8FE~BCy%O(}CwlwmmOye-hv4Y(GfG>Um49huD4e*VCn2h0^P zxr0nH%g#j**?EY-8cRm6Bu8>AX#i;5uFSHR0B5%Y_&y@ajn6@JkIL4QS@tA}!j=Q% zVcB+rAMM#o(OIqa`?3NgvX92J%&dRIsARW>u#EAc{WP`8ZUh6%qmNLVwN-pT(UXss zBWfB{4`&ymsip(Z?tl1l7(MtGh|__ej%<5KnAeO39+C~_Y6|YK^w<2QDOMe|SnR!u zT|n&U>Z2HY(VWTiQ{?0|Je z&G)i-uUtwuTT4^ZmPNT+)*l`nhqDw<_6c%6@`U#B{N1MqU8y#9GZphF*<@yw&7;hl z+W?`By*Sq@^c4`ENgLDdIKBtbJ6jn&uQGwXXchaZVA&SR2X`73hFiIF5Dh|0-#bKv zA7Sah4m|Zf1Kz6EbYK_w-QdU2>Gq5UvgyEAMt5$7&B)l>X?bxda2HitKA)p+Vh#}a zbeWb>c|0zw+6v+zgxRO?mEIYpoTZ^t;Y*N>S~AxN*AGd)w`I#Ih{-MH9DHqmePl9e z-hi*|e;Anzn)=9Oxc1H+DD^APp-#8Zu%21=+!d&Wi8rX&G<{eHR&|-T0lu;gnmv~0 zH%aq|t?A8cK0}&a&}^_YM@aLFwq|8s^Q)wZfu#97OY>u-Y1*2|fnYnY}=RWe2ne`KLl4+g+2nG6~WGw|=5kKiJpjt(|ixZi4mu;h>`AGyls@iqC%iKd%8=cjlD8 zveuO)?y;oS9*8HI3WbbhvM&{l4qqlh@mS0VnJ!e#bzLaUD_syaRE)@G!y~s%#A^5r zZZtf7iTHrWG@{Y?b)I=i%rAXQ8@;|IEnZ&(_8TJD28qb^{jkSKB;pC-5usr01Exns zXzc+B(HBo_2`0j#7aI;DYV?^R5!u*pQfbOAuK3_lP+Et(`cJuBB_2Wdoyg^`2K@$T z8|XB2z2lI-33@B|?my>pTS3F1_kr#J{Q>BFbou8&KLmOT^!K2bpdvqmapHQ=Zj7C` zf}R2$0{tgE3wDDZ0o@1sThLRWzrpitZUy4OQ?v~<02&5ef=Bk9pci1uya#jx=mF5J zpf7J8>%b2c-qwJU5JNpTF0(`J(t7!ju35AX_6o?aET^-Jg?<) zgU}N-bt`M?KU{m>mg*hihS}F$wRrC3K&Abyp#7*PX-FUv`8Dy`0DJ@4t3-L-jnC(h z-+ICVHFbBDub4iiyc-c&v3vvYQOM;wF3VR+v5fV{kRO0tuFJE0ZC-vH@*hC{0BGL- z7j6I35KkNKn_Q1)`_*}Sy3f}^Udp}$^2Z^+zrg=)+kce&xZThT_g<2rA<+4g+|@?Sx|xbC#a1fwMJmwg%4Dz}Xr& zTLb^t8sPU+_y6a{2r3&7R-MrVShs= znom)3zKcM-G85tk;_~m7)+u|M$5WbW5y9^)3@XQrSF4OU?tWE2Sj(1)^S@N_tcRa3 zvV2gN5SE4|->(d@_9FR8Wrv?%lD}NZ@v}(sTn|d^A4d4SYPZ7%^<&4cXs4nZ6dhD_ zhoZX_-J|GUMGq)?RM9a-Pbi9)8D*+d)T3yFqJBj?72TldprShzb;ti+`D%Zm1zwfA z&NIKKHx)Beo~7Oyr|%DBGz>UoSZC*&lE>4 zE2ck7w9G4pUuchuPH6>386FP{@p@6LKUUC6jT*lS^)b5oorrZ^;dnpTDXp-79p_OR z#wx|@xjbTB(YRlZo7Lc|PkJ?k@C`1Us)cZV?pR)gxE2>>h^MpFLMT5b z$Q3>@IYU<^e@2ktXQ1$fX^U_$MVblu?hI) z7F6)vS;7ykAyc_dsEOTnW%Vi=1mQnZ{e{*7Dcx1V&r>Dvtn#m^`l+?th&M~8+o;+bx2xIGzjEpzEhX^o5;&b6pg7m5`@+9VYGnJY6H68F zy2@h*^y$91+wGAg~D&MQr4=K5J3?VJf7HdB<4peg@TeYbcSS z@U3dV__4z8DdFc^CGbPa&o5PbxL^5s5x7TPJ4vpDpNptppk!kzPE?CbACS1ygLS^z4={?wIj4(K5|cSUD^!f}0LG~OGG>Nr7_Nb14V5Oxp; z2BU^)guN{dOK_T~n39eYJrO;aNCbyw?*V$ z;+B3;Z)gywgm5yd!?$!Wg5Ae0k))wx7ZWcyr9!49YSHxwPJiJD5{_{##o?-03g?oB zIvRb5&gcuKqNX0j;U;}B9*u;CasEm=TpYxXWhjV}A^(jQxFoVM7EjTxH(eXr+=rdhSVzmvYu2`Pwciq;{POV9Dd;qDL&}MhQ=cA)-bN~&33f%|?&7iPOyA}GR^MZwl-o6I+Cmf0C zsiZ*#qw{WjUae5oIucii*+DL)cs57EM%*0@8rt7?+)(ADPQvlYM>+;sB8Ij`RFQQ^ z&!wS)t#pUT@r4&@_Zy}4kr%X8h_Vm zNaaLTihc0V?OXMmYt@Snr`;3lFesnbEOhEV5}Ehilt15?2kB^{-3(fAB$AqCA00H+ zal(~*7uQFlFBKlt6Gn0nL!5yN`MyOW(78E(p3?1G9rJWYNv+&EN{Re^O;I{j8{;8h zGau7*JL3_>Cr1=r?@cCcCpUE!IcMt5R-WJtB~x-t$d??W3l7!l1J)}efzD7tr=;3A z{Yb3e?>P2}I=)kfa12>k6i0KVWHSyT;}KK9=#V9hXpjul)nL>VUip~y z;?lb@4wf#GMo4&Z1Q@KWF>fL+M_8}Xub%Y%IQnaI$R-rhjiHc%rzXmXF-Ll}CIOZY zzDDN3fe74N4$&BemyQ)+Qc+|E^xhzvPM6_>X{$`U-pQ2L{gqhi@-@*b@WIr|w&!(G zrXI+giGK$%wgeYW`*ryJMTzNLi?zS;^P?cOgLB&RIxAC8fp&gKiu{V@Ns z%bxcGn7Wp;WnOGc^e_0(+B#>$>wo-zdpwXi6X(yg0>RVT6WjCt!m+C@E7oHl%rmWp zJ+*zd=Y0tNKTIA~vDAMlu^qRcuLGm{V|#m@k{5_b=tykOv>x&Td%sd{uqgL)cENVc zUkYQwIDfz2lGL-kD}N=nl<<9p%3rD5INL9@5$l58IVrb2r>e#dX+s5x_J;%baQs{@ n+V17pacL**dh7D@T=7c6`LZH)_hR -using namespace std; -int main(void){ - Tello T("192.168.10.1"); - int socket_fd, err; - - if((socket_fd = socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1) - { - cout << "initialized error" << endl; - cout << 0; - return -1; - } - - cout << 1 << socket_fd; - T.set_conf(socket_fd); - - pthread_t thread_receive; - err = pthread_create(&thread_receive,nullptr,T.udp_response_receiver,&socket_fd); - sleep(3); - struct sockaddr_in serveraddr; - memset(&serveraddr,0,sizeof(serveraddr)); - serveraddr.sin_family=AF_INET; - serveraddr.sin_addr.s_addr=T.gethost(); - serveraddr.sin_port=htons(CONTROL_UDP_PORT); - - - - if(err!=0) - { - cout << err << " " << "can't create thread"; - } - - T.get_connect(serveraddr); - //sleep(1); - //T.takeoff(serveraddr); - T.get_video(serveraddr); - sleep(5); - //T.land(serveraddr); - - pthread_join(thread_receive,NULL); - listenkeyboard(); - return 0; -} diff --git a/src/Djitellowhite/keyboard b/src/Djitellowhite/keyboard deleted file mode 100755 index fb6acf5aeb95432ce1b005b8eb71520f42b7d83b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17408 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 AY5)KL diff --git a/src/Djitellowhite/keyboard.cpp b/src/Djitellowhite/keyboard.cpp deleted file mode 100644 index 3006537..0000000 --- a/src/Djitellowhite/keyboard.cpp +++ /dev/null @@ -1,52 +0,0 @@ -#include -#include -#include "Hardwarelistener.h" -#include -using namespace std; -int scanKeyboard() -{ - - int in; - - struct termios new_settings; - struct termios stored_settings; - //设置终端参数 - tcgetattr(0,&stored_settings); - new_settings = stored_settings; - new_settings.c_lflag &= (~ICANON); - new_settings.c_cc[VTIME] = 0; - tcgetattr(0,&stored_settings); - new_settings.c_cc[VMIN] = 1; - tcsetattr(0,TCSANOW,&new_settings); - in = getchar(); - tcsetattr(0,TCSANOW,&stored_settings); - - return in; - -} - -//测试函数 -int listenkeyboard(){ - while(1){ - switch(scanKeyboard()) - { - case (int)'w': - cout << "forward"<< endl; - break; - case (int)'s': - cout << "back" << endl; - break; - case (int)'a': - cout << "left" <N+|;A>n7Zw_KW;il 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 Y&h4@;JrftQZ@fck(En@TEG}03A3X&HVE_OC diff --git a/src/Djitellowhite/server b/src/Djitellowhite/server deleted file mode 100755 index 09df8ae37f8fe70c170159a9790f2614f1457879..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17176 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 -#include -#include -#include -#include -#include -#include -#include -#define PORT 8890 - -void udp_server(int sockfd) -{ - - socklen_t len; - char buf[1024] = {0}; - struct sockaddr_in server_addr; - int n; - int opt = 1; - len = sizeof(server_addr); - memset(&buf, 0, sizeof(buf)); - server_addr.sin_family = AF_INET; - server_addr.sin_addr.s_addr = htonl(INADDR_ANY); - server_addr.sin_port = htons(PORT); - - setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); //当服务器非正常断开的时候重启服务器,不会进入TIME_WAIT状态 - - if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { - printf("can not bind\n"); - exit(1); - } - - while (1) { - printf("========wait for client's request========\n"); - n = recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr *)&server_addr, &len); - buf[n] = '\0'; - printf("receive client's data: %s\n", buf); - sendto(sockfd, buf, n, 0, (struct sockaddr *)&server_addr, len); - printf("send data to client: %s\n", buf); - } - - close(sockfd); -} - -int main(int argc, char **argv) -{ - int sockfd; - - if ((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0) { - printf("create socket false\n"); - exit(1); - } - - udp_server(sockfd); - - exit(0); -} - -