gggggraziegrazie

graizegrazieさんのやったこと、学んだことを記録する雑記帳です

nodelet用に定義したクラスを使ってnodeを立ち上げる

ROSで処理を書く際、ノード間でのデータのやり取りの効率化のため、殆どnodeletとしてクラスを作ることが多いんじゃないかと思います。ただそうすると、そのクラスのメンバ関数をテストをしようとすると他のノードも立ち上がったりして面倒ですよね。じゃあn…

マルコフ性、マルコフ過程、マルコフ報酬過程、マルコフ決定過程

マルコフ決定過程(MDP)を勉強する上では、1つずつマルコフ過程から少しずつ変数を増やして理解していくのが分かりやすい様な気がします。[1]がそのパターンでしたので、[1]のほぼ流用の形でマルコフ決定過程についての紹介をしたいと思います。 マルコフ…

インピーダンス制御とアドミッタンス制御

インピーダンス制御(位置入力 ・力出力) 目標位置と目標インピーダンス(バネ・マス・ダンパのパラメータ)を決めた状態でエンドエフェクタに力が加わると、目標位置に留まるように関節の固さ(軟らかさ)を調整する。アドミッタンス制御のように、力に流…

Visual Odometry Part I: The First 30 Years and Fundamentals

[0]を読んで気になった所を抜粋して纏めたいと思います。 Introduction Visual Odometry(VO)は、エージェントのegomotion(自己運動)を推定するものです。VOという言葉は、[1]でNisterらが初めて作り出しました。VOを効率的に行うには、環境中の輝度が十分…

ROSにおけるodomフレームの役割

ROS

Navigaitonパッケージのamclを使うと、odomフレームがちょろちょろ動くのが確認できると思います。どうしてフレームが動くんだろうと不思議に思っていたので、調べてみました。推測も入っていますが、下記に調べたことなどを纏めます。ROSの下記を見ると、 m…

Submap:部分地図(= local map:局所地図)

ここで取り上げるsubmapとは、ある一定の条件下で作成される、グローバル地図(全体地図)を構成する構成要素(部品)を指します。Submapの活用方法は、自己位置推定やloop closingです。今回はこのsubmapがどの様に構成されるのか、先行文献を調査した結果…

オドメトリの運動モデル

SLAMの研究で有名なFreiburg大のBurgard先生の授業資料を見ると、主に下記の4種類があるようです。 Differential drive (AmigoBot, Pioneer 2-DX) Car drive (Ackerman steering):自動車の基本的なステアリング機構 Synchronous drive (B21):タイミングベ…

BRIEF記述子

正直下記のページに纏まっているので、(初学者的に)補足する必要がありません笑。 slidesplayer.netハミング距離については、過去に書いた記事が少しは参考になるかと思います。

画像処理における特徴点(feature)と記述子(descriptor)

画像処理において、特徴点・キーポイントという言葉と記述子という言葉が出てきます。前者は、ある観点で見た際の画像中の特徴的な部分を指します。例えばSIFTがそうです。後者は特徴点周りの領域から取り出した特徴量を指します。例えばBRIEFがそうです。つ…

Brute-force

Weblioで意味を調べると、腕力という意味だそうです。これをデータの関連付けに当てはめると、総当たりで調べる、という意味になるそうです。へぇー。ejje.weblio.jp ja.wikipedia.org

locality sensitive hashing(LSH)

LSH[0][6]とは、ハッシュ関数を使ってデータを次元圧縮をしたり、データ同士の比較を高速で行えるようにするための手法である。使用するハッシュ関数の代表例は、下記の安定分布とハミング距離、Jaccard指数がある。ハミング距離を使って、データの比較する…

さまざまな距離

Computer visionなどの世界では、対象間の距離を測る方法がいくつもあります。その中で学んだものを下記に列挙していきます。 Bhattacharyya distance [1]によると、2つの確率分布が近いのか遠いのかを表現します。[2]の式を下記に記載します。 [2]より、多…

マルコフブランケット(Markov Blanket)

下記のP.30がわかりやすい。 グラフィカルモデル入門 from Kawamoto_Kazuhiko www.slideshare.netグラフィカルモデルでシステムをモデル化した時、注目変数について確率を求めたい時、考慮すべきはその変数と繋がっているノード(関係する変数)のみでよい、…

Visual Inertial Odometry(VIO)

Visual informationとInatial sensor(加速度センサやホイールエンコーダ)両方の情報を統合して求めるOdometry。[1]によると、両社のcouplingの程度によりloosely-coupledなシステムとtightly-coupledなシステムに分けられる。前者の代表はPTAMとDSO、後者…

相互相関関数

もしも2つの信号が同じ周期であれば、合成信号は2つの信号が強め合ってできたものになる。そのため相関関数をグラフ化すると、元の信号と同様の周期で極大・極小が現れる。ただし、観測方法・タイミングの問題等で、それぞれの信号が何の補正もなしにぴっ…

Ubuntu16.04にnVidia製グラフィックカードのドライバをインストールする方法

nVidiaのグラフィックカードのドライバをインストール必要があり、[1]の手法を試したのですが上手く行きませんでした。ただし、この時のインストールは新規ではありませんでした。インストールしたノートPCには一度インストールしたことがあり、なぜだか忘れ…

動的時間伸縮法(Dynamic Time Warping)

2つの時間軸方向に変化するデータx, yの類似度を求めるためのアルゴリズムです。類似度はデータ間の距離で表現されます。データは時間方向に変化するため、時刻xにおけるx, yの値をとすると、データ間の距離はとなります。もしもx, yが同じデータを表してい…

Active Vision

普通カメラは固定であり、そのためオクルージョンへの対処、パノラマ画像作成などが出来ない。そこでカメラを動かす、または複数枚の画像を使うことで、固定カメラ単体では解決できない問題に対処しようというのがActive Visionと呼ばれる分野。

ロボット系国際学会とそのランクについて調べてみた

ランクについては、Conference Ranksというwebサイトを使用して調査を行った。なおランキングの表記については、 サイトで使用している右記を用いる:B5 調査日:2019年3月1日。ランキングは変動がありえるので、上記は参考程度にご覧ください。また閲覧する…

英語論文を書く時のお役立ち情報

を目指して、適宜追加していきます。ただ本質的には日本語で書くときも同じだと思います。 "just", "only"などの単語は、人の研究について触れる際に使わないこと。失礼です。 例を上げたい場合は、"XXX such as YYY etc"などとするとスムーズです。 〜する…

ROSでXX_msgs::YY::ConstPtrをXX_msgs::YYに変換する方法

例えばsensor_msgs::LaserScan::ConstPtrをsensor_msgs::LaserScanに変換したい時があるかと思います。sensor_msgs::LaserScan::ConstPtrの実体は、boost::shared_ptrになります。そのため、 boost::shared_ptr<sensor_msgs::LaserScan> laserscan_ptr = boost::const_pointer_cast<sensor_msgs::LaserScan>(l</sensor_msgs::laserscan></sensor_msgs::laserscan>…

PCLを使った点群の軸(直線)を推定する手法

他にも色々とあるんだと思いますが、ここではRANSACとPCAを使った点群の軸(直線)を推定する手法について紹介します。 RANSAC(RANdom SAmple Consensus) RANSACとは、ロバスト推定の中の1つの手法です。ロバスト推定とは、データの中に外れ値が含まれてい…

決定木(Decision Tree)

決定木とは、複数のルールを使って組み合わせることで、データを複数のサブセットに分割する手法のことです。分割したサブセットの内容により、分類木や回帰木と呼ばれます。分類木の分割対象はクラスであり、回帰木の対象は出力値です。つまり決定木の作成…

C++における集合演算のための関数たち

C++

席集合や和集合などを作る関数がないか調べたところ、STLとBoostでそれらの関数を見つけたのでメモします。なお、STLとBoostでそれぞれ関数名は一緒です。挙動や入出力は異なりますので、詳細は下記の参考文献をご覧ください。和集合: set_union 積集合: se…

外れ値・異常値の検出手法

外れ値と異常値 外れ値とは、原因が不明だけれども真値から大きく異なる値のことです。一方異常値とは、同じく真値から大きく値が異なるけれども、何故値が真値と異なるのか説明がつく(測定ミス、記入ミスなど)値を指します[4][5]。つまり、異常値外れ値と…

Numpyでの二次元排列の操作方法

順次記載内容を追加してきたいと思います。 二次元配列の作り方 参考文献 二次元配列の作り方 arr = np.empty((0, 2) , float) # 0行2列の二次元配列オブジェクトを生成する arr = np.append(arr, np.array([[x, y]]), axis=0) # np.appendは演算結果を返す…

PCL中のGeneralized ICPを調査してわかったことメモ

PCL中でGeneralized ICP(以降GICP)を調査してわかったことを書き連ねます。適宜更新するため、読みづらいところがあるかもしれませんがご容赦ください。GICPを実行するには、ICPと同様にalignを行えばよい。Levenberg–Marquardt法を使いたいんだけどと思う…

コマンドライン中で指定したパラメータ名をノード中で取得する方法(C++)

結論から言うと、2種類の方法があります。 ros::names::remap : 返り値としてremapされたパラメータ名が取得できます。 resolveName : 返り値としてremapされたパラメータ名が取得できます。第二引数でremapが成功したかをboolで取得できます。 ros::names:…

ROSにおけるシャットダウン処理の書き方

ROSのノードを動かした時、Ctrl-Cでそのノードを落としたいのに、落ちてくれない場合ありますよね。また落ちたとしても、下記の様なexceptionが発生したりするなどして、キレイに落ちてくれなかったりします。 terminate called after throwing an instance …

インピーダンス制御とコンプライアンス制御

インピーダンス制御は、目標値の計算に弾性項と粘性項の両方を加味する。一方コンプライアンス制御は、粘性項を無視して弾性項のみを使う。これにより、コンプライアンス制御は動作速度の抑制は行わないことがわかる。 参考文献 haraduka.hatenadiary.jp htt…