树莓派+二自由度云台制作智能小车(五)——服务器+网页控制

一、服务器

(1)简单讲解

C/S结构实现控制,树莓派运行服务器,中断通过访问网页实现控制小车,使用UDP通信。其中使用多线程控制小车的自动避障功能,写的不好的地方请批评指正。

(2)代码实现

创建server.py

from http.server import BaseHTTPRequestHandler,HTTPServer
import time
import socket
import urllib
from carCtrl import CAR
from camera_control import Camera
from threading import Thread

global loop
global direction
loop =True

class CarServer(BaseHTTPRequestHandler):
    
    carControl = CAR()
    cameraControler = Camera()
    i=0
    
    def get_host_ip(self):
        '''
        This method is used for getting local ip address
        The car server will deploy on this ip
        '''
        
        try:
            serverSocket = socket.socket(socket.AF_INET
                                         ,socket.SOCK_DGRAM)
            serverSocket.connect(("192.168.0.12",80))
            localIP = serverSocket.getsockname()[0]
        finally:
            return localIP
    
    
    def do_GET(self):
        '''
        Define the car control GUI for client
        For the first deition, it will only return direction control GUI
        '''
        localIP = CarServer.get_host_ip(self)
        
        #when this GET method is called,then should init the car
        self.carControl.reset()
        
        #read control page html file from control.html
        controlPageFile = open("control.html")
        controlPageGUI = controlPageFile.read()
        controlPageFile.close()
        controlPageGUI = controlPageGUI.replace(
            "requestAddress","http://"+ localIP +":9090/")
        controlPageGUI = controlPageGUI.replace(
            "cameraAddress","http://"+ localIP +":8080/")
        
        self.send_response(200)
        self.send_header("Content-type","text/html")
        self.end_headers()
        self.wfile.write(controlPageGUI.encode())
        
        
        
    def do_POST(self):
        length = int(self.headers['Content-Length'])
        qs = self.rfile.read(length)
        global direction
        direction = 'S'
        direction = qs.decode()
        print(direction)
          
        cameraDirection = ['HR','HL','VU','VD','GL','GF','GR','GU','GD','RESET']
        if direction in cameraDirection:
            #control camera
            self.cameraControler.cameraRotation(direction)
        elif direction =="Auto":
            if self.i == 0:
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
自由度云台是一种机械结构,由两个旋转自由度的舵机或电机驱动。stm32hal是一种基于STM32的硬件抽象层库,用于方便地编写驱动程序和控制代码。 要控制自由度云台,我们可以使用stm32hal库来控制舵机或电机的驱动。首先,我们需要初始化STM32的GPIO口和定时器,以便与舵机或电机进行通信。然后,我们可以使用PWM信号来控制舵机或电机的转动角度。 对于舵机,我们可以设置PWM信号的占空比来控制转动角度。通过调整占空比的大小,我们可以控制舵机在一定范围内的转动角度。 对于电机,我们可以使用H桥电路进行控制。通过改变H桥电路中驱动电机的电压和极性,我们可以控制电机的转动方向和速度。 在控制自由度云台时,我们可以通过读取传感器数据来实现闭环控制。例如,我们可以连接陀螺仪或加速度计等传感器来获取云台的当前角度信息,并根据目标角度和当前角度之间的差异来调整舵机或电机的角度或速度,以实现云台的稳定控制。 使用stm32hal库可以简化控制自由度云台的编程过程。我们可以使用库提供的函数来设置GPIO口和定时器,并使用PWM输出来控制舵机或电机的转动角度。同时,stm32hal库还提供了其他丰富的功能,如中断处理、时钟控制等,可以更加灵活地进行控制。 总之,通过使用stm32hal库,我们可以方便地控制自由度云台。通过初始化GPIO口和定时器,使用PWM信号来控制舵机或电机的转动,结合传感器数据进行闭环控制,可以实现云台的稳定控制和精准定位。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值