Damiao AGV 설정 가이드
개봉부터 브라우저에서의 운전까지. 개봉 안전, 충전, 소프트웨어, 원격 조작, 자율 항법 및 암 장착을 다룹니다.
개봉 및 안전 점검
AGV 검사 및 작업 공간 준비
- 포장을 제거하세요. 모든 폼 삽입물, 케이블 타이 및 배송 고정 장치를 조심스럽게 제거합니다. 바퀴에 운송 손상이 있는지 검사하십시오. 4개의 메카넘 바퀴가 모두 손으로 자유롭게 회전해야 합니다.
- 커넥터를 검사합니다. 메인 컨트롤러의 모든 케이블 커넥터가 제대로 장착되었는지 확인하세요. 배송 진동으로 인해 JST 또는 Deans 커넥터가 느슨해지는 경우가 있습니다.
- 작업공간 정리. 전원을 켜기 전에 모든 방향에서 최소 2m의 열린 공간을 확보하십시오. AGV는 빠르게 가속할 수 있습니다. 구경꾼은 첫 번째 동작 테스트 중에 뒤로 물러서야 합니다.
- 비상 정지. 섀시에서 주 전원 차단 스위치를 찾습니다. 전원을 켜기 전에 접근 방법을 알아 두십시오. 첫 번째 세션에서는 항상 한 손을 컷오프 근처에 두십시오.
- 표면 점검. 메카넘 휠은 올바른 전방향 성능을 위해 평평하고 단단한 표면(콘크리트, 나무 바닥 또는 매끄러운 타일)이 필요합니다. 카펫과 고르지 못한 표면은 측면 제어 권한을 크게 감소시킵니다.
배터리 충전 및 전원 켜기
처음 사용하기 전에 배터리 팩을 완전히 충전하십시오.
- 충전기를 연결하세요. AGV 섀시에서 배터리 충전 포트를 찾습니다(일반적으로 대형 배럴 커넥터 또는 XT60 포트). 포함된 밸런스 충전기를 연결합니다. 충전기를 접지된 110/220V 콘센트에 연결하세요.
- 가득 충전하세요. 처음 사용하기 전에 배터리를 완전히 충전하십시오(초기 상태에 따라 일반적으로 2~4시간 소요). 완료되면 충전기 LED가 녹색으로 바뀌거나 깜박임을 멈춥니다. 첫 번째 충전 중에는 자리를 떠나지 마십시오.
- 배터리 전압을 확인하세요. 충전 후 배터리 전압은 공칭 완전 충전 수준으로 표시되어야 합니다(배터리 팩 라벨을 확인하세요). 멀티미터나 온보드 디스플레이(장착된 경우)를 사용하십시오.
- 전원 켜기 순서. 배터리를 메인 컨트롤러에 연결합니다. 주 전원 스위치를 전환합니다. 컨트롤러는 5~10초 내에 부팅되어야 하며 표시기 LED가 안정화됩니다. 부팅 중에는 모션 명령을 보내지 마십시오.
소프트웨어 및 ROS2 탐색 스택
PC에 Python 에이전트 및 선택적 ROS2 패키지를 설치합니다.
그만큼 dami_agent.py 스크립트는 Fearless 플랫폼과 AGV 하드웨어 사이의 기본 브리지입니다. Python 3.8+와 두 개의 pip 패키지가 필요합니다.
# Install dependencies pip install pyserial websockets # Confirm your USB-to-TTL adapter appears ls /dev/ttyUSB* # Linux # Add your user to the dialout group (Linux) if you get permission errors sudo usermod -aG dialout $USER # Log out and back in for group change to take effect
USB-TTL 어댑터 연결: 어댑터의 TX AGV 메인 컨트롤러에 고정 UART5_RX(핀 PD2). GND를 GND에 연결하세요. 어댑터의 RX 핀 또는 5V를 AGV에 연결하지 마십시오.
ROS2 통합을 위해 탐색 스택을 설치합니다.
# ROS2 Humble (Ubuntu 22.04) — adjust for your distro
sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup ros-humble-slam-toolbox
python3 dami_agent.py --session RC-XXXX-XXXX --mock
모의 모드에서는 직렬 포트 열기를 건너뜁니다. 모든 WebSocket 명령 구문 분석, 원격 측정 전달 및 시간 초과 안전 논리는 동일하게 실행됩니다.
원격조작
Fearless Platform을 통해 브라우저에서 AGV를 운전하세요
- 열려 있는 platform.roboticscenter.ai, Teleop 섹션으로 이동하여 새 세션을 만듭니다. 세션 ID를 복사합니다(형식:
RC-XXXX-XXXX). - 직렬 포트와 세션 ID를 사용하여 에이전트를 시작합니다.
python3 dami_agent.py \ --session RC-XXXX-XXXX \ --serial-port /dev/ttyUSB0 \ --backend ws://localhost:8000
- 에이전트는 플랫폼에 연결하고 AGV 노드를 다음과 같이 등록합니다.
device_type: "mobile_base", 30Hz에서 제어 루프를 시작합니다. - 브라우저에서 세션 URL을 엽니다. 방향 컨트롤을 사용하여 보내기
move명령. AGV는 하나의 제어 루프 틱(30Hz에서 33ms) 내에 응답합니다.
에이전트가 허용하는 명령 유형:
# Move forward along X axis {"type": "move", "axis": "x", "dir": 1} # Move laterally right (Y axis) {"type": "move", "axis": "y", "dir": 1} # Rotate counter-clockwise (Z axis) {"type": "move", "axis": "z", "dir": -1} # Stop all motion immediately {"type": "stop"} # Goal-based delta movement {"type": "goal", "delta": {"x": 0.5, "y": 0.0, "yaw": 0.0}}
모션 속도를 조정하려면 --amp 매개변수(기본값 660, 권장 범위 500~760). 값이 높을수록 모션이 더 빨라집니다.
python3 dami_agent.py --session RC-XXXX-XXXX --serial-port /dev/ttyUSB0 --amp 500
AGV가 잘못된 방향으로 움직이는 경우 --invert-x, --invert-y, 또는 --invert-z 펌웨어 변경 없이 축을 뒤집을 수 있습니다.
자율 내비게이션 설정
ROS2 nav2, SLAM 및 웨이포인트 추적 구성
자율 항법의 경우 주행 거리 측정 및 센서 데이터(AGV의 LiDAR 또는 깊이 카메라에서)를 ROS2 항목에 게시한 다음 경로 계획에 nav2를 사용합니다.
# Launch SLAM Toolbox for mapping ros2 launch slam_toolbox online_async_launch.py # In a second terminal — launch nav2 with the AGV base footprint ros2 launch nav2_bringup navigation_launch.py \ params_file:=/path/to/your/agv_nav2_params.yaml # Send a navigation goal via CLI ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose \ "{pose: {header: {frame_id: map}, pose: {position: {x: 1.0, y: 0.5}, orientation: {w: 1.0}}}}"
Damiao AGV를 조정하기 위한 주요 nav2 매개변수:
- 로봇 반경 — AGV의 절반 너비에 안전 여유(일반적으로 0.4~0.6m)를 더한 값으로 설정합니다.
- max_vel_x / max_vel_y — 귀하의 기준에 따라 설정하십시오.
--amp값과 측정된 최대 속도. 보수적으로 시작하십시오(0.3m/s). - max_vel_theta — 회전 속도 제한. 천천히 측정하세요.
--amp 400먼저 테스트해 보세요. - 홀로노믹 — 다음으로 설정
trueDWB 로컬 플래너에서 측면 모션 계획을 활성화합니다(메카넘/옴니 휠에 필요함).
로봇 팔 장착
OpenArm 또는 DK1을 상단 플레이트에 고정하고 하나의 플랫폼 세션에 둘 다 등록
Damiao AGV의 상단 플레이트는 표준 로봇 암 베이스 플랜지를 수용하도록 설계되었습니다. 이 단계에서는 물리적 통합과 Fearless Platform 다중 노드 세션 설정을 다룹니다.
물리적 장착
- AGV 및 암의 전원을 끄십시오. 기계 작업 전.
- AGV 상단 플레이트 장착 구멍 위에 로봇 암 베이스 플레이트를 배치합니다. 제공된 M6 소켓 헤드 볼트(또는 가벼운 암의 경우 M5)를 사용하십시오. 모든 패스너에 나사 고정 화합물을 바르십시오.
- 암의 전원과 CAN/USB 케이블을 상단 플레이트의 케이블 관리 채널을 통해 AGV 섀시 수납공간으로 라우팅합니다. 케이블 타이로 고정하세요. 당기지 않고도 팔의 전체 작업 공간을 확보할 수 있을 만큼 충분히 느슨해집니다.
- 별도의 배터리 또는 AGV 섀시의 규제 공급 장치에서 암에 전원을 공급합니다. 적절한 격리 없이 AGV 드라이브 배터리를 암 컨트롤러와 공유하지 마십시오.
다중 노드 플랫폼 세션
동일한 세션 ID를 가리키는 두 에이전트를 모두 시작합니다. 이들은 독립 노드로 등록되며 플랫폼은 두 스트림을 동기식으로 기록합니다.
# Terminal 1 — AGV agent python3 dami_agent.py \ --session RC-XXXX-XXXX \ --serial-port /dev/ttyUSB0 \ --node-id damiao-base # Terminal 2 — OpenArm agent (example) python3 openarm_agent.py \ --session RC-XXXX-XXXX \ --can-interface can0 \ --node-id openarm-right
Fearless Platform teleop 패널에 두 노드가 모두 나타납니다. 운영자는 동일한 세션에서 독립적으로 AGV(x/y/z축)에 모션 명령과 무장 명령을 보낼 수 있습니다. 에피소드 기록은 단일 JSONL 아카이브에 모든 노드의 원격 측정을 캡처합니다. 즉, 타임스탬프별로 동기화된 기본 속도 및 팔 관절 위치를 포함한 완전한 모바일 조작 궤적입니다.
CAN 버스 및 모터 구성
CAN FD 버스를 구성하고 AGV에 장착된 모든 Damiao 액추에이터에 대한 모터 ID를 설정하세요.
OpenArm 또는 DK1 암이 AGV 상단 플레이트에 장착되면 Damiao QDD 모터가 온보드 컴퓨터의 CAN FD 버스를 통해 통신합니다. 이 섹션에서는 버스 가동, 모터 ID 할당, 시운전 명령 및 LED 진단을 다룹니다.
can-utils 설치
# Install SocketCAN utilities (Ubuntu / Debian)
sudo apt update && sudo apt install -y can-utils
CAN FD 인터페이스 불러오기
1Mbit/s 공칭 + 5Mbit/s 데이터의 CAN FD는 모든 새로운 배포에 권장되는 모드입니다.
# Bring interface down first if already up sudo ip link set can0 down # Configure CAN FD: 1M nominal baud, 5M data baud, FD mode enabled sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on # Bring interface up sudo ip link set can0 up # Verify — output should show "fd on" ip link show can0
OpenArm PPA가 설치되어 있는 경우 도우미 스크립트는 다음 명령을 래핑합니다.
# CAN FD single arm openarm-can-configure-socketcan can0 -fd -b 1000000 -d 5000000 # Classic CAN 2.0 (legacy / compatibility) openarm-can-configure-socketcan can0
버스 모니터링
# Dump all CAN frames — verify connectivity before sending commands candump -x can0 # Dump with timestamps candump -td can0
모터 ID 할당(J1–J8)
CAN 버스의 각 Damiao 모터에는 송신기 ID(호스트 → 모터)와 수신기 ID(모터 → 호스트)라는 고유한 ID 쌍이 있어야 합니다. 암을 조립하기 전에 Damiao Windows 디버깅 도구를 사용하여 ID를 구성합니다. 표준 OpenArm 매핑:
| 관절 | 모터 모델 | TX ID(호스트 → 모터) | RX ID(모터 → 호스트) |
|---|---|---|---|
| J1 - 기본 회전 | DM-J4340p-2EC | 0x01 | 0x11 |
| J2 - 어깨 피치 | DM-J4340p-2EC | 0x02 | 0x12 |
| J3 - 어깨 롤 | DM-J4340p-2EC | 0x03 | 0x13 |
| J4 - 팔꿈치 피치 | DM-J4340-2EC | 0x04 | 0x14 |
| J5 — 엘보우 롤 | DM-J4340-2EC | 0x05 | 0x15 |
| J6 — 손목 피치 | DM-J4340-2EC | 0x06 | 0x16 |
| J7 — 손목 롤 | DM-J4310-2EC V1.1 | 0x07 | 0x17 |
| J8 — 그리퍼 | DM-J4310-2EC V1.1 | 0x08 | 0x18 |
ID는 전역적으로가 아니라 CAN 버스별로 고유합니다. 이중 수동 설정(암 2개)은 두 번째 버스를 사용합니다. can1 — 동일한 ID 체계를 사용합니다.
테스트 명령을 보낼 수 있습니다
사용 cansend 낮은 수준의 시운전을 위해. 바꾸다 001 대상 관절의 16진수 TX ID(예: 002 J2의 경우).
## CAN FD commands (use when interface has "fd on") # Enable motor — motor holds position and accepts commands cansend can0 001##1FFFFFFFFFFFFFFFC # Disable motor — motor becomes free-wheeling cansend can0 001##1FFFFFFFFFFFFFFFD # Clear motor error — required before re-enabling after a fault cansend can0 001##1FFFFFFFFFFFFFFFB ## CAN 2.0 equivalents (use when interface is classic CAN, no fd on) cansend can0 001#FFFFFFFFFFFFFFFC # Enable cansend can0 001#FFFFFFFFFFFFFFFD # Disable cansend can0 001#FFFFFFFFFFFFFFFB # Clear error
##1 인터페이스가 다음과 같이 구성되었을 때의 CAN FD 구문 fd on, 그리고 싱글 # CAN 2.0의 고전적인 구문. 동일한 버스에서 프레임 유형을 혼합하면 버스 오류가 발생합니다.
LED 상태 표시기
각 Damiao 모터에는 하우징 창을 통해 볼 수 있는 단일 온보드 LED가 있습니다.
| LED 패턴 | 상태 | 필요한 조치 |
|---|---|---|
| 녹색(지속) | 모터 활성화 및 준비 | 없음 - 모터가 활성화되어 명령을 수락합니다. |
| 빨간색(지속) | 모터 비활성화됨(전원이 공급됨, 활성화되지 않음) | 모터를 활성화하려면 활성화 명령을 보냅니다. |
| 빨간색(깜박임) | 모터 결함/오류 상태 | 오류 지우기 명령을 보내고 원인을 조사한 후 다시 활성화합니다. |
일반적인 오류 원인: 과전류(이득 또는 부하 감소), 과열(냉각 허용), 인코더 오류(케이블 재장착), 저전압(24V 시스템에서 ~18V 미만 공급), CAN 버스 끄기(종단 및 배선 확인).
플래시 쓰기 경고
--flash 플래그는 RAM에만 이동하고 플래시 사이클을 소비하지 않습니다. 모터 매개변수를 반복적으로 다시 깜박이는 스크립트를 피하십시오.