めっくろぐ

mechlog - メモ帳

ロボット掃除機を買いました

だいぶ市民権を得ているようで,今更感はありますが,
友人宅で見かけたことをきっかけに,ロボット掃除機を購入するに至りました.

機種選定

たまたま発見した,ロボット掃除機の代名詞・ルンバのエントリー機種の1万円OFFのキャンペーン.
news.kakaku.com
楽天市場でポイントが付くことも考えれば3万円台前半まで落ちてくるので,
有りかなと思いながら,さらに物色.

制御屋さんとしてはSLAMによるマッピング機能を持つ機種に興味がありますが,
SLAM機種はどんなに安いメーカーでも5万円は超えてきます.
壁に当たるたびに向きを変えて進むランダム走行の機種であれば,1万円台からもありますが,
それはロボットというには少し寂しいかなと思い,
予算3万円台ぐらいで,ランダム走行+αぐらいの機種はないかと思い探していました.

すると,Ankerから発売されている機種が,ジャイロセンサと加速度センサを使って,
慣性航法でマッピングをしているらしいということが分かりました.

Anker eufy(ユーフィ)シリーズは,
L70 Hybrid がハイエンドモデル,レーザSLAMを使うタイプで,5万円台.
Hybridは,水拭き機能も一体化しているという意味.

エントリーモデルは,定番・ランダム走行するタイプ,

そしてそれらの間のモデルとして,
慣性航法(スマート・ダイナミック・ナビゲーションという機能名)を使うタイプが用意されています.

加速度・ジャイロセンサを追加することで,
直線状に折返しながら部屋を掃除する制御が可能になり,
ムラなく効率よく掃除できる,というのがウリにされています.
公式なPRではありませんが,当然SLAMに比べてセンサや演算システムが軽くなるので,
価格は安く,そこそこの性能が出せる,というのがポイントだと思います.

当該機能が入るG10 Hybridは,慣性航法モデルの初期型で,
楽天市場ではちょうど20%OFFセール中でした.

そして今年発売されたG30シリーズは,慣性航法機能が強化されており,
新たに追加されたポイントとして,簡易的なマップ作成ができるようになり,
それを使ってどこを掃除したかをアプリで示したり,
次回以降の掃除でパスプランニングに活用したりしているようです.
価格帯もちょうどよく,メカニズムにも非常に興味がわいたので,
このシリーズを購入しました.

ちなみに,名前に「edge」が入るのは,
専用磁気テープを使って進入禁止エリアの設定ができる機能を持つことを表しているそうです.
(edgeが付かないノーマルタイプは,進入制限ができない)

実機


しばらく動かして挙動を見ていましたが

  • 3軸センサのおかげで,直進走行時は(曲がっていかずに)真っすぐ走る
  • マップのグリッドサイズは,本体1個分ぐらい(30 cm程度)
  • 生成したマップは,各回のお掃除毎に使い捨て

(ムラなく走行できているか,終了判定の条件に使用?
 基地に効率よく戻るためにも使用.
 スキャンマッチングできないので,次回のお掃除には利用しない?)

ようにみえました(推測です).
SLAM使用モデルの性能を体験したことはないので比較できませんが,
友人宅にあったランダム走行モデルと比較すると,かなり賢い走行に見えます.

「SLAM入門」サンプルコードを試したメモ

SLAM入門でサンプルプログラムを回したのですが,
ビルド時にちょっと詰まったので,メモ.

現象・対策としては,以下の情報と同じでした.

veresk.hatenablog.com


CMakeList.txt を書き換えて四苦八苦した結果,これなら動いたという感じ.
環境は,Windows,CLionを使っています.

project(LittleSLAM)

cmake_minimum_required(VERSION 2.8)

#
SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/boost_1_69_0")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/boost_1_69_0/libs")

FIND_PACKAGE(Boost)
IF (Boost_FOUND)
  INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
  ADD_DEFINITIONS( "-DHAS_BOOST" )
ENDIF()

include_directories(C:/eigen3)

~~~(以下略)

制御のための簡単な二次のローパスフィルタ

二次のローパスフィルタ(LPF)の作り方です*1

カットオフ周波数を  \omega_c [rad/s] としたとき,次式で表されます.

\displaystyle F(s) = \frac{{\omega_c}^2}{s^2+\sqrt{2}\omega_cs+{\omega_c}^2}

 

元々は,二次遅れ系の伝達関数の標準形から来ています.

下式で  \zeta = 1/\sqrt{2}とすると,上式と一致します. 

\displaystyle G(s) = \frac{{\omega_n}^2}{s^2+2 \zeta \omega_ns+{\omega_n}^2}

 

 \zeta = 1/\sqrt{2}はどこから来ているのか 

 G(s)で, s=j\omegaを代入して,周波数領域で考えます.

さらに \eta=\omega/ \omega_nとして,固有振動数 \omega_nで規格化すると

\displaystyle G(j\omega) = \frac{1}{{\omega_n}^2 -  \omega^2 +j 2\zeta \omega_n \omega} = \frac{1}{1-\eta^2+j2\zeta\eta}

 

ここで,  \omega \ll \omega_n のとき,  \omega = \omega_n のとき,  \omega \gg \omega_n のときで大きく特性を場合分けできます*2. 

 

このうち,  \omega = \omega_n のときのゲインに着目すると,

\displaystyle |G(j\omega)| = \left| \frac{1}{1-\eta^2+j2\zeta\eta} \right|

となるので,この分母が最小になるとき, つまり,

\displaystyle |g_{den}(\eta)| = (1-\eta^2)^2+(2\zeta\eta)^2

が最小になるとき ,共振ピークが求まります.

 

そこで \eta微分すると

\displaystyle 4 \eta(\eta^2 + 2\zeta\eta^2 -1)

 この根は

\displaystyle \eta = 0, \pm \sqrt{1-2\zeta^2}

なので, \zetaの正の範囲での場合分けで,共振の有無が分かります.

 

0< \zeta< 1/ \sqrt{2}のとき

根が\eta = \sqrt{1-2\zeta^2}で共振になります.

 

  1/ \sqrt{2}< \zeta のとき

実数根が\eta = 0のみなので, |G(j\omega)| = 1となり

共振は生じません.

 

 

一方で,二次遅れ系の伝達関数の特徴を考えると,

 \zetaが小さいほど,位相遅れが小さいので,

結局, \zeta = 1/\sqrt{2}が,

カットオフ周波数において共振ピークを持たず,

かつ,位相遅れが最も小さい二次遅れ系の伝達関数になり,

扱いやすいローパスフィルタだと考えることができます.

 

【参考1】

実装も含めた,一次のフィルタについては以下.

qiita.com

 

satabeblog.com

 

 【参考2】

N次のButterworth Filterの減衰の傾きは,N×20 dB/decadeになります

cc.cqpub.co.jp

 【脚注】

*1:いわゆる,Butterworth Filterです

ja.wikipedia.org

 

 

*2:詳細は,制御工学の教科書の,二次遅れ系の周波数特性の項に書いてあります.

制御工学の基礎

制御工学の基礎

  • 作者:修一, 足立
  • 発売日: 2016/04/20
  • メディア: 単行本(ソフトカバー)