Skip to content

Latest commit

 

History

History
82 lines (61 loc) · 2.52 KB

최고 속도 조절.md

File metadata and controls

82 lines (61 loc) · 2.52 KB

최고 속도 조절

경기 중 오르막 이슈로 인해 로봇들의 최고 속도만을 별도로 조절하는 API를 만들었습니다.

이에 대해서 사용법을 남깁니다.

📢 API 설명


{
	"speed":{
		"key": "maxSpeed",
		"value": 변경값
	}
}

최고 속도를 바꾸길 원하는 SpiderCar의 DataChannel로 위와 같은 형식의 Json을 발송하면 됩니다.

💡 이때의 변경값은 예를 들면 420과 같은 3자리 숫자입니다.

📢 변경 로직과 Response

우리가 주로 살펴볼 코드는 아래 부분입니다.

아까의 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)