はじめに
この記事では,PX4公式でも推奨されているUbuntu環境でのbuildを実現するためにWSLを用いたWindows 10での環境構築環境構築までの流れを書いていきます.基本的にはwsl環境の構築に加えて,公式の内容をまとめただけになります.
wsl+githubといった感じです.
特にGit周りは間違った理解が大いにあり得るので,ぜひ指摘して教えてください.
WSLおよびvscodeの導入
こちらの記事通りに進めていけばできます.
以前まではVMwareにUbuntuを載せたり,GitBashを使ったりしてました.
先の話ですが,PX4でSITLをする場合,この方法ではできませんGUIのUbuntuを用意する必要があります.(GazeboがWindowsに対応していないので)
参考:Visual Studio Codeで競プロ環境構築(導入編) - Qiita
Firmwareを自分のPCに入れる
PX4のFirmwarはGithubで開発されている.とりあえずコードが見てみたい,というだけならまずこれを自分のPCにcloneします.
本家のサイトの右の緑のClone or Downloadからhttpsのアドレスを取得して,git clone <取得したもの>
とします.
git clone https://github.com/PX4/Firmware.git
folk+branchでしっかり環境を整える
この参考先通りにやればできます.
参考:GIT Examples · PX4 Developer Guide
アカウントを作りfolkする
まずGitHubの自分のアカウントを作ります.その後本家に行き,右上のfolkを押します.
これは,既存のリポジトリ(今回でいうところのPX4/Firmware)の複製を作る行為です.これがされてない他人様のリポジトリには書き込むことができませんが,folkしたものは自分の所有物なので自由に更新ができます.pullリクエストなどは今は置いておきます.とりあえずコピーをもらってきたという感じです.
folkしたリポジトリをローカルにcloneする
先程と違い,folkしたリポジトリをcloneします.これによって,リモートでもローカルでも自分の好きなように開発ができます.(さっきのだとローカルのみ)
cd ~/wherever/
git clone https://github.com/<your git name>/Firmware.git
cloneしたらcdでFirmwareのdirectoryに移動して,submoduleを更新します.
このサブモジュールは(自分の理解があっているかわかりませんが),とあるリポジトリ(今回でいうFirmware)を動かしている一部moduleが,独立してリポジトリとして開発されているという状態.つまり元のリポジトリでは,Winでいうところのショートカットのようなものが設定されている状態.
このアップデートは,その参照先のアップデートをFirmwareにも適用させるよーという感じでしょうか…たぶん…ざっくりと…
三行目もあんまりちゃんと理解してないですが,本家の進行状況も見れるように追跡できるようにしておいて,本家がなんか変更されたら自分のリポジトリに本家の変更を反映させる,的なやつだと思います,ざっくり.
cd Firmware
git submodule update --init --recursive
git remote add upstream https://github.com/PX4/Firmware.git
git remote -v
二個のリポジトリが出ると思います.一つはupstreamでPX4のFirmwareを指しています.もう一つはさっき自分がfolkしたリポジトリを指しています.
branchを作る
基本的プロジェクトの本筋の最新版は_master_というbranchです.ここから枝を伸ばして自分のbranchを作ります.
そしてそのbranchに移動します.
git checkout -b <your feature branch name>
git status
で自分の今いるbranchが確認できます.自分が作ったbranchになっているはずです.
さて,このbranchの名前ですが,基本的には自分が変更したものがわかるものにするのが一般的です.例えば新しいセンサのドライバを新しく追加したなら,add_xxxsensor_driver
みたいな感じですかね.まあでも本家に貢献せず(本来は貢献が前提ですが),自分でいろいろ開発するだけなら好きな名前でいいと思います.
commit&pushする
まず用語から.
add
- ローカルでローカルで変更して,これは確定やな変更したろ,と思う項目をcommitするためのリスト?に追加する
commit - 自分のローカル環境の変更(addで指定されたもの)をローカルのリポジトリに書き込む
- ここ変ったよーっていう内容を手元にメモする感じ
push - ローカルのリポジトリにcommitされたものを,リモートに反映させる
- そするとGithubに反映される
という流れです.それでは...
git add <file name>
これで変更を反映したいファイルなどを指定します.
git commit -m "<your commit message>"
-mはメッセージをつけるというオプションです.これを書くと,リモートのそのファイルの横にメッセージが載ります.(これが新しいドライバでっせーみたいな)
これでひとまず完了.chrome等で自分のGitHubのfolkしたリポジトリを見ると,ちゃんとbranchが追加され,変更が反映されているはずです.
本家の変更をfolkしたリポジトリにも反映させたい
PX4はかなり活発に開発が進められているOSSですから,知らぬ間に新しい機能やらバグ修正やらいろんなアップデートがされています.しかし(僕の理解だと)folkリポジトリは,ほっといてもそれを参照してくれないので,それを更新する作業が必要です.(たとえば3年前にfolkしたら,今見ても三年前の状態で変わっていないはず)
これをrebase
というコマンドを使ってやります.
まずは一旦master
ブランチに移動します.
git checkout master
ここで,先程追っかけ用と言っていたupstreamに最新版の変更を反映させます.pull
というコマンドを使います.
git pull upstream master
これで,ローカルのmasterが更新されました.自分のブランチに戻ります.
git checkout <your feature branch name>
ここで,rebase
です.rebaseってなんぞや?てかたはこちらがわかりやすかったのでぜひ参照してみてください.
git rebase master
これで無事自分のブランチのローカルが更新されました.
これをリモートにも反映させます.
git push origin <your feature branch name>
おわりに
やっと最近ちょこちょこ理解できるようになってきましたがまだまだ…gitの慣れが微妙ですね.
中のソースはpublish/subscribeシステムやCMakeによる自動化等,まだまだ理解しなくてはならないことが山のように…