Files
project_main/majtask.py

114 lines
3.3 KiB
Python
Raw Normal View History

2024-06-05 16:07:32 +08:00
import zmq
import time
2024-06-14 15:40:00 +08:00
import numpy as np
from loguru import logger
2024-06-02 17:49:52 +08:00
import utils
2024-06-15 22:04:11 +08:00
import variable as var
2024-05-22 12:37:15 +08:00
class main_task():
def __init__(self,by_cmd):
# lane infer server
self.context = zmq.Context()
self.socket = self.context.socket(zmq.REQ)
self.socket.connect("tcp://localhost:6666")
# lane infer server1
# self.context1 = zmq.Context()
# self.socket1 = self.context.socket(zmq.REQ)
# self.socket1.connect("tcp://localhost:6669")
2024-05-22 12:37:15 +08:00
# 赛道回归相关
self.x = 0
self.y = 0
self.error_counts = 0
self.lane_error = 0
# 车控制对象初始化
self.by_cmd = by_cmd
2024-05-22 12:37:15 +08:00
# 转向 pid
2024-06-15 22:04:11 +08:00
# var.pid_turning = PidWrap(0.5, 0, 0, output_limits=55) # 1.2
# pid 参数在
var.pid_turning.set_target(0)
2024-05-22 12:37:15 +08:00
def parse_data(self,data):
if data.get('code') == 0:
ck_val = data.get('data')
2024-06-14 15:40:00 +08:00
# logger.debug(ck_val)
if isinstance(ck_val, np.ndarray):
2024-06-14 15:40:00 +08:00
self.x += ck_val[0]
self.y += ck_val[1]
self.error_counts += 1
2024-05-22 12:37:15 +08:00
else:
pass
2024-06-02 17:49:52 +08:00
2024-05-22 12:37:15 +08:00
def run(self):
# 运行巡线任务
self.lane_task()
2024-06-02 17:49:52 +08:00
def lane_ntask(self):
# time.sleep(0.002)
# self.socket.send_string("")
# resp = self.socket.recv_pyobj()
# return resp.get('data')[0] - 160
pass
2024-05-22 12:37:15 +08:00
def lane_task(self):
# TODO 巡航参数从配置文件中读取
time.sleep(0.002)
2024-05-22 12:37:15 +08:00
if self.error_counts > 2:
self.x = self.x / 3
self.y = self.y / 3
self.lane_error = self.x - 160
2024-06-15 22:04:11 +08:00
var.lane_error = self.lane_error # 赋全局变量
2024-05-22 12:37:15 +08:00
self.error_counts = 0
self.x = 0
self.y = 0
error_abs = abs(self.lane_error)
if error_abs > 50:
# speed = 11
2024-06-15 10:42:41 +08:00
speed = 13
2024-07-09 00:28:41 +08:00
elif error_abs > 45:
speed = 15
2024-07-09 00:28:41 +08:00
elif error_abs > 35:
speed = 17
2024-06-09 21:54:22 +08:00
elif error_abs > 25:
2024-07-09 00:28:41 +08:00
speed = 18
2024-06-09 21:54:22 +08:00
elif error_abs > 15:
2024-07-09 00:28:41 +08:00
speed = 19
2024-05-22 12:37:15 +08:00
else:
2024-07-09 00:28:41 +08:00
speed = 21
# lane_model initial
# if error_abs > 50:
# speed = 10
# elif error_abs > 45:
# speed = 11
# elif error_abs > 35:
# speed = 13
# elif error_abs > 25:
# speed = 15
# elif error_abs > 15:
# speed = 15
# else:
# speed = 18
2024-06-15 22:04:11 +08:00
if var.task_speed != 0:
speed = var.task_speed
self.by_cmd.send_speed_x(speed)
2024-06-15 22:04:11 +08:00
# pid_out = var.pid_turning.get(self.lane_error*0.65)
pid_out = var.pid_turning.get(self.lane_error)
2024-06-09 21:54:22 +08:00
# pid_out = -pid_out
2024-06-15 10:42:41 +08:00
# logger.debug(f"err={self.lane_error}, pwm out={pid_out}")
self.by_cmd.send_speed_omega(pid_out)
# if var.switch_lane_model:
# self.socket1.send_string("")
# resp = self.socket1.recv_pyobj()
# else:
# self.socket.send_string("")
# resp = self.socket.recv_pyobj()
self.socket.send_string("")
resp = self.socket.recv_pyobj()
self.parse_data(resp)