중력 보상 예제 공개…엔비디아($NVDA) Holoscan 5 활용

| 김민준 기자

엔비디아(NVIDIA·$NVDA)가 Holoscan 5 SDK로 로봇 팔의 중력 보상 제어 루프를 구성하는 예제를 9일 공개했다. 관절 상태를 읽고 팔의 무게를 지탱할 토크를 계산해 모터에 명령을 보내는 흐름이다.

엔비디아는 기술 블로그에서 Seeed Studio의 reBot Arm B601-DM을 이용해 Python과 C++로 같은 제어 흐름을 구현했다고 밝혔다. 중력 보상은 로봇 팔이 자세를 바꿀 때 필요한 토크를 계산해 모터가 팔의 무게를 받치도록 하는 제어 방식이다. 예제에서는 사람이 팔을 손으로 움직이는 동안 모터가 팔을 지탱한다. (엔비디아 기술 블로그)

제어 루프는 관절 상태 읽기, 중력 토크 계산, 모터 명령 전송을 맡는 연산자 3개로 이뤄졌다. 가운데 단계에서는 Pinocchio가 로봇의 구조와 질량을 담은 URDF 모델을 이용해 관절별 중력 토크를 구한다.

세 연산자는 하나의 제어 파티션에서 순서대로 실행돼 단계 사이의 스레드 간 전달을 피한다. 대기열에는 최신 상태를 우선 남겨 오래된 관측값이 쌓이지 않도록 했다. 실행 전 그래프 연결과 설정을 검사하고, Nsight Systems로 각 단계의 지연 시간과 주기 변동을 살펴볼 수 있다.

관절 상태 읽기는 2.5밀리초마다 시작하도록 설정됐다. 초당 400회에 해당하지만 실제 하드웨어의 상태 갱신이 늘 그 주기를 지킨다는 뜻은 아니다. 실행이 늦어지면 밀린 주기를 합쳐 처리할 수 있다고 기술 가이드는 설명한다.

엔비디아가 공개한 p99.99 지연 시간은 CPU 고정·격리 전후 C++ 구현에서 86.6마이크로초와 17.2마이크로초였다. Python 구현은 1373.5마이크로초에서 142.6마이크로초로 줄었다. 엔비디아는 각각 약 5배, 9.6배 개선됐다고 밝혔다. (엔비디아 기술 블로그)

비교 실험에서는 각 구성에서 100만 회가 넘는 제어 주기를 측정하고 첫 10초를 제외했다. 제어 스레드는 특정 CPU 코어에 고정하고 보조·프로파일러 스레드는 다른 코어에 배치한 뒤 두 물리 코어를 다른 응용프로그램에서 격리했다. 측정값은 첫 연산자 진입부터 마지막 연산자 진입까지의 시간이다.

이 측정에는 모터 명령 전송이나 실제 센서부터 모터까지 걸리는 시간이 포함되지 않는다. 따라서 공개된 수치는 제어 루프 안의 연산자 구간을 잰 결과다. 실제 장치의 전체 응답 시간과는 측정 범위가 다르다. (엔비디아 기술 가이드)

예제는 x86 Ubuntu 24.04와 젯슨 오린 나노, 젯슨 토르에서 시험됐다. Python 예제를 실행하려면 리눅스와 Python 3.12 이상이 필요하다.

엔비디아는 10월 20일 Holoscan 5를 발표하며 런타임과 실행·설정 API를 재구성했다고 설명했다. 센서 처리와 제어 작업을 같은 SDK의 연산자·그래프 체계에서 구성할 수 있다는 내용이다. 이번 로봇 팔 예제는 그 구조를 실제 장치에 적용했다. (Holoscan 5 발표문)

실제 장치에 적용할 때는 피드백 데이터의 신선도와 정지 절차가 중요하다. 기본 motorbridge 드라이버는 수신 시각이나 패킷 번호 없이 저장된 피드백을 반환한다. 피드백이 끊겨도 명령이 계속 전송되면 이전 관절 상태가 사용될 수 있다.

명령 배치가 기본 감시 시간 초과값인 100밀리초 동안 완료되지 않으면 감시기가 그래프를 멈추고 모터 비활성화를 시도한다. 다만 이 감시기는 피드백 정체 자체를 감지하지 않는다. (엔비디아 기술 가이드)

제어를 멈추면 모터의 중량 지지가 사라져 팔이 떨어질 수 있다. 튜토리얼은 시작 전 팔을 안전한 홈 위치에 두고, 정상 종료 전에는 수동으로 그 위치에 돌리도록 안내한다. (엔비디아 기술 가이드)

본 기사는 시장 데이터 및 차트 분석을 바탕으로 작성되었으며, 특정 종목에 대한 투자 권유가 아닙니다.

Most Popular

지금 꼭 알아야 할 리포트