ROSの開発を通して
ROS1を使ってて,ROS2も同じように使えるっていう話だけど,何がどう違うのかわからなくて,とりあえず自分の学んだ限りでの知識でROS1の部分についてまとめてみる.
- 概要
使ってみた実感でのROSをまとめてみる.まずROSはロボットを制御するためのツールで,一部しかないがユーザーに対してサポートしてくれるものであるなっていう感じ.
ROSはノード間の通信やセンサーのドライバーとか,ほかの機器との通信(センサ含むカメラとかDepthカメラLRF)をサポートしている. - 開発の順序
まず環境はLinuxであること.OS Xは知らん.
今自分の環境はUbuntu 16.04(LTS)にROS Kineticを乗せてる.Lunarとかでもいいけれど,ネットにある記事数が違ったり,センサーによってはROSのバージョンに対応していなかったりするから,ダウングレードも必要.
インストールはROS Wikiか過去記事から英語->kinetic/Installation/Ubuntu - ROS Wiki
日本語->ja/kinetic/Installation/Ubuntu - ROS Wiki
インストールすれば,あとは自分でパッケージ(ロボット等を制御するためのメインブレイン部分)を作っていく.
開発ではcatkinを用いていて,コーディング後,ビルドの対象をCMakelistに書き込んで,ビルドしてマスターを起動して各ノードを実行する.
ノードひとつひとつにセンサー・機器に対しての通信とか,データ処理とかを担当させてる.
各ノードはmessage, service, actionで通信ができる.通信に用いるデータ型はユーザー自身で定義することも可能.
実行しなければならないノードが増えてくれば,launchを使って幾つものノードを一度に実行して楽に行う. - 使ってみた感想
開発において作成したプログラムはもちろん,通信に用いるデータ型などはCMakelistに書き込む必要があり,それをいちいちするのも面倒くさいなっていう風に感じた.githubで他人のコードを使いまわすことができるので,楽に開発できるらしいが・・・そこまでじっくり開発した経験がないので知らん.
あと去年(NHK学生ロボコン2018に向けてのロボット)の開発中,ロボットのセンサデータをフィードバックする必要があった時に,基本的にC++でコードを書くのだが,センサデータを可視化するツールでPythonのMatplotlibがどうしても使いたいときがあった.その時は,簡単にノード間の通信ができて,簡単にセンサデータを可視化できた.楽ちんだった.
今なら,C++でRvizとかなりなんなりを使って,もっと楽に簡単に実装する.