趣味で作ってるロボット用ソフトウェア
 All Classes Files Functions Enumerations Enumerator Friends Pages
シミュレータ

実際のロボットを用いずにロボット用プログラムを作成するための機能(シミュレータ)についての説明です。

シミュレータにより実現したいこと

作成するシミュレータで実現したいことは、

といったことです。
シミュレータを使うために必要な前処理をなくし、シミュレータを使うハードルを下げることを目指しています。

これらのことを実現することで、気分良くロボット用のソフトウェア開発ができることを目指します。

シミュレータの使用イメージ

実際のロボット用のプログラム実行とシミュレータ用のプログラム実行の切替えは、コマンドライン引数で切替えます。

実機用のプログラム実行

./robot_program 

シミュレータ用のプログラム実行

./robot_program -s 

引数のみで切替えられるようにすることで、シミュレータを簡単に試せるようにします。

また、障害物の配置は Lua スクリプトで行えるようにします。
このスクリプトのファイル名を引数で指定するなどしてシミュレータで利用できるようにします。

-- 幅 1 [m], 奥行き 0.5 [m], 高さ 0.8 [m] の物体を生成する
box = Box(1.0, 0.5, 0.8)
-- X 軸方向 2.0 [m], Y 軸方向に 3.0 [m] の位置に、
-- Z 軸を中心に 45 [deg] だけ回転させた状態で配置する
box:set_position(Position(2.0, 3.0, deg(45)))

このスクリプトは手動で変更することを想定していますが、何かのエディタから自動生成することも可能です。

また、障害物を取り除いたり移動させることができるようにします。これにより、開くドアをシミュレーションしたり、移動する物体を追従するといったタスクが扱えるようになります。

シミュレータ利用の問題点

シミュレータは便利ですが、実際のロボットと全く同じ動作をさせることはできません。「シミュレータなら動作するけれども、実際のロボットだと動作しない」ということも発生します。この問題への対処は、「割り切って使うこと」だと思います。
例えば「シミュレータでは論理的な動作を検証するのに利用し、実際のロボットは想定していない問題を発見するのに使う」という、使い方です。

また、他の問題として「シミュレーションに対応していないデバイスを使ったプログラムはシミュレーションできない」といった問題や、「シミュレータを利用するとプログラムの動作が遅くなる」といった問題が起こりえます。
それから、複数のロボット用のシミュレーションは想定していないため、複数ロボットを協調させるプログラム開発は、シミュレータを使って個別のプログラムを開発後、実際のロボットを用いて実環境でテストする必要があります。複数ロボット対応のシミュレータについては、1つのロボットのシミュレータが適切に動作した段階で、改めて検討したいと思います。