【自律型ロボット製作記】ついにロボットベースキットINOBO試作機完成しました!
どうもこんにちは、Inoma Createの猪股です。
製作していた自律型ロボットの試作品がついに完成しました。
ロボットの名称は
ということで、INOBOの概要を紹介したいと思います。
コンセプト
INOBOのコンセプトは、
したがって、ベースの自律走行機能については、誰でも簡単に操作できるようにAndroidアプリと連携し、またサービスロボットへと展開できるようにROS-MQTTブリッジを搭載し、拡張性を持たせました。
以下に簡単なINOBOの紹介ページを作りましたので興味のある方はご覧ください。
ロボットベースキットINOBO
ハード構成
ハード構成は、最終的には以下となりました。
メインボードはjetsonNano、モータードライバー用のサブボードとしてRaspberry Pi Pico+KITRONIK-5331を搭載。
ライダーはRPLIDAR A1M8、一応raspberry Pi CameraV2.1カメラも搭載しました。
バッテリーは、モーター駆動用バッテリー(単三電池×6)、jetsonNano用のモバイルバッテリーです。
モーターは、エンコーダー付DCモーター、筐体ベースは、Davstorのタンクを使用しました。(エンコーダー付モーターを使うため、筐体は改造しています)
システム構成
ナビゲーション時のシステム構成を紹介します。
モーターエンコーダから算出したオドメトリ情報とライダーからのスキャン情報を元にロボットの自己位置を推定します。具体的には、pose_fusion_nodeで、odomとbase_linkをつなぐTFを生成し、emcl2でmapとodomをつなぐTFを生成します。ホイールエンコーダから算出した位置は誤差が蓄積していきますが、emcl2がその誤差を補正してくれます。
推定した位置と事前に作成したmap情報、Androidアプリから通知された目的地情報をもとに、move_baseがナビゲーションを行い、速度指示cmd_velを出力する流れです。
※pose_fusion_nodeは、自作のノードです。元々laser_scan_matcherというノードのオドメトリとモーターエンコーダからのオドメトリを融合するようなノードにする予定でしたが、結局モーターエンコーダからのオドメトリをそのまま使ったほうがよいという結果になり、特に融合せずに使ってます。
現ロボットには、IMUセンサー等は使っていませんが、センサー融合を考えるなら、一般的なrobot_localizationなどを使うことでセンサー融合もできると思います。(そのうちやってみようと思います)
工夫しした点
Androidアプリ連携
本ロボットシステムで最も工夫した点は、Androidアプリとの連携です。主な機能としてマップ作成モード、ナビゲーションモードがあり、Androidアプリ内で、マップの作成、経路ポイントの設定、自律巡回開始が可能です。また、ラジコン操作、ロボットのシャットダウンも実施できるようにしました。
プログラム起動の仕組みは、AndroidアプリにROS javaでノードを立て、ROSトピックでロボット側のノードとやり取りして、各プログラムの起動指示を行うイメージです。
拡張性:ROS-MQTTブリッジを搭載
ロボット内にROS-MQTTブリッジを搭載し、外部ツールからMQTTのトピックを使ってロボットと連携できるようにしました。
例えば、Node-REDというビジュアルプログラミングツールを使って、簡単なダッシュボードを作ったり、他のサービスと連携したりできます。
現状、MQTTのAPIとしては、自律走行関連のAPIや情報通知ぐらいですが、もう少しサービスとして使えるように整備していこうと思います。
拡張性について説明していくと長くなるのでまた別の記事で紹介しようと思います。
今後の課題、展開について
今後は、様々なサービスロボットへの展開を可能にするため、拡張機能をもっと充実させていきたいと思ってます。(カメラ+AIを使った機能など)
また、本ロボットをどのように世の中へ展開(リリース)していくかは検討中ですが、
とりあえず、お付き合いのある企業様へ提案したり、ロボット開発の技術フォローをしたりしながら検討していこうと思います。
少し時間はかかりましたが、自分で一から製作したので、ROSを使ったロボットシステムを学ぶには大変良い経験になりました。
また、次の展開を色々考えていこうと思います。
それでは!!
スポンサーリンク