前回,Ceresの自動微分モジュールの抜き出し方を調べたので,せっかくなので実際にこれを使ってEKF SLAMの微分計算を自動化してみました.
続きを読むCeresの自動微分のみを使う
g2oのドキュメントを眺めていると,Ceresの一部を自動微分用に抜き出しているっぽいのが気になっていたので,実際に自動微分のモジュールだけ使用できるのか試してみました.
#include <iostream>
#include <ceres/autodiff.h>
struct F {
template<typename T>
// z0 = x0^2 + x2
// z1 = x0 * x1 + x1^2 + x2^3
bool operator()(const T* x, T* z) const {
z[0] = x[0] * x[0] + x[2];
z[1] = x[0] * x[1] + x[1] * x[1] + x[2] * x[2] * x[2];
return true;
}
};
int main(int argc, char** argv) {
float* x = new float[3]{ 1.0f, 3.0f, 5.0f }; // parameters
float* z = new float[2]; // outputs
float* J = new float[6]; // jacobians
F func;
// autodiff
const int num_parameters = 3;
const int num_outputs = 2;
ceres::internal::AutoDiff<F, float, num_parameters> ad;
ad.Differentiate(func, &x, num_outputs, z, &J);
// outputs
std::cout << "--- outputs ---" << std::endl;
for (int i = 0; i < 2; i++) {
std::cout << z[i] << " ";
}
std::cout << std::endl;
// jacobians
std::cout << "--- J ---" << std::endl;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
std::cout << J[i * 3 + j] << " ";
}
std::cout << std::endl;
}
return 0;
}
--- outputs ---
6 137
--- J ---
2 0 1
3 7 75
ceresはg2oのEXTERNALに入っているものを使いました.
https://github.com/RainerKuemmerle/g2o/tree/master/EXTERNAL/ceres
思いのほか簡単に使えましたね.
ヘッダーオンリーで使えるので何かと便利そうです.
例えばEFKの微分をAutoDiffにするっていうのがceres全体を依存に入れなくてもできそうです.
ROS Melodicでpointgrey
pointgrey_camera_driverがmelodicからROSの標準パッケージ落ちしたので手動でのインストール手順をメモっときます.
基本的には以下のissueに従う.
https://github.com/ros-drivers/pointgrey_camera_driver/issues/183
・依存ライブラリをインストール
sudo apt-get install libraw1394-11 libgtkmm-2.4-1v5 libglademm-2.4-1v5 libgtkglextmm-x11-1.2-dev libgtkglextmm-x11-1.2 libusb-1.0-0
・flycapture SDKをダウンロード&インストール
https://www.flir.com/products/flycapture-sdk
“Download now” -> “Download from BOX” -> “Linux” -> “flycapture2-***-amd64-pkg_bionic.tgz”
tar xzvf flycapture2-*.tgz cd flycapture2* ./install_flycapture.sh
・pointgrey_camera_driverをクローン&ビルド
cd ~/catkin_ws/src git clone https://github.com/ros-drivers/pointgrey_camera_driver.git
引っ越し
いろいろあって,先週転職(?)と引っ越ししました.どうにもせわしなくてブログに手を付けられないですね.折を見てもっと更新していきたいとは思うのですが...
とりあえず引越しに際して買ったもののなかで好感触だったハンモックとルンバの写真をあげて更新したふりをしておきます.