AbudoriLab.です。
これまでにSLAMの概念を理解する記事を難しい式など使用せずにまとめてきました。
www.abudorilab.com
次の段階として誰でも使えるツールを用いて地図を作成する方法をまとめてます。
SLAMを理論的に理解する記事を先に作成しようとも思いましたが、机上の学びよりも手を動かして経験する学びで得られるメリットが高いと考えました。
もちろん理論的な解説もまとめる予定で、プログラムでの解説と合わせて後の記事として投稿していきます。
まずは、チュートリアルとしてシュミレータを使って遊んでみます。
この記事からロボットのソフトウェア製作でのベース環境を構築することができ、さらに、自律移動をロボット実機で実装する際の準備にもなります。
具体的には作成した地図を使って、ロボットに目的地まで自律移動させてみます。
環境構築
OSはubuntu 18.04、開発プラットフォームはROS2 dashingを使用します。
本の受け売りとなりますが、ROS(Robot Operating System)はソフトウェア開発者のロボット・アプリケーション作成を支援するライブラリとツールを提供しており、さまざまな分野の先駆者達が築いた膨大な資産を利用できます。*1
ROSの次世代バージョンであるROS2は現在進行中で開発されていて、主に研究目的で開発されたROSを商業用途にまで拡大することを構想されています。
ROS2はROSと比べると使えるライブラリも潤沢ではないので、ROSの好む方も多いと思いますが、初めての方は今後のことを考えるとROS2の利用をオススメします。
インストール
必要なソフトウェアは以下のとおりです。
- 開発プラットフォーム: ROS2 dashing
- SLAMのライブラリ: Cartographer
- 行動計画のライブラリ: Navigation2
- シミュレータ: gazebo
- モデル: Turtlebot3
- おまけ: rviz2
これらをまとめてインストールする方法を提示します。
手順-0 ターミナルの起動
Ctrl+Alt+T
手順-1 保存先のフォルダーを指定してください
※ ホームに作成しました
手順-2 shellファイルをgit clone
shellファイルを入手できます
github.com
git clone https://github.com/AbudoriLab-org/lapin-env.git
手順-3 ターミナルに下記のコマンドを入力してインストールを実行
※ git cloneしたフォルダーまでターミナルで移動してください
ホームにgit cloneした場合
cd ~/lapin-env
bash install.sh
手順-4 ターミナルに下記のコマンドを入力してモデルの読み込みを実行
※好みのエディターを使用してください(例としてgeditを使用します)
gedit ~/.bashrc
.bashrcの最下段に下記を入力します
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/dashing/share/turtlebot3_gazebo/models export TURTLEBOT3_MODEL=burger
ファイルを閉じて更新コマンドをターミナルに入力して実行
source ~/.bashrc
※新規にターミナルを開く場合は自動で.bashrcを読み込むため、.bashrcを更新しない限りこのコマンドは以降使用しません。
SLAMを動かして地図作成
※シミュレータを使用します。
Lidarが搭載されたロボットを走らせて点群を計測し、それを入力としてSLAMを用いて地図を作成します。
ここからはずっとターミナルを使用します。
手順-1 新規ターミナルに下記のコマンドを入力してシミュレータ(gazebo)を起動
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
図1のようなウィンドウが表示されると思います。
手順-2 新規ターミナルに下記のコマンドを入力してシミュレータ時刻での同期を指示
計算が間に合わず次々とデータが送られたときに、ユーザの意図に反した結果になる場合があります。
それを避けるためのおまじないです。
ros2 param set /gazebo use_sim_time True
手順-3 SLAM(cartographer)の実行
可視化ツール(rviz2)が立ち上がり、地図が作られていく経過を観察できます。
ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
手順-4 新規ターミナルに下記のコマンドを入力してキーボード操作を実行
A,W,D,X,Sキーでロボットを操作して、全体の地図を作成します
ros2 run turtlebot3_teleop teleop_keyboard
ロボットの自律移動をシミュレート
目的地までの移動を指示して、ロボットが自律移動する経過を観察してみます。
手順-0 rviz2起動の設定
デフォルトではrviz2が自動的に起動しないためアレンジを加えます。
まずは、新規ターミナルで下記のコマンドを入力します。
cd /opt/ros/dashing/share/nav2_bringup/launch
sudo gedit nav2_bringup_launch.py
下記に記した箇所に加筆をお願いします。
... start_lifecycle_manager_cmd = launch_ros.actions.Node( package='nav2_lifecycle_manager', node_executable='lifecycle_manager', node_name='lifecycle_manager', output='screen', parameters=[configured_params]) # この後に以下のプログラムを追加 rviz_config_dir = os.path.join( get_package_share_directory('nav2_bringup'), 'launch', 'nav2_default_view.rviz') start_rviz2_cmd = launch_ros.actions.Node( package='rviz2', node_executable='rviz2', node_name='rviz2', arguments=['-d', rviz_config_dir], parameters=[{'use_sim_time': use_sim_time}], output='screen' ) ... ld.add_action(start_navigator_cmd) # この後に以下のプログラムを追加 ld.add_action(start_rviz2_cmd)
これで準備完了です。
手順-1 gazeboを起動
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
手順-2 シミュレータ時刻での同期を指示
ros2 param set /gazebo use_sim_time True
手順-3 行動計画ライブラリ(Navigation2)を起動
ここで作成した地図の使用を指示します。
ros2 launch nav2_bringup nav2_bringup_launch.py use_sim_time:=True map:=~/maps/map.yaml
rviz2が起動して地図が描画されます。
手順-4 ロボットの位置と向きを教示
rviz2上で自分の位置と向きをロボットに教示します。
メニューバーの"2D Pose Estimateを押し、地図上でロボットの位置をクリックします。そのままロボットが向いている方向にマウスを動かして矢印が伸びたところではなします。
すると、下図のように地図上で色が描画されると思いますが、これはコストマップと呼ばれています。*2
手順-5 自律移動を実行
rviz2でメニューバーのNavigation2 Goalをクリックして、手順-4と同じやり方で目的地をロボットに教示します。
すると、rviz2,gazebo両方でロボット自身で行動計画して目的点まで自律移動する経過を観察できます。
次回は実物のLidarを用いて地図作成し、ループクローズが起きるところを観察したりして遊んでみようと思います。
RPLidarを使用して実際に地図を作成する方法を紹介いたします。
www.abudorilab.com
おわりに
AbudoriLab.の第一目標は、今回紹介した地図あり自律移動を自作ロボットで実現することです。
実機ではシミュレーションよりもやることが多くなりますが、第一目標を達成したら本活動の基盤が出来上がります。
その後はロボットアームをつけたり、完全自律移動の研究をやったりといろいろ遊んでいきたいと構想してます。
本日ご紹介した内容を応用することで自作したロボットをシミュレータに読み込みことが可能になります。
AbudoriLab.のロボットLapinで自律移動をシミュレートして遊んでみました。
www.abudorilab.com