
Gymfc는 태도 제어에 중점을 둔 비행 제어 튜닝 프레임 워크입니다. Gymfc는 전통적인 PID 컨트롤러의 성능을 초과하는 신경 비행 태도 컨트롤러를 종합하는 데 시뮬레이터를 사용하여 "UAV 태도 제어를위한 강화 학습"에 처음 소개되었습니다. 프로젝트가 초기 릴리스 이후 신경 비행 제어 시스템을 합성 할뿐만 아니라 전통적인 컨트롤러를 조정하기위한 비행 제어 시스템을 조정하기위한 모듈 식 프레임 워크가되었습니다. GymFC는 세계 최초의 신경 네트워크 지원 비행 제어 펌웨어 Neuroflight에서 사용할 컨트롤러를 개발하는 주요 방법입니다. 프로젝트와 아키텍처의 세부 사항은 Wil Koch의 논문 "심도 강화 학습을 통한 비행 컨트롤러 합성"에 가장 잘 설명되어 있습니다.
다음 Bibtex 항목을 사용하여 우리의 작업을 인용하십시오.
@article{koch2019reinforcement,
title={Reinforcement learning for UAV attitude control},
author={Koch, William and Mancuso, Renato and West, Richard and Bestavros, Azer},
journal={ACM Transactions on Cyber-Physical Systems},
volume={3},
number={2},
pages={22},
year={2019},
publisher={ACM}
}
@article{koch2019flight,
title={Flight Controller Synthesis Via Deep Reinforcement Learning},
author={Koch, William},
journal={arXiv preprint arXiv:1909.06493},
year={2019}
}

examples 디렉토리에 게시됩니다.Ubuntu 18.04에 대한 HymFC 및 그 종속성을 설치하려면 Execute,
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
pip3 install .
Gymfc는 Ubuntu 18.04에서 실행되며 백엔드 시뮬레이터에는 Dart v6.7.0과 함께 Gazebo V10.1.0을 사용합니다. 전망대와 함께 다트를 사용하려면 소스에서 설치해야합니다. Dart와 함께 전망대를 사용해야하는 이유는이 비디오를 참조하십시오. 종속성을 설치하는 가장 쉬운 방법은 제공된 install_dependencies.sh 스크립트와 관련이 있습니다. 기본적으로 단일 작업으로 make 실행됩니다. MAKE_FLAGS 환경 변수로 make 플래그를 무시할 수 있습니다. 소스에서 전망대를 건설하는 것은 매우 자원 집약적입니다. 메모리가 충분하면 동시에 실행할 작업 수가 증가합니다. 예를 들어 병렬 실행에서 4 개의 작업을 실행하려면
sudo MAKE_FLAGS=-j4 ./install_dependencies.sh
이 스크립트는 실행하는 데 1 시간 이상이 걸릴 수 있습니다. 빌드에 실패하면 dmesg 점검하지만 가장 일반적인 이유는 메모리가 아닌 실패입니다.
(선택 사항) GymFC를 설치하기위한 가상 환경을 설정하는 것이 좋습니다. 프로젝트 루트 실행에서 python3 -m venv env . 이것은 git에 의해 무시 될 env 라는 환경을 만듭니다. 가상 환경을 가능하게하기 위해 source env/bin/activate 및 비활성화, deactivate .
Gymfc 설치,
pip3 install .
이렇게하면 파이썬 종속성이 설치되고 전망대 플러그인 및 메시지도 구축됩니다.
GymFC 코드를 수정하려면 편집/개발 모드로 설치해야합니다.
pip3 install -e .
또한 실행하여 전망대 플러그인을 수동으로 설치해야합니다.
gymfc/envs/assets/gazebo/plugins/build_plugin.sh
이 설치 지침 (예 : install_dependencies.sh 의 특정 이외의 다른 위치에 전망대 설치)에서 벗어나면 Gazebo setup.sh 의 위치를 변경해야 gymfc/gymfc.ini 수도 있습니다.
Gymfc는 항공기 모델 (디지털 트윈)을 실행해야합니다. NF1 Racing Quadcopter 모델은 테스트 모델이 필요한 경우 examples/gymfc_nf/twins/nf1 에서 사용할 수 있습니다. 테스트하려면 모든 것이 올바르게 설치됩니다.
python3 tests/test_start_sim.py --verbose examples/gymfc_nf/twins/nf1/model.sdf
모든 것이 정상이라면 전망대에서 NF1 Quadcopter 모델을 볼 수 있습니다.
모터와 IMU 플러그인을 아직 구축하지 않았기 때문에 다음 오류 메시지가 표시됩니다.
[Err] [Plugin.hh:187] Failed to load plugin libgazebo_motor_model.so: libgazebo_motor_model.so: cannot open shared object file: No such file or directory
[Err] [Plugin.hh:187] Failed to load plugin libgazebo_imu_plugin.so: libgazebo_imu_plugin.so: cannot open shared object file: No such file or directory
또한 다음 오류 메시지는 정상입니다.
[Err] [DARTJoint.cc:195] DARTJoint: SetAnchor is not implemented
추가 테스트를 위해 NF1 모델을 사용하려면 읽기 예제/readme.md.
이 저장소에는 docker/demo 의 실험 Docker 빌드가 포함되어있어 GymFC의 사용을 데모합니다. MacOS 10.14.3 및 Ubuntu 18.04에서 테스트되었지만 Gazebo 클라이언트는 우분투에서 일하는 것으로 확인되지 않았습니다. 이 Docker 이미지는 GymFC의 지원 환경을 실행하는 데 도움이 될 수 있습니다.
Mac의 경우 시스템에 Mac 및 Xquartz 용 Docker를 설치하십시오. Ubuntu의 경우 Ubuntu 용 Docker를 설치하십시오.
Docker 이미지를 작성하십시오
docker build . -t gymfc:demo메사 드라이버, 전망대 및 다트를 컴파일하므로 시간이 걸립니다. Docker에게 호스트 리소스의 많은 부분을 제공하는 것이 좋습니다. 들어오는 모든 연결은 Xquartz로 전달됩니다.
xhost +예제 사용법, 이미지 실행 및 테스트 Test_step_sim.py를 사용하여 Solo Digital Twin,
docker run -ti -e DISPLAY= < hostip > :0
-v < path-to-gymfc-digitaltwin-solo > /models/solo/model.sdf:/gymfc/demo/models/solo/model.sdf
gymfc:demo
" python3 /gymfc/tests/test_step_sim.py --gymfc-config /gymfc/gymfc.ini --verbose /gymfc/demo/models/solo/model.sdf 1 1 1 1 " 바꾸다 시스템의 외부 IP로 GymFC가 Xquartz 서버에 연결할 수 있도록합니다. 솔로 레포를 복제 한 곳으로. test_step_sim.py 매개 변수는 호스트의 경로가 아닌 컨테이너 경로를 사용하고 있습니다.
가장 간단한 환경은 만들 수 있습니다.
from gymfc . envs . fc_env import FlightControlEnv
class MyEnv ( FlightControlEnv ):
def __init__ ( self , aircraft_config , config = None , verbose = False ):
super (). __init__ ( aircraft_config , config_filepath = config , verbose = verbose ) FlightControlenv를 상속하면 이제 step_sim 및 reset 함수에 액세스 할 수 있습니다. OpenAi 체육관을 만들려면이 수업을 상속해야합니다.
from gymfc . envs . fc_env import FlightControlEnv
import gym
class MyOpenAIEnv ( FlightControlEnv , gym . Env ): 단순화를 위해 Gymfc 환경은 항공기 model.sdf 의 파일 위치 인 단일 aircraft_config 입력하는 것으로 간주됩니다. SDF는 항공기의 모든 시각화, 형상 및 플러그인을 선언합니다.
Gymfc는 귀하의 모델이 다음과 같은 전망대 스타일 디렉토리 구조를 가질 것으로 기대합니다.
model_name/
model.config
model.sdf
plugins/
build/
plugin 디렉토리에 플러그인 소스가 포함되어 있으며 build 디렉토리에는 빌드 바이너리 플러그인이 포함됩니다. Gymfc는 런타임에 Gazebo 플러그인 경로에 빌드 디렉토리를 추가하여 찾아로드 할 수 있습니다.
메모! 외부 플러그인을 사용하는 경우 빌드 디렉토리의 각 .so 파일에 대한 소프트 링크를 만듭니다.
더 곧 출시 될 예정입니다!
유연성을 높이고 범용 튜닝 프레임 워크를 제공하려면 비행 컨트롤러, 비행 제어 튜너, 환경 인터페이스 및 디지털 트윈의 4 가지 모듈을 제공해야합니다. (참고 : 신경 비행 컨트롤러의 경우 일반적으로 비행 컨트롤러와 튜너는 동일합니다. 예를 들어, 이는 가스 및 PSO와 같은 최적화 전략을 사용하여 PID 이득을 조정할 가능성을 열어줍니다. 목표는 사용자가 혼합 및 일치 할 수있는 오픈 소스 모듈 모듈 모듈을 제공하는 것입니다. 직접 만든 경우 알려 주시면 아래에 추가하겠습니다.
각 model.sdf는 libAircraftConfigPlugin.so 플러그인을 선언 해야합니다 . 이것은 더미 플러그인으로 임의의 구성 데이터를 설정할 수 있습니다. 예제 구성은 다음과 같을 수 있습니다.
< plugin name = " config " filename = " libAircraftConfigPlugin.so " >
<!-- Define the total number of motors that shall be controlled -->
< motorCount >4</ motorCount >
<!-- The center of thrust must be defined in order to attach the aircraft
model to the simulation. The offset will in relation to this specified link -->
< centerOfThrust >
< link >battery</ link >
< offset >0 0 0.058</ offset >
</ centerOfThrust >
<!-- Specify all the sensors this aircraft supports. Valid sensor types
are "imu, esc, and battery" -->
< sensors >
< sensor type = " imu " >
< enable_angular_velocity >true</ enable_angular_velocity >
< enable_linear_acceleration >true</ enable_linear_acceleration >
< enable_orientation >true</ enable_orientation >
</ sensor >
<!--
<sensor type="esc">
<enable_angular_velocity>true</enable_angular_velocity>
<enable_temperature>true</enable_temperature>
<enable_current>true</enable_current>
</sensor>
<sensor type="battery">
<enable_voltage>true</enable_voltage>
<enable_current>true</enable_current>
</sensor>
-->
</ sensors >
</ plugin >Gymfc는 Google Protobuf 메시지를 통해 항공기와 통신합니다. 최소한 항공기는 모터 명령을 구독하고 IMU 메시지를 게시해야합니다.
주제 /항공기/명령/모터 메시지 유형 MotorCommand.proto
주제 /항공기/센서/IMU
메시지 유형 imu.proto
주제 /항공기/센서/ESC
메시지 유형 escsensor.proto
Wil Koch의 논문에 사용 된 Openai 환경 및 디지털 트윈 모델은 examples/ 디렉토리에서 찾을 수 있습니다.
윌 코흐
이 멋진 사람들에게 감사합니다 (이모티콘 키) :
윌 코흐 ? | 마이클 프리드리히 ? | 시드 마이소르 ? | varunag18 | Xabierolaz | Swapnil Pande ? ? |
기고자가되고 싶습니까?! 자세한 내용을 보려면 Contributing.md를 방문하십시오.