Robomaster TT无人机 ,C++ Socket连接方法
 
     李化波 
    
 
    
      C++ 控制 TT无人机 首飞成功[破涕为笑] 
    
 
     
    
    视频号 
   
 
  大疆TT无人机,开放了SDK,可以通过明文协议,控制TT无人机。之前有用Python编程控制,效果挺好。今年四川省的无人机竞赛规则是,如果用C++编程加10分,尽管最后没有执行这一规则,但是一直心欠欠的这个问题。
最近,公司老板很看重五大学科竞赛之信息学奥赛,其实要追溯到2018年了,那个时候老板就在想怎么与信息学对上,时间已经过去了3年了,今年与CCF四川组委会有了良好合作,上层还有金牌教练站岗,作为苗子筛选通道的科技创新普及教育,我们要把硬件编程和信息学建立连接,用C++来控制TT无人机这个问题,就迫切需要解决掉
大疆开放了SDK,有这样的基础。经过了反应琢磨,多位大佬协助下,终于在网上找到了以下程序,
using namespace std;int main(){SOCKET sock_Client; //客户端用于通信的SocketWSADATA WSAData;char receBuf[BUFFER_SIZE]; //发送数据的缓冲区char sendBuf[BUFFER_SIZE]; //接受数据的缓冲区if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0){printf("初始化失败!");return -1;}//初始化sock_Client = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);//创建客户端用于通信的SocketSOCKADDR_IN addr_server; //服务器的地址数据结构addr_server.sin_family = AF_INET;addr_server.sin_port = htons(8889);//端口号为4567addr_server.sin_addr.S_un.S_addr = inet_addr("192.168.10.1"); //127.0.0.1为本电脑IP地址SOCKADDR_IN sock;int len = sizeof(sock);while (true){cout << "请输入要传送的数据:";cin >> sendBuf;sendto(sock_Client, sendBuf, strlen(sendBuf), 0, (SOCKADDR*)&addr_server, sizeof(SOCKADDR));//int last=recv(sock_Client, receBuf, strlen(receBuf), 0); // (调用recv和recvfrom都可以)int last = recvfrom(sock_Client, receBuf, strlen(receBuf), 0, (SOCKADDR*)&sock, &len);if (last>0){receBuf[last] = '\0'; //给字符数组加一个'\0',表示结束了。不然输出有乱码if (strcmp(receBuf, "bye") == 0){cout << "服务器不跟我聊天了..." << endl;//当服务器发来bye时,关闭socketclosesocket(sock_Client);break;}else{printf("接收到数据:%s\n", receBuf);}}}closesocket(sock_Client);WSACleanup();return 0;}/*关于WSAStartup方法和WSACleanup方法引用出错的解决:错误:编译的时候出现undefined reference to `__imp_WSAStartup'undefined reference to `__imp_WSACleanup'在一般编译器中不会直接连接编译wsock动态库,需要手动添加库在vc中,点项目(project-->project option)在makefile中输入-L"ws2_32"在dvc C++中点击工具(Tool)-->编译选项(Compile Option)在编译命令框中输入-lwsock32*/
在这里附上老徐的CSDN文章链接https://www.cnblogs.com/DOMLX/p/9601511.html,非常感谢有前辈的贡献,让我这个小白可以有激动人心那一刻。其实我也是经过了好多天的查阅资料,测试,几次想放弃,大疆市场告诉我,根据 Python来改,研发是不可能来帮我解决这个问题的,他们没有这个计划。
老板喊来了金牌教练李老师,以及在小美好的高能支持下,实现了socket套接字与TT无人机的通信,代码如下。
运行环境是DEV-C++,需要添加动态库
在dvc C++中点击工具(Tool)-->编译选项(Compile Option)在编译命令框中输入-lwsock32
附上大疆 官方对明文SDK介绍 https://robomaster-dev.readthedocs.io/zh_CN/latest/text_sdk/intro.html
连接到无人机,运行程序,输入command,即可以takeoff了
