くろたんく雑記帳

日常とか、わんちゃんとか、機械学習とか、競プロとか、

MENU

【書評】詳細 確率ロボティクス

上田先生の「詳細確率ロボティクス」を読んだので感想を書く。
強化学習のところはまだだけど。


書籍の概要と感想

非常に分かりやすかった。これに尽きる。

コロナの影響もあってか、講義動画まで見られる!!

www.youtube.com

自習が捗る!!!

特に自己位置推定とSLAMについて学びたく本書を読んだので、めちゃくちゃ勉強になった。ここら辺の数式周りはよく理解できてないところからある程度納得できる状態になった。さらに、Jupyter Notebookによる実装があるので、相互補完的に理解が深まった。

実際にJupyter Notebookで一つ一つやっていけば教科書の内容を学んでいけるので非常に良い。

私は、Colabでやりたいので、若干アニメーション細かいところを修正。Worldのdrawに返り値を設定してあげて、

class World:
    def __init__(self, time_span, time_interval, debug=False):
        self.objects = []  
        self.debug = debug
        self.time_span = time_span  
        self.time_interval = time_interval 
        
    def append(self,obj):  
        self.objects.append(obj)
    
    def draw(self): 
        fig = plt.figure(figsize=(4,4))
        ax = fig.add_subplot(111)
        ax.set_aspect('equal')             
        ax.set_xlim(-5,5)                  
        ax.set_ylim(-5,5) 
        ax.set_xlabel("X",fontsize=10)                 
        ax.set_ylabel("Y",fontsize=10)                 
        
        elems = []
        
        if self.debug:        
            for i in range(int(self.time_span/self.time_interval)): self.one_step(i, elems, ax)
        else:
            self.ani = anm.FuncAnimation(fig, self.one_step, fargs=(elems, ax),
                                     frames=int(self.time_span/self.time_interval)+1, interval=int(self.time_interval*1000), repeat=False)
            plt.show()
            # ここをreturnで返す
            return self.ani
        
    def one_step(self, i, elems, ax):
        while elems: elems.pop().remove()
        time_str = "t = %.2f[s]" % (self.time_interval*i)
        elems.append(ax.text(-4.4, 4.5, time_str, fontsize=10))
        for obj in self.objects:
            obj.draw(ax, elems)
            if hasattr(obj, "one_step"): obj.one_step(self.time_interval)    
from matplotlib import  rc
from IPython.display import HTML
rc('animation', html='jshtml')

としてから、

world.draw()

とすればOK

各章については詳細は省くが数式もきちんと書いてあるしなぜそう考えられるのかがよくわかる様に書かれているのである程度ベイズの考え方や複数パラメーターある場合の確率の考え方がわかれば読み進められる。 シミュレーターの実装もわかりやすいし、改変もしやすそう。今後他の描画ツールでシミュレーター作って可視化していく予定なのでめちゃ参考になった。

書籍の章立てとJupyter Notebookの関係

書籍にそってやるなら、こっちを使ったほうがいいとは思う。

github.com

最初、章ごとになっていないので若干戸惑った。 その章の最終的なものはここに挙げたnotebook

  • 3章
    • section_robot
      • ideal_robot11.ipynb
  • 4章
    • section_uncertainty
      • noise_simulation11.ipynb
  • 5章
    • section_particle_filter
      • mcl14.ipynb
  • 6章
    • section_kalman_filter
      • kf4.ipynb
  • 7章
    • section_advanced_localization
      • occlusion_free_mcl.ipynb
  • 8章
    • section_fastslam
      • fastslam5.ipynb
Colabアニメーション設定

MCL

パーティクルフィルターの話。この手の話の基本だがちゃんと理解できてなかったところを丁寧に実装されたコードで実感できた。

Kalman Filter

KLDサンプリング(occlusion)

FastSLAM


終わりに

今回の書籍も、さすがと言わんばかりの分かりやすさ。Jupyter Notebookをここまで細かく用意してくれるっていうのは普通では考えられないので、こんな先生に教わることができる学生は羨ましいなと思う。学生時代にこんな講義受けていたらよかったのになと思った。


参考になる書籍

上田先生が、翻訳された確率ロボティクスの超有名書籍。
こちらもおすすめだが、詳細 確率ロボティクスを読んでからだとより良いと思う。

またロボットのプログラミングでROSを使うことがあるが、こちらも上田先生の書籍で分かりやすい。

Raspberry Piで学ぶ ROSロボット入門

Raspberry Piで学ぶ ROSロボット入門

ロボティクスとは関係ないが、上田先生の書籍つながりで、シェルスクリプトを学びつつ、CMSまで作れてしまうっていう素晴らしい書籍で、私も実際に1年ほど運用していた。

以前書いた書籍紹介

blacktanktop.hatenablog.com


お願い(欲しい書籍リスト)

ずうずうしいのですが、基本自分の学習メモのためですが、サポーター募集です。ポチッとしてくれると嬉しいです。

https://www.amazon.jp/hz/wishlist/ls/2EDNNTYRW2BJE?ref_=wl_share

もしくは、コード等を実行できるタイプの書籍であれば、実際に実行して試すことなどしてレビューなど書くので、献本していただけたらものすごく喜びます(お問い合わせ or TwitterのDMからお問い合わせ下さい。)