컨텐츠로 건너뛰기

ROS Domain ID 세팅

BATCAM FX ROS Domain ID 설정

1. 개요

BATCAM FX는 ROS 2 Humble 기반으로 센서 데이터를 퍼블리시하며, 같은 ROS_DOMAIN_ID를 사용하는 노드끼리만 서로를 발견하고 통신합니다. 같은 네트워크에서 여러 ROS 2 시스템을 분리해 운용하거나, 사용 중인 환경의 Domain ID에 BATCAM FX를 맞춰야 할 때 이 설정을 변경합니다.

2. 방법 선택: 펌웨어 버전 확인

펌웨어 버전에 따라 설정 방법이 다릅니다. 먼저 사용 중인 장비의 펌웨어 버전을 확인하세요.

펌웨어 버전설정 방법비고
1.0.3c 이상REST API (3번 항목, 권장)공식 지원 방법
1.0.3c 미만systemd 서비스 파일 수동 수정 (4번 항목)비공식 방법 — 주의사항 필독

펌웨어 버전은 기기정보 조회 API(GET /setting/status)의 firmware_version 필드로 확인할 수 있습니다.

Terminal window
curl -u admin:<password> "http://192.168.0.30/setting/status"
# 예시의 192.168.0.30 은 실제 BATCAM FX의 IP 주소로 대체하세요.

응답 예시:

{
"error": 0,
"result": {
"hardware_id": "3287162925128",
"sbrio_version": "1.0.14",
"firmware_version": "v1.0.3c"
}
}

💡 참고: BATCAM FX의 모든 REST API는 HTTP Basic 인증이 필요합니다. 장비에는 기본적으로 admin, user 두 개의 계정이 미리 설정되어 있으며, 출고 기본 비밀번호는 반드시 변경 후 사용하세요. 펌웨어 업데이트 방법은 BATCAM FX 웹 소프트웨어 업데이트 또는 BATCAM FX 쉘 소프트웨어 업데이트 문서를 참조하세요.

3. REST API로 설정하기 (권장, 펌웨어 1.0.3c 이상)

BATCAM FX 펌웨어 1.0.3c 버전부터 REST API를 통한 ROS Domain ID 세팅이 가능합니다. 요청/응답 스키마 상세와 실시간 테스트는 BATCAM FX API 레퍼런스ros 태그를 참고하세요.

메서드경로설명요청 본문
GET/ros/domain현재 설정된 ROS Domain ID 조회없음
PATCH/ros/domainROS Domain ID 변경multipart/form-data

PATCH /ros/domain 요청 필드:

필드타입필수설명
domain_idinteger필수설정할 ROS Domain ID

현재 값 조회

Terminal window
curl -u admin:<password> "http://192.168.0.30/ros/domain"

응답 예시:

{
"error": 0,
"result": {
"domain_id": 123
}
}

값 변경

Terminal window
curl -u admin:<password> -X PATCH "http://192.168.0.30/ros/domain" -F "domain_id=113"

응답 예시:

{
"error": 0,
"result": {
"domain_id": 113
}
}

⚠️ 주의: 설정이 반영되는 동안 카메라와의 연결이 잠시 끊어집니다. 설정 직후 연결이 끊기는 것은 정상 동작입니다.

4. 구버전 수동 설정 (펌웨어 1.0.3c 미만, 비공식)

사용하시는 환경이 ROS_DOMAIN_ID가 0이 아닌 경우, 현재 비공식적으로 지원되는 ROS_DOMAIN_ID 설정 방법입니다.

1.0.3c 미만 펌웨어의 BATCAM FX, 혹은 내부에서 실행되는 ROS 2 옵션에 DOMAIN_ID를 추가할 수 있는 기능은 없습니다. 따라서, ROS 2 Node 및 Topic을 생성하고 퍼블리시 하는 beamforming-camerad 실행 서비스 파일의 수정이 필요합니다.

⚠️ 주의: 이 서비스는 Restart=alwaysStartLimitAction=reboot로 구성되어 있어, 서비스 파일을 잘못 수정하면 beamforming-camerad가 반복 재시작되다가 카메라가 재부팅될 수 있습니다. 수정 전 원본 내용을 보관해 두고, 아래 예시의 형식을 정확히 따르세요. 또한 펌웨어를 업데이트한 뒤에는 설정이 그대로 유지되어 있는지 다시 확인하는 것을 권장합니다.

전제조건

  • BATCAM FX에 SSH로 접속할 수 있어야 합니다. 아래 예시의 192.168.50.11은 실제 BATCAM FX의 IP 주소로 대체하세요.

변경 순서

  1. BATCAM FX에 ssh로 로그인

  2. 서비스 실행 파일에 접근 ( vi, nano 등 )

  3. Service 태그에 Environment 추가

  4. 데몬 및 서비스 파일 다시 불러오기

  5. Beamforming-camerad 또는 카메라 재시작

변경 상세

BATCAM FX에 SSH로 로그인합니다.

Terminal window
ssh root@192.168.50.11
# 사용하시는 환경에 맞게 IP 주소를 변경하여 사용하시기 바랍니다.

아래 명령어를 사용하여 시스템 실행 파일에 접근합니다. 편집기는 vi, nano 등 편하신 방법을 사용하시기 바랍니다.

Terminal window
nano /lib/systemd/system/beamforming-camerad.service
# 또는
vi /lib/systemd/system/beamforming-camerad.service

아래 코드 블럭을 참조하여 Service 태그 내에 Environment 값을 추가합니다. 예시의 113은 사용하시는 환경에 맞는 ROS_DOMAIN_ID 값으로 지정할 수 있습니다.

[Unit]
Description=Batcam FX Camera daemon
Wants=multi-user.target
After=systemd-networkd.service dbus-org.neard.service network.target nvargus-daemon.service setup-account.service
[Service]
## 추가해야할 부분 — 사용하시는 환경에 맞게 ROS_DOMAIN_ID를 지정할 수 있습니다.
Environment=ROS_DOMAIN_ID=113
##
ExecStart=/bin/bash -c 'source /opt/ros/humble/local_setup.sh && systemctl restart nvargus-daemon && /opt/ros/humble/bin/beamforming-camerad'
Restart=always
StartLimitAction=reboot
RestartSec=5
TimeoutStopSec=30
TimeoutStartSec=infinity
ExecStartPre=/bin/sleep 15
# RuntimeMaxSec=86400
[Install]
WantedBy=multi-user.target

⚠️ 주의: systemd 유닛 파일은 행 끝 주석을 지원하지 않습니다. Environment=ROS_DOMAIN_ID=113 행 뒤에 # 주석을 붙이면 주석까지 값으로 해석되어 설정이 동작하지 않으니, 주석은 반드시 별도 행에 작성하세요.

아래 명령어를 사용하여 systemd daemon을 다시 로드합니다.

Terminal window
systemctl daemon-reload

Beamforming-camerad 또는 카메라를 재시작합니다.

Terminal window
systemctl restart beamforming-camerad
# 또는
reboot

5. 설정 확인하기

설정이 적용되었는지 두 가지 방법으로 확인할 수 있습니다.

REST API로 확인 (펌웨어 1.0.3c 이상)

GET /ros/domain을 호출해 반환되는 domain_id가 설정한 값과 일치하는지 확인합니다. (3번 항목의 조회 예시 참조)

호스트 PC에서 ROS 2 토픽으로 확인

호스트 PC의 ROS 2 환경에서 장비와 동일한 ROS_DOMAIN_ID를 설정한 뒤, 토픽 목록에 BATCAM FX의 토픽이 나타나는지 확인합니다.

Terminal window
export ROS_DOMAIN_ID=113 # 장비에 설정한 값과 동일하게 지정
ros2 topic list

정상적으로 적용된 경우, 아래와 같이 카메라 하드웨어 ID 기반의 토픽이 목록에 나타납니다.

Terminal window
/fx_276730383020104/beamforming
/fx_276730383020104/image
/fx_276730383020104/lpoint_audio
/fx_276730383020104/prpd
/fx_276730383020104/ws_audio

토픽 이름의 하드웨어 ID(hardware_id)는 기기정보 조회 API(GET /setting/status)로 확인할 수 있습니다. 토픽별 메세지 명세는 FX ROS 시스템 통합 개요 문서를 참조하세요.

6. 문제 해결 (Troubleshooting)

  • 호스트에서 장비 토픽이 보이지 않을 경우:

    • 호스트와 장비의 ROS_DOMAIN_ID가 동일한지 확인합니다. 장비 값은 GET /ros/domain(펌웨어 1.0.3c 이상) 또는 서비스 파일의 Environment 행에서 확인할 수 있습니다.

    • 장비의 ROS 기본 DOMAIN_ID는 123입니다. 별도로 변경하지 않은 장비라면 호스트에서 export ROS_DOMAIN_ID=123 후 다시 확인합니다.

  • REST API 호출이 401로 실패할 경우:

    • HTTP Basic 인증 자격 증명(admin 또는 user 계정)이 올바른지 확인합니다.
  • PATCH 직후 카메라 연결이 끊긴 경우:

    • 설정이 반영되는 동안 연결이 잠시 끊어지는 것은 정상 동작입니다. 잠시 후 다시 연결해 GET /ros/domain으로 값을 확인합니다.
  • 수동 수정 후 서비스가 반복 재시작되거나 카메라가 재부팅될 경우:

    • Environment=ROS_DOMAIN_ID=<값> 행에 행 끝 주석이나 오타가 없는지 확인하고, 수정 후 systemctl daemon-reload를 다시 실행합니다.

7. 관련 문서