KR20220100876A - 로봇 제어 시스템을 위한 결합성 프레임워크 - Google Patents

로봇 제어 시스템을 위한 결합성 프레임워크 Download PDF

Info

Publication number
KR20220100876A
KR20220100876A KR1020227016153A KR20227016153A KR20220100876A KR 20220100876 A KR20220100876 A KR 20220100876A KR 1020227016153 A KR1020227016153 A KR 1020227016153A KR 20227016153 A KR20227016153 A KR 20227016153A KR 20220100876 A KR20220100876 A KR 20220100876A
Authority
KR
South Korea
Prior art keywords
robot
level
level software
software modules
software module
Prior art date
Application number
KR1020227016153A
Other languages
English (en)
Inventor
그레고리 제이. 프리사멘트
미카엘 베아르드스워스
Original Assignee
인트린식 이노베이션 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인트린식 이노베이션 엘엘씨 filed Critical 인트린식 이노베이션 엘엘씨
Publication of KR20220100876A publication Critical patent/KR20220100876A/ko

Links

Images

Classifications

    • BPERFORMING OPERATIONS; TRANSPORTING
    • B25HAND TOOLS; PORTABLE POWER-DRIVEN TOOLS; MANIPULATORS
    • B25JMANIPULATORS; CHAMBERS PROVIDED WITH MANIPULATION DEVICES
    • B25J9/00Programme-controlled manipulators
    • B25J9/16Programme controls
    • B25J9/1656Programme controls characterised by programming, planning systems for manipulators
    • B25J9/1661Programme controls characterised by programming, planning systems for manipulators characterised by task planning, object-oriented languages
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B25HAND TOOLS; PORTABLE POWER-DRIVEN TOOLS; MANIPULATORS
    • B25JMANIPULATORS; CHAMBERS PROVIDED WITH MANIPULATION DEVICES
    • B25J9/00Programme-controlled manipulators
    • B25J9/16Programme controls
    • B25J9/1656Programme controls characterised by programming, planning systems for manipulators
    • B25J9/1658Programme controls characterised by programming, planning systems for manipulators characterised by programming language
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B25HAND TOOLS; PORTABLE POWER-DRIVEN TOOLS; MANIPULATORS
    • B25JMANIPULATORS; CHAMBERS PROVIDED WITH MANIPULATION DEVICES
    • B25J9/00Programme-controlled manipulators
    • B25J9/16Programme controls
    • B25J9/1694Programme controls characterised by use of sensors other than normal servo-feedback from position, speed or acceleration sensors, perception control, multi-sensor controlled systems, sensor fusion
    • B25J9/1697Vision controlled systems
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B19/00Programme-control systems
    • G05B19/02Programme-control systems electric
    • G05B19/04Programme control other than numerical control, i.e. in sequence controllers or logic controllers
    • G05B19/042Programme control other than numerical control, i.e. in sequence controllers or logic controllers using digital processors
    • G05B19/0426Programming the control sequence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/70Determining position or orientation of objects or cameras
    • G06T7/73Determining position or orientation of objects or cameras using feature-based methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Robotics (AREA)
  • Mechanical Engineering (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • General Engineering & Computer Science (AREA)
  • Automation & Control Theory (AREA)
  • Manipulator (AREA)
  • Stored Programmes (AREA)

Abstract

다수의 서브시스템들의 로우-레벨 액션들의 조정을 지원하는 결합성 프레임워크를 위한, 컴퓨터 저장 매체들 상에서 인코딩된 컴퓨터 프로그램들을 포함하는 방법들, 시스템들, 및 장치. 방법들 중의 하나는 다수의 로봇 컴포넌트들을 가지는 로봇 실행 환경을 제어하는 것을 포함하는 동작들을 수행하도록 구성된 실시간 로봇 제어 시스템을 위한 멀티-디바이스 애플리케이션 정의를 수신하는 단계 - 애플리케이션 정의는: 다수의 로봇 컴포넌트들의 각각의 로봇 컴포넌트를 위한 하나 이상의 맞춤형 하이-레벨 소프트웨어 모듈; 맞춤형 하이-레벨 소프트웨어 모듈들의 각각을 위한 개개의 모듈 인터페이스 정의들 - 맞춤형 하이-레벨 소프트웨어 모듈의 모듈 인터페이스 정의는 하나 이상의 비동기식 또는 실시간 통신 채널을 특정함 -; 및 다수의 로봇 컴포넌트들의 각각을 위한 개개의 디바이스 인터페이스 정의들을 포함함 -; 및 다수의 로봇 컴포넌트들에 의해 각각 실행되어야 할 출력 프로그램들을 생성하기 위하여 애플리케이션 정의를 프로세싱하는 단계를 포함한다.

Description

로봇 제어 시스템을 위한 결합성 프레임워크
이 명세서는 소프트웨어 제어 시스템들을 위한 프레임워크(framework)들에 관한 것이다.
소프트웨어 제어 시스템은 물리적 디바이스들, 예컨대, 액츄에이터들 또는 로봇들의 액션들을 제어하는 소프트웨어 시스템이다. 일부 소프트웨어 제어 시스템들은 실시간 시스템들을 제어하는 실시간 소프트웨어 제어 시스템들이다. 실시간 소프트웨어 제어 시스템은 정상적인 동작을 달성하기 위하여 엄격한 타이밍 요건들 내에서 그 제어 루틴들을 실행해야 한다. 타이밍 요건들은 종종, 시스템이 고장 상태에 진입하는 것을 회피하기 위하여, 특정 액션들이 실행되어야 하거나 출력들이 특정한 시간 윈도우(time window) 내에서 생성되어야 한다는 것을 특정한다. 고장 상태에서, 시스템은 실행을 정지시킬 수 있거나, 정상적인 동작을 중단시키는 일부 다른 액션을 취할 수 있다.
이러한 실시간 소프트웨어 제어 시스템들은 높은 정밀도 및 타이밍 요건들을 가지는 물리적 머신들을 제어하기 위하여 종종 이용된다. 하나의 예로서, 산업용 로봇들의 실행 환경은 각각의 로봇이 특정 주파수, 예컨대, 1, 10, 또는 100 kHz에서 커맨드들을 반복적으로 수신하는 것을 요구하는 실시간 소프트웨어 제어 시스템에 의해 제어될 수 있다. 로봇들 중의 하나가 주기적 시간 윈도우들 중의 하나 동안에 커맨드를 수신하지 않을 경우에, 로봇은 그 동작을 정지시킴으로써, 또는 유지보수 포지션으로 복귀하기 위한 복원 절차를 자동으로 실행함으로써 고장 상태에 진입할 수 있다.
이러한 타이밍 요건들로 인해, 물리적 머신들을 위한 소프트웨어 제어 시스템들은 고도로-특화된 태스크들을 위하여 구체적으로 구성되는 폐쇄된 소프트웨어 모듈들에 의해 종종 구현된다. 예를 들어, 인쇄 회로 기판 상에서의 배치를 위한 컴포넌트들을 픽(pick)하는 로봇은 로우-레벨(low-level) 픽킹 앤드 플레이싱(picking and placing) 액션들의 각각을 제어하는 폐쇄된 소프트웨어 시스템에 의해 제어될 수 있다. 종종, 이러한 소프트웨어 제어 모듈들의 조정은 센서 관찰을 행하는 것, 계획을 생성하는 것, 및 그 다음으로, 계획에 따라 행위하는 것을 수반하는 관찰, 계획, 및 행위 패턴을 따른다.
이 명세서는 하나 이상의 실시간 로봇을 포함할 수 있는 다수의 서브시스템들의 로우-레벨 액션들의 조정을 지원하는 결합성 프레임워크(composability framework)를 설명한다. 일반적으로, 프레임워크는 특정한 실행 환경에서 애플리케이션을 구축하기 위한 일부 기본적인 기능성을 제공하는 소프트웨어 모듈들의 라이브러리(library)이다. 이 명세서에서, 실행 환경은 개개의 컴퓨팅 하드웨어를 각각 가지는 다수의 서브시스템들을 포함한다. 프레임워크는 비동기식 통신 채널들, 로우-레벨 능력들의 탐지, 및 다수의 독립적 디바이스들 사이의 조정을 위한 메커니즘들을 제공한다. 이하에서 설명된 기법들은 실행 환경에서의 다수의 서브시스템들을 조정하는 애플리케이션들을 구축하기 위한 프레임워크를 제공하고, 다수의 서브시스템들의 각각은 그 자신의 관찰, 계획, 행위 기능성을 가질 수 있다.
이 명세서에서 설명된 발명 요지의 특정한 실시예들은 다음의 장점들 중의 하나 이상을 실현하기 위하여 구현될 수 있다.
일부 현존하는 로봇 애플리케이션 프레임워크들은 디바이스들 및 소프트웨어 모듈들의 인터페이스를 기술하고, 사용자가 특정한 이용 케이스를 위하여 인터페이스들을 맞춤화하는 것을 허용하지 않는다. 이 출원에서 설명된 일부 시스템들은 사용자가 그 필요성들에 맞는 하이-레벨(high-level) 소프트웨어 모듈들을 생성하기 위하여 포괄적인 로우-레벨 소프트웨어 모듈들을 구성하는 것을 허용하고; 사용자들은 또한, 소프트웨어 모듈들의 데이터 인터페이스들을 수립(formulate)할 수 있다. 일부 이러한 시스템들은 또한, 소프트웨어 모듈들의 하이-레벨 결합성을 허용하고, 여기서, 맞춤형 하이-레벨 소프트웨어 모듈들은 자체적으로 하이어-레벨(higher-level) 소프트웨어 모듈들로 추가로 구성될 수 있다. 이러한 하이어-레벨 소프트웨어 모듈들은 그 개개의 구성성분 소프트웨어 모듈들 사이에서 통신 채널들을 확립할 수 있고, 그 개개의 구성성분 소프트웨어 모듈들의 실행을 조정할 수 있다.
이 명세서에서 설명된 일부 시스템들은 또한, 디바이스들 및 소프트웨어 모듈들을 위한 탐지 메커니즘(discovery mechanism)을 제공할 수 있고, 이에 의해, 디바이스들 및 소프트웨어 모듈들은 사용자 요청 시에 그 개개의 데이터 인터페이스들을 선언한다. 따라서, 시스템들은 사용자들이 소프트웨어 모듈들을 호출하고 그 데이터 인터페이스들을 검색(retrieve)하는 것을 용이하게 함으로써 소프트웨어 모듈들의 사용자-친화적 관리를 제공한다. 그러므로, 이 시스템들은 넓은 범위의 애플리케이션들 및 넓은 범위의 디바이스들에 적용될 수 있다.
이 명세서에서 설명된 일부 시스템들은 사용자들이 2개 이상의 디바이스들 사이에서 통신 채널들을 확립하는 것을 허용한다. 통신 채널들은 디바이스들 사이에서 데이터를 전달할 수 있어서, 디바이스들이 하나 이상의 소프트웨어 모듈을 비동기식으로 실행하는 것을 허용할 수 있다.
이 명세서의 발명 요지의 하나 이상의 실시예의 세부사항들은 이하의 동반 도면들 및 설명에서 기재된다. 발명 요지의 다른 특징들, 양태들, 및 장점들은 설명, 도면들, 및 청구항들로부터 분명해질 것이다.
도 1은 예시적인 시스템을 예시하는 도면이다.
도 2는 다수의 디바이스들을 갖는 예시적인 실행 환경을 예시한다.
도 3은 예시적인 디바이스 인터페이스 정의 및 예시적인 소프트웨어 모듈들을 예시한다.
도 4는 실행 환경에서의 하나 이상의 디바이스에 의해 실행되어야 할 프로그램을 생성하기 위한 예시적인 프로세스의 플로우차트이다.
다양한 도면들에서의 유사한 참조 번호들 및 명칭들은 유사한 엘리먼트들을 표시한다.
도 1은 예시적인 시스템(100)을 예시하는 도면이다. 시스템(100)은 이 명세서에서 설명된 기법들을 구현할 수 있는 시스템의 예이다.
시스템(100)은 플래너(planner)(120) 및 실시간 로봇 제어 시스템(150)을 포함하는 다수의 기능적 컴포넌트들을 포함한다. 이 컴포넌트들의 각각은 임의의 적절한 통신 네트워크, 예컨대, 인트라넷(intranet) 또는 인터넷(Internet), 또는 네트워크들의 조합을 통해 서로에 결합되는 하나 이상의 위치에서의 하나 이상의 컴퓨터 상에서 설치된 컴퓨터 프로그램들로서 구현될 수 있다. 시스템(100)은 또한, N개의 로봇들(170a 내지 170n)을 포함하는 실행 환경(170)을 포함한다.
실시간 로봇 제어 시스템(150)은 실행 환경(170)에서의 로봇들(170a 내지 170n)을 제어하도록 구성된다. 실시간 로봇 제어 시스템(150)은 실행 환경(170)의 동작에서 하나 이상의 견고한 시간 제약을 만족시켜야 한다. 예를 들어, 실행 환경(170)에서의 로봇들 중의 하나는 규칙적인 간격들, 예컨대, 10 밀리초(millisecond)로 특정 동작을 수행하도록 요구될 수 있고; 로봇이 주어진 시간 윈도우에서 동작을 실행하는 것을 여하튼 실패할 경우에, 로봇은 고장 상태에 진입한다.
실시간 로봇 제어 시스템(150)은 하나 이상의 소프트웨어 모듈 루프로 구성되고, 이러한 소프트웨어 모듈 루프(software module loop)들의 각각은 로봇들(170a 내지 170n)을 제어하기 위하여 미리 결정된 시퀀스(sequence)에서 반복적으로 실행되는 다수의 소프트웨어 모듈들을 포함한다. 단순화를 위하여, 도 1은 M개의 소프트웨어 모듈들(150a 내지 150m)을 포함하는 단일 소프트웨어 모듈 루프를 도시한다. 각각의 소프트웨어 모듈은 로봇들(170a 내지 170n)의 개개의 로봇의 하나 이상의 기능을 실행할 수 있다.
각각의 소프트웨어 모듈은 소프트웨어 모듈이 입력으로서 수신하고 출력으로서 제공하는 실시간 데이터를 특정하는 대응하는 데이터 인터페이스를 가질 수 있다. 실행 동안에, 소프트웨어 모듈들은 개개의 소프트웨어 모듈들이 실행하기 위하여 요구되는 P개의 실시간 메시지들(152a 내지 152p)을 교환한다. 예를 들어, 소프트웨어 모듈(150a)은 실시간 메시지(152a)를 소프트웨어 모듈(150b)에 제공할 수 있고, 소프트웨어 모듈(150b)은 실시간 메시지(152p)를 소프트웨어 모듈(150m)에 제공할 수 있다.
플래너(120)의 전체적인 목표는 실시간 로봇 제어 시스템(150)이 특정 태스크를 실행하기 위하여 실행 환경(170)에서의 로봇들을 제어하는 것을 허용하는 스케줄(135)을 생성하기 위한 것이다.
플래너(120)는 애플리케이션 정의(110)를 수신한다. 애플리케이션 정의(110)는 사용자에 의해 생성될 수 있다. 애플리케이션 정의(110)는 실행 환경(170)에서의 로봇들에 의해 완료되어야 할 특정한 태스크를 식별할 수 있다. 태스크를 완료하기 위하여, 애플리케이션 정의(110)는 소프트웨어 모듈 루프를 특정할 수 있고, 이는 소프트웨어 모듈 루프에서 소프트웨어 모듈들(150a 내지 150m)을 식별하는 것을 포함할 수 있다. 애플리케이션 정의(110)는 또한, 소프트웨어 모듈들의 데이터 인터페이스들에 따라 소프트웨어 모듈들 사이에서 교환된 실시간 메시지들(152a 내지 152p)을 특정할 수 있다.
소프트웨어 모듈들(150a 내지 150m)의 일부는, 하나 이상의 로우어-레벨(lower-level) 소프트웨어 모듈, 및 로우어-레벨 소프트웨어 모듈들을 이용하여 사용자에 의해 생성된 데이터 인터페이스로 구성된 하이-레벨 소프트웨어 모듈들일 수 있다. 즉, 맞춤형 하이-레벨 소프트웨어 모듈은 하나 이상의 로우-레벨 소프트웨어 모듈에 종속될 수 있다.
로우-레벨 소프트웨어 모듈들은 로봇들(170a 내지 170n)의 개개의 로봇의 기본적인 기능성을 실행할 수 있다. 일부 구현예들에서, 각각의 로우-레벨 소프트웨어 모듈들은 개개의 로봇을 위하여 맞춤화되는 맞춤형 소프트웨어 모듈에 종속된다. 즉, 맞춤형 소프트웨어 모듈은 특정한 로봇을 위하여 설계되는, 예컨대, 특정한 로봇의 특정한 사양들을 위하여 조율되는 특정한 로우-레벨 기능성을 실행할 수 있다. 일부 경우들에는, 로우-레벨 소프트웨어 모듈이 로봇의 제조자에 의해 제공되는 맞춤형 소프트웨어 모듈에 종속될 수 있고; 즉, 맞춤형 소프트웨어 모듈은 아웃-오브-더-박스(out-of-the-box)로 로봇의 사용자들을 위하여 제공될 수 있다.
각각의 소프트웨어 모듈은 실행 환경(170)에서의 로봇들 중의 하나 이상과 연관될 수 있고; 주어진 디바이스가 지원하는 소프트웨어 모듈들은 디바이스 인터페이스 정의를 이용하여 식별될 수 있다. 이 프로세스는 도 2 및 도 3을 참조하여 이하에서 더 상세하게 논의된다.
플래너(120)는 실시간 로봇 제어 시스템(150)이 특정한 태스크를 완료하기 위하여 소프트웨어 모듈 루프를 실행하기 위한 스케줄(135)을 생성하기 위하여 애플리케이션 정의(110)를 이용한다.
플래너(120)는 스케줄(135)을 실시간 로봇 제어 시스템(150)에 부여하고, 실시간 로봇 제어 시스템(150)은 스케줄(135)에 따라 소프트웨어 모듈 루프를 실행한다. 즉, 실시간 로봇 제어 시스템(150)은 소프트웨어 모듈들(150a 내지 150m)을 실행하여, 실시간 로봇 제어 시스템(150)으로 하여금, 로봇들(170a 내지 170n)의 이동들을 구동하기 위하여 커맨드들(155)을 실행 환경(170)에 발행하게 한다. 소프트웨어 모듈들(150a 내지 150m)은 실행 환경(170)을 제어하고 있지만, 소프트웨어 모듈들(150a 내지 150m)은 실시간 메시지들(152a 내지 152p)을 교환하고 있다.
도 2는 예시적인 실행 환경(200)을 예시한다. 실행 환경은 아암(arm)(215)을 갖는 로봇(210), 컨베이어 벨트(220), 및 카메라(230)를 포함하는 몇몇 로봇 컴포넌트들을 포함한다.
실행 환경(200)에서의 디바이스들의 각각은 개개의 디바이스가 어떤 소프트웨어 모듈들을 실행할 수 있는지를 선언하는 디바이스 인터페이스 정의를 가진다. 예를 들어, 로봇(210)은 하이-레벨 소프트웨어 모듈들(1A 및 1B) 및 로우-레벨 소프트웨어 모듈(1C)를 포함하는, 로봇이 실행할 수 있는 소프트웨어 모듈들의 리스트를 특정하는 로봇 인터페이스(210a)를 가진다. 각각의 하이-레벨 소프트웨어 모듈은 하나 이상의 로우-레벨 소프트웨어 모듈 및/또는 하나 이상의 다른 하이-레벨 소프트웨어 모듈로 구성될 수 있다. 구성가능한 소프트웨어 모듈들은 도 3을 참조하여 이하에서 더 상세하게 설명된다.
유사하게, 컨베이어 벨트(220)는 컨베이어 벨트가 실행할 수 있는 소프트웨어 모듈들의 리스트를 특정하는 컨베이어 벨트 인터페이스(220a)를 가지고, 카메라(230)는 카메라가 실행할 수 있는 소프트웨어 모듈들의 리스트를 특정하는 카메라 인터페이스(230a)를 가진다.
특정한 태스크를 완수하기 위하여 실행 환경(200)에서의 디바이스들을 위한 애플리케이션 정의를 생성하는 사용자는 환경(200)에서의 디바이스들에 의해 실행될 수 있는 소프트웨어 모듈들을 결정하기 위하여 디바이스 인터페이스 정의들(210a 내지 210c)을 이용할 수 있고, 태스크를 완수하기 위하여 이용가능한 소프트웨어 모듈들을 구성할 수 있다. 특정한 예로서, 애플리케이션 정의는 컨베이어 벨트(220)가 로봇(210)의 전방에서 객체를 이동시키는 것을 허용하는, 컨베이어 벨트 인터페이스(220a)에서의 하나 이상의 소프트웨어 모듈을 식별할 수 있다. 애플리케이션 정의는 또한, 로봇(210)이 객체의 픽-앤드-플레이스(pick-and-place)를 실행하는 것을 허용하는, 로봇 인터페이스(210a)에서의 하나 이상의 소프트웨어 모듈을 식별할 수 있고, 여기서, 로봇(210)의 아암(215)은 객체를 컨베이어 벨트(220) 상의 하나의 포지션으로부터 컨베이어 벨트(220) 상의 또 다른 포지션으로 이동시킨다. 최종적으로, 애플리케이션 정의는, 카메라가 객체가 로봇(210)에 의해 이동된 후에 객체의 이미지를 캡처하고, 객체가 올바른 포지션에 있다는 것을 확인하기 위하여 이미지를 이용하는 것을 허용하는, 카메라 인터페이스(230a)에서의 하나 이상의 소프트웨어 모듈을 식별할 수 있다. 예를 들어, 카메라 인터페이스(230a)에서의 소프트웨어 모듈은, 이미지를 프로세싱하고, 이미지에서의 식별된 객체의 예측된 자세(pose)를 생성하는 머신 학습 지각 알고리즘을 실행할 수 있다. 애플리케이션 정의는 이 소프트웨어 모듈들이 소프트웨어 모듈 루프에서 반복적으로 실행되어야 한다는 것을 특정할 수 있고; 즉, 컨베이어 벨트는 그 포지션이 승인된 후에 객체를 라인 아래로 추가로 이동시킬 수 있어서, 로봇(210)의 전방에서의 동일한 위치에서 객체를 새로운 객체로 대체할 수 있다.
각각의 소프트웨어 모듈은 또한, 그것이 다른 소프트웨어 모듈들과 어떻게 통신할 수 있는지를 식별하는 데이터 인터페이스를 가질 수 있다. 예를 들어, 컨베이어 벨트 인터페이스(220a)에서의 소프트웨어 모듈은 새로운 객체가 로봇(210)의 전방에서 이동되었다는 것을 통신하는 실시간 메시지를 로봇 인터페이스(210a)에서의 소프트웨어 모듈로 전송할 수 있다. 데이터 인터페이스들은 도 3을 참조하여 이하에서 더 상세하게 논의된다.
실행 환경(200)에서의 디바이스들에 의해 실행되어야 할 소프트웨어 모듈들을 식별하는 애플리케이션 정의는 또한, 소프트웨어 모듈들 중의 하나 이상이 비동기식으로 실행되어야 한다는 것을 특정할 수 있다. 즉, 애플리케이션 정의로부터 생성된 계획을 실행하는 실시간 로봇 제어 시스템, 예컨대, 도 1에서 도시된 실시간 로봇 제어 시스템(150)은 소프트웨어 모듈을 기동시킬 수 있고, 소프트웨어 모듈이 완료한 콜백(callback)을 수신할 때까지, 다른 동작들을 수행할 수 있다. 예를 들어, 실시간 로봇 제어 시스템은 제1 소프트웨어 모듈 및 제2 소프트웨어 모듈을 병렬로 기동시킬 수 있다. 일부 현존하는 시스템들에서, 소프트웨어 모듈이 기동될 때, 시스템은 임의의 다른 동작들을 계속하기 전에, 소프트웨어 모듈이 완료되는 것을 대기해야 한다. 소프트웨어 모듈들을 비동기식으로 실행하기 위한 능력은 중요할 수 있는데, 그 이유는 디바이스 작동이 CPU의 관점으로부터 실행하기 위하여 큰 시간량이 걸리고, 따라서, 다수의 동작들을 병렬로 실행함으로써 소프트웨어 모듈 루프의 주어진 반복에서 많은 시간이 절약될 수 있기 때문이다. 예를 들어, 실행 환경(200)에서의 로봇(210)에 의해 실행된 관절 이동(joint move)은 3초가 걸릴 수 있고, 이것은 실시간의 맥락에서 큰 시간량이다.
도 3은 예시적인 디바이스 인터페이스 정의(310) 및 예시적인 소프트웨어 모듈들(320 및 350)을 예시한다.
디바이스 인터페이스 정의(310)는 특정한 디바이스 또는 디바이스들의 특정한 그룹이 실행할 수 있는 소프트웨어 모듈들을 선언한다. 예를 들어, 특정한 디바이스는 하이-레벨 소프트웨어 모듈들(320 및 330) 및 로우-레벨 소프트웨어 모듈(340)을 실행할 수 있다. 하이-레벨 소프트웨어 모듈들의 각각은 하나 이상의 로우-레벨 소프트웨어 모듈 및/또는 하나 이상의 다른 하이-레벨 소프트웨어 모듈에 종속된다. 로우-레벨 소프트웨어 모듈들의 각각은 개개의 디바이스의 기본적인 기능성을 실행할 수 있다. 하이-레벨 소프트웨어 모듈(320)은 하이-레벨 소프트웨어 모듈(320a) 및 로우-레벨 소프트웨어 모듈들(320b 및 320c)로 구성된다. 즉, 하이-레벨 소프트웨어 모듈(320)에 의해 실행된 동작들은 하이-레벨 소프트웨어 모듈(320a) 및 로우-레벨 소프트웨어 모듈들(320b 및 320c)에 의해 순차적으로 또는 병렬로 중의 어느 하나로 실행된 동작들을 포함한다.
예를 들어, 디바이스 인터페이스 정의(310)는 로봇 아암을 위한 것일 수 있고, 하이-레벨 소프트웨어 모듈(320)은 픽-앤드-플레이스 액션을 실행할 수 있고, 여기서, 아암은 실행 환경에서의 객체를 픽업(pick up)하고, 객체를 실행 환경에서의 상이한 위치로 이동시키고, 객체를 아래로 배치한다. 하이-레벨 소프트웨어 모듈(320a)은 아암의 이동을 실행할 수 있고, 로우-레벨 소프트웨어 모듈(320b)은 아암에 부착된 흡입 그립퍼(suction gripper)의 흡입 작용(suction action)을 실행할 수 있고, 로우-레벨 소프트웨어 모듈(320c)은 아암에 부착된 흡입 그립퍼의 흡입해제 작용(de-suction action)을 실행할 수 있다. 따라서, 하이-레벨 소프트웨어 모듈(320)은 아암을 이동시켜서 객체 상으로 배치하기 위하여 하이-레벨 소프트웨어 모듈(320a)을, 흡입 그립퍼를 이용하여 객체를 픽업하기 위하여 로우-레벨 소프트웨어 모듈(320b)을, 객체를 상이한 위치로 이동시키기 위하여 다시 하이-레벨 소프트웨어 모듈(320a)을, 그리고 흡입 그립퍼를 이용하여 객체를 해제하기 위하여 로우-레벨 소프트웨어 모듈(320c)을 호출함으로써 픽-앤드-플레이스를 실행할 수 있다.
유사하게, 아암을 이동시키기 위한 하이-레벨 소프트웨어 모듈(320a)은 M개의 로우-레벨 소프트웨어 모듈들(321-m)로 구성될 수 있다. 예를 들어, 로우-레벨 소프트웨어 모듈들(321a 내지 321m)의 각각은 특정한 자유도로 아암의 이동을 실행할 수 있다. 특정한 예로서, 로봇 아암은 6개의 자유도들을 가질 수 있고, 따라서, 아암을 이동시키기 위한 하이-레벨 소프트웨어 모듈은 6개의 로우-레벨 소프트웨어 모듈들로 구성될 수 있고, 6개의 로우-레벨 소프트웨어 모듈들의 각각은 특정한 자유도를 제어한다.
하이-레벨 소프트웨어 모듈(320)은 모듈 인터페이스(322)를 포함한다. 모듈 인터페이스는 하나 이상의 통신 채널을 특정하고, 이러한 통신 채널들에 의해, 하이-레벨 소프트웨어 모듈(320)은 데이터를 입력으로서 수신할 수 있거나, 데이터를 출력으로서 방출할 수 있다. 통신 채널은 내부적일 수 있고, 즉, 동일한 로봇에 의해 실행된 2개의 소프트웨어 모듈들 사이, 예컨대, 하이-레벨 소프트웨어 모듈들(320 및 330) 사이일 수 있다. 통신 채널은 또한 외부적일 수 있고, 즉, 개개의 상이한 로봇들에 의해 실행된 2개의 소프트웨어 모듈들 사이일 수 있다.
특정한 예로서, 모듈 인터페이스(322)는 하이-레벨 소프트웨어 모듈(320)과, 상이한 로봇 컴포넌트에 의해 실행되는 또 다른 하이-레벨 소프트웨어 모듈(350)과의 사이의 통신 채널(360)을 특정할 수 있다. 유사하게, 하이-레벨 소프트웨어 모듈(350)은 통신 채널(360)을 특정하는 모듈 인터페이스(352)를 가진다.
일부 경우들에는, 통신 채널(360)이 견고한 실시간 통신 채널일 수 있다. 즉, 통신 채널(360)은 특정한 유형의 데이터 패킷들을 하이-레벨 소프트웨어 모듈(320)로부터 하이-레벨 소프트웨어 모듈(350)로 연속적으로, 예컨대, 매 10 ms 또는 100 ms에 전송하도록 구성된다. 일부 경우들에는, 하이-레벨 소프트웨어 모듈(320)이 데이터 패킷을 전송하는 것에 실패할 경우에, 하이-레벨 소프트웨어 모듈(350)은 에러 상태에 진입할 수 있다.
일부 다른 경우들에는, 통신 채널(360)이 비동기식일 수 있다. 즉, 통신 채널(360)은 데이터 패킷들이 하이-레벨 소프트웨어 모듈(320)에 의해 이용가능하게 될 때마다, 특정한 유형의 데이터 패킷들을 하이-레벨 소프트웨어 모듈(320)로부터 하이-레벨 소프트웨어 모듈(350)로 전송하도록 구성된다. 다시 말해서, 하이-레벨 소프트웨어 모듈(320)은 불규칙적인 빈도로 데이터 패킷들을 생성하고, 그러므로, 하이-레벨 소프트웨어 모듈(350)은 변동되는 간격들로 데이터 패킷들을 수신한다. 하이-레벨 소프트웨어 모듈(350)은 그 다음으로, 하이-레벨 소프트웨어 모듈(320)이 데이터 패킷을 전송할 때마다 특정한 동작을 실행할 수 있다.
디바이스 인터페이스 정의(310)는 또한, 통신 채널들의 리스트를 포함할 수 있고, 이러한 통신 채널들에 의해, 디바이스는 입력 데이터를 수신할 수 있거나 출력 데이터를 송신할 수 있다. 즉, 디바이스 인터페이스 정의(310)는 디바이스 인터페이스 정의(310)에서 각 개개의 소프트웨어 모듈의 외부 통신 채널들을 선언할 수 있고, 여기서, 외부 통신 채널은 소프트웨어 모듈이 상이한 디바이스의 또 다른 소프트웨어 모듈과 공유하는 통신 채널이다.
특정한 예로서, 디바이스 인터페이스 정의(310)는 실행 환경에서의 카메라를 위한 것일 수 있고, 하이-레벨 소프트웨어 모듈(320)은, 카메라에 의해 캡처된 실행 환경에서의 객체의 이미지를 프로세싱하고 객체의 추정된 자세를 생성하는 머신 학습 지각 알고리즘을 실행할 수 있다. 여기서, 객체의 자세는 실행 환경에서의 객체의 포지션(position) 및/또는 배향(orientation)을 특성화하는 데이터이다. 하이-레벨 소프트웨어 모듈(350)은 실행 환경에서의 로봇 아암에 의해 객체의 픽-앤드-플레이스를 실행할 수 있다. 그러므로, 소프트웨어 모듈(350)은 객체를 픽업하기 전에 객체의 자세를 알 필요가 있을 수 있다. 그러므로, 통신 채널(360)은 추정된 자세들이 하이-레벨 소프트웨어 모듈(320)에 의해 생성될 때, 추정된 자세들을 하이-레벨 소프트웨어 모듈(320)로부터 하이-레벨 소프트웨어 모듈(350)로 비동기식으로 전송할 수 있다. 하이-레벨 소프트웨어 모듈(320)은 수신된 추정된 자세들을 보간(interpolate)할 수 있고, 예컨대, 보간된 자세들을 실시간으로 또 다른 통신 채널 상에서 또 다른 하이-레벨 또는 로우-레벨 소프트웨어 모듈로 전송할 수 있다.
일부 경우들에는, 소프트웨어 모듈의 모듈 인터페이스에 의해 특정된 통신 채널은 임의적일 수 있고; 즉, 소프트웨어 모듈은 통신 채널 없이 실행될 수 있다. 일부 다른 경우들에는, 특정된 통신 채널이 요구될 수 있다.
하이-레벨 소프트웨어 모듈(320)은 사용자에 의해 생성될 수 있다. 즉, 시스템은 하나 이상의 디바이스에 의해 실행될 수 있는 다수의 로우-레벨 소프트웨어 모듈들 뿐만 아니라, 하이-레벨 소프트웨어 모듈들을 생성하기 위하여 로우-레벨 소프트웨어 모듈들을 구성하기 위한 툴을 제공할 수 있다. 예를 들어, 시스템은 하이-레벨 소프트웨어 모듈의 각각의 모듈 인터페이스가 그로부터 승계할 수 있는 기본 클래스(base class)를 제공할 수 있으므로, 사용자는 특정한 입력 채널들 및 출력 채널들을 특정하는 자의적인 인터페이스를 용이하게 설계할 수 있다. 따라서, 이러한 하이-레벨 소프트웨어 모듈이 주어진 디바이스 또는 디바이스들의 그룹을 위하여 아웃-오브-더-박스로 하드웨어 제조자에 의해 제공되지 않을 때, 사용자는 사용자의 특정한 이용 케이스에 특정적인 하이-레벨 소프트웨어 모듈을 생성할 수 있다.
일부 구현예들에서, 디바이스 인터페이스 정의(310)는 디바이스들의 분산된 시스템을 위한 것일 수 있다. 즉, 디바이스 인터페이스 정의(310)는 분산된 시스템에 걸친 다수의 디바이스들, 예컨대, 통신 채널들에 의해 접속되는 다수의 컴퓨터들 또는 로봇들에 의해 실행될 수 있는 소프트웨어 모듈들을 선언한다. 이 경우들에는, 통신 채널들은 소프트웨어 모듈들이 다수의 디바이스들에 걸쳐 비동기식 및 실시간 동작들을 실행하는 것을 허용할 수 있다.
도 4는 실행 환경에서의 하나 이상의 디바이스에 의해 실행되어야 할 프로그램을 생성하기 위한 예시적인 프로세스(400)의 플로우차트이다. 프로세스(400)는 하나 이상의 컴퓨터 상에서 설치되고 이 명세서에 따라 프로그래밍된 하나 이상의 컴퓨터 프로그램에 의해 구현될 수 있다. 예를 들어, 프로세스(400)는 도 1에서 도시된 플래너(120)에 의해 수행될 수 있다. 편리성을 위하여, 프로세스(400)는 하나 이상의 컴퓨터의 시스템에 의해 수행되는 것으로서 설명될 것이다.
시스템은 실행 환경에서의 각각의 디바이스를 위한 하나 이상의 맞춤형 하이-레벨 소프트웨어 모듈을 수신한다(단계(410)). 맞춤형 하이-레벨 소프트웨어 모듈들의 일부 또는 전부는 실시간 로봇을 위한 로우-레벨 소프트웨어 모듈들을 포함할 수 있다.
시스템은 맞춤형 하이-레벨 소프트웨어 모듈들의 각각을 위한 모듈 인터페이스 정의들을 수신한다(단계(415)). 소프트웨어 모듈의 모듈 인터페이스 정의는 소프트웨어 모듈을 위한 모듈 인터페이스를 선언한다. 특히, 맞춤형 하이-레벨 소프트웨어 모듈의 모듈 인터페이스 정의는 하나 이상의 비동기식 또는 실시간 통신 채널을 특정할 수 있고, 이러한 통신 채널들을 통해, 맞춤형 하이-레벨 소프트웨어 모듈은 상이한 맞춤형 하이-레벨 소프트웨어 모듈로부터 입력 데이터를 수신할 수 있거나, 출력 데이터를 상이한 맞춤형 하이-레벨 소프트웨어 모듈로 송신할 수 있다.
시스템은 실행 환경에서의 각각의 디바이스를 위한 디바이스 인터페이스 정의들을 수신한다(단계(420)). 특정한 디바이스의 디바이스 인터페이스 정의는 특정한 디바이스가 실행할 수 있는 소프트웨어 모듈들을 선언할 수 있다. 특정한 디바이스의 디바이스 인터페이스 정의는 또한, 특정한 디바이스가 실행할 수 있는 개개의 소프트웨어 모듈들을 위한 하나 이상의 모듈 인터페이스를 포함할 수 있다. 즉, 소프트웨어 모듈이 상이한 디바이스에 의해 실행된 상이한 소프트웨어 모듈로 특정한 통신 채널을 특정하는 모듈 인터페이스를 가질 경우에, 특정한 디바이스를 위한 디바이스 인터페이스 정의는 또한, 특정한 통신 채널을 특정할 수 있다.
시스템은 실행 환경에서의 제1 디바이스의 제1 인터페이스와, 실행 환경에서의 제2 디바이스의 제2 인터페이스와의 사이의 통신 채널의 정의를 수신한다(단계(430)). 일부 경우들에는, 제2 디바이스의 하나 이상의 소프트웨어 모듈의 실행은 통신 채널을 통해 수신된 정보를 요구하고, 그러므로, 제1 디바이스로부터 정보를 수신할 때까지 대기한다. 즉, 통신 채널은 비동기식일 수 있다. 특정한 예로서, 제1 디바이스는 실시간 로봇일 수 있고, 채널 상에서 통신된 정보는 실시간 로봇의 관절의 관절 포지션일 수 있다. 또 다른 특정한 예로서, 제1 디바이스는 카메라일 수 있고, 채널 상에서 통신된 정보는 실행 환경에서의 객체의 자세일 수 있다.
수신된 하이-레벨 소프트웨어 모듈들, 디바이스 인터페이스 정의들, 모듈 인터페이스 정의들, 및 비동기식 채널의 정의는 "애플리케이션 정의"로서 집합적으로 칭해질 수 있다.
시스템은 디바이스들에 의해 실행되어야 할 출력 프로그램들을 생성하기 위하여 수신된 애플리케이션 정의를 프로세싱한다(단계(440)). 일부 구현예들에서, 출력 프로그램들 중의 하나 이상은 비동기식으로 실행될 수 있다.
이 명세서에서 설명된 로봇 기능성들은 하드웨어-불가지론적(hardware-agnostic) 소프트웨어 스택, 또는 간결함을 위하여, 적어도 부분적으로 하드웨어-불가지론적인 단지 소프트웨어 스택에 의해 구현될 수 있다. 다시 말해서, 소프트웨어 스택은 로봇의 특정한 모델 또는 특정한 로봇 컴포넌트에 구체적으로 관련시키기 위한 커맨드들을 요구하지 않으면서, 위에서 설명된 계획 프로세스들에 의해 생성된 커맨드들을 입력으로서 받아들일 수 있다. 예를 들어, 소프트웨어 스택은 도 1의 실시간 로봇 제어 시스템(150)에 의해 적어도 부분적으로 구현될 수 있다.
소프트웨어 스택은 하나의 방향에서의 증가하는 하드웨어 특이성(specificity) 및 다른 방향에서의 증가하는 소프트웨어 추상화(abstraction)의 다수의 레벨들을 포함할 수 있다. 소프트웨어 스택의 최저 레벨에는, 로우-레벨 액션들을 수행하는 디바이스들, 및 로우-레벨 스테이터스(status)들을 보고하는 센서들을 포함하는 로봇 컴포넌트들이 있다. 예를 들어, 로봇들은 모터들, 인코더들, 카메라들, 구동기들, 그립퍼들, 애플리케이션-특정 센서들, 선형 또는 회전식 포지션 센서들, 및 다른 주변 디바이스들을 포함하는 다양한 로우-레벨 컴포넌트들을 포함할 수 있다. 하나의 예로서, 모터는 적용되어야 하는 토크의 양을 표시하는 커맨드를 수신할 수 있다. 커맨드를 수신하는 것에 응답하여, 모터는 예컨대, 인코더를 이용하여 로봇의 관절의 현재의 포지션을 소프트웨어 스택의 하이어 레벨로 보고할 수 있다.
소프트웨어 스택에서의 각각의 다음 최고 레벨은 다수의 상이한 기초적인 구현예들을 지원하는 인터페이스를 구현할 수 있다. 일반적으로, 레벨들 사이의 각각의 인터페이스는 스테이터스 메시지들을 로우어 레벨로부터 상위 레벨(upper level)로 제공하고, 커맨드들을 상위 레벨로부터 로우어 레벨로 제공한다.
전형적으로, 커맨드들 및 스테이터스 메시지들은 각각의 제어 사이클 동안에 사이클 방식으로, 예컨대, 제어 사이클 당 하나의 스테이터스 메시지 및 하나의 커맨드씩 생성된다. 소프트웨어 스택의 로우어 레벨들은 일반적으로, 소프트웨어 스택의 하이어 레벨들보다 더 엄중한 실시간 요건들을 가진다. 예를 들어, 소프트웨어 스택의 최저 레벨들에서, 제어 사이클은 실제 실시간 요건들을 가질 수 있다. 이 명세서에서, 실시간은 소프트웨어 스택의 하나의 레벨에서 수신된 커맨드가 실행되어야 한다는 것과, 임의적으로, 스테이터스 메시지가 특정한 제어 사이클 시간 내에서 소프트웨어 스택의 상위 레벨로 다시 제공되어야 한다는 것을 의미한다. 이 실시간 요건이 충족되지 않을 경우에, 로봇은 예컨대, 모든 동작을 동결시킴으로써 고장 상태에 진입하도록 구성될 수 있다.
다음-최고 레벨에서, 소프트웨어 스택은 모터 피드백 제어기들로서 지칭될 특정한 컴포넌트들의 소프트웨어 추상화들을 포함할 수 있다. 모터 피드백 제어기는 단지 문언적 모터가 아니라, 임의의 적절한 로우어-레벨 컴포넌트들의 소프트웨어 추상화일 수 있다. 따라서, 모터 피드백 제어기는 로우어-레벨 하드웨어 컴포넌트에 대한 인터페이스를 통해 상태를 수신하고, 스택에서의 하이어 레벨들로부터 수신된 상위-레벨 커맨드들에 기초하여 커맨드들을 다시 아래로 인터페이스를 통해 로우어-레벨 하드웨어 컴포넌트로 전송한다. 모터 피드백 제어기는 상위-레벨 커맨드들이 어떻게 해독되어야 하고 로우어-레벨 커맨드들로 변환되어야 하는지를 결정하는 임의의 적절한 제어 규칙들을 가질 수 있다. 예를 들어, 모터 피드백 제어기는 상위-레벨 커맨드드를 로우어-레벨 커맨드들로 변환하기 위하여 간단한 논리적 규칙들로부터 더 진보된 머신 학습 기법들까지의 어떤 것을 이용할 수 있다. 유사하게, 모터 피드백 제어기는 고장 상태에 언제 도달하였는지를 결정하기 위하여 임의의 적절한 고장 규칙들을 이용할 수 있다. 예를 들어, 모터 피드백 제어기가 상위-레벨 커맨드를 수신하지만, 제어 사이클의 특정한 부분 내에서 로우어-레벨 스테이터스를 수신하지 않을 경우에, 모터 피드백 제어기는 로봇으로 하여금, 모든 동작들을 중단시키는 고장 상태에 진입하게 할 수 있다.
다음-최고 레벨에서, 소프트웨어 스택은 액츄에이터 피드백 제어기들을 포함할 수 있다. 액츄에이터 피드백 제어기는 그 개개의 모터 피드백 제어기들을 통해 다수의 로봇 컴포넌트들을 제어하기 위한 제어 로직을 포함할 수 있다. 예를 들어, 일부 로봇 컴포넌트들, 예컨대, 관절 아암은 다수의 모터들에 의해 실제로 제어될 수 있다. 따라서, 액츄에이터 피드백 제어기는 커맨드들을 다수의 모터들의 모터 피드백 제어기들로 전송하기 위하여 그 제어 로직을 이용함으로써, 관절 아암의 소프트웨어 추상화를 제공할 수 있다.
다음-최고 레벨에서, 소프트웨어 스택은 관절 피드백 제어기들을 포함할 수 있다. 관절 피드백 제어기는 로봇에서의 논리적 자유도로 맵핑하는 관절을 표현할 수 있다. 따라서, 예를 들어, 로봇의 손목은 액츄에이터들의 복잡한 네트워크에 의해 제어될 수 있지만, 관절 피드백 제어기는 그 복잡도를 추상화할 수 있고, 그 자유도를 단일 관절로서 노출시킨다. 따라서, 각각의 관절 피드백 제어기는 액츄에이터 피드백 제어기들의 자의적으로 복잡한 네트워크를 제어할 수 있다. 예로서, 6 자유도 로봇은 실제 피드백 제어기들의 별도의 네트워크를 각각 제어하는 6개의 상이한 관절 피드백 제어기들에 의해 제어될 수 있다.
소프트웨어 스택의 각각의 레벨은 또한, 레벨-특정적 제약들의 집행을 수행할 수 있다. 예를 들어, 액츄에이터 피드백 제어기에 의해 수신된 특정한 토크 값이 수락가능한 범위의 외부에 있을 경우에, 액츄에이터 피드백 제어기는 그것을 범위 내에 있도록 수정할 수 있거나 고장 상태에 진입할 수 있다.
관절 피드백 제어기들로의 입력을 구동하기 위하여, 소프트웨어 스택은 로우어 레벨들에서의 각각의 컴포넌트를 위한 커맨드 파라미터들, 예컨대, 시스템에서의 각각의 모터를 위한 포지티브, 토크(torque), 및 속도(velocity)를 포함하는 커맨드 벡터를 이용할 수 있다. 관절 피드백 제어기들로부터의 스테이터스를 노출시키기 위하여, 소프트웨어 스택은 로우어 레벨들에서의 각각의 컴포넌트를 위한 스테이터스 정보, 예컨대, 시스템에서의 각각의 모터를 위한 포지션, 속도, 및 토크를 포함하는 스테이터스 벡터를 이용할 수 있다. 일부 구현예들에서, 커맨드 벡터들은 또한, 로우어 레벨들에서의 제어기들에 의해 집행되어야 할 제약들에 관한 일부 한계 정보를 포함한다.
다음-최고 레벨에서, 소프트웨어 스택은 관절 수집 제어기들을 포함할 수 있다. 관절 수집 제어기는 파트 추상화(part abstraction)들의 세트로서 노출되는 커맨드 및 스테이터스 벡터들의 발행을 취급할 수 있다. 각각의 파트는 예컨대, 역 운동학적 계산(inverse kinematic calculation)들을 수행하기 위한 운동학적 모델, 한계 정보, 뿐만 아니라 관절 스테이터스 벡터 및 관절 커맨드 벡터를 포함할 수 있다. 예를 들어, 단일 관절 수집 제어기는 정책들의 상이한 세트들을 로우어 레벨들에서의 상이한 서브시스템들에 적용하기 위하여 이용될 수 있다. 관절 수집 제어기는 모터들이 어떻게 물리적으로 표현되는지와 제어 정책들이 어떻게 그 파트들과 연관되는지 사이의 관계를 효과적으로 결합해제할 수 있다. 따라서, 예를 들어, 로봇 아암이 이동가능한 기저부(base)를 가질 경우에, 관절 수집 제어기는 아암이 어떻게 이동하는지에 대한 한계 정책들의 세트를 집행하고 이동가능한 기저부가 어떻게 이동할 수 있는지에 대한 한계 정책들의 상이한 세트를 집행하기 위하여 이용될 수 있다.
다음-최고 레벨에서, 소프트웨어 스택은 관절 선택 제어기들을 포함할 수 있다. 관절 선택 제어기는 상이한 소스들로부터 발행되는 커맨드들 사이를 동적으로 선택하는 것을 담당할 수 있다. 다시 말해서, 관절 선택 제어기는 제어 사이클 동안에 다수의 커맨드들을 수신할 수 있고, 제어 사이클 동안에 실행되어야 할 다수의 커맨드들 중의 하나를 선택할 수 있다. 실시간 제어 사이클 동안에 다수의 커맨드들로부터 동적으로 선택하기 위한 능력은 기존의 로봇 제어 시스템들에 비해 제어에 있어서의 대폭 증가된 신축성을 허용한다.
다음-최고 레벨에서, 소프트웨어 스택은 관절 포지션 제어기들을 포함할 수 있다. 관절 포지션 제어기는 목표 파라미터들을 수신할 수 있고, 목표 파라미터들을 달성하기 위하여 요구된 커맨드들을 동적으로 컴퓨팅할 수 있다. 예를 들어, 관절 포지션 제어기는 포지션 목표를 수신할 수 있고, 목표를 달성하기 위한 설정 포인트를 컴퓨팅할 수 있다.
다음-최고 레벨에서, 소프트웨어 스택은 데카르트 포지션 제어기(Cartesian position controller)들 및 데카르트 선택 제어기(Cartesian selection controller)들을 포함할 수 있다. 데카르트 포지션 제어기는 데카르트 공간에서의 목표들을 입력으로서 수신할 수 있고, 관절 포지션 공간에서의 출력을 컴퓨팅하기 위하여 역 운동학 솔버(inverse kinematics solver)들을 이용할 수 있다. 데카르트 선택 제어기는 그 다음으로, 관절 포지션 공간에서의 연산된 결과들을 스택의 다음 최저 레벨에서의 관절 포지션 제어기로 전달하기 전에, 데카르트 포지션 제어기들에 의해 연산된 결과들에 대한 한계 정책들을 집행할 수 있다. 예를 들어, 데카르트 포지션 제어기는 데카르트 좌표들 x, y, 및 z에서 3개의 별도의 목표 상태들을 부여받을 수 있다. 일부 정도들에 대하여, 목표 상태는 포지션일 수 있는 반면, 다른 정도들에 대하여, 목표 상태는 희망된 속도일 수 있다.
따라서, 소프트웨어 스택에 의해 제공된 이 기능성들은 위에서 설명된 하이어-레벨 계획 기법들과 당연히 맞물리는 방식으로 목표 상태들로 용이하게 표현되어야 할 제어 지시들에 대한 폭넓은 신축성을 제공한다. 다시 말해서, 계획 프로세스가 취해져야 할 구체적인 액션들을 생성하기 위하여 프로세스 정의 그래프를 이용할 때, 액션들은 개별적인 로봇 컴포넌트들을 위한 로우-레벨 커맨드들에서 특정될 필요가 없다. 오히려, 이들은 최종적으로 로우-레벨 커맨드들로 될 때까지 다양한 레벨들을 통해 변환되는, 소프트웨어 스택에 의해 수락되는 하이-레벨 목표들로서 표현될 수 있다. 또한, 계획 프로세스를 통해 생성된 액션들은 인간 조작자들을 위하여 액션들이 이해가능하게 하는 방식으로 데카르트 공간에서 특정될 수 있고, 이것은 스케줄들을 디버깅(debugging)하고 분석하는 것을 더 용이하게, 더 신속하게, 그리고 더 직관적으로 되게 한다. 추가적으로, 계획 프로세스를 통해 생성된 액션들은 임의의 특정한 로봇 모델 또는 로우-레벨 커맨드 포맷에 엄중하게 결합될 필요가 없다. 그 대신에, 계획 프로세스 동안에 생성된 동일한 액션들은, 이들이 동일한 자유도들을 지원하고 적절한 제어 레벨들이 소프트웨어 스택에서 구현되었기만 하면, 상이한 로봇 모델들에 의해 실제로 실행될 수 있다.
이 명세서에서 설명된 발명 요지 및 기능적 동작들의 실시예들은 디지털 전자 회로부로, 유형적으로-구체화된 컴퓨터 소프트웨어 또는 펌웨어로, 이 명세서에서 개시된 구조들 및 그 구조적 등가물들을 포함하는 컴퓨터 하드웨어로, 또는 이들 중의 하나 이상의 조합으로 구현될 수 있다. 이 명세서에서 설명된 발명 요지의 실시예들은 하나 이상의 컴퓨터 프로그램, 즉, 데이터 프로세싱 장치에 의한 실행을 위하여, 또는 데이터 프로세싱 장치의 동작을 제어하기 위하여, 유형의 비-일시적 저장 매체 상에서 인코딩된 컴퓨터 프로그램 명령어들의 하나 이상의 모듈로서 구현될 수 있다. 컴퓨터 저장 매체는 머신-판독가능 저장 디바이스, 머신-판독가능 저장 기판, 랜덤 또는 직렬 액세스 메모리 디바이스, 또는 이들 중의 하나 이상의 조합일 수 있다. 대안적으로 또는 추가적으로, 프로그램 명령어들은 인공적으로-생성된 전파된 신호, 예컨대, 데이터 프로세싱 장치에 의한 실행을 위하여 적당한 수신기 장치로의 송신을 위한 정보를 인코딩하기 위하여 생성되는 머신-생성된 전기적, 광학적, 또는 전자기적 신호 상에서 인코딩될 수 있다.
용어 "데이터 프로세싱 장치"는 데이터 프로세싱 하드웨어를 지칭하고, 프로그래밍가능 프로세서, 컴퓨터, 또는 다수의 프로세서들 또는 컴퓨터들을 예로서 포함하는, 데이터를 프로세싱하기 위한 모든 종류들의 장치, 디바이스들, 및 머신들을 망라한다. 장치는 또한, 특수 목적 로직 회로부, 예컨대, FPGA(field programmable gate array)(필드 프로그래밍가능 게이트 어레이) 또는 ASIC(application specific integrated circuit)(애플리케이션-특정 집적 회로)일 수 있거나 이들을 더 포함할 수 있다. 장치는 임의적으로, 하드웨어에 추가적으로, 컴퓨터 프로그램들을 위한 실행 환경을 생성하는 코드, 예컨대, 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 오퍼레이팅 시스템, 또는 이들 중의 하나 이상의 조합을 구성하는 코드를 포함할 수 있다.
프로그램, 소프트웨어, 소프트웨어 애플리케이션, 앱(app), 모듈, 소프트웨어 모듈, 스크립트(script), 또는 코드로서 또한 지칭될 수 있거나 설명될 수 있는 컴퓨터 프로그램은, 컴파일링되거나(compiled) 인터프리팅된(interpreted) 언어들, 또는 선언적 또는 절차적 언어들을 포함하는 임의의 형태의 프로그래밍 언어로 기입될 수 있고, 컴퓨터 프로그램은 단독형 프로그램으로서 또는 모듈로서, 컴포넌트, 서브루틴, 또는 컴퓨팅 환경에서의 이용을 위하여 적당한 다른 유닛을 포함하는 임의의 형태로 전개될 수 있다. 프로그램은 파일 시스템에서의 파일에 대응할 수 있지만, 그럴 필요가 없을 수 있다. 프로그램은 다른 프로그램들 또는 데이터, 예컨대, 마크업 언어 문서에서 저장된 하나 이상의 스크립트를 유지하는 파일의 부분에서, 논의 중인 프로그램에 전용인 단일 파일에서, 또는 다수의 조정된 파일들, 예컨대, 하나 이상의 모듈, 서브-프로그램, 또는 코드의 부분을 저장하는 파일들에서 저장될 수 있다. 컴퓨터 프로그램은, 하나의 사이트에서 위치되거나 다수의 사이트들에 걸쳐 분산되고, 데이터 통신 네트워크에 의해 상호접속되는 하나의 컴퓨터 상에서 또는 다수의 컴퓨터들 상에서 실행되도록 전개될 수 있다.
하나 이상의 컴퓨터의 시스템이 특정한 동작들 또는 액션들을 수행하도록 구성되는 것은, 시스템이 동작 시에, 시스템으로 하여금, 동작들 또는 액션들을 수행하게 하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 컴퓨터 상에서 설치한 것을 의미한다. 하나 이상의 컴퓨터 프로그램이 특정한 동작들 또는 액션들을 수행하도록 구성되는 것은, 하나 이상의 프로그램이, 데이터 프로세싱 장치에 의해 실행될 때, 장치로 하여금, 동작들 또는 액션들을 수행하게 하는 명령어들을 포함한다는 것을 의미한다.
이 명세서에서 이용된 바와 같이, "엔진" 또는 "소프트웨어 엔진"은 입력과는 상이한 출력을 제공하는 소프트웨어 구현된 입력/출력 시스템을 지칭한다. 엔진은 라이브러리, 플랫폼, 소프트웨어 개발 키트(software development kit)("SDK"), 또는 객체와 같은, 기능성의 인코딩된 블록일 수 있다. 각각의 엔진은 임의의 적절한 유형의 컴퓨팅 디바이스, 예컨대, 하나 이상의 프로세서 및 컴퓨터 판독가능 매체들을 포함하는 서버들, 이동 전화들, 태블릿 컴퓨터들, 노트북 컴퓨터들, 음악 플레이어들, 전자-책 판독기(e-book reader)들, 랩톱 또는 데스크톱 컴퓨터들, PDA들, 스마트폰들, 또는 다른 정지식 또는 휴대용 디바이스들 상에서 구현될 수 있다. 추가적으로, 엔진들의 2개 이상은 동일한 컴퓨팅 디바이스 상에서, 또는 상이한 컴퓨팅 디바이스들 상에서 구현될 수 있다.
이 명세서에서 설명된 프로세스들 및 로직 흐름들은 입력 데이터에 대해 동작함으로써, 그리고 출력을 생성함으로써, 기능들을 수행하기 위한 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그래밍가능 컴퓨터에 의해 수행될 수 있다. 프로세스들 및 로직 흐름들은 또한, 특수 목적 로직 회로부, 예컨대, FPGA 또는 ASIC에 의해, 또는 특수 목적 로직 회로부 및 하나 이상의 프로그래밍된 컴퓨터의 조합에 의해 수행될 수 있다.
컴퓨터 프로그램의 실행을 위하여 적당한 컴퓨터들은 일반 또는 특수 목적 마이크로프로세서들 또는 둘 모두, 또는 임의의 다른 종류의 중앙 프로세싱 유닛에 기초할 수 있다. 일반적으로, 중앙 프로세싱 유닛은 판독-전용 메모리 또는 랜덤 액세스 메모리 또는 둘 모두로부터 명령어들 및 데이터를 수신할 것이다. 컴퓨터의 필수적인 엘리먼트들은 명령어들을 수행하거나 실행하기 위한 중앙 프로세싱 유닛, 및 명령어들 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스이다. 중앙 프로세싱 유닛 및 메모리는 특수 목적 로직 회로부에 의해 보충될 수 있거나, 특수 목적 로직 회로부 내에 편입될 수 있다. 일반적으로, 컴퓨터는 또한, 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스, 예컨대, 자기적, 자기-광학 디스크들, 또는 광학 디스크들을 포함할 것이거나, 이들로부터 데이터를 수신하거나 이들로 데이터를 전송하기 위하여 동작가능하게 결합될 것이거나, 이들 양자일 것이다. 그러나, 컴퓨터는 이러한 디바이스들을 가질 필요가 없다. 또한, 컴퓨터는 또 다른 디바이스, 예컨대, 몇 가지 예를 들자면, 이동 전화, 개인 정보 단말(personal digital assistant)(PDA), 이동 오디오 또는 비디오 플레이어, 게임 콘솔, 글로벌 위치결정 시스템(Global Positioning System)(GPS) 수신기, 또는 휴대용 저장 디바이스, 예컨대, 범용 직렬 버스(universal serial bus)(USB) 플래시 드라이브(flash drive) 내에 내장될 수 있다.
컴퓨터 프로그램 명령어들 및 데이터를 저장하기 위하여 적당한 컴퓨터-판독가능 매체들은, 예로서, 반도체 메모리 디바이스들, 예컨대, EPROM, EEPROM, 및 플래시 메모리 디바이스들; 자기 디스크들, 예컨대, 내부 하드 디스크들 또는 분리가능 디스크들; 자기-광학 디스크들; 및 CD-ROM 및 DVD-ROM 디스크들을 포함하는, 모든 형태들의 비-휘발성 메모리, 매체들, 및 메모리 디바이스들을 포함한다.
사용자와의 상호작용을 제공하기 위하여, 이 명세서에서 설명된 발명 요지의 실시예들은, 정보를 사용자에게 디스플레이하기 위한 디스플레이 디바이스, 예컨대, CRT(cathode ray tube)(음극선관) 또는 LCD(liquid crystal display)(액정 디스플레이) 모니터, 및 사용자가 입력을 컴퓨터에 제공할 수 있게 하는 키보드 및 포인팅 디바이스, 예컨대, 마우스, 트랙볼, 또는 존재 감지 디스플레이 또는 다른 표면을 가지는 컴퓨터 상에서 구현될 수 있다. 다른 종류들의 디바이스들은 마찬가지로 사용자와의 상호작용을 제공하기 위하여 이용될 수 있고; 예를 들어, 사용자에게 제공된 피드백은 임의의 형태의 센서류 피드백, 예컨대, 시각적 피드백, 청각적 피드백, 또는 촉각적 피드백일 수 있고; 사용자로부터의 입력은 음향, 스피치, 또는 촉각적 입력을 포함하는 임의의 형태로 수신될 수 있다. 추가적으로, 컴퓨터는 문서들을 사용자에 의해 이용되는 디바이스로 전송함으로써 그리고 이러한 디바이스로부터 문서들을 수신함으로써; 예를 들어, 웹 브라우저(web browser)로부터 수신된 요청들에 응답하여 웹 페이지들을 사용자의 디바이스 상의 웹 브라우저로 전송함으로써 사용자와 상호작용할 수 있다. 또한, 컴퓨터는 텍스트 메시지들 또는 다른 형태들의 메시지들을 개인용 디바이스, 예컨대, 메시징 애플리케이션을 작동시키는 스마트폰으로 전송함으로써, 그리고 반환 시에 사용자로부터 응답 메시지들을 수신함으로써 사용자와 상호작용할 수 있다.
이 명세서에서 설명된 발명 요지의 실시예들은, 예컨대, 데이터 서버로서, 백-엔드 컴포넌트를 포함하거나, 미들웨어 컴포넌트, 예컨대, 애플리케이션 서버를 포함하거나, 프론트-엔드 컴포넌트, 예컨대, 사용자가 이 명세서에서 설명된 발명 요지의 구현예와 상호작용할 수 있게 하는 그래픽 사용자 인터페이스, 웹 브라우저, 또는 앱을 가지는 클라이언트 컴퓨터를 포함하는 컴퓨팅 시스템에서, 또는 하나 이상의 이러한 백-엔드, 미들웨어, 또는 프론트-엔드 컴포넌트의 임의의 조합으로 구현될 수 있다. 시스템의 컴포넌트들은 디지털 데이터 통신의 임의의 형태 또는 매체, 예컨대, 통신 네트워크에 의해 상호접속될 수 있다. 통신 네트워크들의 예들은 로컬 영역 네트워크(local area network)(LAN) 및 광역 네트워크(wide area network)(WAN), 예컨대, 인터넷을 포함한다.
컴퓨팅 시스템은 클라이언트들 및 서버들을 포함할 수 있다. 클라이언트 및 서버는 일반적으로 서로로부터 원격이고, 전형적으로, 통신 네트워크를 통해 상호작용한다. 클라이언트 및 서버의 관계는 개개의 컴퓨터들 상에서 작동되고 서로에 대한 클라이언트-서버 관계를 가지는 컴퓨터 프로그램들에 의해 발생한다. 일부 실시예들에서, 서버는 예컨대, 데이터를 클라이언트로서 작동하는 디바이스로 디스플레이하고 클라이언트로서 작동하는 디바이스와 상호작용하는 사용자로부터 사용자 입력을 수신하는 목적들을 위하여, 데이터, 예컨대, HTML 페이지를 사용자 디바이스로 송신한다. 사용자 디바이스에서 생성된 데이터, 예컨대, 사용자 상호작용의 결과는 서버에서 디바이스로부터 수신될 수 있다.
위에서 설명된 실시예들에 추가적으로, 다음의 실시예들이 또한 혁신적이다:
실시예 1은 방법으로서, 방법은:
다수의 로봇 컴포넌트들을 가지는 로봇 실행 환경을 제어하는 것을 포함하는 동작들을 수행하도록 구성된 실시간 로봇 제어 시스템을 위한 멀티-디바이스 애플리케이션 정의를 수신하는 단계 - 애플리케이션 정의는:
다수의 로봇 컴포넌트들의 각각의 로봇 컴포넌트를 위한 하나 이상의 맞춤형 하이-레벨 소프트웨어 모듈 - 각각의 맞춤형 하이-레벨 소프트웨어 모듈은 로봇 컴포넌트의 하나 이상의 기능을 실행하도록 구성되고, 각각의 맞춤형 하이-레벨 소프트웨어 모듈은 개개의 로봇 컴포넌트의 하나 이상의 로우-레벨 소프트웨어 모듈에 종속됨 -;
맞춤형 하이-레벨 소프트웨어 모듈들의 각각을 위한 개개의 모듈 인터페이스 정의들 - 맞춤형 하이-레벨 소프트웨어 모듈의 모듈 인터페이스 정의는 하나 이상의 비동기식 또는 실시간 통신 채널을 특정하고, 이러한 통신 채널들을 통해, 맞춤형 하이-레벨 소프트웨어 모듈은 상이한 맞춤형 하이-레벨 소프트웨어 모듈로부터 입력 데이터를 수신할 수 있거나 출력 데이터를 상이한 맞춤형 하이-레벨 소프트웨어 모듈로 송신할 수 있음 -; 및
다수의 로봇 컴포넌트들의 각각을 위한 개개의 디바이스 인터페이스 정의들 - 로봇 컴포넌트의 디바이스 인터페이스 정의는 로봇 컴포넌트가 실행할 수 있는 소프트웨어 모듈들을 선언함 - 을 포함함 -; 및
다수의 로봇 컴포넌트들에 의해 각각 실행되어야 할 출력 프로그램들을 생성하기 위하여 애플리케이션 정의를 프로세싱하는 단계 - 출력 프로그램들은 하나 이상의 맞춤형 하이-레벨 소프트웨어 모듈을 실행하기 위한 복수의 커맨드들을 포함하고, 다수의 로봇 컴포넌트들의 제1 로봇 컴포넌트를 위한 제1 출력 프로그램은 제1 로봇 컴포넌트로 하여금, 정보를 제1 통신 채널 상에서 다수의 로봇 컴포넌트들의 제2 로봇 컴포넌트를 위한 제2 출력 프로그램으로 통신하게 함 - 를 포함한다.
실시예 2는 실시예 1의 방법이고, 여기서, 로봇 컴포넌트의 각각의 로우-레벨 소프트웨어 모듈은 특정한 로봇 컴포넌트를 위하여 맞춤화되는 맞춤형 소프트웨어 모듈에 종속된다.
실시예 3은 실시예들 1 또는 2 중의 임의의 하나의 실시예의 방법이고, 여기서, 맞춤형 소프트웨어 모듈은 로봇 컴포넌트의 제조자에 의해 제공된다.
실시예 4는 실시예들 1 내지 3 중의 임의의 하나의 실시예의 방법이고, 여기서, 애플리케이션 정의는 제2 로봇 컴포넌트의 하나 이상의 하이-레벨 소프트웨어 모듈이 정보가 제1 로봇 컴포넌트로부터 수신되는 것을 대기해야 한다는 것을 특정한다.
실시예 5는 실시예들 1 내지 4 중의 임의의 하나의 실시예의 방법이고, 여기서, 제1 로봇 컴포넌트는 실시간 로봇이고, 여기서, 제1 통신 채널 상에서 통신된 정보는 실시간 로봇의 관절의 관절 포지션이다.
실시예 6은 실시예들 1 내지 5 중의 임의의 하나의 실시예의 방법이고, 여기서, 제1 로봇 컴포넌트는 카메라이고, 여기서, 제1 통신 채널 상에서 통신된 정보는 실행 환경에서의 객체의 자세이다.
실시예 7은 실시예들 1 내지 6 중의 임의의 하나의 실시예의 방법이고, 여기서, 출력 프로그램들 중의 하나 이상은 비동기식으로 실행될 수 있다.
실시예 8은 실시예들 1 내지 7 중의 임의의 하나의 실시예의 방법이고, 여기서, 다수의 로봇 컴포넌트들의 각각을 위한 디바이스 인터페이스 정의는 디바이스가 실행할 수 있는 개개의 하이-레벨 소프트웨어 모듈들의 하나 이상의 모듈 인터페이스 정의를 포함한다.
실시예 9는 실시예들 1 내지 8 중의 임의의 하나의 실시예의 방법이고, 여기서, 애플리케이션 정의는 다수의 로봇 컴포넌트들의 제3 로봇의 제1 하이-레벨 소프트웨어 모듈의 제1 모듈 인터페이스와, 제3 로봇의 제2 하이-레벨 소프트웨어 모듈의 제2 모듈 인터페이스와의 사이의 제2 통신 채널의 정의를 더 포함한다.
실시예 10은 시스템이고, 시스템은: 하나 이상의 컴퓨터, 및 하나 이상의 컴퓨터에 의해 실행될 때, 하나 이상의 컴퓨터로 하여금, 실시예들 1 내지 9 중의 임의의 하나의 실시예의 방법을 수행하게 하도록 동작가능한 명령어들을 저장하는 하나 이상의 저장 디바이스를 포함한다.
실시예 11은 컴퓨터 프로그램으로 인코딩된 컴퓨터 저장 매체이고, 프로그램은, 데이터 프로세싱 장치에 의해 실행될 때, 데이터 프로세싱 장치로 하여금, 실시예들 1 내지 9 중의 임의의 하나의 실시예의 방법을 수행하게 하도록 동작가능하 명령어들을 포함한다.
이 명세서는 많은 특정 구현예 세부사항들을 포함하지만, 이들은 임의의 발명의 범위 또는 청구될 수 있는 것의 범위에 대한 제한들이 아니라, 오히려, 특정한 발명들의 특정한 실시예들에 대해 특정적인 특징들의 설명들로서 해석되어야 한다. 별도의 실시예들의 맥락에서 이 명세서에서 설명되는 특정 특징들은 또한, 단일 실시예에서 조합으로 구현될 수 있다. 반대로, 단일 실시예의 맥락에서 설명되는 다양한 특징들은 또한, 다수의 실시예들에서 별도로 또는 임의의 적당한 하위조합으로 구현될 수 있다. 또한, 특징들은 특정 조합들로 작동하는 것으로서 설명될 수 있고 심지어 이와 같이 초기에 청구될 수 있지만, 청구된 조합으로부터의 하나 이상의 특징은 일부 경우들에는, 조합으로부터 삭제될 수 있고, 청구된 조합은 하위조합 또는 하위조합의 변형에 관한 것일 수 있다.
유사하게, 동작들은 특정한 순서로 도면들에서 도시되지만, 이것은 바람직한 결과들을 달성하기 위하여, 이러한 동작들이 도시된 특정한 순서로 또는 순차적인 순서로 수행되거나 모든 예시된 동작들이 수행될 것을 요구하는 것으로서 이해되어야 하는 것은 아니다. 특정 상황들에서는, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다. 또한, 위에서 설명된 실시예들에서의 다양한 시스템 모듈들 및 컴포넌트들의 분리는 모든 실시예들에서 이러한 분리를 요구하는 것으로서 이해되지 않아야 하고, 설명된 프로그램 컴포넌트들 및 시스템들은 단일 소프트웨어 제품에서 일반적으로 함께 통합될 수 있거나 다수의 소프트웨어 제품들로 패키징될 수 있다는 것이 이해되어야 한다.
발명 요지의 특정한 실시예들이 설명되었다. 다른 실시예들은 다음의 청구항들의 범위 내에 있다. 예를 들어, 청구항들에서 기재된 액션들은 상이한 순서로 수행될 수 있고, 바람직한 결과들을 여전히 달성할 수 있다. 하나의 예로서, 동반 도면들에서 도시된 프로세스들은 바람직한 결과들을 달성하기 위하여 도시된 특정한 순서 또는 순차적인 순서를 반드시 요구하지는 않는다. 특정 일부 경우들에는, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다.

Claims (11)

  1. 하나 이상의 컴퓨터, 및 상기 하나 이상의 컴퓨터에 의해 실행될 때, 상기 하나 이상의 컴퓨터로 하여금 동작들을 수행하게 하도록 동작가능한 명령어들을 저장하는 하나 이상의 저장 디바이스를 포함하는 시스템으로서, 상기 동작들은:
    다수의 로봇 컴포넌트들을 가지는 로봇 실행 환경을 제어하는 것을 포함하는 동작들을 수행하도록 구성된 실시간 로봇 제어 시스템을 위한 멀티-디바이스 애플리케이션 정의를 수신하는 것 - 상기 애플리케이션 정의는:
    상기 다수의 로봇 컴포넌트들의 각각의 로봇 컴포넌트를 위한 하나 이상의 맞춤형 하이-레벨 소프트웨어 모듈 - 각각의 맞춤형 하이-레벨 소프트웨어 모듈은 상기 로봇 컴포넌트의 하나 이상의 기능을 실행하도록 구성되고, 각각의 맞춤형 하이-레벨 소프트웨어 모듈은 개개의 로봇 컴포넌트의 하나 이상의 로우-레벨 소프트웨어 모듈에 종속됨 -;
    상기 맞춤형 하이-레벨 소프트웨어 모듈들의 각각을 위한 개개의 모듈 인터페이스 정의들 - 맞춤형 하이-레벨 소프트웨어 모듈의 모듈 인터페이스 정의는 하나 이상의 비동기식 또는 실시간 통신 채널을 특정하고, 상기 통신 채널들을 통해, 상기 맞춤형 하이-레벨 소프트웨어 모듈은 상이한 맞춤형 하이-레벨 소프트웨어 모듈로부터 입력 데이터를 수신할 수 있거나 출력 데이터를 상기 상이한 맞춤형 하이-레벨 소프트웨어 모듈로 송신할 수 있음 -; 및
    상기 다수의 로봇 컴포넌트들의 각각을 위한 개개의 디바이스 인터페이스 정의들 - 로봇 컴포넌트의 디바이스 인터페이스 정의는 상기 로봇 컴포넌트가 실행할 수 있는 상기 소프트웨어 모듈들을 선언함 - 을 포함함 -; 및
    상기 다수의 로봇 컴포넌트들에 의해 각각 실행되어야 할 출력 프로그램들을 생성하기 위하여 상기 애플리케이션 정의를 프로세싱하는 것 - 상기 출력 프로그램들은 상기 하나 이상의 맞춤형 하이-레벨 소프트웨어 모듈을 실행하기 위한 복수의 커맨드들을 포함하고, 상기 다수의 로봇 컴포넌트들의 제1 로봇 컴포넌트를 위한 제1 출력 프로그램은 상기 제1 로봇 컴포넌트로 하여금 정보를 제1 통신 채널 상에서 상기 다수의 로봇 컴포넌트들의 제2 로봇 컴포넌트를 위한 제2 출력 프로그램으로 통신하게 함 -
    을 포함하는, 시스템.
  2. 제1항에 있어서, 로봇 컴포넌트의 각각의 로우-레벨 소프트웨어 모듈은 상기 특정한 로봇 컴포넌트를 위하여 맞춤화되는 맞춤형 소프트웨어 모듈에 종속되는, 시스템.
  3. 제2항에 있어서, 상기 맞춤형 소프트웨어 모듈은 상기 로봇 컴포넌트의 제조자에 의해 제공되는, 시스템.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 애플리케이션 정의는, 상기 제2 로봇 컴포넌트의 하나 이상의 하이-레벨 소프트웨어 모듈이 상기 정보가 상기 제1 로봇 컴포넌트로부터 수신되는 것을 대기해야 한다는 것을 특정하는, 시스템.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서, 상기 제1 로봇 컴포넌트는 실시간 로봇이고, 상기 제1 통신 채널 상에서 통신된 상기 정보는 상기 실시간 로봇의 관절의 관절 포지션인, 시스템.
  6. 제1항 내지 제4항 중 어느 한 항에 있어서, 상기 제1 로봇 컴포넌트는 카메라이고, 상기 제1 통신 채널 상에서 통신된 상기 정보는 상기 실행 환경에서의 객체의 자세인, 시스템.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서, 상기 출력 프로그램들 중의 하나 이상은 비동기식으로 실행될 수 있는, 시스템.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서, 상기 다수의 로봇 컴포넌트들의 각각을 위한 상기 디바이스 인터페이스 정의는 상기 디바이스가 실행할 수 있는 개개의 하이-레벨 소프트웨어 모듈들의 하나 이상의 모듈 인터페이스 정의를 포함하는, 시스템.
  9. 제1항 내지 제8항 중 어느 한 항에 있어서, 상기 애플리케이션 정의는 상기 다수의 로봇 컴포넌트들의 제3 로봇의 제1 하이-레벨 소프트웨어 모듈의 제1 모듈 인터페이스와, 상기 제3 로봇의 제2 하이-레벨 소프트웨어 모듈의 제2 모듈 인터페이스와의 사이의 제2 통신 채널의 정의를 더 포함하는, 시스템.
  10. 제1항 내지 제9항 중 어느 한 항의 동작들을 포함하는 방법.
  11. 복수의 컴퓨터들에 의해 실행될 때, 상기 복수의 컴퓨터들로 하여금 제1항 내지 제9항 중 어느 한 항의 동작들을 수행하게 하는 컴퓨터 프로그램 명령어들로 인코딩된 하나 이상의 비-일시적 컴퓨터 저장 매체.
KR1020227016153A 2019-12-30 2020-12-29 로봇 제어 시스템을 위한 결합성 프레임워크 KR20220100876A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/730,871 US11498211B2 (en) 2019-12-30 2019-12-30 Composability framework for robotic control system
US16/730,871 2019-12-30
PCT/US2020/067334 WO2021138340A1 (en) 2019-12-30 2020-12-29 Composability framework for robotic control system

Publications (1)

Publication Number Publication Date
KR20220100876A true KR20220100876A (ko) 2022-07-18

Family

ID=74285563

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227016153A KR20220100876A (ko) 2019-12-30 2020-12-29 로봇 제어 시스템을 위한 결합성 프레임워크

Country Status (6)

Country Link
US (1) US11498211B2 (ko)
EP (1) EP4066113A1 (ko)
JP (1) JP2023505631A (ko)
KR (1) KR20220100876A (ko)
CN (1) CN114730278A (ko)
WO (1) WO2021138340A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7417356B2 (ja) * 2019-01-25 2024-01-18 株式会社ソニー・インタラクティブエンタテインメント ロボット制御システム

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6300936B1 (en) * 1997-11-14 2001-10-09 Immersion Corporation Force feedback system including multi-tasking graphical host environment and interface device
JP2001353678A (ja) * 2000-06-12 2001-12-25 Sony Corp オーサリング・システム及びオーサリング方法、並びに記憶媒体
AU2002357040A1 (en) * 2001-11-28 2003-06-10 Evolution Robotics, Inc. Sensor and actuator abstraction and aggregation in a hardware abstraction layer for a robot
EP1763792A4 (en) * 2004-04-28 2008-12-03 Openlogic Inc TOOLS FOR STACKING UNCORDINATED SOFTWARE PROJECTS
KR100607141B1 (ko) * 2004-05-12 2006-08-01 한국생산기술연구원 개방형 분산처리구조의 로봇 제어 시스템
US7590680B2 (en) * 2006-06-29 2009-09-15 Microsoft Corporation Extensible robotic framework and robot modeling
JP2008299763A (ja) * 2007-06-01 2008-12-11 Hitachi Ltd 分散オブジェクト開発ツール
WO2009038772A2 (en) * 2007-09-20 2009-03-26 Evolution Robotics Transferable intelligent control device
CA2719494C (en) * 2008-04-02 2015-12-01 Irobot Corporation Robotics systems
JP4577422B2 (ja) * 2008-07-14 2010-11-10 ソニー株式会社 情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラム
KR101021836B1 (ko) * 2008-10-09 2011-03-17 한국전자통신연구원 동적 행위 바인딩을 통한 다수 로봇의 협업 구현 시스템 및그 구현 방법
US20100179689A1 (en) * 2009-01-09 2010-07-15 National Taiwan University Of Science And Technology Method of teaching robotic system
JP5465137B2 (ja) * 2010-04-22 2014-04-09 本田技研工業株式会社 ロボットおよび制御システム
US8639644B1 (en) * 2011-05-06 2014-01-28 Google Inc. Shared robot knowledge base for use with cloud computing system
DE102011107169A1 (de) * 2011-07-13 2013-01-17 Kuka Roboter Gmbh Steuerung eines Roboter
CN102591306B (zh) * 2012-03-08 2013-07-10 南京埃斯顿机器人工程有限公司 双系统组件式的工业机器人控制器
TWI622931B (zh) * 2013-03-19 2018-05-01 動態微型系統公司 工具模型及方法
US9358685B2 (en) * 2014-02-03 2016-06-07 Brain Corporation Apparatus and methods for control of robot actions based on corrective user inputs
US9390284B1 (en) * 2015-04-03 2016-07-12 Ray Wang Method for secure and private computer file
JP2018534953A (ja) * 2015-09-09 2018-11-29 リーチ ロボティックス リミテッドReach Robotics Limited ゲームロボット
KR102235166B1 (ko) * 2015-09-21 2021-04-02 주식회사 레인보우로보틱스 실시간 로봇 시스템, 로봇 시스템 제어 장치 및 로봇 시스템 제어 방법
US10929759B2 (en) * 2017-04-06 2021-02-23 AIBrain Corporation Intelligent robot software platform
US10960540B2 (en) * 2017-05-05 2021-03-30 Accenture Global Solutions Limited Robot orchestration architecture
US10901812B2 (en) * 2017-09-18 2021-01-26 Rapyuta Robotics Co., Ltd. Managing communication between cloud and heterogeneous devices across networks
US10800042B2 (en) * 2018-07-12 2020-10-13 Rapyuta Robotics Co., Ltd. Executing centralized and decentralized controlled plans collaboratively by autonomous robots
US20200276707A1 (en) * 2019-02-28 2020-09-03 Ohmnilabs, Inc. Method and system for cloud-based programming and control of robotic platform
US20200344293A1 (en) * 2019-04-23 2020-10-29 Google Llc Distributed robotic controllers
US11614731B2 (en) * 2019-04-30 2023-03-28 Automation Anywhere, Inc. Zero footprint robotic process automation system
US11904473B2 (en) * 2019-12-30 2024-02-20 Intrinsic Innovation Llc Transformation mode switching for a real-time robotic control system

Also Published As

Publication number Publication date
JP2023505631A (ja) 2023-02-10
US20210197374A1 (en) 2021-07-01
EP4066113A1 (en) 2022-10-05
CN114730278A (zh) 2022-07-08
US11498211B2 (en) 2022-11-15
WO2021138340A1 (en) 2021-07-08

Similar Documents

Publication Publication Date Title
WO2021138260A1 (en) Transformation mode switching for a real-time robotic control system
US11559893B2 (en) Robot control for avoiding singular configurations
US20220402123A1 (en) State estimation for a robot execution system
US20230286148A1 (en) Robot control parameter interpolation
US11498211B2 (en) Composability framework for robotic control system
US11518024B2 (en) Extensible underconstrained robotic motion planning
WO2022139939A1 (en) Robot planning
KR20230154076A (ko) 실시간 로보틱스 제어 프레임워크
US20220347841A1 (en) Real-time robotics control framework
US11787054B2 (en) Robot planning
US11992948B2 (en) Real-time robotics control framework
US20230050174A1 (en) Template robotic control plans
US20230046520A1 (en) Machine-learnable robotic control plans
US20220402135A1 (en) Safety trajectories for robotic control systems
US20230405811A1 (en) Extensible hardware abstraction layer for real-time robotics control framework
US11511419B2 (en) Task planning for measurement variances
US20240157550A1 (en) Real-time robotics control framework with custom reactions
US20240139961A1 (en) Real-time robotic end effector control
US20210197368A1 (en) Robot planning for envelope invariants
US11648673B2 (en) Automated safety procedures for human intervention in robot systems
US20240051127A1 (en) Transferable real-time clock for robotics control
US20230182298A1 (en) Placement planning
US20210187746A1 (en) Task planning accounting for occlusion of sensor observations

Legal Events

Date Code Title Description
E902 Notification of reason for refusal