机械狗巡引导线行走
导入一系列与参数有关的模块。
import os import time import numpy as np from src.actions import SetServo, Stop from src.models import LFNet from src.scenes.base_scene import BaseScene from src.utils import log
自动巡线行走功能定义。
class LF(BaseScene):
def __init__(self, memory_name, camera_info, msg_queue):
super().__init__(memory_name, camera_info, msg_queue)
self.net = None
self.forward_spd = 22
def init_state(self):
log.info(f'start init {self.__class__.__name__}')
lfnet_path = os.path.join(os.getcwd(), 'weights', 'lfnet.om')
if not os.path.exists(lfnet_path):
log.error(f'Cannot find the offline inference model(.om) file needed for {self.__class__.__name__} scene.')
return True
self.net = LFNet(lfnet_path)
log.info(f'{self.__class__.__name__} model init succ.')
# 设置舵机水平角度90度,垂直角度10度
self.ctrl.execute(SetServo(servo=[90, 10]))
return False
def loop(self):
ret = self.init_state()
if ret:
log.error(f'{self.__class__.__name__} init failed.')
return
frame = np.ndarray((self.height, self.width, 3), dtype=np.uint8, buffer=self.broadcaster.buf)
log.info(f'{self.__class__.__name__} loop start')
try:
while True:
if self.stop_sign.value:
break
if self.pause_sign.value:
continue
start = time.time()
img_bgr = frame.copy()
curr_steering_val = float(self.net.infer(img_bgr)[0])
log.info(f'lfnet: {curr_steering_val}')
log.info(f'infer cost {time.time() - start}')
except KeyboardInterrupt:
self.ctrl.execute(Stop())
父主题: 代码实现