STM32 GPS悬停飞控 (四十二) 图传自动启动

我用了这些代码,现在树莓派和服务器都能自动启动图传相关的程序了,客户端这里打开程序就能看到图像。我下楼也测试过,信号不好时最好还是用320x240。

quadcopter rc.local

sudo pppd call gprs &
sudo create_ap -n wlan0 pi raspberry &


sleep 30
sudo python /home/pi/quad/quad.py &
sudo python /home/pi/quad/quad_video.py &

quad_video.py

import socket
import threading
import struct
import time
import cv2
import numpy

cap=cv2.VideoCapture(0)
ret=cap.set(3,640)
ret=cap.set(4,480)
img_param=[int(cv2.IMWRITE_JPEG_QUALITY),15]

#sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#sock.bind(("0.0.0.0", 8880))
#sock.listen(2)

#dst, dst_addr = sock.accept()
HOST, PORT = "server_ip", 8002
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))


while True:
    ret,img=cap.read()

    img=cv2.resize(img,(640,480))  
    ret,img_encode=cv2.imencode('.jpg',img,img_param) 
    img_code=numpy.array(img_encode)
    img_data=img_code.tostring()
    try:
        print len(img_data)
        sock.sendall(struct.pack("f",len(img_data)))
        sock.sendall(img_data)
    except:
        cap.release()
        break

server rc.local

python /root/quad/server.py &
python /root/quad/server_video.py &

server_video.py

#!/usr/bin/python
# coding=UTF-8
 
import socket, time, threading, sys
 
sock_quadcopter = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock_quadcopter.bind(("0.0.0.0", 8002))
sock_quadcopter.listen(2)
 
sock_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock_client.bind(("0.0.0.0", 8003))
sock_client.listen(2)
 
sock_quadcopter.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock_client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

src = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
dst = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

quadcopter = 0
client = 0


class quadcopter_thread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.running = True

    def run(self):
        global src, quadcopter
        while self.running:
            try:
                src, src_addr = sock_quadcopter.accept()
                print "Source Connected by", src_addr
                quadcopter = quadcopter + 1
            except Exception as ex:
                    print "1: ", sys.exc_info()
                    print ex

    def stop(self):
        self.running = False
  

class client_thread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.running = True

    def run(self):
        global dst, client
        while self.running:
            try:
                dst, dst_addr = sock_client.accept()
                print "Destination Connected by", dst_addr
                client = client + 1
            except Exception as ex:
                    print "2: ", sys.exc_info()
                    print ex

    def stop(self):
        self.running = False

class transfer_thread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.running = True

    def run(self):
        global src, quadcopter
        global dst, client
        while self.running:
            if quadcopter >= 1 and client >= 1:
                try:
                    msg = src.recv(10000)
                    if not msg:
                        print "lost quad signal"
                        quadcopter = quadcopter - 1
                    dst.sendall(msg)
                except Exception as ex:
                    print "lost client "
                    #print "3: lost client ", sys.exc_info()
                    client = client - 1
                    print ex

    def stop(self):
        self.running = False

if __name__ == "__main__":
    quad_t = quadcopter_thread()
    quad_t.start()
    client_t = client_thread()
    client_t.start()
    transfer_t = transfer_thread()
    transfer_t.start()

    while True:
        try:
            print quadcopter, client
            time.sleep(1)
        except KeyboardInterrupt:
            print "Interrupted"
            quad_t.stop()
            client_t.stop()
            transfer_t.stop()  
            src.close()
            dst.close()
            sock_quadcopter.close()
            sock_client.close()
            quad_t.join()
            client_t.join()
            transfer_t.join()
            break
 

client_video.py

import socket
import cv2
import threading
import struct
import numpy

addr_port=("server_ip",8003)
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(addr_port)

name = addr_port[0]+" Camera"

while True:
    info = struct.unpack("f", sock.recv(4))
    print int(info[0])
    buf_size=int(info[0])
    if buf_size:
        try:
            buf=b""
            temp_buf=buf
            while(buf_size):
                temp_buf=sock.recv(buf_size)
                buf_size-=len(temp_buf)
                buf+=temp_buf
            data = numpy.fromstring(buf, dtype='uint8')
            image = cv2.imdecode(data, 1) 
            cv2.imshow(name, image)  
        except:
            pass
        finally:
            if(cv2.waitKey(10)==27):
                sock.close()
                cv2.destroyAllWindows()
                break

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CREELINKS小四轴简介 诸多无人机爱好者想亲手动手DIY一个自己专属的无人机,买个现成的飞控板,组装一下就能飞(太easy,不仅毫无成就感,而且啥也没学到)。搜罗一下现如今无人机市场,各种无人机琳琅满目,开源无人机才是DIY的最爱,笔者也了解过无人机现状及相关开源的项目,如Crazepony、CrazyFile、Paparazzi UAV、Dronecode / PX4、OpenDroneMap等,但大多数开源无人机上手难度大,代码晦涩难理解,且处于不同的处理器平台,移植相当困难,代码设计难以借鉴及修改。小编特此打造一款与众不同的开源无人机。 CREELINKS无人机小四轴+遥控器实物展示: 小四轴无人机基本参数: 1) 处理器:STM32F103RET6/512K ROM/64K RAM 2) 加/角速度:MPU6050 3) 气压计:BMP180 4) 通讯方式:WIFI(ESP8266)、蓝牙(HC-05)、2.4G射频(NRF24L01+) 5) 电机:8520空心杯 6) 电池:850mA锂电池 7) 遥控器:10K高精度遥杆、1.8寸TFT彩色液晶显示屏 8) 滤波算法:滑动平均、限幅 9) 姿态解算:默认卡尔曼,可通过地面站配置为一阶、二阶、四元数。 10) PID算法:串行PID控制算法 11) GPS:当前V1.0版本暂不支持 12) 图传:当前V1.0版本暂不支持 无人机特点: 开源所有的源代码及原理图(PCB暂不开源) 支持代码无缝移植到其他平台 支持WIFI方式连接地面站 支持WIFI方式连接手机 支持WIFI方式连接遥控器 支持通过地面站配置PID参数及滤波参数 支持通过地面站观察参数波形 遥控器支持WIFI、蓝牙、2.4G射频三种通讯方式 CREELINKS开源无人机有何不同? 软件及硬件完全基于CREELINKS物联网平台的模块化设计思想,硬件模块抽象化、模块驱动对象化。整套实现的无人机代码,与底层处理器平台彻底无关,用户可很方便的移植到其它任何处理器平台。 飞控系统架构: 飞控源码: 所有的附件内容截图: 实物购买链接:https://item.taobao.com/item.htm?spm=2013.1.w4023-... 相关推荐: 【2016英飞凌杯一等奖】基于英飞凌无人机解决方案的跟拍应用设计 英飞凌无人机XMC4500多机演示板 - 全系统解决方案

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值