Raspberry Pi MouseでSLAMやナビゲーションを行うためのROSメタパッケージです。
その他のRaspberry Pi MouseのROSサンプル集はrt-net/raspimouse_ros_examplesで紹介しています。
現在、以下のROSのディストリビューションに対応しております。
- Melodic (
melodic-devel) - Noetic (
noetic-devel)
Raspberry Pi Mouse V3とRemote PCを用意しましょう。
Raspberry Pi Mouse V3にはデバイスドライバをインストールしている必要があります。こちらのRT Software Turtorialsをご参照ください。
また、ロボットとRemote PCは、同じネットワーク上で同じROS Masterを指定する必要があります。詳しい設定方法についてはこちらのRT Software Tutorialsをご参照ください。
以下のリストは、必要なソフトや対応しているセンサなどの一覧を示します。
-
- Raspberry Pi
- Raspberry Pi 4 Model B
- Linux OS
- Ubuntu 20.04
- Device Driver
- ROS
- Raspberry Pi Mouse ROS Package
- オプションパーツ
- Raspberry Pi
-
Remote PC
- Linux OS
- Ubuntu 20.04
- ROS
- Raspberry Pi Mouse ROS Package
- Linux OS
また、本パッケージは以下の機材に対応しています。
- ゲームパッド
- レーザ測域センサ
以下のコマンドをロボット側で実行してインストールを行います。
cd ~/catkin_ws/src
# Clone the ROS packages
git clone https://github.com/ryuichiueda/raspimouse_ros_2
git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_ros_examples
git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_slam_navigation_ros
# Install dependencies
rosdep install -r -y --from-paths . --ignore-src
# make and install
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash以下のコマンドをRemote PC側で実行してインストールを行います。
cd ~/catkin_ws/src
# Clone the ROS packages
git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_slam_navigation_ros
# Install dependencies
rosdep install -r -y --from-paths . --ignore-src
# make and install
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash無事インストールが完了したら、以下の一連のコマンドを実行しましょう。SLAMで地図生成を行い、作った地図を利用してナビゲーションを行うことができます。それぞれの詳しい動かし方などについてはSLAM、ナビゲーションを参照してください。
ここでは例として、ゲームパッドのLogicool F710とレーザ測域センサのLDS-01を使用しています。
# SLAMで地図生成
## ロボット側で以下の2つのコマンドを実行
## ゲームパッドの操作方法については、 https://github.com/rt-net/raspimouse_ros_examples#joystick_control を参照してください
roslaunch raspimouse_slam robot_bringup.launch lds:=true port:=/dev/ttyUSB0
roslaunch raspimouse_slam teleop.launch joy:=true joyconfig:=f710
## PC側で次のコマンドを実行実行
roslaunch raspimouse_slam raspimouse_slam.launch lds:=true
## 地図ができたら引き続きPC側で実行
roscd raspimouse_slam/maps
rosrun map_server map_saver -f $MAP_NAME
# ナビゲーション
## ロボット側で次のコマンドを実行
roslaunch raspimouse_navigation robot_navigation.launch lds:=true port:=/dev/ttyUSB0
## PC側で次のコマンドを実行
roslaunch raspimouse_navigation pc_navigation.launch map_file:=$(rospack find raspimouse_slam)/maps/$MAP_NAME.yaml
## RVizが立ち上がるのでそこで操作してみましょう
## 指定した目標位置・姿勢への移動を中止する場合は次のコマンドを実行
rostopic pub -1 /move_base/cancel actionlib_msgs/GoalID -- {}LiDARを使ってSLAM(自己位置推定と地図生成)を行うパッケージです。
ここでは、レーザ測域センサとしてLDS-01、ゲームパッドとしてLogicool Wireless Gamepad F710を使用しています。
Raspberry Pi Mouse上で、次のコマンドを実行します。LiDARなどを起動します。
roslaunch raspimouse_slam robot_bringup.launch lds:=true port:=/dev/ttyUSB0Raspberry Pi Mouse上で、次のコマンドを実行します。ゲームパッドで制御することができます。
ゲームパッドの操作方法については、raspimouse_ros_examplesの"joystick_control"を参照してください。
roslaunch raspimouse_slam teleop.launch mouse:=false joy:=true joyconfig:=f710次のコマンドを実行して、SLAMを開始します。 RVizが立ち上がり、Raspberry Pi Mouseを動かすと地図が構築されていく様子が見られます。
Remote PC側で起動することを推奨します。この時、Remote PCとRaspberry Pi Mouseが同じネットワーク上で同じROS Masterを指定している必要があります。
roslaunch raspimouse_slam raspimouse_slam.launch lds:=true地図の保存には次のROSノードを実行します。Remote PC側で起動することを推奨します。
roscd raspimouse_slam/maps
rosrun map_server map_saver -f $MAP_NAME.pgmと.yamlの2つのファイルが生成されています。
~/catkin_ws/raspimouse_slam_navigation_ros/raspimouse_slam/maps$ ls
$MAP_NAME.pgm $MAP_NAME.yaml地図の確認ができたら、起動しているROSノードを全て終了します。
以下の動画は、実際にRaspberry Pi MouseがSLAMをしている様子を映しています。
SLAMで地図を生成した後、その地図を使って自己位置推定を行い、地図上の任意の座標まで自律移動を行います。
このパッケージはamclとmove_baseを使用しています。予め作られた地図と周辺環境の情報から自己位置推定を行い、地図上の任意の座標まで自律移動を行うことができます。
ここでは、レーザ測域センサとしてLDS-01を使用しています。
また、Raspberry Pi MouseとRemote PCが同じネットワーク上で同じROS Masterを指定している必要があります。
まずはRaspberry Pi Mouse上で、次のコマンドを実行します。Raspberry Pi MouseのモータとLiDARを起動するためのノードを起動しています。
roslaunch raspimouse_navigation robot_navigation.launch lds:=true port:=/dev/ttyUSB0Remote PC上で、次のコマンドを実行します。自己位置推定と経路生成用のノードを起動し、RVizを立ち上げます。(下記画像を参照)
引数のmap_fileパラメータには、SLAMで生成した地図(.yamlファイル)を指定してください。
roslaunch raspimouse_navigation pc_navigation.launch map_file:=$(rospack find raspimouse_slam)/maps/$MAP_NAME.yaml無事RVizが起動したら、まずは初期位置・姿勢を合わせます。RVizの画面上部の緑色の矢印2D Pose Estimateをクリックしましょう。地図上で、ロボット実機が最もらしい位置までマウスを持ってきてクリックしそのままホールドします。大きな矢印が出ている状態で、マウスを動かすと向きを指示することが可能なので、最もらしい向きに合わせてから、ボタンを離しましょう。
初期位置・姿勢の指示が完了したら、次は目標位置・姿勢を指示します。RVizの画面上部の紫色の矢印2D Nav Goalをクリックしましょう。地図上で、初期位置・姿勢を合わせた時と同様に、地図上をクリックして目標位置を、ホールドしたままマウスを動かして目標姿勢を指示しましょう。すると、ロボットが自律移動を開始します。
与えた目標位置・姿勢への移動を停止したい場合は、新しいターミナルで次のコマンドを実行しましょう。RViz上には目標位置・姿勢が残りますが、ロボットは停止します。新たに、2D Nav Goalを設置すると、そちらに目標位置・姿勢が置き換わります。
rostopic pub -1 /move_base/cancel actionlib_msgs/GoalID -- {}また、ロボットが予期しない挙動をした場合は、安全に気をつけながらRaspberry Pi Mouse V3のモータ用電源をOFFにしましょう。 モータ用電源はRaspberry Pi Mouse V3に搭載されたスイッチでON / OFFできます。 あるいは、次のコマンドを実行すると、ソフトウェアスイッチでモータ電源をOFFにできます。
rosservice call /motor_off以下の動画は、実際にRaspberry Pi Mouseがナビゲーション(初期位置の設定や目標位置・姿勢の指示)をしている様子を映しています。
(C) 2021 RT Corporation
各ファイルはライセンスがファイル中に明記されている場合、そのライセンスに従います。特に明記されていない場合は、Apache License, Version 2.0に基づき公開されています。 ライセンスの全文はLICENSEまたはhttps://www.apache.org/licenses/LICENSE-2.0から確認できます。
※このソフトウェアは基本的にオープンソースソフトウェアとして「AS IS」(現状有姿のまま)で提供しています。本ソフトウェアに関する無償サポートはありません。 バグの修正や誤字脱字の修正に関するリクエストは常に受け付けていますが、それ以外の機能追加等のリクエストについては社内のガイドラインを優先します。






