From 6be30eb9298251da57e9e3e3d5ec6b93705ba229 Mon Sep 17 00:00:00 2001 From: robin Date: Wed, 19 Aug 2026 13:56:22 +0900 Subject: [PATCH] add doc --- doc/joystick.md | 40 ++++--- mac/mac_code | 79 +++++++++++++ xbox_motor_control.cpp | 248 ++++++++++++++++++++++++++--------------- xbox_motor_control_cpp | Bin 91704 -> 91080 bytes 4 files changed, 263 insertions(+), 104 deletions(-) create mode 100644 mac/mac_code diff --git a/doc/joystick.md b/doc/joystick.md index adf81cf..31f3301 100644 --- a/doc/joystick.md +++ b/doc/joystick.md @@ -6,6 +6,12 @@ * 하드웨어: USB to TTL 컨버터 (`/dev/ttyUSB*` 또는 COM 포트) * 수신기: XR1 V1.0 * 조종기: RadioMaster Pocket + * **실측 확인된 시리얼 프로토콜: CRSF(Crossfire), 420000bps, 8N1.** + 프레임 구조 `[Sync 0xC8][Length][FrameType][Payload][CRC8]`, FrameType + `0x16`(RC_CHANNELS_PACKED)의 22바이트 payload에 16채널이 11비트씩 + 리틀엔디안으로 패킹되어 raw `172~1811` 값이 `1000~2000us`로 선형 + 변환된다. (CRC8은 이 송신기에서 표준 DVB-S2 값과 안 맞아 검증 없이 + Sync+Length 프레이밍만 신뢰함.) --- @@ -15,10 +21,10 @@ | 채널 | 입력 장치 | Raw Value 범위 | 할당 기능 | 동작 설명 | | :--- | :--- | :--- | :--- | :--- | -| **CH1** | 롤/조향 스틱 | • `1001`: 좌측 끝
• `1480 ~ 1500`: 중앙 (데드존)
• `2000`: 우측 끝 | **좌우 조향 (Steering / Angular Z)** | • 중앙 데드존(`1480~1500`) 적용
• 좌회전(-) / 우회전(+) 정규화 | -| **CH2** | 피치/스로틀 스틱 | • `1000`: 위 끝 (전진)
• `1500`: 중앙 (정지)
• `2000`: 아래 끝 (후진) | **전후진 (Throttle / Linear X)** | • `1000` 방향으로 이동 시 전진
• `2000` 방향으로 이동 시 후진
• CH7에서 결정된 최대 속도 기준으로 선형 매핑 | -| **CH5** | 2단 스위치 | • `1011`: 미작동 (OFF)
• `1988`: 눌림 (ON) | **전자/비상 브레이크 (Brake)** | • `1988` 수신 시 모든 주행 속도 즉시 0 (`Stop`)
• `1011` 수신 시 일반 주행 허용 | -| **CH7** | 2단 스위치 | • `1988`: 위쪽 누름
• `1011`: 아래쪽 누름 | **속도 모드 선택 (Speed Mode)** | • `1988` (위쪽): 저속 모드 (최대 **0.3 m/s**)
• `1011` (아래쪽): 고속 모드 (최대 **0.6 m/s**) | +| **CH1** | 롤/조향 스틱 | • `1005`: 좌측 끝
• `1481 ~ 1503`: 중앙 (데드존)
• `2000`: 우측 끝 | **좌우 조향 (Steering / Angular Z)** | • 중앙 데드존(`1481~1503`) 적용
• 좌회전(-) / 우회전(+) 정규화 | +| **CH2** | 피치/스로틀 스틱 | • `1005`: 최대 후진
• `1500`: 중앙 (정지)
• `2000`: 최대 전진 | **전후진 (Throttle / Linear X)** | • 값이 높을수록 전진, 낮을수록 후진 (CH1과 반대 방향)
• CH6에서 결정된 최대 속도 기준으로 선형 매핑 | +| **CH5** | 2단 스위치 | • `1012`: 미작동 (OFF)
• `1988`: 눌림 (ON) | **전자/비상 브레이크 (Brake)** | • `1988` 수신 시 모든 주행 속도 즉시 0 (`Stop`)
• `1012` 수신 시 일반 주행 허용 | +| **CH6** | 2단 스위치 | • `1832`: 저속 위치
• `1012~1090`: 고속 위치 | **속도 모드 선택 (Speed Mode)** | • `1832`(≥1500 부근): 저속 모드 (최대 **0.3 m/s**)
• `1012~1090`(<1500): 고속 모드 (최대 **1.5 m/s**) | --- @@ -27,25 +33,25 @@ ### 3.1 브레이크 최우선 로직 (CH5) * $\text{CH5} \ge 1500$ (누름 / `1988` 부근): $$\text{Linear Velocity} = 0.0, \quad \text{Angular Velocity} = 0.0$$ -* $\text{CH5} < 1500$ (안누름 / `1011` 부근): 정상 주행 로직 실행 +* $\text{CH5} < 1500$ (안누름 / `1012` 부근): 정상 주행 로직 실행 -### 3.2 속도 제한 설정 (CH7) -* $\text{CH7} \ge 1500$ (위쪽 / `1988` 부근): $V_{\max} = 0.3 \text{ m/s}$ (저속 모드) -* $\text{CH7} < 1500$ (아래쪽 / `1011` 부근): $V_{\max} = 0.6 \text{ m/s}$ (고속 모드) +### 3.2 속도 제한 설정 (CH6) +* $\text{CH6} \ge 1500$ (`1832` 부근): $V_{\max} = 0.3 \text{ m/s}$ (저속 모드) +* $\text{CH6} < 1500$ (`1012~1090` 부근): $V_{\max} = 1.5 \text{ m/s}$ (고속 모드) ### 3.3 전후진 속도 계산 (CH2) * **데드존(Deadband):** $1480 \le \text{CH2} \le 1520 \rightarrow V_x = 0.0$ -* **전진 구간 ($1000 \le \text{CH2} < 1480$):** - $$V_x = \left( \frac{1480 - \text{CH2}}{1480 - 1000} \right) \times V_{\max}$$ -* **후진 구간 ($1520 < \text{CH2} \le 2000$):** - $$V_x = -\left( \frac{\text{CH2} - 1520}{2000 - 1520} \right) \times V_{\max}$$ +* **후진 구간 ($1005 \le \text{CH2} < 1480$):** + $$V_x = -\left( \frac{1480 - \text{CH2}}{1480 - 1005} \right) \times V_{\max}$$ +* **전진 구간 ($1520 < \text{CH2} \le 2000$):** + $$V_x = \left( \frac{\text{CH2} - 1520}{2000 - 1520} \right) \times V_{\max}$$ ### 3.4 좌우 조향 각속도 계산 (CH1) -* **데드존(Deadband):** $1480 \le \text{CH1} \le 1500 \rightarrow \omega_z = 0.0$ -* **좌회전 구간 ($1001 \le \text{CH1} < 1480$):** - $$\omega_z = -\left( \frac{1480 - \text{CH1}}{1480 - 1001} \right) \times \Omega_{\max}$$ -* **우회전 구간 ($1500 < \text{CH1} \le 2000$):** - $$\omega_z = +\left( \frac{\text{CH1} - 1500}{2000 - 1500} \right) \times \Omega_{\max}$$ +* **데드존(Deadband):** $1481 \le \text{CH1} \le 1503 \rightarrow \omega_z = 0.0$ +* **좌회전 구간 ($1005 \le \text{CH1} < 1481$):** + $$\omega_z = -\left( \frac{1481 - \text{CH1}}{1481 - 1005} \right) \times \Omega_{\max}$$ +* **우회전 구간 ($1503 < \text{CH1} \le 2000$):** + $$\omega_z = +\left( \frac{\text{CH1} - 1503}{2000 - 1503} \right) \times \Omega_{\max}$$ --- diff --git a/mac/mac_code b/mac/mac_code new file mode 100644 index 0000000..6805b4e --- /dev/null +++ b/mac/mac_code @@ -0,0 +1,79 @@ +import serial +import time + +# 확인된 포트 경로 설정 +SERIAL_PORT = "/dev/cu.usbserial-0001" +BAUD_RATE = 420000 + +CRSF_SYNC = 0xC8 +CRSF_FRAMETYPE_RC_CHANNELS_PACKED = 0x16 + +def parse_channels(payload): + if len(payload) < 22: + return [] + + # 22바이트의 채널 데이터를 정수로 변환 후 11비트씩 언패킹 + data = int.from_bytes(payload[:22], byteorder='little') + channels = [] + for _ in range(16): + raw_val = data & 0x07FF # 11-bit 마스크 + # CRSF 원본 값(172~1811)을 RC 마이크로초(1000~2000µs) 단위로 변환 + us_val = int((raw_val - 172) * (2000 - 1000) / (1811 - 172) + 1000) + channels.append(us_val) + data >>= 11 + return channels + +def main(): + try: + ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=0.1) + print(f"Connected to {SERIAL_PORT} at {BAUD_RATE} baud.") + print("스틱과 스위치를 움직여 채널 값을 확인하세요. (종료: Ctrl+C)\n") + except Exception as e: + print(f"포트 연결 오류: {e}") + return + + buf = bytearray() + while True: + try: + if ser.in_waiting: + buf.extend(ser.read(ser.in_waiting)) + + while len(buf) > 3: + if buf[0] != CRSF_SYNC: + buf.pop(0) + continue + + length = buf[1] + total_packet_len = length + 2 + + if len(buf) < total_packet_len: + break # 전체 패킷 대기 + + packet = buf[:total_packet_len] + buf = buf[total_packet_len:] + + frame_type = packet[2] + if frame_type == CRSF_FRAMETYPE_RC_CHANNELS_PACKED: + payload = packet[3:-1] # CRC 제외 payload + channels = parse_channels(payload) + + # read_crsf.py 출력 부분 수정 + print( + f"\rCH1: {channels[0]:4d} | CH2: {channels[1]:4d} | " + f"CH3: {channels[2]:4d} | CH4: {channels[3]:4d} | " + f"CH5(SA/SC): {channels[4]:4d} | CH6(SD): {channels[5]:4d} | " + f"CH7: {channels[6]:4d} | CH8: {channels[7]:4d}", + end="", flush=True + ) + + except KeyboardInterrupt: + print("\n모니터링 종료") + break + except Exception as e: + print(f"\n데이터 수신 오류: {e}") + break + + ser.close() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/xbox_motor_control.cpp b/xbox_motor_control.cpp index 7a38ade..2b4c7d8 100644 --- a/xbox_motor_control.cpp +++ b/xbox_motor_control.cpp @@ -604,28 +604,50 @@ LidarObstacleDetector *LidarObstacleDetector::instance_ = nullptr; // ----------------------------------------------------------------------------- // RadioMaster Pocket + XR1 V1.0 RC 수신기 (USB-to-TTL 시리얼) 입력 모듈 -// doc/joystick.md 기능 명세서 기반: 텍스트 라인 "CH1:1500,CH2:1500,..." 포맷을 -// 파싱해 채널별 raw 값(1000~2000)을 제공한다. +// 실기 캡처로 확인한 실제 프로토콜: CRSF(Crossfire), 420000bps, 8N1. +// 프레임: [0]=Sync(0xC8) [1]=Length [2]=FrameType [3..]=Payload [-1]=CRC8 +// FrameType 0x16(RC_CHANNELS_PACKED)의 22바이트 payload에 16채널이 11비트씩 +// 리틀엔디안으로 패킹되어 있다 (raw 172~1811 -> 1000~2000us로 선형 변환). +// 참고: mac/mac_code (맥에서 정상 동작 확인된 레퍼런스 파이썬 스크립트)와 +// 동일한 파싱 방식을 따른다 — 실측 결과 CRC8이 표준 DVB-S2(poly 0xD5) 값과 +// 맞지 않아(송신기별 구현 차이로 추정) 레퍼런스와 동일하게 CRC는 검증하지 +// 않고 Sync+Length 기반 프레이밍만 신뢰한다. // ----------------------------------------------------------------------------- +#ifndef BOTHER +#define BOTHER 0010000 // 커널 termbits.h: CBAUDEX와 동일값, 임의 보드레이트 지정용 +#endif +struct termios2 { // 의 커널 ABI와 동일 레이아웃 (glibc의 + // struct termios와 이름 충돌을 피하기 위해 직접 선언). + // 420000bps처럼 표준 B-상수가 없는 보드레이트를 + // TCSETS2/BOTHER ioctl로 설정하기 위해 필요하다. + tcflag_t c_iflag, c_oflag, c_cflag, c_lflag; + cc_t c_line; + cc_t c_cc[19]; + speed_t c_ispeed, c_ospeed; +}; + struct RcConfig { std::string port = "/dev/ttyUSB1"; - int baud = 115200; + int baud = 420000; // CRSF 표준 보드레이트 int ch_steer = 1; // CH1: 좌우 조향 int ch_throttle = 2; // CH2: 전후진 int ch_brake = 5; // CH5: 비상 브레이크 - int ch_speed = 7; // CH7: 속도 모드 + int ch_speed = 6; // CH6: 속도 모드 - int steer_min = 1001, steer_center_lo = 1480, steer_center_hi = 1500, + // 실기 캡처로 확인한 실측값 (좌 1005 ~ 중 1481~1503 ~ 우 2000) + int steer_min = 1005, steer_center_lo = 1481, steer_center_hi = 1503, steer_max = 2000; - int throttle_min = 1000, throttle_center_lo = 1480, throttle_center_hi = 1520, + // 실측값: 후진끝 1005 ~ 중 1500 ~ 전진끝 2000 (CH2는 값이 높을수록 전진 — + // CH1과 반대 방향이라 아래 3.3 매핑 로직도 그에 맞춰 부호가 반대다) + int throttle_min = 1005, throttle_center_lo = 1480, throttle_center_hi = 1520, throttle_max = 2000; int brake_threshold = 1500; // 이상이면 브레이크 ON int speed_threshold = 1500; // 이상이면 저속 모드 - float v_max_low = 0.3f; // m/s (CH7 저속 모드) - float v_max_high = 0.6f; // m/s (CH7 고속 모드) + float v_max_low = 0.3f; // m/s (CH6 저속 모드) + float v_max_high = 1.5f; // m/s (CH6 고속 모드) int failsafe_timeout_ms = 200; // 이 시간 이상 신호 미수신 시 비상정지 }; @@ -679,7 +701,11 @@ private: std::chrono::steady_clock::time_point last_rx_time_{}; bool port_open_ = false; - std::string line_buf_; + std::vector frame_buf_; + + static constexpr uint8_t CRSF_SYNC = 0xC8; + static constexpr uint8_t CRSF_FRAMETYPE_RC_CHANNELS_PACKED = 0x16; + static constexpr size_t CRSF_MAX_FRAME_LEN = 64; // 스펙상 프레임은 훨씬 작음 bool openPort() { fd_ = open(cfg_.port.c_str(), O_RDWR | O_NOCTTY | O_NDELAY); @@ -688,46 +714,40 @@ private: fcntl(fd_, F_SETFL, O_NONBLOCK); - struct termios options; - tcgetattr(fd_, &options); - - speed_t speed = B115200; - switch (cfg_.baud) { - case 9600: - speed = B9600; - break; - case 19200: - speed = B19200; - break; - case 38400: - speed = B38400; - break; - case 57600: - speed = B57600; - break; - default: - speed = B115200; - break; + // CRSF 표준 420000bps는 termios의 표준 B-상수 목록에 없어 TCSETS2 + + // BOTHER + c_ispeed/c_ospeed(임의 정수 보드레이트) ioctl로 설정한다. + struct termios2 tio; + if (ioctl(fd_, TCGETS2, &tio) < 0) { + close(fd_); + fd_ = -1; + return false; } - cfsetispeed(&options, speed); - cfsetospeed(&options, speed); + tio.c_cflag &= ~CBAUD; + tio.c_cflag |= BOTHER; + tio.c_ispeed = static_cast(cfg_.baud); + tio.c_ospeed = static_cast(cfg_.baud); - options.c_cflag &= ~PARENB; - options.c_cflag &= ~CSTOPB; - options.c_cflag &= ~CSIZE; - options.c_cflag |= CS8; - options.c_cflag &= ~CRTSCTS; - options.c_cflag |= CREAD | CLOCAL; + tio.c_cflag &= ~PARENB; + tio.c_cflag &= ~CSTOPB; + tio.c_cflag &= ~CSIZE; + tio.c_cflag |= CS8; + tio.c_cflag &= ~CRTSCTS; + tio.c_cflag |= CREAD | CLOCAL; - // 텍스트 라인 프로토콜이므로 canonical 모드(라인 단위)로 사용 - options.c_lflag |= ICANON; - options.c_lflag &= ~(ECHO | ECHOE | ISIG); - options.c_iflag &= ~(IXON | IXOFF | IXANY | IGNBRK | BRKINT | PARMRK | - ISTRIP | INLCR | IGNCR | ICRNL); - options.c_oflag &= ~OPOST; + // 바이너리 프로토콜이므로 raw 모드(비정규/논캐노니컬)로 읽는다. + tio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG | IEXTEN); + tio.c_iflag &= ~(IXON | IXOFF | IXANY | IGNBRK | BRKINT | PARMRK | + ISTRIP | INLCR | IGNCR | ICRNL); + tio.c_oflag &= ~OPOST; + tio.c_cc[VMIN] = 0; + tio.c_cc[VTIME] = 0; - tcsetattr(fd_, TCSANOW, &options); + if (ioctl(fd_, TCSETS2, &tio) < 0) { + close(fd_); + fd_ = -1; + return false; + } tcflush(fd_, TCIOFLUSH); return true; } @@ -741,38 +761,64 @@ private: port_open_ = false; } - void parseLine(const std::string &line) { + // 축적된 바이트 버퍼에서 CRSF 프레임을 최대한 뽑아낸다. Sync 바이트를 + // 찾고, 선언된 Length만큼 버퍼에 데이터가 쌓일 때까지 기다린 뒤 + // RC_CHANNELS_PACKED(0x16) 프레임이면 16채널(11비트씩)을 언패킹한다. + // (CRC8은 이 송신기에서 표준 DVB-S2 값과 맞지 않아 검증하지 않음 — 실기 + // 캡처로 확인된 mac/mac_code 레퍼런스와 동일한 방식.) + void parseCrsfBuffer() { std::map parsed; - size_t pos = 0; - while (pos <= line.size()) { - size_t comma = line.find(',', pos); - std::string tok = line.substr( - pos, comma == std::string::npos ? std::string::npos : comma - pos); + size_t i = 0; + while (i < frame_buf_.size()) { + if (frame_buf_[i] != CRSF_SYNC) { + ++i; + continue; + } + if (i + 1 >= frame_buf_.size()) + break; // length 바이트 대기 - size_t b = tok.find_first_not_of(" \t\r\n"); - size_t e = tok.find_last_not_of(" \t\r\n"); - if (b != std::string::npos) { - tok = tok.substr(b, e - b + 1); - if (tok.size() >= 4 && (tok[0] == 'C' || tok[0] == 'c') && - (tok[1] == 'H' || tok[1] == 'h')) { - size_t colon = tok.find(':'); - if (colon != std::string::npos) { - try { - int ch_num = std::stoi(tok.substr(2, colon - 2)); - int val = std::stoi(tok.substr(colon + 1)); - parsed[ch_num] = val; - } catch (...) { - // 손상된 토큰은 무시 - } + uint8_t length = frame_buf_[i + 1]; + size_t total_len = static_cast(length) + 2; + if (length < 2 || total_len > CRSF_MAX_FRAME_LEN) { + // Sync처럼 보이는 노이즈 바이트: 1바이트만 버리고 재동기화 + ++i; + continue; + } + if (i + total_len > frame_buf_.size()) + break; // 프레임 전체 수신 대기 + + uint8_t frame_type = frame_buf_[i + 2]; + if (frame_type == CRSF_FRAMETYPE_RC_CHANNELS_PACKED && length >= 23) { + // payload = frame_buf_[i+3 .. i+total_len-2] (CRC 바이트 제외 22바이트 + // = 176비트 = 16채널×11비트). uint64_t 하나에 통째로 담으면 64비트를 + // 넘는 시프트가 발생해 정의되지 않은 동작(UB)이 되므로, 32비트 롤링 + // 비트 누산기로 바이트를 하나씩 채워가며 11비트씩 뽑아낸다. + uint32_t bit_accum = 0; + int bit_count = 0; + int byte_idx = 0; + for (int ch = 0; ch < 16; ++ch) { + while (bit_count < 11) { + bit_accum |= static_cast(frame_buf_[i + 3 + byte_idx]) + << bit_count; + bit_count += 8; + ++byte_idx; } + int raw_val = static_cast(bit_accum & 0x7FFU); + bit_accum >>= 11; + bit_count -= 11; + int us_val = static_cast( + std::lround((raw_val - 172) * 1000.0 / 1639.0 + 1000.0)); + parsed[ch + 1] = us_val; // CH1..CH16 (1-based) } } - - if (comma == std::string::npos) - break; - pos = comma + 1; + i += total_len; } + // 처리하지 못한 잔여 바이트(다음 프레임 일부)만 남기고 버퍼 정리 + frame_buf_.erase(frame_buf_.begin(), frame_buf_.begin() + i); + if (frame_buf_.size() > CRSF_MAX_FRAME_LEN * 4) // 비정상 누적 방지 + frame_buf_.clear(); + if (!parsed.empty()) { std::lock_guard lock(mutex_); for (auto &kv : parsed) @@ -812,15 +858,8 @@ private: ssize_t n = read(fd_, buf, sizeof(buf)); if (n > 0) { - line_buf_.append(buf, static_cast(n)); - size_t nl; - while ((nl = line_buf_.find('\n')) != std::string::npos) { - std::string line = line_buf_.substr(0, nl); - line_buf_.erase(0, nl + 1); - parseLine(line); - } - if (line_buf_.size() > 4096) // 개행 없는 쓰레기 데이터 누적 방지 - line_buf_.clear(); + frame_buf_.insert(frame_buf_.end(), buf, buf + n); + parseCrsfBuffer(); } else if (n < 0 && errno != EAGAIN && errno != EWOULDBLOCK) { std::cerr << "\n[경고] RC 수신기 포트 통신 오류. 재연결 시도...\n"; closePort(); @@ -1052,6 +1091,7 @@ int main(int argc, char **argv) { log_stream.open(log_path); if (log_stream.is_open()) { log_stream << "t_ms,state,rc_steer,rc_throttle,rc_ok,brake,vmax,vx,omega," + "ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8," "cmd_fl,cmd_fr,cmd_rl,cmd_rr," "fb_fl,fb_fr,fb_rl,fb_rr," "amp_fl,amp_fr,amp_rl,amp_rr," @@ -1077,6 +1117,18 @@ int main(int argc, char **argv) { } } + // 모터(--port)와 RC 수신기(--rc_port)가 같은 물리 포트를 가리키면 두 + // 스레드가 같은 장치의 read()를 두고 경쟁해 RC 라인 파싱이 깨진다. + // 흔한 실수(예: 모터 미연결 상태에서 RC 수신기가 ttyUSB0에 꽂혀있는데 + // --rc_port를 기본값 ttyUSB1로 둔 채 실행)를 바로 알아차리도록 경고한다. + if (port1 == rc_cfg.port) { + std::cout << "\n[경고] --port(모터, " << port1 << ")와 --rc_port(RC 수신기, " + << rc_cfg.port + << ")가 동일한 포트로 설정되어 있습니다. 두 기능이 같은 장치를 " + "동시에 읽으면 RC 데이터 파싱이 깨질 수 있으니 서로 다른 " + "포트로 지정하세요.\n\n"; + } + RcReceiver rc(rc_cfg); rc.start(); std::cout << "[정보] RadioMaster Pocket / XR1 V1.0 RC 수신기 리더 시작 (" @@ -1221,6 +1273,14 @@ int main(int argc, char **argv) { rc.getChannel(rc_cfg.ch_brake, raw_brake); rc.getChannel(rc_cfg.ch_speed, raw_speed_mode); + // CH1~CH8 raw 값 전체를 확인용으로 읽는다 (CH5=브레이크 값을 실시간으로 + // 직접 눈으로 검증할 수 있도록 HUD/CSV에 그대로 노출). + int raw_ch[9]; // 인덱스 1..8 사용 + for (int ch = 1; ch <= 8; ++ch) { + if (!rc.getChannel(ch, raw_ch[ch])) + raw_ch[ch] = 0; // 아직 수신 못한 채널은 0으로 표시 + } + if (!rc_ok && prev_rc_ok) { std::cout << "\n[경고] RC 신호 Fail-safe 발동 (" << rc_cfg.failsafe_timeout_ms << "ms 이상 미수신) -> 비상 정지.\n"; @@ -1230,7 +1290,7 @@ int main(int argc, char **argv) { // 3.1 브레이크 최우선 로직 (CH5) - 미수신(Fail-safe) 상태도 동일하게 처리 bool brake_on = !rc_ok || (raw_brake >= rc_cfg.brake_threshold); - // 3.2 속도 제한 설정 (CH7) + // 3.2 속도 제한 설정 (CH6) float v_max_now = (raw_speed_mode >= rc_cfg.speed_threshold) ? rc_cfg.v_max_low : rc_cfg.v_max_high; @@ -1239,17 +1299,18 @@ int main(int argc, char **argv) { float omega = 0.0f; // 각속도 rad/s if (!brake_on) { - // 3.3 전후진 속도 계산 (CH2) + // 3.3 전후진 속도 계산 (CH2) — 실측 결과 raw 값이 높을수록 전진(+), + // 낮을수록 후진(-)이라 CH1(조향)과는 반대 부호 방향이다. int t = std::clamp(raw_throttle, rc_cfg.throttle_min, rc_cfg.throttle_max); if (t >= rc_cfg.throttle_center_lo && t <= rc_cfg.throttle_center_hi) { v_x = 0.0f; } else if (t < rc_cfg.throttle_center_lo) { - v_x = (static_cast(rc_cfg.throttle_center_lo - t) / - static_cast(rc_cfg.throttle_center_lo - rc_cfg.throttle_min)) * + v_x = -(static_cast(rc_cfg.throttle_center_lo - t) / + static_cast(rc_cfg.throttle_center_lo - rc_cfg.throttle_min)) * v_max_now; } else { - v_x = -(static_cast(t - rc_cfg.throttle_center_hi) / - static_cast(rc_cfg.throttle_max - rc_cfg.throttle_center_hi)) * + v_x = (static_cast(t - rc_cfg.throttle_center_hi) / + static_cast(rc_cfg.throttle_max - rc_cfg.throttle_center_hi)) * v_max_now; } @@ -1619,7 +1680,10 @@ int main(int argc, char **argv) { log_stream << t_ms << ',' << state << ',' << raw_steer << ',' << raw_throttle << ',' << (rc_ok ? 1 : 0) << ',' << (brake_on ? 1 : 0) << ',' << v_max_now << ',' << v_x << ',' - << omega << ',' << cmd_fl << ',' << cmd_fr << ',' << cmd_rl + << omega << ',' << raw_ch[1] << ',' << raw_ch[2] << ',' + << raw_ch[3] << ',' << raw_ch[4] << ',' << raw_ch[5] << ',' + << raw_ch[6] << ',' << raw_ch[7] << ',' << raw_ch[8] << ',' + << cmd_fl << ',' << cmd_fr << ',' << cmd_rl << ',' << cmd_rr << ',' << fl_fb << ',' << fr_fb << ',' << rl_fb << ',' << rr_fb << ',' << fl_amp << ',' << fr_amp << ',' << rl_amp << ',' << rr_amp << ',' << wheel_status_str[0] @@ -1629,9 +1693,19 @@ int main(int argc, char **argv) { << dist_axle << ',' << comm_ms << '\n'; } - printf("\r\033[K[%-8s] RC:%s%s AXLE:%5.3fm | %-28s | I(A):FL%+4.1f FR%+4.1f " - "RL%+4.1f RR%+4.1f | WHL(FL/FR/RL/RR):%s%s | %4.1fms", + // RC 조종기 입력값 피드백: 실기 조작 중 CH1~CH8 raw 값(CH5=브레이크 값 + // 직접 확인용 포함)과 그로부터 계산된 선속도/각속도 지령을 실시간으로 + // 확인할 수 있도록 HUD에 표시한다. + const char *speed_mode_str = + (v_max_now <= rc_cfg.v_max_low + 0.001f) ? "LOW " : "HIGH"; + printf("\r\033[K[%-8s] RC:%s%s " + "C1:%4d C2:%4d C3:%4d C4:%4d C5:%4d C6:%4d C7:%4d C8:%4d " + "SPD:%s VX:%+4.2f OMG:%+4.2f | AXLE:%5.3fm | %-28s | " + "I(A):FL%+4.1f FR%+4.1f RL%+4.1f RR%+4.1f | " + "WHL(FL/FR/RL/RR):%s%s | %4.1fms", state.c_str(), rc_ok ? "OK" : "LOST", brake_on ? "[BRK]" : " ", + raw_ch[1], raw_ch[2], raw_ch[3], raw_ch[4], raw_ch[5], raw_ch[6], + raw_ch[7], raw_ch[8], speed_mode_str, v_x, omega, dist_axle, lidar_telemetry.c_str(), fl_amp, fr_amp, rl_amp, rr_amp, wheel_status_str, fault_active ? " [!!알람!!]" : "", comm_ms); diff --git a/xbox_motor_control_cpp b/xbox_motor_control_cpp index 59e31672fea8fd65eba543d1c5a2ed35df6b2b71..b0d4d9bd78a867232a79ddbd25437f0bc31029fb 100755 GIT binary patch literal 91080 zcmeFa33yaR)<4{V1j2ed3K|zQYH)%ELX;?oXaWh`Xrl;WQy?HD5)BDL2T(zRNkiJU z6_?E5!pJz{GRlZE1`rJ-ED7QUxPU8&+ieg*P((%Z|NW}!-mY$v_nmjX=X?M2J)g}( zZkO#Fiobbud9d60nl|7@M(bbOTo2vMtpV^SfkNspB{EYb0JLTUgZ?-RO{d`iQ zUG~#1?>g|&F8}IBHM?uLDzBw>NK)-!KUMLrwBn*0FX@w3Jf&xGQAydHo^$$M(({r& zy=Ip7x=5%%y^`>s>_e^@=|Z#A5vR=PYE>>_TORYesC?2__PzOwAG);P_1LDtceOe7 z)5@686Q`4gdXtAV{7{~1at9uP6lrLWR<0La=frez5jP6|N8^7=w|maqR`Axe?$bIB zDq1!$W`@smM%N`B2O+D)&kOLwlbXrhh6*-^pW6cc3OH7C^h;2Q=J2B-KcSg&_q0IY z7e;DMPIe3Qtzf9;=#3Wie6|Jp>!D+FazZWGp`r!6w}o==XaQf}LVa^u&~tJN_?#Bx zA8bL-zqCN_gF`lF2Tu$16)ouB*g|{thEq2u|LGRW&2K^f(iZgjwFUZjTfjfkf}9Il zz%OpWPd;eD4&S!WUMpLWb43gGnbiV*aSL`%YoWgDTBz677Vt?e;O}Z7ZhYJV{`MB? zdt(doPiq1HYzub2y9N5|LEl{b>DGdtm$o41iWcw>wSfP%1^KVG&@Krr;Okq!?`^>! z?rK4wxh>EiY@y$s+XDWF7W5g|LVfdE@Xt{#$S-L@PHhWv(7jwq_#gebzXd%XYQYYH z7U%~%%N&7V>*qu{2Z zncjjKc|!*kmzEUdO}eqTz?GkW)3nl({F&ZKGralvlC)VuPtmN>Ii8{^lV*&Va?8k) zqLL!7Yea!Jj2>26RN{r?vMGZm6&DYjH2Idu{L!T|ZW&rSr63ZUTT)m$XzHYrn+nKv zBe}vNQBp3;$-n-Zeo(ZeEPwKxIhW)^+tNw7#YK~^D$2>p$?KgzY;a!wu&eXZ^M?%^ zadCe3^t_AmbB0|#c|=D3uxTUup;p&lbM*-CrTJt}Pfx$-#z`}aCPT`MqLQ0(Cy(%^ zr%#?bX-2+x#-t+e%-qR2BPQWb&ZUz}r%j(Uqky6yVubgi-ue07sWVDv=NA{0+~l2_ zUoc}v=?s~B&Hr3}zx<*3lV;8=x~U{*_|+r&2sQsrDbuGHluV(X(^%IL-bfFyt&hI za)ys6&7;}SH2w02--re*C{Wq?lS-!K&nUQYQt_mc$ptqKgBE=qk`lOKK9nyQ(K~}bLx+H!)B8vhlorC73MNf!)((TxMLnQo zAKQP5N@h(eE}D`*X~s=u(+Wzwwufmt7L`n%Q6Tb~S6wR57seMg>BEkaElc`0d@;Q@ z3_GJ>dhw*m1v%5E*`9>Tqw!b(`b%L^F^zC((aii(_?xIy-l%K9%6>KJ#-ds2>>)FY z(17skd>Rd{QCKS7C)|5fGmGBCb{*mEGZ}zLrK5YxK6c}zDfyEp&Gaf~Q!cICHTxpv z8{YJb!`j_gR@iI{^bz`^QmD?w!WXYa1*S0=$?g*2gkJQV+ajGX|E4)}@~0Qfm|0qa zcJtnrKdU!5^U#0nu4Z>5B~W&^J~tyKs>Wx<&;jTrwg)%YX@*lp)7aDaZ_~H(wPN{r8J|kxNPQBrF-$rT&NWl zB+>g$P<3)16h+h(0kdSb>f@14s=C9!;iT;R=oE}r!>3U;9jCNRj1SP|U#X<(A$lx_ zfc(5lyQURPn^roD(y&{?v5w>Wv`IxJu98V5r8A2Q3Z_G=n^309JNc#p z1ZFQfpwI;Nor6Ia-sdfa%6tfUGYeqp{Fx=1dNaLKX#YatEH2?dF7`EYVT_~}lc!Bb z36j7&88SpkMWvIal9Q+3=9*jxbkWS|1qD-30Bl!M%34nH7L}IB%u+iO^_YAMEt6k3 zsi@e6x)pO?f=Xgyl0S3GE%`Gsk{3+DZV)q}-{cD~_Nq1pR0|lEmHg!4=COhgTKVb2|RK9*BbQgTlh~0+>hg${+$3N8|G z8`ok5dwV>9(p$S82h0zxbhgSP+@+|flM6O{PT?N9|BslNcXZV#_$2{%aMdYT)-O)f zk9G2%#`?B$y^g>9*!$D=IwEPQ#9M0L+Qz%pxxk?){2qmOsr_o3KFNmdrxfejqt+Gf zD7yta)^iFoKM}AQVwx>4%X$` zqT!P?{5B2WSHthp@clIW9u0q$hPO2QwHp4Ah99Qkk7@Yf8a`3go3+T%@b)?pPAv9{ z?JRp8NBkHYiKo3zBwp@B%gpit(mq@d%9O-cX?Qrk^I5Fn?Y_y(B^n+}Q|Gfx!?SGr z^NfbK*P_f@so`y(BYusBS1wMpt4_nW7Z~|xi-t$Xc0SuQd`Ab1^DGUIj_7>$X!yUCu{QE8lLA5_9s!pceRmtCTaLnG<=GN zKUKr`*6@iMzORNqO~Yqu_|rAKso~Gi@WV8`eHO^u z1sc9i!(XW3w`h3oQQ4nu8osBE#B-O1@1^1QX!tY@Z)y168vc-mPuK9rH2g&x-lgIm zW5C54K3>C%X^YBpYxoR}K2gJ8s^OC~{AC(GMZ@>k@Vzzs4|}cMJS(f!{6gy9Iu? z!0#6L-2%T`;CBoB|Iq?RjI(|=E53<0192Z1F)q_r=WW%r&8*lIzfqW@DdVb6F|NZ+ z-LJ;OINL?~smwVX`mCv`X|aI0C3!fs-GR9Qd^l9^z})yf9D31#x#4>_^cM%_M(^R! z{SM5{_rswD4$RG-!=YOpm>a!^Lz5hs8@z`@*EujZb`OWL9GDxrhePQO%#GZ`p>rIV z8@Pu<2@cGS+ryz42j+(D;m~)#+4bc{E$Z*U+@MAM9he)lsJ{bqLl*USU~a^s{tnCy zSk&Kvx$%nnJ1{p~QGW;KMl0&?z}#R({T-MatEj&Nb3+yNcVKR$qW%ud4OGWi z`a3W;Kv91O=Ef)L@4(#fMExC@8=a`X19O8D^><)yY@+@S%neP{-+{T2iTWS6>(32L zw7&y$;}Z3EU~X8V{tnEIO4Q$hxj~8gJ1{pUQGW;KK^5xnz}%oj{T-MGO{l*E^MDEU zcVKQ@qW%ud4NKJDfw@tM`a3W;C{ce0=EfxI@4(!UME!rU>z^s$&m5Q=kf^@{bK?>9 zcVKQfqW%udjYibpfpY|WzXNl_5%qUqZZx9)HjHQ#*MZRpau|OA*ThG{E27}#QSj0z zxH<|BM!~))cwQ7-76ng>f(xSH@lo)|D0pZToD&5Ph=Mbs;GR)%_b9kq6x=lm?i2;b zMZv$ejkNao_D^ZvzVgYZ0(!;PPZozk}Y+W*|G+Z3d^uSSwZbRFOS5ImrxolY5&z zelvYd-Z<-im7OcHYkLz6`ZD?G*XVVd0hy+xLLvjTy%Dj^{ZOOj<8iAa;gB}tMHhfzw>kE)d3gqgpG#RY1oOA+Oo2$3d9tt1&H zNhWF}B2AJ2~Ne@Zl zmLy3UiAa;AjU+ilef!sLv1{%UEXe#C^R?q^C0d9EuKQ!WM9IzP+%*5i81c=h`EHj`xt0* z#Bg`@;Mw5&3N?vAnVDz=V0&HxY}Wc1NC(vINtD~@n*%vqzyOo+H(-t!3DtGrqm(-V zdxFc^FM(d}0V$uu={ z%%#)ivpPxQm#4^Q?HKu7F%kJ#kLFHpG=m*C!~U+Jfz$>BMG7?i!E*8N(ey)o2aL+O zCi~ez>$#)M_AQp#nRJJWV}`Nl0QwG6F^2Coq_T`vBVAS1YGW!9QeMeOGR+)XL${rV$eJa+vD0`a99uSqi8B1AY=d0|qqO!BF zl0|l|%5M5TvSPJT_{A!FPgHgY>ke?Asj};%vM<6i1le&a`-!ORfte!vz*ZSAE26T; zV9^5Z4^{S*sO-PU?AKLxPE_`efr7hMWuG6F{ZFi5AbhpTZX1<-TxS1GWm`ug&Ei9B z0rygs{hG)&e7%6SUE(WQ{zHo7DMj*$hr><>aA|r6IVnw9;^CS4Jwv z35wO9q};Fs>F_XV7mx;O0* zqEAptpe9=prD;S3VWKsH$W%n_Nu(4T7AAU75P1~Qm()oST@fZK5kz(?)saY(ztc;r<^gJ9VuzOClKPzsjRHi?g~=wu%LxH#$Z+0CvsQhtbtT zU|-u_ihMInx*?L3Q%-9gNTo6_fY3^#GQA|{$x4|3aOJg}*iyyEH&D~K6?i~9)5tz# z{rs&hC24i% zWZ0rTWQG2UIi59vx&!LWBP;t5>3mH`IO zYDN#E%g=?Tapy1Aw|0@i;9|6=vJ2w>8bEk#;UgvPX%QTKDbNU`<}xCC`1Z)WM`a$_ zafY%2lNaQK9LvfO}<9o5|E%RF!!YdJXZ37j9pH~A%!`nFqo(&aY*!c>iClo z?51E}Y&*1CpjIs1>@ik!H?zO!d`4wKJS-#^9%fMW#ILRS57BO4Tc`fXs++;uIzVe(8*q5!_iYg?VqZM;2XstA zhwy0hk&GYHFBZP2_cmapK`0PQDG~~jMxV>E31v}q75!n_e3z@r_Y#tob%t+6YgR$9 zWv%0?Op(Dhg1YHWVJET9K7usseqpu1u}!S`_lvafnn9xewPJnP!WM~(wa27{a~ik- zA8JQJq`AufWWOLuV*Q)jBB_=6)1`=VO@v5O#3PbKG;Yv0Q6mv)lFSw)Ia{Wf7s@rh z;ah?|elu9GE8BnQhOBW}L8)-YtHzXlgOunw*>Q`sFe z&nmI_g9+7MmQi^CGb2v_#IzI@{Np}o$z_w8R>I3DT9)7C$h7U(`g#i^B2HqB%FY*~z@t`Mws)|08OW_$z81b;c~(!ycVXfcFF{BqgseT4 z-5{88yk3UL$E08eL-bgd%K*NRSkbMI*3n)7Lp#y=nltwWH|XYm>^o(GOEHhL?nFR= z2Ssj88kJ{p>ZdhlqXqfxh?JdmEe|lEr4O->v3j*sF zaKU7hU9Fwg6ZJ7d9t znM@6L@r<;L2hb0UiYw{fez7(Vo!JU$xgL)QoD)YAZwKie2UJg9Ebf_EIs~Le}fnD28 zQr-nh)(;Di1CR^i6po*A1;NF^PGW@tM!pDL$FT6TP!yLcTwrtQ$-Pz7_A&9OSt77w z;zq(apjysFEX>1s8Ni_2=yWgTde!K%$>{PrM09_imOP~%^EWZgO4)?n179LYtirvL zkJ4Ev#X~>0c+_$(VRWfCP8O3j>tVleP2cq#D}x!At(2Yi3D_t!xP|d^^GLmEF8xL| z&5qTm?rHZm*EHM(5l!1`&5S&m;>h?pixR+I`GFq-Jx#5nd8J zxr)sf_Xr-0yIc}{jp|GL`@mxDA{g{-gUh0R#jkP~{9`2>WR1Q(3TX6w;iN1l^$k+( zcb<1S;^;0|&U!6Rv{5zpT+juMHv0Nw5_l~>4ZbUpav5pw8w;1FkZNo-+Zjzz!~I{h z&tbS}%`l_`aasFaE)JUJc|xArDRzsk-UhM3fO;)m2^VPavE?9cLZjT5#$^0!$iSm7 zGa7vT`{?lLvb!EuU2T!WZU;X$v$gJTOGm-Er+^HM%OI52QhbDdPV zN;UZY#8jj2U4_8zRHNv)=~e&uZU&w{_JXWcqh!%VoRu5hStTZN2HmK8vilWadFU z--C3H|FG%*alhL*yONba9N5C_)6BpyoN$_n+5Lwl&EF@Y!!~4;eQoyp(Q9P)ADuL} zU0_JEtQ}*-JG<>-O;p^PqKcguQLIt<___3MRrGf(x|7@|J)vAPvfM_W1v~P5N@;Md ztpV}W;5tVG?lM?=VFys`C3sm4B~ZzOX>^<)2Xh=_uz&xO}Jn#G`z9F6NQ8wX&&9(Dx80mGZPj`Xv?J z0z=U<&tPh!xkMhupT&@c0kW`{;|~E7elQGvFemBG(=pl@mF=)4WBM^u3+K%L%JjWv zRHliX2H0|cqj7e*^rzj{nopoaK*Ry;HsHf8WwSycVzVlm+8MqA#F=t&a315mtXyms zxV-6Wc@YgE?hk*Lf$~~ZDp13n9}Z!E5$(+lu{7jc8&C=YQ*Al2r6^ZG9Aa|7;4UIM zXswC*8I>2fU9Ld27r1`nxOHwkJ1_J4SF<&ZdlN|!oC1nKHT}!KrQg=M9RlK%6us@5 z4T0*ZWZz)i+w%;U%l|&-4*36CkF7l#Fu&T0|9DQQH%7glxtJ zTlPdLkg^#&DErL+PIfmXn-Q3@Cqg!wod@G;L}~EF0~ib^*dqFg?+}NLHJ;q;tl^hk zOT0KmZ}c4l9{U;yLhZnS2mQ)r_}<2f1|}4SK@FRXUOR7ZV^mgPnnBAl22RACIfV!@>&t&iK53!R5?>*JX&7sMmol*d`-~Gic~()NuF1z**^k`Vhs`HvjbiQ!aK2Tt?*wIGnIH?t+wnE$k);!}`KH04x;DL=yy4peH2}(LY9*46LmlZjxKYj1NE7tE54QB9=}qac4FmKppq%tNtOpJuMT}f51v$$n z=;E``Uqd#m@3>$q^w;hJgtEDoEA$5`1dFck@hHsp`#!`|Ew`}u1c2?>=wr4_9dlC0 zofONFxl}-=xFV7%uBv2;>m8Y*hBC#aflP6E!IU-k8XBZlv{S{VB;5QlDudz(SEy&K znvJX3S3+rOzl9FSe;7yb(jD-MWG3W!!Q zRtIS~AUB~E+HEQ9AZYO*5lpuVXv4P?+lp$&gurzmep)?I%s;6 zr^higZp~aE@LWOj9Wlj%b3)v;m}4?(Y?B@kw;o<(;bE7+lpG|uvBp8?hE z?nd4*Bjs(93=gRcgV2s^Yt&@0$H zM&2GH?PC;Cb4(B?tXRe(QYb6s6H=)fd~BrcpOt`;jkFrpz<5vyWHG95h+@)ln(3}# zgX39Ce+ZXwNS09hm@0ub7vhbS-Kc~rA>~seZymQ3Je;3VREUN4(qG>YMg%mhq=LBkdhL>S0!6(PxO{V6K+N zbuX3rxof4cZARWkBLx9DpN(fM`lp~C8>FyoEKpHmdRxY=)@uuvt7_IKd16FkTQc9Fz2ZZBW+8TF{I8f5ZQsHb3}GfW5-r0 ziF5jWh>ao6{Eel)FQHLRzYmc5LZo&f)hJTCk!ldB4~@s_&K1*q>>rVsU?%vhq?A?F zTuq3)T_TTTN0mgbs_tv&?G}0EB2OS!RdY=OzBO5h6jcI(a`QT7mN&(mR#&m-ctzca zDzR7!)UrB)u3s&yG_OPXPa4hTnBD}c!!+WYe4bHWOUKpd21L`*AT01Vhp4<(tWc_a zSAZ5x?0X&}0zrm5jHq$tSRe+(PE9~Wp+Gf5lTqny<8oaXEC(&Z!bkqMf81^4zI|a0 zS3sDmeBl4?#}5qiE#&RM|JN=QizH-h_tyjd0-3q>7glo(1>_e0wjXyHCQj}z*n={6 zVZ!La-X>HPhsQu6gpA$d@&7o~kIkmBSjQ(UWw64t+AE*IIr8b7i>I~fa!&9LA(#_9@5_04poZx+*y4jj%ZY;7PmtggP?=es+%YK0;!pQaZZ0Z2uj}F5uQ&CA- zZBhn&%Onr#cYXClBVk)+_<&7i-;s?@3hxs8!s!zQzSEz$;`txn6~U>%~P9 zzvv$U-!tF?P3<-`EJO=lzvxN<-}ACKAxAFr0=|_JCuI7?f(%?jG8Ll-;8~j}N_NK` zdx32>MohlVVAo%kW53q_laVH7!e%h;OCZc(r|+M|+XaY(Wb*{$z82VwgLnX2!^nlF zC=$=*tQMY286L$=K+_nwp}dx-3=r1!QOPEB!QRPsHE9Azkak0HK}jK|;T|KqUab|7 za~n%Gvfskwtn3LS@mkh!OnCaEqYZDW;k-l_bn727%=oh%H1^4dI=uFyOYOP&<0{pHP_#Ot*=Z_?>`xfHMt(QUI$}E z-`FxYdzt@7>x{PnA8Yb{g;@(#YW6DYjnE&w3+4t2vBuUfZ@HKU2n+wYK3*$Ky6+5P4u8TYkD z3jK>d5y(u&veO@9y#U=qO*nbi)|c|$)P6LBXhOqx9!gpJ2N(~{aOX0)@Ee8ttffJL ztB1RA`8N}C@2EeiAZyI5DyZbMrMp~WDbHEb6l9(Y9;wOvEnW* z`R7aizLK9PTKofOZS#)~^KSqe<#_oBN1tm+z1jl$xFgX*p{IZ9Jcx2Zug_%dmJ(YzYIx=wa+BJM(W?#AO*JZ;J_JrYb-#&Cl7-iTB_F;N=dHY_ z6TL?OGrC}a|A*^q!#5HRtqj&Ew@2Zla+?VW9J8~JhL#-SWGsD$S}zp(t69^~CR}rh zo~mUTIU8`x8`+qJ8I}LU9!7Chl?5D6&(QAahGV* z8U{g{{2pQj!*gKmI4&~p&luV{tKfEp|X>n2xb|_y6Q!<%qy$(uY5ULhEQ>m3#z2?ZerezPjfz+|d*v(3Os4H-DNS}!>atHTUTrds`M2F_;4z(Lun za2VEv8JJA9;%x>_amYZQvxYkiFNYbJOtp5trYgNsG0^v{a~y`XVFo5st*5}CIY}yz z))TT+RQZ)KIg_c@>`3wylFxL=Uk#Hp3IC5I-$P}x9rD^RIg_c@X_4ey(pp^|@^xWy zCR43_TOxFShU8yCglw+$VR9x@tydz+xr(<|JLGj?awb!)dm_n~k-W+wuMd+mnQD!X zBjtojwDpX`x;f0sWU4h!vQjcit>t7Ftc_q5 zX=|Fp+7M=CGSwOgRx`IxlMkp#%uV&^pYm`t_WIJ{h$g5ousqRPjl z^<{%y+pTs^gOABnYpcvcxm>M+_jQ}1%EzSjti$_;ozviBGS#}*;pOTTyl>hRRX!%I zX%6pOc20wj$y94Nvh4XDLiEX-Z4KWJQ!<%qrASIKvjb&llTEoTOvz-b^&5oPb2w10 zcPO`qDVa>Q-j$SY05G~$?NIIrQ!<%q{SB1p`*y@%3?!OVM0}>LN1Q6Y6J}*H)hd;& zcEsnZ46GvJbI`Z)ZC0^LP@^pu4DI;>K{~iYm6))gX?VZ1_+{|% zIOypvnDvYUfYF{8Ak6_+UbQam&bAFcaV-*)tfgN7jpy<`czXOyuJ{H?Ug#kW*1t<# zP?V&Wgw=91VJRzs{1w6mPi^EJ!i#*@? z9VSk^>ys-fYb%AkUyVhNwwJ6Dal}|SSQgN=6IdDGsk_Kb!A8fp!$!(ZU{TL;*r}WF zzS!4$*bp)@Hb9vp#(2=Yk9@xR;LAigo?xd}ajVHli|Zi>5$VZm3jm4=CGd~Gaz2=g-Nv&l$1W-MAH z0C%U0q&{14=0RO1f*8Vr+2T1?T|sx(E|zf6!xoa$dytF8bd@ij$Q11MjN6Wd{uX0& zr+fa)qQ+u_cZVV9E8R`br!c*KpbuqjI2VKE$aHXWjHd++_u~~dUojhyn z0ofN|qjG}K(L{0FW1+W%UIt6p#RJvjl&D{u5yhjmNKv#6MbRljTfu@C9)VIdgc4u) z#depG@`jP}u95PwU+k4(KL}J+;+8vF(CZ3U+iX7k{=LUbBQ*9EY6iPFeJKeUWRH(*8kUtN0%od&POmc`zC z<$lNBb;3{9Kn3;@_7$sSbi}eY;#_h#^43p5b6R71h{Y{At#M+Z>nw!Dxugl4ef8ew zYYSp^*LD7@+{X0gz&)puIUjzx7Pou2lXBi-sn#n(t?DImnYS1Z?zt={mh=0Ju83IH z`2f@F7W$Up#tAOFEW-mQ%k5B9p!OL6ICb-Xjev)NiT8uZiOXn7C@#z2z_BT|Gcx_V zadGHZuv&$+APQzQ-Y0cvBpChrw^3P!JvJ=*_fR$NP}G4eG!e+~U5?P8PYF(Ed*NzD z=p_Mide56Cq2-^DRqnF|GgAJ9s(kbZ;J?A$4zy=nEBZm2h)2f43X}t6jU1lDtkGCl zqL5Qj0!E|(=-z0#CLG%fzZ9FfY)<1(8*s3WsQH^1ju7q=#GqKY!SEFc8FKF%W583e zyph)PUWmfBX4gmXoE;AtJ1~QM&q(W5CNnxMurm-(uYcW0>po6q#7(s`>X5N%T{%>F znSaED0!@&KxfwQM&p^wGDMG^T;2#Z;5qygbIqGjNvVtC*&AVSf?7l5M^!l(=q z;gKLbT(opE;+x@U-0;R)L?iV_4%55vW1n>=u3GLHYw&{?(fi zp>IXE<(N*t2~FQg2N4_E=)K`L7j|FBqU{T~*KJU@JiiH|yo(EjirQ6rT2Ksce4F6) zO+uvehJ+Um7g{BeP!42#w)Y}~JC%T?k9HLgpF0a}NV z!7+3t46?Ql>;{kcR1LzHQ1W0<;n<@$9_n?lMyobgUemt|oAdTtA0MkxGX_lP4RcsH zUM9nXBlrGQ0L94t1n8_{f`O$~s8c8#LIN|BD&C5GdfVt3zDun zTks_;WtSx%XB>DgXBSl8>;Z7aI3+$-h;w)SMzFiPr${)%QpK*6;s+#3e79W^FJ`Zl z!{s%KkNaNXx!@&!n3Dem@ap?ToNpn)F||@^v3!avG~g09Z1A+_3oCekArxCDi&z0s zYM?*}!3CMrI%9R6zX8)gYx_tpO|U_?+iF14etY*aL{&QOMK1|&tV0^p8o3GF3+^DD zxd&tK{D6F3*l0fe3;fp_muUID(BFPtbYsT z963+7bAersi{%Vywj8>%C}+2rq=xHL#d5Y18O)dge!j+9`GTBq!dCW|h}^s56_BWD zM?fr|TG*l8l~r+mC*BCsiy^g z>iO~CrJfgJP>%YJl4DdinDLaN{D-1E18DWNDEAs#jr57sAJ5f|8*eN9*Gee8?*_+J zv_@no6~?_wigX6w3#s%pAhFpVTJa5^TSBw(#Lnc|FftyA@{u4P?d7Ajd>n_?Ao)Q) zzQx0O8O=q%;Z9a)H6&X8U&~=w8>X(VKuawJT#unyV?!}+E#W>SlLs&@)os$B+RP);=~YQ!Vco6yCu8`T#Jpg}R@9W5 zo}o02(=`19%W&A`{s!1x5t`oqVuYsFTxeP{Len%eN>dB7V_nnx(Ndvzhzw>dP}&5a zl6K2Q47EeVaa@XMMw=O@>vsEQWrQ}@Q=2`*HEsAlly0}{qqJ#FZE~bGYhZQSrfIp< z=BQ?ybDP)Zi_>&%CPZrU#vRaRxUNlhls0c*N~_zZ46PDcO=K|Rpwi}6rA=(>ux%za zug$0kZMMA-VVf(c&8F)#+f0wr=87n7zDBErdJuV{Q|wRFD?T1YiTHTzb`)}DxXM~b z;;L43q@9>Z>6I>LF&l^sW_%4L*#vW+luhs&Dr!5#L+ptsYBDK8lXw2EG%2AbHR0-N zns9wAG#MJD$x)a()K_ZqveM-6U!^A4wQyWBnF3DKWap{6O|F9`T9;mb8}!K;rkS5F zwCb+89#dA`E>o$^-+;6O@1M2w10)V+Br7dFN=r7WZLjL)?Uf#(<#Q_{v^;4g%)I1+i>+`73v)5>~=1ZJ<+ng7r%^R?Hs56l# zy1}-tdZh=VC{gK8W}}eguxYhQbLT@iMl^gVxA^4m~k(fhLxW57g_1&v`WVv zZB~=P5t`IJ7g6b6)aRw4TBRpORk~M{HalVN&}mYe@h};+d1sl_=8w?8Zi0mGo7H9w zE`o$dybGX>u*>FI(4%A6_?lfN+8y;tELe2A45cRb5gE+*lhPztX`5QmotNXD%-^ZT^Z@34KXqFykXwmfAf2XK9-&e+&D}_04Njd6I6M-=2xkrkL6s zzDm=EZ&vHt6h~>(mD-G!+Pto`Nl@Bc1r2Nu{9PBptSkvF{urIufx{n-tU^#=2N$BmobsrG|YfD9$gz= zsnNA*;1WdhnNn)=qC|=zB_LkBmb+eDF@+w|GW89lkr9eCKBXGyMyl{^SOu+txW_FT zC@V^deQ1nODv;u*l>8e*!{9r1I$KNk)zYb2I!Q}+(bDl+`Z&D6mU&1^f1#y!Y3Vn# zbe)!dNlQPYr61GMi?wv6mY$=fi?#GbEuE*OO)Y)7mhP>kleKiBmhPyfU0V8kw76{t zOG|&OrMGG6OGrgi-lwHYwREPIPSDbOHJPu%No~8W)Y4BPT^N2Fiud`>`gx=o?D-_R1b@21gU*fj z#@_rZ!EeXo4YwUghJ24;qtyQWo%92_{_PV?|6a4=i$lZm@Dc~3-GJ+$OH)szgITn}YK_w-(Zw3CS-XApmpYrJJBf|3iL6qfugJoG8yq1`B!$#}%B@rHJ1_w6f`rk4AKjr!l z<@)P${X4QMK99+*4_%oXQ=hy2Cr`h(j3As9ZTjQ>(--5_S^Qu_p9L^nXBeyF%btE) z=B0`=xY5XnJ;|)!+ZqH3AjnHNPBNVI&&Cx`Njvx5p}vp2MP_gq4(@iE^#`vsV|JR` zn>_vM=AXa+lEr3lG&)j3XMO=qy@kwe=5|8ZW+F zETN5RA7rdX31#1S{B?ZqH@9M6E02GNS--ZDk8ge5HFU=;m3#cY$L> zfv8ld0FEfz+2iNU);1g29eNzY4;N$__r8cJWY)-B|9e?^p5RTf_?eJj*}U=MTXWpV zWT!b|+?j(?4?w7U!f_PjgHO2KMhaf<-(ob>eQ7j&@tKjfZI;(a`_NeQDjg|p*X-%W z$ps`Fb)2tS`aj=qNIihMI@YY%7|V(tmM<=En{_HOE9rw|8K&N6-iG{syJqD;?~}

4A^>51E{_Bx} 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 R(EKyz^OX5f8KR=n{{un+DwhBN literal 91704 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̾#oC1qob`zy%5Xf0KYl!kQQ!tEHyK>6NW+ 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