경기 중 오르막 이슈로 인해 로봇들의 최고 속도만을 별도로 조절하는 API를 만들었습니다.
이에 대해서 사용법을 남깁니다.
{
"speed":{
"key": "maxSpeed",
"value": 변경값
}
}
최고 속도를 바꾸길 원하는 SpiderCar의 DataChannel로 위와 같은 형식의 Json을 발송하면 됩니다.
💡 이때의 변경값은 예를 들면 420과 같은 3자리 숫자입니다.우리가 주로 살펴볼 코드는 아래 부분입니다.
아까의 API대로 Request를 보냈을 때, 로봇 단에서 이를 전달받아 처리하는 코드이지요.
- 최대 속도 변경 및 저장 로직
elif "speed" in self._stream_data:
print(self._stream_data["speed"])
if self._stream_data["speed"]["key"] == "maxSpeed":
self._myCar.speed_max = self._stream_data["speed"]["value"]
self.calcControlParams()
with open(JSON_FILE, 'w') as f:
self.config_dict["Calibration"]["THROTTLE_MAX"] = self._myCar.speed_max
SPIDER_CARS[CAR_NAME] = self.config_dict
json.dump(SPIDER_CARS, f, indent=4)
recali_metric = {"speed": {"key": "maxSpeed", "value": self._myCar.speed_max}}
self._dc_metric.put_nowait(recali_metric)
continue
형식에 맞는 Json Request를 받았다면, 차량의 클래스 인스턴스인 speed_max
의 값을 변경합니다.
더불어, 현재의 속도 체계는 1 ⇒ 10으로 속도가 올라갈수록 최대 속도에 점차 선형적으로 접근하는 방식인데요, 이에 속도의 계산이 다시 이루어져야 합니다.
따라서 calcControlParams
라는 메소드를 다시 호출합니다.
self._myCar.speed_max = self._stream_data["speed"]["value"]
self.calcControlParams()
변경된 최고 속도값을 다시 저장해야 의미가 있겠지요, 이에 대한 코드는 다음과 같습니다.
with open(JSON_FILE, 'w') as f:
self.config_dict["Calibration"]["THROTTLE_MAX"] = self._myCar.speed_max
SPIDER_CARS[CAR_NAME] = self.config_dict
json.dump(SPIDER_CARS, f, indent=4)
파이썬의 json 패키지를 사용하여 변경된 내용들을 정적 json 파일로 저장하는 부분입니다.
변경과 저장이 완료된 이후에는 확인을 위해 Echo를 보냅니다.
recali_metric = {"speed": {"key": "maxSpeed", "value": self._myCar.speed_max}}
self._dc_metric.put_nowait(recali_metric)