ROS : 모범 사례?


14

작은 로봇 시스템 을 만들려고 합니다. ROS가 시스템을 제어하고 프로그래밍하기위한 훌륭한 프레임 워크를 제공하는 것처럼 보입니다.

그러나 로봇의 구성 요소를 관리하는 가장 좋은 방법이 궁금합니다.

  • 모든 센서를 하나의 노드에 배치하는 것이 합리적입니까?

  • 하나의 노드에 동일한 유형의 센서 만 배치해야합니까, 아니면 하나의 센서에 하나의 노드를 갖는 것이 더 낫습니까?

  • 센서에서 입력을 받아 해당 액츄에이터를 조향하거나 액츄에이터 노드와 센서 노드가 직접 통신해야하는 일종의 핸들러 노드를 갖는 것이 좋은 습관입니까?


  1. 핸들러가있는 융합 된 센서 노드 및 액추에이터 노드 1. 처리기가있는 융합 된 센서 노드 및 액추에이터 노드

  2. 핸들러가있는 단일 센서 및 액추에이터 노드 여기에 이미지 설명을 입력하십시오

  3. 직접 커뮤니케이션 여기에 이미지 설명을 입력하십시오

필자는 시스템과 센서가 느슨하게 결합되어 있기 때문에 센서와 액추에이터 간의 통신을 처리하고 로봇의 각 요소에 대해 하나의 노드를 갖는 일종의 핸들러를 사용하는 것이 가장 좋습니다. 쉽게 확장 할 수 있지만 귀하의 의견이 무엇인지 알고 싶습니다.

답변:


15

매우 짧은 답변 : 2


센서

하나의 노드 또는 각각의 센서에서 모든 센서를 읽을 지 여부와 관련하여이 질문을 스스로에게해야합니다.

다른 센서가 없으면 센서가 의미가 없습니까?

이 질문은 센서가 단단히 결합되어 있는지 묻습니다. 예를 들어 온도에 민감한 센서가 있고이를 보상해야한다고 가정 해보십시오. 주로 다른 센서의 값을 고정하기 위해 온도 센서를 추가합니다. 이 시나리오에서는 두 값이 밀접하게 연결되어 있기 때문에 두 값을 동시에 읽는 것이 좋습니다. 실제로 온도 센서의 판독 값이 없으면 원래 센서의 판독 값이 쓸모가 없습니다.

반면에 센서가 개별적으로 유용한 경우 반드시 별도의 노드에 보관하십시오. 이것은 많은 이점이 있습니다 :

  • 별도의 프로세서에서 노드를 실행할 수 있습니다
  • 미래 로봇에서 노드를 재사용 할 수 있음
  • 한 노드와의 통신 실패로 전체 시스템이 다운되지는 않습니다.
  • 결함이있는 센서 보드에서 수집을 다시 시작하면 다른 센서 보드와 별도로 수행 할 수 있습니다.

실제로, 위의 이점 중 하나 가 필요한 경우 센서가 단단히 연결되어 있어도 별도의 노드를 사용해야하지만 일반적으로 발생하지는 않습니다.

액추에이터

이것은 비슷합니다.

액추에이터없이 다른 액추에이터는 의미가 없습니까?

예를 들어, 각 힘줄마다 (어떤 이유로 든) 두 모터가 동시에 한 방향으로 또는 다른 방향으로 관절을 움직일 책임이있는 로봇 힘줄이 있는 손목을 설계하는 경우 , 동일한 노드에 서비스를 제공하면 훨씬 더 많은 효과를 볼 수 있습니다 별도의 것보다 감각.

반면, 액추에이터가 독립적 인 경우 (일반적인 경우)에는 각 액추에이터마다 하나의 노드가있는 것이 좋습니다. 이 경우 각 노드를 다른 노드에 넣을 수 있습니다. 센서와 동일한 이점 외에도 다음과 같은 이점이 있습니다.

  • 어떤 이유로 든 액츄에이터가 정지되면 다른 액츄에이터는 여전히 작동합니다. 여분의 자유도가 있다면, 그들은 그것을 완전히 보상 할 수도 있습니다.

이것은 한 가지 의미가 있습니다. 액추에이터가 조화롭게 작동 해야하는 경우 동일한 노드에 배치하십시오. 이것은 통신 장애 때문이 아니라 다른 노드가 다른 지연을 의미하기 때문입니다. 분산 시스템에서 각 노드는 네트워크의 다른 부분에 있으므로 지연의 차이가 발생합니다. 중앙 집중식 시스템에서는 각 프로세스의 스케줄링 으로 인해 CPU 부하가 높을 때 다른 지연이 발생합니다 .

핸들러가 있어야합니까?

대답은 "의존"이지만 많은 장점이있는 일반적인 접근 방식이 있습니다. 이름을 변경하고 "컨트롤러"라고하겠습니다. 접근 방식은 "예, 컨트롤러가 있어야합니다"입니다.

컨트롤러를 사용하면 다음과 같은 장점이 있습니다.

  • 분리 된 처리 : 각 노드는 다음을 의미합니다.
    • 단순성 : 암시
      • 보다 쉬운 개발
      • 보다 쉬운 디버깅
      • 적은 오류
      • 실패 가능성 감소
    • 재사용 성 : 동일한 기능 (메시지 및 서비스 형식)이있는 경우 동일한 컨트롤러를 다른 센서 노드와 함께 사용할 수 있기 때문입니다.
  • 별도의 하드웨어에서 실행 : 각 노드는 네트워크에서 이동할 수 있습니다. 예를 들어, 센서 및 액츄에이터 노드는 전용 마이크로 컨트롤러 ( 예 : 아두 이노 (권장하지 않음)) 및 PC의 컨트롤러 로 이동할 수 있습니다 .
  • 센서가 액추에이터에 직접 영향을 미치려고한다면 결과는 엉망입니다. 컨트롤러가 없다고 가정하면 각 경우를 살펴 보겠습니다.
    • 하나의 센서 노드 : 기본적으로 이는 센서 노드와 컨트롤러가 동일한 노드에 결합됨을 의미합니다. 나쁘지는 않지만 매우 불필요합니다.
    • 많은 센서 노드 : 이것은 혼란입니다. 이는 컨트롤러가 센서 노드에 분산되어 있음을 의미합니다 . 따라서 모든 센서 노드는 관련 액추에이터를 제어하는 ​​방법을 알기 위해 서로 통신해야합니다. 의사 소통에 실패했거나 다양한 종류의 지연이 있다고 상상해보십시오. 이것이 완전히 불필요하다는 것을 감안할 때, 그럴 이유가 없습니다!

이들은 단점도 있다고 말했다. 더 많은 노드 (컨트롤러뿐만 아니라 모든 노드)를 갖는 것은 다음을 의미합니다.

  • 더 낭비되는 통신 : 데이터는 네트워크 또는 공유 메모리를 통해 표준 형식 (직렬화 및 역 직렬화)으로 이동해야하며, ROS 코어는이를보고 누구에게 전달할 것인지 등을 결정해야합니다. 의사 소통에서. 한 곳에있는 모든 노드가 그 비용이 0 일 수 있습니다.
  • 더 높은 실패 가능성 : 어떤 이유로 든 네트워크 링크가 다운되거나 노드가 종료되면 시스템에 장애가있는 것입니다. 준비하지 않으면 전체 시스템이 중단 될 수 있습니다. 이제 이것은 일반적으로 시스템의 일부를 잃을 수는 있지만 모든 시스템을 (실제로 열화 시키는 것은 아님) 잃을 수있는 좋은 방법이지만 , 가능한 한 피해야하는 응용 프로그램도 있습니다. 통신을 차단하고 모든 코드를 하나의 노드에 배치하면 실제로 시스템 안정성에 도움이됩니다. 단점은 물론 시스템이 제대로 작동하거나 갑자기 완전히 죽는다는 것입니다.
  • 혼란스러운 타이밍 : 각 노드는 자체적으로 실행됩니다. 메시지가 다른 사람에게 도착하는 데 걸리는 시간은 비 결정적이며 실행마다 다릅니다. 노드가 각 메시지에 타임 스탬프를 표시하지 않는 한 (부록 참고 : ROS에서는 그렇지 않은 경우 시계를 제대로 동기화해야 함) 각 수신 노드가 지연을 고려하여 적절하게 제어 할 수없는 경우 (매우 어려운 작업 임) 그 자체로) 여러 노드를 갖는 것은 데이터의 연령에 대한 높은 불확실성을 의미합니다. 이것은 사실 대부분의 로봇이 너무 느리게 움직이는 이유 중 하나입니다. 제어 루프는 모든 데이터가 현재주기와 일치하도록 충분히 느려 야합니다. 지연이 클수록 제어 루프가 느려집니다.

상기의 모든 단점에서, 해결책은 노드의 수를, 바람직하게는 단일 노드로 감소시키는 것이다. 잠깐만, 더 이상 ROS를 사용하지 않습니다! 바로 그거죠.

요약:

  • 지연이 산발적으로 높아질 수있는 비 실시간 시스템에는 ROS를 사용하십시오. 이 경우 원하는만큼의 ROS 노드를 보유하십시오. 실제로 각 ROS 노드가 가지만 수행하도록하는 것이 좋습니다. 그렇게하면 매우 단순 해지며 재사용 성이 높아집니다.
  • 반면, 실시간 시스템의 경우 ROS를 피하십시오. 이를 위해 EtherCAT 과 같은 오 로코 와 기술 이 있으며 종종 애드혹 솔루션이 있습니다.

마지막으로 실제로 ROS는 훌륭합니다. 좋지는 않지만 괜찮습니다. 시스템이 중요하지 않은 경우가 많으며 실패 할 가능성이 너무 작아서 다시 시작하는 것이 그리 중요하지 않은 경우가 많습니다. 이것은 타조 알고리즘입니다 !


1
와우, 아주 훌륭하고 자세한 답변! 시간 내 주셔서 대단히 감사합니다;)
manf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.