feat: 增加云台功能控制

This commit is contained in:
2025-11-01 15:02:00 +08:00
parent b3b34b5d91
commit 9b6b0263c7
3 changed files with 151 additions and 59 deletions

67
app.py
View File

@@ -11,7 +11,8 @@ logger = logging.getLogger(__name__)
# Flask 应用初始化
app = Flask(__name__)
app.config['SECRET_KEY'] = 'h2Ms4pw9GzvwiFHyNPhH' # 请更换为安全的密钥
socketio = SocketIO(app, cors_allowed_origins="*")
# socketio = SocketIO(app, cors_allowed_origins="*")
socketio = SocketIO(app)
# 全局变量存储摇杆数据
joystick_data = {}
@@ -38,7 +39,7 @@ def handle_joystick_data(data):
# print(f"force: {force} x: {x}, y: {y}")
ptz.set_pitch_speed(int(y * 100))
ptz.set_yaw_speed(int(x * 100))
ptz.set_yaw_speed(int(x * -100))
# direction = data.get('direction', '')
# logger.info(f"收到摇杆数据:{direction}")
@@ -85,27 +86,49 @@ def handle_ping():
"""处理心跳检测"""
emit('pong')
@app.route('/get_joystick_data')
def get_joystick_data():
"""API 端点:获取当前摇杆数据"""
from flask import jsonify
return jsonify(joystick_data)
@socketio.on('gimbal_center')
def handle_gimbal_center():
"""处理云台中心"""
ptz.center()
logger.info(f"云台回中")
@app.route('/control/<action>')
def robot_control(action):
"""
示例控制端点
可用于直接控制机器人动作
"""
from flask import jsonify
valid_actions = ['forward', 'backward', 'left', 'right', 'stop']
@socketio.on('gimbal_pip')
def handle_gimbal_pip(data):
"""处理云台PIP"""
mode = int(data)
if mode >= 0 and mode <= 3:
ptz.set_pip_mode(mode)
logger.info(f"云台PIP {mode}")
@socketio.on('gimbal_ir_mode')
def handle_gimbal_ir_mode(data):
"""处理云台IR"""
mode = int(data)
if mode >= 0 and mode <= 9:
ptz.set_ir_mode(mode)
logger.info(f"云台IR {mode}")
# @app.route('/get_joystick_data')
# def get_joystick_data():
# """API 端点:获取当前摇杆数据"""
# from flask import jsonify
# return jsonify(joystick_data)
# @app.route('/control/<action>')
# def robot_control(action):
# """
# 示例控制端点
# 可用于直接控制机器人动作
# """
# from flask import jsonify
# valid_actions = ['forward', 'backward', 'left', 'right', 'stop']
if action in valid_actions:
logger.info(f"执行机器人控制:{action}")
# 在这里添加实际的机器人控制逻辑
return jsonify({'status': 'success', 'action': action})
else:
return jsonify({'status': 'error', 'message': '无效的动作'}), 400
# if action in valid_actions:
# logger.info(f"执行机器人控制:{action}")
# # 在这里添加实际的机器人控制逻辑
# return jsonify({'status': 'success', 'action': action})
# else:
# return jsonify({'status': 'error', 'message': '无效的动作'}), 400
if __name__ == '__main__':
socketio.run(app, host='0.0.0.0', port=5000, debug=True)
socketio.run(app, host='10.21.31.250', port=5000, debug=True)