SLAMのお勉強②−2 ~GMapping の環境設定

ということで,実際に ROS GMapping の解剖実験をするにあたって,環境を整えます.ROSのモジュールとして「ROSラッパー」「アルゴコア」の両方がきちんと管理されているので,そのまま catkin のパッケージとして落としてくれば,あとは catkin_make でビル…

SLAMのお勉強②−1 ~GMapping vs Google Cartographer

下記のエントリでSLAMの勉強をしているという話をしましたが,論文&本読みだけだとなかなか具体的なイメージが湧いてこないので,ソースコードも引っ張ってきて勉強することにしました.で,題材には下記の2つを使おうと思います.daily-tech.hatenablog.c…

#3(の2)可能ならいつでも const を使う.

Effective C++ 3項の内容です. const なメンバ関数とは?? 前回のエントリで変数に対する const の説明をしました.今回は,関数に対して使う const の説明です.クラスのメンバ関数に対して const をつけることによって,そのメソッドが当該オブジェクト…

#3(の1)可能ならいつでも const を使う.

Effective C++ 3項の内容です. const の使い方一覧 constがとても大事なことは,Effective C++も言っているし,とても良くわかるんですが,constの位置によってconstの対象が変わるのがなかなか覚えられません...一通りリストアップします. "const" for…

#24(の2) すべての引数に型変換が必要なら,非メンバ関数を定義する.

ということで前回エントリの続きです. 演算子の定義 前回整数値からRationalへの暗黙の型変換をするには,コンストラクタが使われていることを実験しました.今回はもう一歩進んで,掛け算の演算子オペレータを定義したいと思います.早速サンプルコードで…

#24(の1) すべての引数に型変換が必要なら,非メンバ関数を定義する.

ということで,Effective C++24項の内容です. コンストラクタと暗黙の型変換 Effective CPPでは,有理数の例を用いて暗黙の型変換が好まれる例を説明していました.他に簡単&適切な例が思いつかないので,ここでも有理数の例を用いて実験したいと思います…

#45 すべての互換型を受け取るために,メンバ関数テンプレートを使う

Effective C++ 45項の内容です. テンプレートで互換型を受け取るには? 「スマートポインタ(=リソース管理オブジェクト)を使えばリソースの破棄等を適切な範囲でやってくれるから,生のポインタを使わずにスマートポインタを使おう!」というのが #13 の…

#43 テンプレート化された基底クラスの名前へのアクセス方法

Effective C++ 43項の内容です. テンプレート化された基底クラスの名前は,派生クラスからは見えない. ということで,サンプルコードを見ていきます.まず,下記のような基底クラスと派生クラスがあったとします. class ElementA { public: void sayType(…

#33 継承した名前を隠蔽しない

Effective C++ 33項の内容です. 基底クラスにある名前は,派生クラスに同じ名前があると隠蔽される. 基底クラスにある名前は,派生クラスで同じ名前が使われるとアクセスできなくなります.下記,サンプルコードです. #include <iostream> class Base { public: cla</iostream>…

#42 typenameの2つの意味を理解する.

Effective C++ 42項の内容です. typenameの2つの用法 この項で述べられているtypenameの2つの意味ですが,下記です. 1. テンプレートパラメータの宣言として使う. 2. 「C++では,テンプレートパラメータ内部にあるネストされた依存型名はそのままでは型名…

#39 private 継承の使い方

Effective C++ 39項の内容です. private継承とは何ぞや? まず,private継承とはなんぞや?という話ですが,クラスの継承には public継承とprivate継承の2つがあります.だいたいpublic継承が使われていて,自分はprivate継承なんてあんまり見たことないん…

#34 インターフェースの継承と実装の継承を区別する.

Effective C++ 6章,34項の内容です. 関数の種類 関数の定義の仕方には下記の3種類があって,目的はそれぞれ次のようになります. 純粋仮想関数:派生クラスの作成者にインターフェースの実装を強制する.デフォルトの実装を提供することも可能であるが…

SLAMのお勉強① ~論文と関連書籍の整理&まとめ

以前のエントリでも書きましたが,今年は北陽電機さんのご厚意で UTM-30LX-EW を貸していただくことができ,ROSのフレームワークが使えるようになりました.daily-tech.hatenablog.comで,つくばチャレンジも終わり,,,3次元復元ネタに戻ろうかと思ったん…

#21 オブジェクトを戻すべき時に参照を戻さない

Effective C++ 4章21項の内容です. 1.ローカルなオブジェクトに対する参照戻し これも,よく考えるとそのとおりなんですが,テンパってるとやってしまいそうです...何を言っているかというと,例えば次のようなコードがあったとします. Hoge & loc…

#13 リソース管理にオブジェクトを使う

Effective C++ 3章13項の内容です. 1.リソース管理オブジェクトとは? 自分みたいに組み込み系をメインでやっている人って,C++をガンガン使うというよりはCを使っている人が多いと思います.Cだとやっぱり生のポインタに対してメモリをmallocで割り当…

#7 ポリモーフィズムのための基底クラスには仮想デストラクタを宣言する.

Effective C++ 2章7項の内容です. 1.仮想関数 そもそも仮想関数とは何か?という話ですが,クラスのメンバ関数として宣言するときに,関数の前にvirtualをつけてあげれば仮想関数になります.で,なんでこんなことするか?ですが,下記の状況で使いたく…

#5 デフォルト代入演算子とデフォルトコピーコンストラクタの振る舞い

Effective C++ の2章で,コピー代入演算子,コピーコンストラクタについて説明されてますが,そもそも自分でこの関数を書かないといけない時がどういう時かはっきりわかってませんでした(汗) ちょっとググッて下記のページを見つけ,yohshiy.blog.fc2.com…

#5 C++が自動で生成する関数(デフォルトコンストラクタ,コピーコンストラクタ,コピー代入演算子,デストラクタ)

今回の内容は Effective C++, 5項のまとめです.クラスに何も記述しないような実装をしても,C++によって自動で生成される関数があります.それが,タイトルの通り,,, コンストラクタ コピーコンストラクタ コピー代入演算子 デストラクタ です.これは,…

#2 #define よりも const, enum, inline を使おう

ちょっともう少し C++ をきちんと理解しないといけないな...と思うことがあり,ロボットも終わったちょうどいいタイミングなので,毎日少しづつ Effective C++ を読んで行くことにしました.ただ,読むだけだとどうも頭に入ってこないので,できるだけブ…

Visual Studio Code を使った C++ のビルド&デバッグ方法(with CMAKE)

前回のエントリでC++のファイルをビルド・デバッグする方法を扱いました.自分で一からファイルを作って,作ったファイルをすべて g++ の引数に渡してビルドして....ということもあるかもですが,大体は規模が大きくなってくると CMake を使うと思います…

Visual Studio Code を使った C++ のビルド&デバッグ方法

ということで,つくばチャレンジも一段落した今,ちょっと基礎的なエントリです.仕事では Visual Studio を使って Windows メインで開発をしてるんですが,エディアとか IDE とかってなれるまでに時間がかかリますよね...なのでちょっと億劫だったんです…

つくばチャレンジ2018を終えて...

ということで,今年も終わりました.つくばチャレンジ本走行. 全く同じ書き出しでちょうど一年前に同じ記事を書いてました.一年たつの早いですね~. daily-tech.hatenablog.com 今年の結果 今年はつくばチャレンジ第三ステージということで,昨年までとコ…

ハフ変換

さあ,,,つくばチャレンジ本番までついに2週間です...つくばチャレンジ本番2週間前にこんな基礎的なことやってていいのかなあ...と思いつつ,どうしてもハフ変換が必要になったので,思い切って実装しました.OpenCVとかにも実装があるのですが,ど…

Semi Global Matching (SGM) と 動的計画法

LidarとStereoのフュージョンに向けて SGM を勉強したので,備忘録としてまとめておきます.今回からGitHubにコードも公開していきたいと思います.ここで使ったサンプルコードは下記にあります. github.com Semi Global Matching 二枚の画像ペア(左カメラ…

一段落...

全く不本意ながら仕事が立て込みなかなかロボットできてなかったんですが,先週ようやく(&おそらく)一段落し平穏が訪れました.ということで,ここからロボットラストスパートです.結局今年はまだ試走会にも参加できておらず,11/11の本番まで残り一か月…

イグジット(Exit)

"イグジット" という単語をググると,下記の定義が出てきます.イグジットとは、ベンチャービジネスや企業再生などにおいて、創業者やファンド(ベンチャーキャピタルや再生ファンドなど)が株式を売却し、利益を手にすること。ハーベスティング(Harvesting…

動的計画法4 連鎖行列積

問題定義 連鎖行列積問題 n個の行列の連鎖が与えられたとき,スカラーの乗算回数を最小化するように積 A1, A2, .... An を完全に括弧付けする問題です. (与えられた行列計算を実行するために,掛け算の回数が最小となる計算順序を決定することが目的.) …

動的計画法3 最長共通部分列

動的計画法シリーズ,3個目の例題です.前回のエントリの最後で説明したステップ通りに問題を解いていきたいと思います.今回の問題も有名な問題で,”最長共通部分列問題”と呼ばれるものです.問題の定義は,,, 問題定義 二つの与えられた文字列に対して…

動的計画法2 コイン問題

動的計画法シリーズ,2個目の例題です.この問題も結構有名な問題らしく,ググるといろいろ出てきます.今回は再帰を使ってこの問題を解く方法を考えて,そこから動的計画法の表を作ってみたいと思います. 問題定義 額面が C1, C2, ... , Cm のコインを使…

動的計画法1 ナップザック問題

引き続き,動的計画法です.今回はフィボナッチ数の問題よりも少し難しくなりますが,動的計画法のありがたさがよくわかる例かと思います.取り上げる問題は,有名な "ナップザック問題" です.問題は, 重さが wi, 価値が vi であるような n 個の品物がある…