Skip to content

Commit

Permalink
ROS 2 Jazzyへの対応 (#13)
Browse files Browse the repository at this point in the history
* Update "slam_node" to utilize LifecycleNode in accordance with changes made in "slam_toolbox".

* collision_monitorを仮で設定

* "bt_navigator"で"plugin_lib_names"がデフォルトで選ばれるようになり、残しておくと複数定義でエラーとなるため削除。充電ドックを設定しないといけないためダミーの値を設定

* "docking_server"を最低限の構成に変更した
[補足]コストマップは読み込めるがナビゲーションできない状態

* 速度について`Twist`から`TwistStamped`に統一するための設定"enable_stamped_cmd_vel: True"を記述

* "collisiton_monitor"の"use_sim_time"を"True"にしてシミュレーション上でのNavigationが動作することを確認した。

* "default_nav_to_pose_bt_xml"と"default_nav_through_poses_bt_xml"について指定方法の記述を追加(しかし、デフォルトを指定されるようにコメントアウト)

* 実験的に"use_sim_time"を"True"で実験をした変更のコミット。
[補足]"controller_server"では"True"にするとNavigationが開始されない。

* "use_sim_time"を起動コマンドから与えるように変更した
[補足]シミュレータ上での動作のみを確認した

* パラメータファイルでの構成要素を最低限にした

* Update README for Jazzy

* Fix reference links

* Add branch links

* Update CI for Jazzy

* Move .ci.rosinstall file

* Fix typo in README

* Add .ci.rosinstall settings for dependent packages

* Adapted format for ROS 2 Jazzy

* Add authors

* Removed "-devel" in branch name

* Set the default for "use_sim_time" to "False" and corrected the specification method in the README

* Fixed MAP path
  • Loading branch information
KuraZuzu authored Nov 28, 2024
1 parent 244bfbb commit 0357d49
Show file tree
Hide file tree
Showing 15 changed files with 444 additions and 321 deletions.
9 changes: 0 additions & 9 deletions .ci.rosinstall

This file was deleted.

12 changes: 12 additions & 0 deletions .github/workflows/.ci.rosinstall
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
- git:
uri: https://github.com/rt-net/raspimouse2.git
local-name: raspimouse2
version: jazzy
- git:
uri: https://github.com/rt-net/rt_usb_9axisimu_driver.git
local-name: rt_usb_9axisimu_driver
version: jazzy
- git:
uri: https://github.com/rt-net/raspimouse_ros2_examples.git
local-name: raspimouse_ros2_examples
version: jazzy
14 changes: 9 additions & 5 deletions .github/workflows/industrial_ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,20 @@ on:
- cron: "0 2 * * 0" # Weekly on Sundays at 02:00

env:
UPSTREAM_WORKSPACE: .ci.rosinstall
UPSTREAM_WORKSPACE: .github/workflows/.ci.rosinstall

jobs:
industrial_ci:
strategy:
fail-fast: false
matrix:
env:
- { ROS_DISTRO: humble, ROS_REPO: ros }
ROS_DISTRO: [jazzy]
ROS_REPO: [main]

runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: "ros-industrial/industrial_ci@master"
env: ${{ matrix.env }}
env:
ROS_DISTRO: ${{matrix.ROS_DISTRO}}
ROS_REPO: ${{matrix.ROS_REPO}}
82 changes: 41 additions & 41 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# raspimouse_slam_navigation
Raspberry Pi MouseでSLAMが行える`raspimouse_slam`パッケージとナビゲーションが行える`raspimouse_navigation`パッケージです。
Raspberry Pi MouseでSLAMが行える`raspimouse_slam`パッケージとナビゲーションが行える`raspimouse_navigation`パッケージです。

<img src=https://rt-net.github.io/images/raspberry-pi-mouse/navigation_ros2_setting_goalpose.gif width=500 />

その他のRaspberry Pi MouseのROS 2サンプル集は[rt-net/raspimouse_ros2_examples](https://github.com/rt-net/raspimouse_ros2_examples)で紹介しています。
その他のRaspberry Pi MouseのROS 2サンプル集は[rt-net/raspimouse_ros2_examples](https://github.com/rt-net/raspimouse_ros2_examples)で紹介しています。

現在、以下のROS 2のディストリビューションに対応しております。
- Foxy ([foxy-devel](https://github.com/rt-net/raspimouse_slam_navigation_ros2/tree/foxy-devel))
- Humble ([humble-devel](https://github.com/rt-net/raspimouse_slam_navigation_ros2/tree/humble-devel))
現在、以下のROS 2のディストリビューションに対応しております。
- Humble ([humble](https://github.com/rt-net/raspimouse_slam_navigation_ros2/tree/humble))
- Jazzy ([jazzy](https://github.com/rt-net/raspimouse_slam_navigation_ros2/tree/jazzy)) (This branch)

---
# Table of Contents
Expand All @@ -21,26 +21,26 @@ Raspberry Pi MouseでSLAMが行える`raspimouse_slam`パッケージとナビ

<a name="Requirements"></a>
## Requirements
Raspberry Pi MouseとRemote PCを用意しましょう。
Raspberry Pi Mouseにはデバイスドライバをインストールしている必要があります。こちらの[RT Software Turtorials](https://rt-net.github.io/tutorials/raspimouse/driver/install.html)をご参照ください。
Raspberry Pi MouseとRemote PCを用意しましょう。
Raspberry Pi Mouseにはデバイスドライバをインストールしている必要があります。こちらの[RT Software Turtorials](https://rt-net.github.io/tutorials/raspimouse/driver/install.html)をご参照ください。

以下のリストは、必要なソフトや対応しているセンサなどの一覧を示します。
以下のリストは、必要なソフトや対応しているセンサなどの一覧を示します。

- [Raspberry Pi Mouse V3](https://rt-net.jp/products/raspberrypimousev3/)
- Raspberry Pi - Raspberry Pi 4 Model B
- Raspberry Pi 3 では動作確認していません
- Linux OS - Ubuntu 22.04
- Linux OS - Ubuntu 24.04
- Device Driver - [rt-net/RaspberryPiMouse](https://github.com/rt-net/RaspberryPiMouse)
- ROS - [Humble Hawksbill](https://docs.ros.org/en/humble/Installation.html)
- ROS - [Jazzy Jalisco](https://docs.ros.org/en/jazzy/Installation.html)
- オプションパーツ
- [Raspberry Pi4用コネクタ](https://www.rt-shop.jp/index.php?main_page=product_info&products_id=3776)
- [マルチLiDARマウント](https://www.rt-shop.jp/index.php?main_page=product_info&cPath=1299_1395&products_id=3867)

- Remote PC
- Linux OS - Ubuntu 22.04
- ROS - Humble Hawksbill
- Linux OS - Ubuntu 24.04
- ROS - Jazzy Jalisco

また、本パッケージは以下の機材に対応しています。
また、本パッケージは以下の機材に対応しています。
- ゲームパッド: [raspimouse_ros2_examplesのREADME参照](https://github.com/rt-net/raspimouse_ros2_examples#requirements-1)
- レーザ即域センサ
- [RPLIDAR A1](https://www.slamtec.com/en/Lidar/A1)
Expand All @@ -54,9 +54,9 @@ Raspberry Pi Mouseにはデバイスドライバをインストールしてい
```sh
cd ~/ros2_ws/src
# Clone the ROS packages
git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_ros2_examples
git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_description
git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_slam_navigation_ros2
git clone -b $ROS_DISTRO https://github.com/rt-net/raspimouse_ros2_examples
git clone -b $ROS_DISTRO https://github.com/rt-net/raspimouse_description
git clone -b $ROS_DISTRO https://github.com/rt-net/raspimouse_slam_navigation_ros2
# Install dependencies
rosdep install -y -i --from-paths . --ignore-src

Expand All @@ -71,8 +71,8 @@ source ~/ros2_ws/install/setup.bash
```sh
cd ~/ros2_ws/src
# Clone the ROS packages
git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_description
git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_slam_navigation_ros2
git clone -b $ROS_DISTRO https://github.com/rt-net/raspimouse_description
git clone -b $ROS_DISTRO https://github.com/rt-net/raspimouse_slam_navigation_ros2
# Install dependencies
rosdep install -y -i --from-paths . --ignore-src

Expand All @@ -84,7 +84,7 @@ source ~/ros2_ws/install/setup.bash

<a name="QuickStart"></a>
## QuickStart
無事インストールが完了したら、以下の一連のコマンドを実行しましょう。SLAMで地図生成を行い、その地図を利用してRaspberry Pi Mouseを自律移動させます。それぞれの詳しい動かし方などについては[SLAM](#slam)[ナビゲーション](#navigation)を参照してください。
無事インストールが完了したら、以下の一連のコマンドを実行しましょう。SLAMで地図生成を行い、その地図を利用してRaspberry Pi Mouseを自律移動させます。それぞれの詳しい動かし方などについては[SLAM](#slam)[ナビゲーション](#navigation)を参照してください。
ここでは例として、ゲームパッドのLogicool F710とレーザ測域センサのRPLIDAR A1を使用しています。

### SLAM
Expand All @@ -95,25 +95,25 @@ ros2 launch raspimouse_slam robot_bringup.launch.py lidar:=rplidar joyconfig:=f7
## PC側で以下のコマンドを実行
ros2 launch raspimouse_slam pc_slam.launch.py
## 地図ができたら引き続きPC側で実行
## 新しい端末を開いて次のコマンドを実行しましょう
## 新しい端末を開いて次のコマンドを実行しましょう
## MAP_NAMEを地図ファイルの名前に置き換えましょう
ros2 run nav2_map_server map_saver_cli -f ~/MAP_NAME
```
地図の保存が行えたら、各種ノードを終了して次に進んでください。
地図の保存が行えたら、各種ノードを終了して次に進んでください。

### Navigation
```sh
## ロボット側で以下のコマンドを実行
ros2 launch raspimouse_navigation robot_navigation.launch.py lidar:=rplidar
## PC側で以下のコマンドを実行
ros2 launch raspimouse_navigation pc_navigation.launch.py map:=/path/to/MAP_NAME.yaml
ros2 launch raspimouse_navigation pc_navigation.launch.py map:=$HOME/MAP_NAME.yaml
```
コマンド実行後にRVizが起動します。RViz上で初期位置や目標位置・姿勢を与えるとRaspberry Pi Mouseが動きます。

<a name="SLAM"></a>
## raspimouse_slam
[slam_toolboxパッケージ](https://github.com/SteveMacenski/slam_toolbox)
を使用してSLAM(自己位置推定と地図生成)を行うパッケージです。
を使用してSLAM(自己位置推定と地図生成)を行うパッケージです。
<img src=https://rt-net.github.io/images/raspberry-pi-mouse/slam_toolbox_ros2_with_raspimouse_model.png width=500 />

ここでは、ゲームパッドとしてLogicool Wireless Gamepad F710を使用しています。
Expand All @@ -122,8 +122,8 @@ ros2 launch raspimouse_navigation pc_navigation.launch.py map:=/path/to/MAP_NAME
<img src=https://rt-net.github.io/images/raspberry-pi-mouse/slam_toolbox_ros2.gif width=500 />

### Usage
Raspberry Pi Mouse上で、次のコマンドを実行します。LiDARを起動し、ゲームパッドでRaspberry Pi Mouseを制御することができます。
ゲームパッドの操作方法については、[raspimouse_ros2_examplesの"joystick_control"](https://github.com/rt-net/raspimouse_ros2_examples#joystick_control)を参照してください。
Raspberry Pi Mouse上で、次のコマンドを実行します。LiDARを起動し、ゲームパッドでRaspberry Pi Mouseを制御することができます。
ゲームパッドの操作方法については、[raspimouse_ros2_examplesの"joystick_control"](https://github.com/rt-net/raspimouse_ros2_examples#joystick_control)を参照してください。
```sh
# RPLIDAR A1の場合
ros2 launch raspimouse_slam robot_bringup.launch.py lidar:=rplidar lidar_port:=/dev/ttyUSB0 joyconfig:=f710
Expand All @@ -133,30 +133,30 @@ ros2 launch raspimouse_slam robot_bringup.launch.py lidar:=lds lidar_port:=/dev/
ros2 launch raspimouse_slam robot_bringup.launch.py lidar:=urg lidar_port:=/dev/ttyACM0 joyconfig:=f710
```

Remote PC上で次のコマンドを実行して、SLAMを開始します。 RVizが立ち上がり、Raspberry Pi Mouseを動かすと地図が構築されていく様子が見られます。
Remote PC上で次のコマンドを実行して、SLAMを開始します。 RVizが立ち上がり、Raspberry Pi Mouseを動かすと地図が構築されていく様子が見られます。

Raspberry Pi MouseとRemote PCが通信するため、同じネットワーク上で同じ`ROS_DOMAIN_ID`を指定する必要があります。詳しい設定方法についてはこちらの[RT Software Tutorials](https://rt-net.github.io/tutorials/raspimouse/ros/samples.html#raspberry-pipcros)のROS 2タブを開いてご参照ください。
Raspberry Pi MouseとRemote PCが通信するため、同じネットワーク上で同じ`ROS_DOMAIN_ID`を指定する必要があります。詳しい設定方法についてはこちらの[RT Software Tutorials](https://rt-net.github.io/tutorials/raspimouse/ros/samples.html#raspberry-pipcros)のROS 2タブを開いてご参照ください。
```sh
ros2 launch raspimouse_slam pc_slam.launch.py
```

構築した地図をファイルへ保存するために、Remote PC 上で次のコマンドを実行します。
構築した地図をファイルへ保存するために、Remote PC 上で次のコマンドを実行します。
```sh
ros2 run nav2_map_server map_saver_cli -f ~/MAP_NAME
```

コマンドを実行すると`MAP_NAME.pgm``MAP_NAME.yaml`の2つのファイルが生成されます。
コマンドを実行すると`MAP_NAME.pgm``MAP_NAME.yaml`の2つのファイルが生成されます。

<a name="Navigation"></a>
## raspimouse_navigation
[Navigation2パッケージ](https://github.com/ros-planning/navigation2)
を使用してRaspberry Pi Mouseを自律移動させるパッケージです。
<img src=https://rt-net.github.io/images/raspberry-pi-mouse/navigation_ros2_with_raspimouse_model.png width=500 />

また、Raspberry Pi MouseとRemote PCが同じネットワーク上で同じ`ROS_DOMAIN_ID`を指定している必要があります。
また、Raspberry Pi MouseとRemote PCが同じネットワーク上で同じ`ROS_DOMAIN_ID`を指定している必要があります。

### Usage
まずはRaspberry Pi Mouse上で、次のコマンドを実行します。Raspberry Pi MouseのモータとLiDARを起動するためのノードを起動しています。
まずはRaspberry Pi Mouse上で、次のコマンドを実行します。Raspberry Pi MouseのモータとLiDARを起動するためのノードを起動しています。
```sh
# RPLIDAR A1の場合
ros2 launch raspimouse_navigation robot_navigation.launch.py lidar:=rplidar
Expand All @@ -166,35 +166,35 @@ ros2 launch raspimouse_navigation robot_navigation.launch.py lidar:=lds
ros2 launch raspimouse_navigation robot_navigation.launch.py lidar:=urg lidar_port:=/dev/ttyACM0
```

Remote PC上で、次のコマンドを実行します。自己位置推定と経路生成用のノードを起動し、RVizを立ち上げます。
引数のmapパラメータには、SLAMで生成した地図(.yamlファイル)を指定してください。
Remote PC上で、次のコマンドを実行します。自己位置推定と経路生成用のノードを起動し、RVizを立ち上げます。
引数のmapパラメータには、SLAMで生成した地図(.yamlファイル)を指定してください。
```sh
ros2 launch raspimouse_navigation pc_navigation.launch.py map:=/path/to/MAP_FILE.yaml
ros2 launch raspimouse_navigation pc_navigation.launch.py map:=$HOME/MAP_NAME.yaml
```

無事RVizが起動したら、まずは初期位置・姿勢を合わせます。RVizの画面上部の*2D Pose Estimate*をクリックしましょう。
地図上でRaspberry Pi Mouseが存在すべき尤もらしい位置をクリックし、**そのままホールド**します。
ホールドしながらカーソルを動かし、表示されている矢印の向きをRaspberry Pi Mouseの尤もらしい向きに合わせてからボタンを離します。
ホールドしながらカーソルを動かし、表示されている矢印の向きをRaspberry Pi Mouseの尤もらしい向きに合わせてからボタンを離します。
<img src=https://rt-net.github.io/images/raspberry-pi-mouse/navigation_ros2_setting_initialpose.gif width=500 />

初期位置・姿勢の指示が完了したら、次は目標位置・姿勢を指示します。RVizの画面上部の*Navigation2 Goal*をクリックしましょう。地図上で、初期位置・姿勢を合わせた時と同様に、地図上をクリックして目標位置を、ホールドしたままカーソルを動かして目標姿勢を指示しましょう。すると、Raspberry Pi Mouseが自律移動を開始します。
初期位置・姿勢の指示が完了したら、次は目標位置・姿勢を指示します。RVizの画面上部の*Navigation2 Goal*をクリックしましょう。地図上で、初期位置・姿勢を合わせた時と同様に、地図上をクリックして目標位置を、ホールドしたままカーソルを動かして目標姿勢を指示しましょう。すると、Raspberry Pi Mouseが自律移動を開始します。
<img src=https://rt-net.github.io/images/raspberry-pi-mouse/navigation_ros2_setting_goalpose.gif width=500 />

### Stopping the robot
下記画像のようなナビゲーション用のパネルがRViz左下に表示されます。
Cancelボタンを押すと自律移動が中断されます。
Cancelボタンを押すと自律移動が中断されます。
<img src=https://rt-net.github.io/images/raspberry-pi-mouse/navigation_ros2_rviz_panel.png width=300 />

Raspberry Pi Mouseを停止させる別の方法として、モータへの電源供給を止める方法もあります。
安全に気をつけながらRaspberry Pi Mouseに搭載されたスイッチを操作してモータ用電源をOFFにしましょう。
Raspberry Pi Mouseを停止させる別の方法として、モータへの電源供給を止める方法もあります。
安全に気をつけながらRaspberry Pi Mouseに搭載されたスイッチを操作してモータ用電源をOFFにしましょう。

また、次のコマンドを実行すると、ソフトウェア側からモータ電源をON / OFFできます。
また、次のコマンドを実行すると、ソフトウェア側からモータ電源をON / OFFできます。
```sh
# モータ電源をOFFにする
ros2 service call /motor_power std_srvs/srv/SetBool data:\ false
# モータ電源をONにする
ros2 service call /motor_power std_srvs/srv/SetBool data:\ true
```
```


<a name="License"></a>
Expand Down
8 changes: 4 additions & 4 deletions raspimouse_navigation/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# raspimouse_navigation

パラメータについては以下を参照すること。
- [Navigation2:初めてのロボットセットアップガイド](https://navigation.ros.org/setup_guides/index.html#setup-guides)
- [Navigation2:パラメータチューニング方法](https://navigation.ros.org/tuning/index.html)
- [Navigation2:パラメータ一覧](https://navigation.ros.org/configuration/index.html)
パラメータについては以下を参照すること。
- [Navigation2:初めてのロボットセットアップガイド](https://docs.nav2.org/setup_guides/index.html)
- [Navigation2:パラメータチューニング方法](https://docs.nav2.org/tuning/index.html)
- [Navigation2:パラメータ一覧](https://docs.nav2.org/configuration/index.html)
Loading

0 comments on commit 0357d49

Please sign in to comment.