느린 (30Hz) 시스템으로 빠른 (200Hz) 실시간 시스템을 어떻게 제어 할 수 있습니까?


12

현재 다수의 제어 된 자유도 및 센서를 갖춘 모바일 로봇 + 장착 암을 설계하고 있습니다.

두 부분으로 아키텍처를 고려하고 있습니다.

  1. Arm 모터 및 인코더를 제어하기위한 실시간 컨트롤러 세트 (Xenomai와 같은 RTOS를 실행하는 Raspeberry Pis 또는 베어 메탈 마이크로 컨트롤러). 마이크로 컨트롤러의 수에 따라 x = 1,2,3…을 사용하여 이러한 머신을 RTx라고합니다. 이 제어 루프는 200Hz에서 작동합니다.

  2. ROS를 실행하여 SLAM, mocap을 계산하고 높은 수준의 로직을 실행하는 강력한 바닐라 리눅스 머신 (로봇의 작업을 결정하고 모터의 원하는 위치와 속도를 계산). 이 제어 루프는 30Hz에서 작동합니다.

더 많은 모터, 더 많은 센서, 더 많은 PC (예 : 외부 mocap)를 설명하기 위해 프레임 워크를 확장 할 수 있어야한다는 것을 알고 있습니다.

내 주요 문제는 다른 RTx가 PC1과 통신하는 방법을 결정하는 것입니다. 로봇 아키텍처 (예 : HRP2 ) 와 관련된 논문을 살펴 보았는데 , 대부분 하이 레벨 제어 아키텍처를 설명하지만 로우 레벨이 하이 레벨과 확장 가능한 방식으로 통신하는 방법에 대한 정보는 아직 찾지 못했습니다. 내가 뭘 놓 쳤니?

모터 제어를 보장하는 고속 RT 머신을 PC1과 연결하기 위해 TCP / IP, CAN 및 UART를 고려했습니다.

  • TCP / IP : 결정적이지 않고 쉽게 배치 할 수 있습니다. 비결정론은 실제 문제입니까 (어쨌든 저속 30Hz에서만 사용되기 때문에)?
  • CAN : 느리고, 신뢰성이 높고, 자동차를 대상으로합니다 (로봇과 함께 CAN을 사용하는 몇 가지 예외가 있지만 이국적인 것처럼 보였습니다)
  • UART : 모터 제어용 RT 머신이 하나 뿐인 경우 UART를 고려했을 것입니다. 그러나이 포트는 많은 RTx와 잘 맞지 않는 것 같습니다. TCP / IP가 결정적이지 않은 특성 때문에 실제로 사용되지 않습니까? 사용하기 매우 쉽습니다…

현재로서는 어떤 해결책도 실제로 나에게 분명하지 않습니다. 신뢰할 수 있고 확장 가능한 특정 솔루션을 사용하여 심각한 로봇 예제를 찾을 수 없으므로 선택을 확신하지 않습니다.

이 요점이나 문학에 대한 명확한 견해를 가진 사람이 있습니까? 로봇에 사용되는 일반적인 또는 주류 통신 솔루션이 있습니까?


1
실시간 네트워크를 조사하고 있다면 EtherCAT 을 살펴볼 수 있습니다!
Shahbaz

1
이 질문은 앞으로의 방문자를 도울 것 같지 않으며 너무 현지화 되어 폐쇄 될 수 있습니다 . 모든 배경을 한 곳에 두는 것이 유용하지만, 실제로 직면 한 실제 문제를 바탕으로 실용적이고 대답 할 수 있는 일련의 질문으로 나누는 것이 좋습니다 . 의견을 물어도 괜찮습니까?를 참조하십시오 . 더 많은 배경.
Mark Booth

답변:


8

좋은 첫 발걸음을 내딛었다 고 생각합니다. 문제를 모바일 플랫폼 (위치 불확실성이 있고 탐색해야 함)과 팔 (코더를 통해 실시간으로 위치가 상당히 확실 함)로 나 ve습니다.

나는 로봇 아키텍처와 관련된 논문을 보았지만 [...] 저수준이 고수준과 확장 가능한 방식으로 의사 소통하는 방법에 대한 정보를 아직 찾지 못했다. 내가 뭘 놓 쳤니?

설명에 따르면 각 RTx 컨트롤러를 ROS를 실행하는 PC1에 직접 연결하려는 것처럼 들립니다. 놓친 것은 ROS가 서로 다른 속도로 데이터를 생성하고 소비 할 수있는 응용 프로그램 그룹을 처리 하도록 설계 되었다는 것입니다.

어플리케이션에 필요한 것은 200Hz 루프와 ROS 환경 사이의 단일 인터페이스 인 통신 브리지 입니다. 즉, 대신에 각 PC1 재전송 제어기를 묶는 함께 모든 재전송 제어기를 묶어 연결하고 PC1한다.

예를 들어, I2C 버스 를 사용 하여 RTx 시스템을 서로 연결하고 다른 RTx 컨트롤러를 "Arm Master"(AM)로 추가하십시오. AM의 임무는 PC1에 적합한 형식과 프로토콜로 들어오는 명령을 받아들이고 해당 명령을 I2C 메시지로 변환하는 것입니다. 그런 다음 AM에 명령을 보내기 위해 ROS 앱을 작성합니다.

I2C로이를 수행하는 또 다른 방법은 I2C 컨트롤러를 PC1에 직접 배치하고 모든 팔 제어 로직을 ROS 앱에 작성하는 것입니다. 이 방법은 목표를 달성하기위한보다 능률적 인 방법처럼 보일 수 있지만 시스템의 모듈성을 제거 할 때 디버깅이 더 어려워 질 수 있습니다. 쉽게 테스트 할 수있는 두 가지 구성 요소 대신 하나의 큰 복잡한 시스템으로 문제를 해결해야합니다.


나는이 개념의 커뮤니케이션 브리지를 좋아한다. 전달 된 링크를 살펴 보겠습니다. 고마워요!
arennuit

5

많은 통신 노드 (센서 또는 액츄에이터)가 필요한 모든 응용 프로그램은 배선 복잡성, 결정 성 및 연결성으로 인해 UART 또는 이더넷과 같은 지점 간 링크와 달리 시스템 버스로 구현하면 이점이 있다고 말합니다. 모듈성.

모든 제어 시스템에는 높은 수준의 결정 성이 필요하며, 높은 대역폭의 채널 (예 : 이더넷)이 일반적으로 부족합니다 (특히, 대량의 스케줄링 지터를 발생시키는 범용 OS와 함께 사용하는 경우 스케줄링 결정에 대한 설명은 다음 링크 참조) ). 응용 프로그램 프로세서 (예 : Raspberry Pi의 ARM11)는 실시간 시스템에 적합하지 않을 수 있습니다 (인터럽트 대기 시간 및 명령 파이프 라이닝과 같은 영향으로 인해). ARM 애플리케이션 코어와 마이크로 컨트롤러의 실시간 동작을 비교하는 다음 digikey 토론을 참조하십시오 .

통합 CAN의 가용성이 UART (RS-485) 나 I2C (아직)만큼 널리 보급되어 있지 않다는 것은 부끄러운 일입니다. 분산 감지 및 작동 문제를 실제로 단순화한다고 생각하기 때문입니다. 일반적인 1Mbps는 느리게 보일 수 있지만 모든 버스 멤버의 새로 고침 빈도를 계산 한 후에는 일반적으로 충분합니다 (버스 길이, 임피던스 및 트랜시버의 허용 여부에 따라 전송 속도를 항상 늘릴 수 있음). 기본적으로 최악의 응답 시간을 보장하는 뛰어난 시뮬레이션 소프트웨어도 있습니다 (예 : RealTime-at-work에는 RTaW-Sim이라는 무료 CAN 버스 분석기가 있습니다). 마지막으로, CAN이 통합 된 MEMS 센서의 가용성은 다소 나빠 보입니다.

액추에이터가 버스 (또는 링)로 구성되는 다른 예는 Dynamixels AX 및 MX 시리즈이며, 각 모터는 UART 링크를 통해 다음 모터에 데이지 체인 연결됩니다. 이는 많은 액츄에이터가있는 경우 시스템 설계를 크게 단순화합니다.

그러나 실제 질문으로 돌아 가기 위해 시스템을 명령 대신 실시간 설정 점으로 설명하면 (예를 들어 goto angle과 같은 명령을 지시하는 것보다 모터 각도를 지속적으로 브로드 캐스트하는 경우) 사이의 연결을 단순화합니다. 200Hz 및 30Hz 루프.


안녕 에디, 방금 당신의 대답을 알아 차 렸습니다. "지점 간 링크"와 "시스템 버스"의 차이점을 설명 할 수 있습니까? 특히 당신은 먼저 포인트-투-포인트를 낮은 등급이라고 언급하지만 다이너 믹셀은 UART를 사용하고 훌륭하다고 말합니다 ... 잘 모르겠습니다.
arennuit

다이나믹 셀이 사용하는 토폴로지는 포인트-투-포인트 시리얼이 아니며 데이지 체인 방식입니다 (예 : 링 토폴로지 또는 공유 버스). 즉, 각 모터에는 두 개의 포트가 있습니다 (하나는 입력 용이고 다른 하나는 다음 모터에 연결됨). 따라서 스타 토폴로지가 없으며 배선이 훨씬 간단합니다. 또한 지점 간 통신은 등급이 낮다고 말한 적이 없지만 많은 노드가있는 네트워크에서는 일반적으로 배선이 더 번거 롭습니다.
EDDY74

알 겠어요! 1 년 후 추가 정보에 감사드립니다;)
arennuit

4

한 번에 해결하려고하는 2 가지 별도 (관련) 문제가있는 것 같습니다. 수수께끼를 더 작은 조각으로 나누겠습니다.

  1. 어떻게합니까 통신 고속 컨트롤러 (200Hz의)에 느린 시스템 (30 ㎐)에서 명령을하고, 어떻게 데이터를 내 30Hz의 싱크 탱크로는 200Hz의 뒷면에 수신되는 통신합니까?
  2. 로봇에게 30Hz에서만 수행 할 작업을 지시 할 수있을 때 200Hz에서 발생하는 상황을 어떻게 제어 합니까?

항목 1은 원래 질문이 지적한 것처럼 하드웨어에서 해결할 수 있습니다. 200Hz에서 데이터를 대기시키고 30Hz에서 상위 레벨 시스템으로 패킷을 보낼 수 있습니다. TCP / IP를 사용하거나 전송할 데이터 양에 따라 CAN을 사용하여이 작업을 수행 할 수 있습니다. 하드웨어마다 최대 데이터 속도가 다릅니다. 다른 게시물에서 제안한대로 통신 브리지 / 중재자로 작동하도록 ROS와 같은 아키텍처 수준을 추가하는 것도 도움이 될 수 있습니다.

항목 2는 하드웨어만으로는 해결할 수없는 제어 이론 문제입니다. SLAM, 위치 및 속도 결정 및 원하는 작업 결정은 정보를 덜 자주주고 받기 때문에 더 똑똑해야합니다. 아마도 2 개의 제어 루프를 원할 것입니다 : 200Hz에서 1 개, 30Hz에서 1 개.

피드 포워드, 피드백 및 PID 제어 루프를 다루는 다른 많은 질문이 있지만 확장성에 대해 구체적으로 질문했습니다. 제어 루프와 로직 을 계층화 하여 가장 큰 시스템이 확장되는 방식 은 최소한의 필요한 정보가 하드웨어에 관계없이 전달되도록합니다. 당신은 결국. 예를 들어 최상위 컨트롤러는 목표 위치 포인트와 평균 목표 속도를 하위 레벨 1에만 제공 할 수 있으며 초당 30 회 속도를 변경하지는 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.