3줄 요약

  1. 2026년 9월 14일 GitHub에 올라온 개인 실험 리포지터리다. 카메라 영상과 관성 센서 신호를 신경 백엔드에 넣고, 그 활성도를 로봇 좌우 모터 명령으로 바꾸는 파이프라인을 파이썬으로 구현했다.
  2. 이름은 초파리 커넥톰을 내세우지만, 안에서 실제로 도는 백엔드에는 사람이 손으로 설계한 누설 적분 그룹 여덟 개가 들어 있다. MaleCNS 백엔드는 데이터 경로가 있는지만 확인하고 곧바로 미구현 예외를 던지고 멈춘다.
  3. 웹캠 동작과 실제 UDP 통신, 펌웨어 컴파일, 하드웨어 거동은 아직 검증하지 않았다고 저자가 직접 적어 두었다. 그리고 기본 실행은 명령을 내보내지 않는 dry-run이다.

이 리포지터리가 하는 일

README는 이 프로젝트를 “카메라와 신경 백엔드, 그리고 물리적 로봇 사이의 실험적 인터페이스"라고 소개한다. 신호는 한 방향으로 흐르고, 로봇의 관성 센서 값만 되돌아온다.

Camera → VisionEncoder → BrainBackend → MotorDecoder → UDP → robot
Robot IMU → UDP telemetry → BrainBackend

파이썬 3.11 이상을 쓰고 있다면 설치한 다음 한 줄로 돌릴 수 있다. 기본 실행은 합성 영상 300프레임을 돌리고, 시간으로는 약 10초 분량이다. 카메라도 네트워크도 쓰지 않는다.

python -m flybrain_robot.main --backend mock --synthetic

아래는 저자가 합성 인코더와 모의 백엔드(mock), 모터 디코더를 실제로 120스텝 돌려서 녹화한 결과다. 화면 왼쪽에는 합성 카메라 입력이 있고, 오른쪽에는 여덟 그룹의 활성도가 있으며, 아래쪽에는 디코딩된 좌우 명령이 나온다.

합성 카메라 입력과 모의 백엔드의 여덟 개 그룹 활성도, 그리고 디코딩된 좌우 모터 명령이 나란히 표시되는 데모 화면

저자는 이 그림 아래에 “소프트웨어 출력의 시각화이며 물리적 로봇을 녹화한 것이 아니다"라는 설명을 달아 놓았다. 화면에 표시되는 헤르츠 값도 성능 지표로 읽지 말라고 덧붙였다. 그 숫자는 시뮬레이션이 진행되는 속도를 나타낸다.

시각 신호는 어떻게 만들어지는가

VisionEncoder는 들어온 프레임을 가로 160, 세로 120 픽셀로 줄이고 흑백으로 바꾼 다음 Farneback 광류를 계산한다. 여기서 세 개의 값이 나온다.

값계산 방식
left_motion화면 왼쪽 절반의 광류 크기 평균을 3으로 나누고 0에서 1 사이로 자른다
right_motion오른쪽 절반에 같은 계산을 적용한다
looming화면 중심에서 바깥으로 향하는 방사 벡터에 광류를 투영한 평균값을 2로 나눈다

이 세 값이 어떤 성격인지도 README에 분명하게 적혀 있다. 좌우 운동 값은 각 절반의 크기일 뿐이며 생물학적인 방향 시각 모형이 아니다. looming은 중심 기준 광류 휴리스틱이라 카메라 흔들림과 조명, 프레임 속도에 민감하다. 충돌 회피 기능은 아니라는 문장도 한계 목록에 따로 들어가 있다.

여덟 개 그룹의 정체

MockBrain은 상태값을 여덟 개 가지고 있다. 매 스텝마다 감각 입력으로 목표치를 만들고, 시간 상수가 120밀리초인 지수 누설을 써서 현재 상태를 그 목표 쪽으로 옮긴다.

그룹목표치를 미는 입력
left_motion화면 왼쪽 절반의 운동 크기
right_motion화면 오른쪽 절반의 운동 크기
looming중심 기준 확장량
balance_left자이로가 재는 좌우 회전 값(yaw)이 양수일 때
balance_right좌우 회전 값이 음수일 때
left_motor0.15 + 오른쪽 운동 × 0.7 - 좌측 균형값
right_motor0.15 + 왼쪽 운동 × 0.7 - 우측 균형값
escape중심 기준 확장량

좌우 모터를 정하는 두 식에 반대쪽 운동 값이 들어가는 배선이 이 모형의 중심이다. 오른쪽에서 움직임이 감지되면 왼쪽 모터 출력이 커진다. 그리고 로봇이 그 방향으로 회전하면 자이로가 읽은 좌우 회전 값이 그 출력을 다시 낮춘다. 식 앞에 붙은 0.15는 아무 입력이 없어도 로봇이 조금씩 앞으로 나가게 하는 상수다.

README는 이 이름들을 이렇게 설명한다.

이 이름들은 공학적 신호를 가리키는 것이며, 정체가 밝혀진 생물학적 뉴런을 가리키지 않는다.

명령으로 바뀌는 단계

MotorDecoder가 활성도를 실제 속도로 옮긴다. 기본값을 보면 최대 속도는 35, 평활 계수는 0.25, 데드존은 5, 확장 임계는 0.3이다. escape 값이 0.3을 넘으면 좌우 목표가 모두 최대 속도에 음수를 붙인 값으로 바뀌고, 로봇은 뒤로 물러난다. 비상 정지는 평활 단계를 건너뛰고 바로 0을 내보낸다.

여기에 500밀리초 감시 장치가 붙는다. 갱신 없이 그 시간이 지나면 디코더는 0을 돌려준다. 저자는 이 장치의 한계도 함께 밝혔다. 이 장치는 배경 스레드로 돌지 않는다. 그래서 파이썬이 멈추면 하드웨어를 세울 방법이 없고, 저자는 수신 쪽에도 독립적인 감시 장치를 반드시 두라고 당부했다.

통신 규약

PC와 로봇은 UDP 데이터그램 하나에 JSON 객체 하나를 실어 주고받는다. PC는 9001번 포트를 잡아 두고, 로봇의 9000번 포트로 보낸다.

{"type":"motor_command","sequence":42,"left":35,"right":28,"emergency_stop":false}
{"type":"telemetry","sequence":42,"gyro":[0.1,0,-0.2],"accel":[0,0.1,0.98],"left_speed":34,"right_speed":27}

검증 규칙이 꽤 촘촘하다. 순서 번호는 0에서 21억 4748만 3647 사이의 정수여야 하고, 속도는 -100에서 100 사이의 유한한 수여야 한다. 알 수 없는 타입과 누락된 필드, 깨진 JSON은 모두 거부한다. 불리언을 수로 써서 보낸 값, 무한대나 NaN(숫자가 아닌 값), 2048바이트를 넘는 패킷도 마찬가지로 거부한다. 순서 번호가 증가하지 않는 패킷은 무시한다.

그러면서도 저자는 이것을 보안으로 부르지 않는다.

IP 확인도 순서 번호도 인증을 제공하지 않는다.

MaleCNS 백엔드를 불러 보면

리포지터리 이름과 소개문은 초파리 커넥톰을 내세운다. 그런데 그 커넥톰이 아직 코드에 없다. MaleCNSBackend는 설정에 적힌 데이터셋 경로가 있는지 확인한 다음, 그래프를 읽는 함수에서 곧바로 미구현 예외를 던진다. 다섯 개 메서드가 모두 같은 자리에서 멈춘다.

통합 문서는 앞으로 무엇이 필요한지를 네 가지로 나누어 적었다. 첫째는 뉴런 ID와 가중치와 주석을 그대로 보존하고 버전까지 관리하는 그래프 로더다. 둘째는 과학적 근거에 비추어 검토한 감각 집단과 운동 집단의 매핑이다. 셋째는 문서로 정리한 뉴런 및 시냅스 동역학 모형, 그리고 시간 단위 규약이다. 넷째는 규모를 키우기 전에 돌려 볼 재현 가능한 소규모 부분 그래프 테스트다.

문서를 닫는 두 문장이 이 프로젝트의 태도를 가장 잘 보여준다.

연결 구조만 가지고는 검증된 동역학 모형을 정의할 수 없다. MaleCNS라는 이름으로 모의 활성도를 돌려주지 말 것.

로봇을 움직이려면

로봇을 실제로 움직이려면 여러 개의 잠금을 차례로 풀어야 한다.

  • 기본 실행은 dry-run이다. 명령을 물리적으로 내보내려면 --send 옵션을 붙여야 한다.
  • 텔레메트리를 한 번도 받지 못했거나 마지막으로 받은 시점에서 500밀리초가 지나면, PC는 0으로 채운 명령만 보낸다.
  • ESP32 펌웨어는 의도적으로 무장 해제된 뼈대다. 출력을 초기화하는 자리, 부호 있는 속도를 적용하는 자리, 관성 센서를 읽는 자리, 이렇게 세 군데가 비어 있다. 보드에 맞게 직접 구현한 다음 HARDWARE_READY 값을 true로 바꿔야 한다.
  • 이 뼈대는 관성 센서를 읽지 못하는 동안 지어낸 값을 내보내는 대신 아무것도 보내지 않는다. 그리고 텔레메트리가 끊기면 PC 쪽이 움직임을 거부한다.

안전 문서는 이렇게 권고한다. 먼저 dry-run으로 시작하고, 로봇을 바닥에서 들어 올린 상태로 보정하며, 독립된 모터 전원 차단 장치와 수신 쪽 감시 장치를 둘 것. 그리고 광류 휴리스틱은 사람이나 장비를 보호하지 못한다는 문장이 그 뒤에 붙는다.

검증된 것과 검증되지 않은 것

저자는 검증 문서를 따로 두고 무엇을 실제로 돌려 보았는지를 구분했다. macOS에서 파이썬 3.11.15로 확인한 내용이다.

확인함확인하지 않음
개발 의존성까지 포함한 편집 가능 설치웹캠 접근
ruff check 통과사용자가 넣는 영상 파일
pytest 26건 통과실제 UDP 물리 연결
모의 백엔드 CLI로 합성 영상 90프레임 완주펌웨어 컴파일
SVG 자산 XML 파싱과 README 링크 확인하드웨어 거동

통과한 26건의 테스트는 모듈 임포트, 깨진 패킷, 순서가 뒤집힌 텔레메트리, 속도 제한, 평활, escape 후진, 500밀리초 감시 장치를 다룬다. 공개 뒤에는 저장소를 다시 복제해 파일 37개가 미리 준비해 둔 사본과 일치하는지 확인했고, GitHub Actions가 파이썬 3.11과 3.12에서 통과한 기록도 링크로 남겼다.

문서를 읽다 보면 계정 이름이 두 개 나온다. README의 복제 주소와 CI 배지, 검증 문서가 모두 Himas1211을 가리키는데, 지금 저장소는 Frankweb33 계정 아래에 있다. GitHub가 옛 주소를 새 주소로 넘겨주기 때문에 복제 명령 자체는 그대로 동작한다.

커넥톰 로봇이 유행하는 자리

초파리 커넥톰 데이터가 공개된 뒤로, 그것을 무언가에 연결해 보는 개인 프로젝트가 줄줄이 올라왔다. 아래 목록에서 FlyBrain Robot Bridge는 가장 늦게 도착했다. 별 개수는 2026년 9월 15일 기준이며, 사용한 커넥톰도 프로젝트마다 다르다.

프로젝트별공개무엇을 붙였나
DenisSergeevitch/desktop-fly9472026-08-18FlyWire 커넥톰 스파이킹 시뮬레이션으로 macOS 바탕화면 위 3D 파리를 움직인다
eonsystemspbc/fly-brain7212026-03-05Brian2, PyTorch, NEST GPU, 뉴로모픽 칩으로 초파리 뇌를 에뮬레이션한다
nftechie/doomfly2652026-09-06커넥톰 시뮬레이션이 둠 경기장을 조작한다
philshiu/Drosophila_brain_model2632023-02-25초파리 뇌의 누설 적분 발화 모형
Frankweb33/flybrain-robot-bridge592026-09-14광류와 관성 센서를 모의 백엔드에 넣어 로봇 좌우 모터를 민다
ornata/fly392026-09-07MaleCNS 파리를 마리오에 연결했다

저자도 이 흐름을 알고 있다. 그래서 참고 문헌 자리에 위 프로젝트들을 나열한 뒤, “커넥톰과 과학 모형은 원래 연구자들의 것이며, 이 프로젝트는 그들이 발견한 내용에 저작권을 주장하지 않는다"라고 적었다.

무엇이 가장 눈에 띄었나

보통 이런 저장소는 자기가 한 일을 실제보다 크게 말한다. 이 저장소는 정반대로 움직인다. README 첫 경고 상자가 “이 저장소는 생물학적 뇌나 의식의 완전한 에뮬레이션을 담고 있지 않다"로 시작하고, 그 뒤로 거의 모든 절이 무엇을 하지 않는지로 끝난다. 여덟 개 그룹의 이름은 뉴런을 가리키지 않는다. 운동 값으로는 방향을 알 수 없고, 확장 감지로는 충돌을 피할 수 없다. 펌웨어는 아직 컴파일된 적이 없다. 데모 영상에 담긴 것도 로봇의 움직임이 아닌 소프트웨어의 출력이다.

이 태도가 가장 선명하게 드러나는 곳은 통합 문서의 마지막 줄이었다. “MaleCNS라는 이름으로 모의 활성도를 돌려주지 말 것.” 이 문장은 독자를 향한 설명이라기보다 나중에 이 코드를 이어받을 사람에게 남긴 금지 조항에 가깝다. 빈칸을 채우는 가장 쉬운 방법이 무엇인지 저자가 이미 알고 있고, 그 길을 미리 막아 둔 셈이다.

이 저장소에서 완성된 것을 다시 세어 보면 목록에 커넥톰은 없다. 대신 커넥톰을 꽂을 자리가 있다. 그 자리 둘레에는 백엔드 인터페이스와 검증되는 통신 규약, 양쪽 감시 장치, 무장 해제된 펌웨어 뼈대, 26건의 테스트가 이미 놓여 있다. 정작 뇌가 들어갈 칸만 비어 있고, 그 칸에 무엇이 필요한지가 네 줄로 적혀 있다. 초파리 뇌를 로봇에 연결했다고 말하는 프로젝트가 여럿 나온 계절이다. 그 사이에서 이 저장소는 아직 연결하지 않았다고 말하면서, 연결에 필요한 배선을 먼저 깔아 두었다. 그 모습을 보는 일이 조금 색달랐다.

출처

Frankweb33, FlyBrain Robot Bridge. 2026년 9월 14일 공개, MIT 라이선스, 파이썬. 원문: https://github.com/Frankweb33/flybrain-robot-bridge

커넥톰 원자료: Male CNS Connectome, Janelia

본문에는 저장소의 assets/architecture.svg와 assets/mock-demo.gif를 인용했다 (MIT 라이선스).