RobotinoでROS
RobotinoとROSで真面目につなげる方法を考えたけど,適切なRobotino-api2を得るのが難しいので,View2のUDP経由でROSをつなげてみました.
まず,ものは,BabyTigers/python/にて公開しています.
Robotino <=> RobView <=> UDPでpython <=> ROS
という感じでつなげます.
まず,Robotino の部分ですが,実機を用意しても良いですし,RobotinoSim でも大丈夫です.
シミュレータは,openRobotinoのページからダウンロードしましょう.
なお,Ubuntu にインストールするにはwine が必要です.
Wineを入れてRobView2を使う方法に関しては,Robotino2をUbuntu 18.04から制御を参考にして下さい.
この方法で,robotinoSim Demoも同様にインストールできます.
同一ネットワークにつながっている別のWindowsマシンにインストールして,そちらで実行しても大丈夫です.
ぼちぼち負荷がかかるシミュレータですので,余裕のあるマシンで動かす方が良いでしょう.
余裕のないマシンで動かした場合,画面の更新がされない場合があります(UbuntuのWineの場合も同様).
そのときは,マウスで画面を掴んで動かしてやると,更新されます….
次に,Robotino <=> Robview の部分です.
RobView のプログラムは,ros.rvw2です.
なんと,Robotino 2にも対応しています!
Robotino のIPアドレスは,36行目を変更して下さい.
<md:varExpr md:value="127.0.0.1:8080" md:varname="ipAddress"/>
シミュレータの場合は,それを動かしているパソコンのIPアドレスに変更して下さい.
ファイアウォールが通信を止めている場合があるかもしれませんので要注意.
Robotino 3の場合は,ポート番号を12080にしましょう.
Ubuntu 18.04でRobview2 を使う場合は,wine同様,Robotino2をUbuntu 18.04から制御を参考にして下さい.
Ubuntu 18.04でRobview3 を使う場合は,パッケージがありますので,aptのsource.listを変更(というかsource.list.dにファイルを追加)して,インストールして下さい.
GUIで動かしても良いですし,robview_interpreter を使ってCUI で動かすことも可能です.
RobView <=> ROS の部分は,udp_comm.pyを使って下さい.
RobView からRobotino の情報(オドメトリー,速度)を受け取り,ROSの方でPublish しています.
今のところ,以下の形でPublish していますが,今後変更する可能性は大いにあります.
pub01 = rospy.Publisher('robotino/odometry', Pose, queue_size = 10) pub02 = rospy.Publisher('robotino/bumper', Bool, queue_size = 10) pub03 = rospy.Publisher('robotino/getVelocity', Float32MultiArray, queue_size = 10)
また,ROS経由で指示を受け取って,RobView の方でRobotino を動かすこともしています.
今の段階では,ロボットの速度(x, y, phi)を扱っています.
rospy.Subscriber('robotino/velocity', Float32MultiArray, setVelocity)
これはそのうち,モード情報も加えて,別の指示も出せるようにしていくつもりです.
例えば,「指定された座標まで走る」(= Position Driver)とか,「相対的な座標(例:前方1m)まで走る」とか,「経路(=複数の点)を走る」(= Path Driver)とかです.
指示だしのサンプルプログラムは,sin02.pyです.
あと,Robotino 搭載の赤外線距離センサ(IR1 – IR9)に関しては,今のところ利用していません.
必要ならつなげようと思います.
LRF やカメラに関しては,RobView で扱うのではなく,ROS経由というかpythonやC側で扱った方が楽そうなので,このプログラムでは触っていません.
これ以外に,何が必要かなぁ.
コメントを残す