beaglebone blue突然不向电机发送信号

bvjveswy  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(211)

我已经创建了一个api,通过web ui来控制我的beaglebone blue。电路板本身控制两个直流电机(用于驱动)和一个伺服电机(用于转动相机)。我的api从ui接收get请求,以控制直流电机,但由于某些原因,电机未收到信号。在最长的一段时间里(与我现在使用的代码完全相同),它工作得很好。我用电压表检查是否有信号被发送到直流电机,并且没有电源被发送。我已经更新了我的板,并确保我有最新版本的rcpy。我不明白为什么会发生这种情况。奇怪的是伺服电机工作得非常好(就像它最初做的那样)。
以下是我的api的代码:

import rcpy 
import rcpy.motor as motor
import rcpy.servo as srv
import rcpy.clock as clock
import time

from flask import Flask, render_template, request, jsonify, make_response
from datetime import datetime

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('robocar.html')

@app.route('/servo/<duty>')
def move_camera(duty=0.0):
    global servo_duty
    if request.method == "GET":
        servo = srv.Servo(1)
        duty = max(min(1.0, float(duty)), -1.0)

        rcpy.set_state(rcpy.RUNNING)
        clk = clock.Clock(servo, 0.02)
        srv.enable()
        clk.start()

        servo.set(duty)
        time.sleep(1)

        clk.stop()
        srv.disable()

        return _corsify_actual_response(jsonify({"response": "200"}))
    else:
        return _build_cors_prelight_response()

@app.route('/drive/<speed>/<direction>')
def move_car(speed=0.0, direction=0):
    if request.method == "GET":
        motor1_channel = 1
        motor2_channel = 2
        speed = float(speed)
        direction = int(direction)
        wheel_speeds = [speed, -speed]

        if direction ==  1:
            motor.set(motor1_channel, wheel_speeds[0])
            motor.set(motor2_channel, wheel_speeds[1])
        elif direction ==  4:
            motor.set(motor1_channel, wheel_speeds[0])
            motor.set(motor2_channel, wheel_speeds[0])

            if speed >= 0.1:
                time.sleep(0.5)
                stop_car()
        elif direction ==  3:
            motor.set(motor1_channel, wheel_speeds[1])
            motor.set(motor2_channel, wheel_speeds[0])
        elif direction ==  2:
            motor.set(motor1_channel, wheel_speeds[1])
            motor.set(motor2_channel, wheel_speeds[1])

            if speed >= 0.1:
                time.sleep(0.5)
                stop_car()

        #time.sleep(20)
        #stop_car()

        return _corsify_actual_response(jsonify({"response": "200"}))
    else:
        return _build_cors_prelight_response()

@app.route('/brake')
def stop_car():
    if request.method == "GET":
        motor1_channel = 1
        motor2_channel = 2
        motor.set_brake(motor1_channel)
        motor.set_brake(motor2_channel)

        return _corsify_actual_response(jsonify({"response": "200"}))
    else:
        return _build_cors_prelight_response()

def _build_cors_prelight_response():
    response = make_response()
    response.headers.add("Access-Control-Allow-Origin", "*")
    response.headers.add('Access-Control-Allow-Headers', "*")
    response.headers.add('Access-Control-Allow-Methods', "*")
    return response

def _corsify_actual_response(response):
    response.headers.add("Access-Control-Allow-Origin", "*")
    return response

if __name__ == '__main__':
    app.run(host='0.0.0.0')

下面是我向api发出请求的javascript:

servo_duty = 0.0

function moveCamera(duty) {
    servo_duty += duty
    servo_duty = Math.max(-1.0, Math.min(1.0, servo_duty))

    $.ajax({
        url: "http://beaglebone.local:5000/servo/" + servo_duty,
        type: "GET",
        cache: false,
        data: {},
        success: () => {
            console.log('ok');
        },
        error: function(result) {
            console.log(result);
        }
    });
}

function moveCar(speed, direction) {
    $.ajax({
        url: "http://beaglebone.local:5000/drive/" + speed + "/" + direction,
        type: "GET",
        cache: false,
        data: {},
        success: () => {
            console.log('ok');
        },
        error: function(result) {
            console.log(result);
        }
    });
}

function stopCar() {
    $.ajax({
        url: "http://beaglebone.local:5000/brake",
        type: "GET",
        cache: false,
        data: {},
        success: () => {
            console.log('ok');
        },
        error: function(result) {
            console.log(result);
        }
    });
}

当一个直流电机的请求被发送到电路板时,我得到一个200的响应。控制台或api端没有错误。有什么想法吗(对不起,代码墙)。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题