🐕
Unreal Engine 5: TurtleBot3の環境構築
概要
Unreal Engine 5でTurtleBot3の環境を用意します。
Rapyuta Roboticsさんのリポジトリで、Unreal Engine 4.27用のExampleが公開されています。
このExampleをBaseにUnreal Engine 5.0で実行できるようにソースコードを変更します。
変更した箇所を反映したソースコードは後ほど公開します(PullReqとして出すかもしれません)。
実行環境
- インストール実行環境
unit | specification |
---|---|
CPU | i9-11900H |
GPU | GeForce RTX 3080 Laptop |
RAM | 32GB |
OS | Ubuntu 20.04.3 LTS |
-
- Nvidia Driver version
- 510.39.01
- Unreal Engine version
- 5.0.0
参考
手順
Buildスクリプト実行時までは、Rapyuta RoboticsさんのTurtleBot3のExampleのリポジトリのReadmeに従って、コマンドを実行します。
buildする際に、いくつかの変更を加えます。
- TurtleBot3のExampleのリポジトリのクローン
- setupスクリプトの実行
- ソースコードの変更
- ビルド
- 実行確認
1. TurtleBot3のExampleのリポジトリのクローン
- リポジトリをクローンします
mkdir ~/ws
cd ~/ws
git clone --recurse-submodules git@github.com:rapyuta-robotics/turtlebot3-UE.git
sudo apt install git-lfs
git-lfs pull && git submodule foreach git-lfs pull
2. setupスクリプトの実行
- setup用のスクリプトを実行します
mkdir ~/ws
cd ~/ws/turtlebot3-UE
./update_project_files.sh
3. ソースコードの変更
- 今の状態のソースコードをビルドすると、エラーが発生し、Buildを完了することができません
- その為、あらかじめソースコードを変更します(変更せずにBuildした際のエラーメッセージを修正します)
- 変更箇所は主にUnreal Engine 4.27からUnreal Engine 5.0の移行でAPIの内容が変更された箇所になります
Cannot open assembly '/UnrealEngine/Engine/Binaries/DotNET/UnrealBuildTool.exe': No such file or directory.
- MakeFileのProjectBuildに5.0では生成されないexeファイルを指定している
- Linux用のSHファイルを指定するように変更する
- MakeFileを直接編集する
- https://forums.unrealengine.com/t/bug-trouble-with-unrealbuildtool-on-linux-and-the-solution/238683
turtlebot3-UE/Plugins/RapyutaSimulationPlugins/Source/RapyutaSimulationPlugins/Public/Core/RRCamera.h:44:16: error: no matching function for call to 'IsWithinInclusive' verify(FMath::IsWithinInclusive(HeightRangeInCm.X, 0.f, HeightRangeInCm.Y));
- 上記ヘッダの中で、Unreal EngineのFMathというクラスからメソッドを読んでいる箇所で、FMathが呼ばれていないというエラー
- ヘッダをincludeしたが、解消されなかったので、コメントアウトで対応
/turtlebot3-UE/Plugins/RapyutaSimulationPlugins/Source/RapyutaSimulationPlugins/Private/Core/RRStaticMeshComponent.cpp:241:35: error: no member named 'bBuildAdjacencyBuffer' in 'FMeshBuildSettings' sourceModel.BuildSettings.bBuildAdjacencyBuffer = false;
- エラーが出ているコンストラクタに存在しないメンバ変数を使用しようとしているというエラー
- 4.27から5.0の移行で、該当コンストラクタから上記メンバが削除(もしくはどれかに変っているかも?)されていることを確認し、コメントアウトで対応
turtlebot3-UE/Plugins/RapyutaSimulationPlugins/Source/RapyutaSimulationPlugins/Private/Core/RRStaticMeshComponent.cpp:319:61: error: no viable conversion from 'TVector4<double>' to 'const TVector4<float>'OutMeshDescBuilder.SetInstanceColor(instanceID, FVector4(FLinearColor(mesh.VertexColors[vIdx])));
- メソッドの引数の型に一致していないというエラー
- 引数と渡す前に、TVector4でキャストしていたので、この箇所でTVector4fでキャストするように変更して対応
turtlebot3 -UE/Plugins/RapyutaSimulationPlugins/Source/RapyutaSimulationPlugins/Private/Sensors/RR2DLidarComponent.cpp:146:19: error: no member named 'Actor' in 'FHitResult'
- メンバー変数が無いというエラー
- 該当メンバ変数は廃止されて、メソッドで取って来るように変更された(4.27→5.0)
- よって、エラー該当部分をメソッドに置換し対応
- https://www.reddit.com/r/unrealengine/comments/pjbzwj/c_actor_is_not_a_member_of_fhitresult_ue5_ai/
4. ビルド
- ソースコードをビルドします
cd ~/ws/turtlebot3-UE
./make_editor.sh
5. 実行確認
- UEEditorを起動し、TurtleBotの環境を確認します。
- UEEditorまでのPATHは適切なPATHに置き換えます
cd ~/ws/turtlebot3-UE
./run_editor.sh $(pwd) ~/ws/UnrealEngine/Engine/Binaries/Linux/UEEditor
Discussion