이번 블로그에서는 Flexbe에 대해서 알아보고자 한다.
필자의 환경은 다음과 같다.
Ubuntu : 20.04 (Docker noetic image)
Flexbe에 대한 공식문서는 아래 사이트에서 확인할 수 있다.
Flexbe란?
- FlexBE를 사용하면 수동으로 코딩할 필요 없이 복잡한 로봇 동작을 생성할 수 있습니다.
- standard한 기능 또는 specific한 시스템별 기능을 interface하는 기본 기능을 기반으로, 상태 머신은 제공된 드래그 앤 드롭 편집기를 통해 쉽게 구성할 수 있습니다.
- 이후 동일한 그래픽 인터페이스를 사용하여 실행 & 모니터링할 수 있습니다.
- 협업 자율성의 개념을 기반으로 작업자는 런타임 중에 실행에 영향을 미칠 수 있습니다(예: 강제적인 변환 등).
- 필요한 경우 로봇은 작업자에게 도움이나 확인을 요청할 수 있습니다.
- 런타임 중에 동작 구조를 완전히 수정하는 것도 가능합니다.
Flexbe Install
http://philserver.bplaced.net/fbe/download.php
# install as binary (recommended for users)
sudo apt install ros-$ROS_DISTRO-flexbe-behavior-engine -y
cd workspace/src/
git -b <$ROS VERSION> clone https://github.com/FlexBE/flexbe_app.git //ROS 버전에 맞는 브런치에서 클론한다.
//catkin build를 위한 패키지 설치
sudo apt-get install python3-catkin-tools curl -y
cd ~/catkin_ws
catkin build
source devel/setup.bash
rosrun flexbe_app shortcut create # or "remove" to remove it again
Workspace Setup
- 주의 사항 : 프로젝트 이름 생성시, 소문자만을 이용하자! (이후에 경고가 뜰 수 있음)
cd ~/catkin_ws/src
rosrun flexbe_widget create_repo [your_project_name]
# since new packages are created by the above command, build and source again
cd ~/catkin_ws
catkin build
source devel/setup.bash
catkin build 결과
Creating a New Behavior
이 튜토리얼과 다음 튜토리얼에서는 동작 생성에 필요한 단계를 보여주기 위해 매우 간단한 데모 동작을 만들 것입니다.
FlexBE 앱을 실행 하고 새 동작에 이름을 지정하고 설명하고 작성자로 자신의 이름을 입력하세요. roslaunch를 사용하여 FlexBE 앱을 시작할 수 있습니다.
$ roslaunch flexbe_app flexbe_ocs.launch
우리는 "Hello World!" 를 인쇄하는 새로운 동작을 원합니다. 실행할 때 메시지. 대시보드의 비공개 구성 섹션 에서 동작의 상수 값을 정의할 수 있습니다. 이는 동작에 필요한 모든 값에 대한 단일 변경 지점 역할을 합니다. 이제 메시지에 hello라는 새 문자열을 정의해 보겠습니다.
추가 버튼을 클릭하여 새 문자열을 추가합니다. 나중에 사용하겠습니다.
또한 우리는 메시지를 인쇄하기 전에 동작이 잠시 기다리기를 원합니다. 그러나 기다리는 시간이 일정해서는 안 됩니다. 대신에 우리는 연산자가 동작 실행을 시작할 때 값을 선택하기를 원합니다. 이를 위해 동작 매개변수를 사용할 수 있습니다. 새 매개변수 유형으로 숫자를 선택 하고 이름을 wait_time 으로 지정합니다 .
매개변수를 추가하고 연필 아이콘을 클릭하여 해당 속성을 편집합니다.
이제 합리적인 대기 시간 값을 입력할 수 있습니다. 단위는 초입니다. 왜냐하면 나중에 이 값을 사용하여 주어진 시간(초) 동안 기다리는 상태로 전달할 것이기 때문입니다.
매개변수의 속성 보기를 종료하고 모든 매개변수 목록을 다시 표시하려면 이 상자 상단에 있는 화살표 아이콘을 클릭하십시오.
우리는 몇 가지 값(상수 하나, 변수 하나)을 정의하여 새로운 동작을 만들기 시작했으며 이제 동작의 상태 머신 정의를 진행할 수 있습니다. 이제 행동 대시보드가 아래와 같이 보일 것입니다. 상단의 Statemachine Editor를 클릭하여 편집기로 전환하고 다음 튜토리얼을 계속 진행하세요.
참고
혹시 필자 처럼 FlexBE App Onboard Status: disconnected가 뜬다면 다음 방법을 해보세요
or
roslaunch flexbe_app flexbe_full.launch
Using the Statemachine Editor
첫 번째 상태를 추가하여 동작 구현을 시작합니다. 첫 번째 튜토리얼에서 작성한 것처럼 우리는 동작이 잠시 기다린 다음 메시지를 인쇄하기를 원합니다. 따라서 첫 번째 상태는 주어진 시간(초)을 기다리는 상태가 됩니다.
상단에서 상태 추가(Add state)를 클릭 하고 새 상태의 이름을 입력한 후 아래 목록에서 WaitState를 선택합니다. 클래스 필터에 "wait"와 같은 항목을 입력하면 상태를 빠르게 찾는 데 도움이 되며, 정확한 이름을 모르고 대기에 필요한 상태만 필요한 경우에도 도움이 됩니다.
FlexBE 앱은 소싱된 각 ROS 패키지의 내보내기 문의 상태를 알고 있습니다. 목록이 비어 있는 경우 앱을 닫고 새 터미널을 열고 작업 공간을 소싱했는지 확인하고(예: roscd flexbe_states가 작동하는지 확인) 이 터미널에서 앱을 실행하세요.
이제 추가를 클릭하여 동작 상태 시스템에 새 상태를 추가합니다.
새로 추가된 상태의 속성이 팝업됩니다. 이 패널은 상태를 클릭하여 표시할 수도 있습니다. 대기 시간에 대한 매개변수를 이미 정의했으므로 지금 사용할 수 있습니다. 매개변수에 대한 참조는 항상 self로 시작됩니다. 매개변수 이름 앞에 이는 매개변수와 상수를 구별하는 데 도움이 됩니다. 그러나 wait_time을 입력하기 시작 하고 자동 완성이 나머지 작업을 수행하도록 할 수 있습니다.
이 변경 사항을 영구적으로 적용하려면 적용을 클릭하세요 .
다음으로, 같은 방식으로 두 번째 상태를 추가합니다. 이번에는 메시지를 인쇄하려고 하므로 아래와 같은 LogState 입니다 .
이 상태에는 이제 속성 패널에서 편집할 수 있는 두 개의 매개변수가 있습니다.
첫 번째는 인쇄할 텍스트입니다. 대기 상태에서 했던 것처럼 명시적인 값을 입력하지 않고 대신 이미 정의된 값 중 하나를 참조합니다. 따라서 텍스트 매개변수의 값으로 메시지 문자열의 이름인 hello 를 입력하면 됩니다. 적용을 클릭하자마자 텍스트 필드 위로 마우스를 가져가면 해당 값이 툴팁으로 표시됩니다. hello 변수 의 값 필드에 입력한 것처럼 변수를 참조하는 것과 달리 명시적 값(이 경우 문자열)을 입력하려면 따옴표가 필요합니다 .
두 번째 매개변수는 오류 또는 경고와 같은 메시지 유형을 정의합니다. 이번에는 기본값이 좋을 것입니다. 일반적으로 행동 힌트는 운영자가 어떤 작업을 수행해야 할 때 명시적인 지침이나 알림을 제공하는 데 사용됩니다.
이번에는 이 주의 결과에 필요한 자율성 수준도 변경할 것입니다. 높음을 선택 하고 변경 사항을 적용합니다. 이 자율성 수준 의 의미는 다음 튜토리얼에서 설명됩니다.
이제 추가된 상태를 연결합니다.
먼저 대기 상태 옆에 있는 검은색 점을 클릭하여 초기 상태 설정을 시작한 후, 대기 상태를 클릭하여 총알과 연결합니다. 상태를 오른쪽 상단 모서리(이동 아이콘으로 표시)에서 드래그하여 상태의 위치를 변경할 수도 있습니다.
각 상태의 연결되지 않은 결과는 각 상태의 시각화 하단에 나열됩니다. 먼저 연결하려는 결과를 클릭한 후 대상을 클릭하세요. 상태 머신 하단에 있는 두 개의 글머리 기호는 상태 머신 자체의 결과입니다. 지금은 실패한 결과를 무시해도 됩니다 .
이제 상태 머신은 아래 표시된 것과 유사하게 보일 것입니다.
두 번째 전환의 녹색은 필요한 자율성 수준을 나타냅니다.
이제 동작을 저장하십시오. 그러면 새 동작을 실행하는 데 필요한 모든 파일이 생성됩니다.저장한 후 FlexBE 앱을 닫을 수 있습니다 .
그게 다야! execution of a behavior 처음 실행할 준비가 되었습니다 .
Execution of a behavior
처음 두 튜토리얼을 완료했거나 최소한 생성된 동작에 액세스할 수 있어야 합니다. 이제 우리는 행동을 실행하고 싶습니다. 즉, FlexBE 앱을 실행하는 것만으로는 더 이상 충분하지 않습니다 . 대신 전체 행동 엔진을 시작해야 합니다. 이는 다음 명령을 실행하여 수행할 수 있습니다.
roslaunch flexbe_app flexbe_full.launch
먼저, 이전에 생성된 동작을 로드해야 합니다. 상단의 동작 로드 버튼을 클릭한 다음 사용 가능한 동작 목록에서 Hello World Demo를 선택하면 됩니다 . 새 상태를 추가할 때 클래스를 선택하는 것과 유사하게 이름의 일부를 필터 텍스트 필드에 다시 입력하기 시작하면 원하는 항목을 빠르게 찾을 수 있습니다.
이제 사용자 인터페이스의 Runtime Control 보기로 전환하십시오. 아래 그림과 같아야 합니다.
동작을 실행하려면 이제 녹색 실행 시작 버튼을 클릭하세요. 버튼을 클릭하자마자 여러 가지 일이 발생합니다. 사용자 인터페이스는 온보드 엔진과 동작 미러에 정보를 제공합니다. 미러는 온보드에서 최소한의 데이터만 수신하여 의미 있는 정보를 제공하기 위해 온보드 동작과 동일한 구조로 동작을 생성하는 반면, 온보드 엔진은 이제 전송된 동작을 가져와서 빌드하고 실행을 시작합니다. 모든 것이 정상적으로 실행되면 기본 패널에 동작의 첫 번째 상태가 현재 활성 상태로 표시됩니다.
활성 상태는 항상 패널 중앙에 파란색으로 표시됩니다. 오른쪽에서는 다음에 실행될 상태를 포함하여 해당 상태의 가능한 결과를 볼 수 있습니다.
2초 후에 동작은 다음 상태로 계속됩니다.
지금 볼 수 있듯이 두 번째 상태에 도달한 후에는 동작이 계속되지 않습니다. 대신 결과를 강조하고 실행 권한을 요청합니다. 잠시 후에 허용하겠지만 먼저 하단 패널을 살펴보겠습니다. 이제 피드백 패널에 표시되는 Hello World 메시지와 설명서 패널의 LogState 설명서를 볼 수 있습니다 .
강조 표시된 화살표를 클릭하여 요청된 결과를 허용합니다. 강조 표시되지 않은 경우에도 언제든지 결과를 클릭하여 강제로 적용할 수 있습니다. 이 동작은 이러한 방식으로 요청된 결과를 즉시 반환하므로 결과를 강제로 적용할지 여부를 결정하는 것은 사용자의 책임입니다. 결과를 허용한 후 데모 동작이 완료됩니다.
이 동작을 두 번째로 실행해 보겠습니다. 이번에는 기본 설정을 변경합니다. 제어판에서 해당 항목을 선택하여 대기 시간을 4초로 늘리고 자율성 수준을 Full 로 변경합니다. 자율성 수준 변경은 동작이 실행 중인지 여부에 관계없이 언제든지 수행할 수 있습니다.
자율성 수준은 첫 번째 실행 중에 동작 실행이 중지되는 이유였습니다. 우리는 가장 기본적인 전환에만 적용되는 낮은 자율성을 요구하는 전환을 허용했습니다. 최소한 낮은 자율성이 필요한 각 전환은 차단되었으며 두 번째 전환에는 지난 튜토리얼에서 구성한 대로 높은 자율성이 필요합니다. 이는 관찰된 바와 같이 동작이 자동으로 전환을 실행하지 않고 대신 실행할 준비가 되었으며 권한을 기다리고 있음을 나타냅니다. 이제 자율성을 Full 로 설정했으므로 이번에는 전환 시 동작 실행이 중지되지 않습니다.
*Google 번역을 이용했으며, 오역이 있을 수 있습니다.
'Robotics 🤖 > flexbe' 카테고리의 다른 글
[FlexBE] Flexbe 설치 및 사용하기 (0) | 2024.02.14 |
---|---|
[FlexBE] FlexBE navigation 공부하기(feat. CHRISLab github) (2) | 2023.09.17 |