diff --git a/docs/img/raspicat/driver/raspi_os_settings3.png b/docs/img/raspicat/driver/raspi_os_settings3.png new file mode 100644 index 0000000..bb41170 Binary files /dev/null and b/docs/img/raspicat/driver/raspi_os_settings3.png differ diff --git a/docs/img/raspicat/driver/windows-vcp-1.png b/docs/img/raspicat/driver/windows-vcp-1.png new file mode 100644 index 0000000..5d16ba3 Binary files /dev/null and b/docs/img/raspicat/driver/windows-vcp-1.png differ diff --git a/docs/img/raspicat/driver/windows-vcp-2.png b/docs/img/raspicat/driver/windows-vcp-2.png new file mode 100644 index 0000000..1461d3b Binary files /dev/null and b/docs/img/raspicat/driver/windows-vcp-2.png differ diff --git a/docs/img/raspicat/driver/windows-vcp-3.png b/docs/img/raspicat/driver/windows-vcp-3.png new file mode 100644 index 0000000..1dc5f16 Binary files /dev/null and b/docs/img/raspicat/driver/windows-vcp-3.png differ diff --git a/docs/img/raspicat/driver/windows-vcp-4.png b/docs/img/raspicat/driver/windows-vcp-4.png new file mode 100644 index 0000000..1c25bc3 Binary files /dev/null and b/docs/img/raspicat/driver/windows-vcp-4.png differ diff --git a/docs/img/raspicat/driver/windows-vcp-5.jpg b/docs/img/raspicat/driver/windows-vcp-5.jpg new file mode 100644 index 0000000..b1963e4 Binary files /dev/null and b/docs/img/raspicat/driver/windows-vcp-5.jpg differ diff --git a/docs/img/raspicat/driver/windows-vcp-6.png b/docs/img/raspicat/driver/windows-vcp-6.png new file mode 100644 index 0000000..b731ec2 Binary files /dev/null and b/docs/img/raspicat/driver/windows-vcp-6.png differ diff --git a/docs/img/raspicat/driver/windows-vcp-7.png b/docs/img/raspicat/driver/windows-vcp-7.png new file mode 100644 index 0000000..8b8d72c Binary files /dev/null and b/docs/img/raspicat/driver/windows-vcp-7.png differ diff --git a/docs/index.md b/docs/index.md index c980571..804d173 100644 --- a/docs/index.md +++ b/docs/index.md @@ -7,9 +7,14 @@ [コーポレートサイトの各製品ページ](https://rt-net.jp/works_category/allproducts/){target=_blank rel=noopener} に公開しているマニュアルや、製品に付属しているマニュアルを参照してください。 -現時点ではRaspberry Pi Mouse、Jetson Nano Mouse、CRANE+ V2のチュートリアルを掲載しています。 +現時点では下記3製品のチュートリアルを掲載しています。 **その他の製品については準備中です**。 +* [CRANE+ V2][CRV2DOC] +* [Raspberry Pi Mouse][RPMSDOC] +* [Jetson Nano Mouse][JNMSDOC] +* [Raspberry Pi Cat][RPCATDOC] + | [CRANE+ V2][CRV2DOC] | [CRANE-X7][CRX7DOC] | [Sciurus17][SC17DOC] | | :---: | :---: | :---: | | [![img][CRV2IMG]][CRV2DOC] | [![img][CRX7IMG]][CRX7DOC] | [![img][SC17IMG]][SC17DOC] | diff --git a/docs/raspicat/driver/install.md b/docs/raspicat/driver/install.md new file mode 100644 index 0000000..4186842 --- /dev/null +++ b/docs/raspicat/driver/install.md @@ -0,0 +1,270 @@ +--- +title: デバイスドライバのインストール +robot: Raspberry Pi Cat +--- + +# デバイスドライバのインストール + +このページでは +[Raspberry Pi Catのデバイスドライバ](https://github.com/rt-net/RaspberryPiMouse) +のインストール方法を説明します。 + +Raspberry Pi CatのLEDやモータを駆動するためには、 +デバイスドライバが必要です。 + +!!! info + 出荷時に付属しているRaspberry Pi OSインストール済みのmicroSDカードを利用する場合は、本ページのインストール手順を飛ばしてそのまま[サンプルプログラムの実行](./samples.md)に進むことができます。 + +## 使用機材 {: #requirements} + +* 組み立て済みRaspberry Pi Cat本体 + * [製品マニュアル](https://rt-net.jp/products/raspberry-pi-cat/#downloads)を読んで組み立て済みの状態を前提としています + * OSの再インストールを行う場合はRaspberry PiからmicroSDカードを取り外す必要があります +* USB Type-Bケーブル(Raspberry Pi Catに同梱されています) +* ノートパソコン等のPC + +## OSのインストール {: #os-installation} + +Raspberry Pi Catのデバイスドライバは**Ubuntu**と**Raspberry Pi OS (旧称Raspbian)**に対応しています。 + +後ほどRaspberry Pi Catで**ROS / ROS 2を扱う場合はUbuntu Serverのインストールを推奨します**。 + +=== "Ubuntu Server 18.04" + [Ubuntu 18.04 LTSのリリースページ](http://cdimage.ubuntu.com/ubuntu/releases/18.04/release/)から**Ubuntu 18.04 server**のイメージファイル(`ubuntu-18.04.5-preinstalled-server-arm64+raspi4.img.xz`)をダウンロードします。 + + ダウンロードしたイメージは[rpi-imager](https://www.raspberrypi.com/software/)等でSDカードに書き込みます。 + +=== "Ubuntu Server 22.04" + [Ubuntu 22.04 LTSのリリースページ](http://cdimage.ubuntu.com/ubuntu/releases/22.04/release/)から**Ubuntu 22.04 server**のイメージファイル(`ubuntu-22.04.1-preinstalled-server-arm64+raspi.img.xz`)をダウンロードします。 + + ダウンロードしたイメージは[rpi-imager](https://www.raspberrypi.com/software/)等でSDカードに書き込みます。 + +=== "Raspberry Pi OS" + Raspberry Pi OSの場合は、サイトからイメージをダウンロードせずに[rpi-imager](https://www.raspberrypi.com/software/)を使用することで、イメージを書き込むことができます。 + +## Raspberry Piへのログイン {: #raspberry-pi-login} + +Raspberry Pi Cat制御基板にはUSBシリアル変換機能が搭載されており、USB Type-BケーブルでPCと接続すると、PCにはVCP(Virtual Com Port)デバイスとして認識されます。 + +必要に応じてPC用のドライバを[FTDI社のサイト](https://ftdichip.com/drivers/vcp-drivers/)より入手し、インストールしてください。 + +Windowsでは[Tera Term](https://ja.osdn.net/projects/ttssh2/)、Linuxでは[screen](https://wiki.archlinux.jp/index.php/GNU_Screen)などのソフトウェアを使うことでRaspberry Pi Cat制御基板経由でRaspberry Piにログインすることができます。 + +=== "Ubuntu" + 1. まず、USB Type-BケーブルをRaspberry Pi Cat制御基板に接続します。まだRaspberry Pi Cat本体の電源は入れません。 + `$ ls /dev/ttyUSB*`と実行し、Raspberry Pi Cat制御基板が認識されていることを確認します。このときのデバイスファイル名を控えておきます。 + 1. screenでデバイスファイルにアクセスします。上記の手順で確認したデバイスファイル名が`/dev/ttyUSB0`だった場合は、`$ screen /dev/ttyUSB0 115200`などのように実行します。 + 1. ここで、Raspberry Pi Cat操作基板にある電源スイッチを操作し、Raspberry Pi Cat本体の電源をオンにします。電源をオンにすると電源LEDが点灯します。 + ![](../../img/raspicat/driver/windows-vcp-5.jpg){: style="width:50%"} + 1. 電源をオンにしてしばらく待つとログイン画面が表示されます。何も表示されない場合はEnterキーを押すと表示されます。 + 1. ユーザ名: `pi` パスワード: `raspberry` でログインします。パスワード入力中は画面に文字が出てきませんのでタイプミスのないように入力します。無事にログインできていると以下のような表示になります。 + ``` + Linux raspberrypi 5.15.32-v8+ #1538 SMP PREEMPT Thu Mar 31 19:40:39 BST 2022 aarch64 + + The programs included with the Debian GNU/Linux system are free software; + + 中略 + + pi@raspberrypi: ~$ + ``` +=== "Windows" + 1. まず、USB Type-BケーブルをRaspberry Pi Cat制御基板に接続します。まだRaspberry Pi Cat本体の電源は入れません。 + Windowsのデバイスマネージャを起動してRaspberry Pi Cat制御基板が認識されていることを確認します。以下のようにUSB Serial Portとして認識されます。このときのCOMポートの番号を控えておきます。今回の例ではCOM3です。 + ![](../../img/raspicat/driver/windows-vcp-1.png) + 1. Tera Termを起動し、デバイスマネージャで確認したCOMポートを指定して接続します。 + ![](../../img/raspicat/driver/windows-vcp-2.png) + 1. 「設定」 - 「シリアルポート」を開きシリアルポートの設定を行います。 + ![](../../img/raspicat/driver/windows-vcp-3.png) + 1. 以下のようにCOMポートを先ほど確認した番号に、ボーレートを115200に設定します。 + ![](../../img/raspicat/driver/windows-vcp-4.png) + 1. ここで、Raspberry Pi Cat操作基板にある電源スイッチを操作し、Raspberry Pi Cat本体の電源をオンにします。電源をオンにすると電源LEDが点灯します。 + ![](../../img/raspicat/driver/windows-vcp-5.jpg){: style="width:50%"} + 1. 電源をオンにしてしばらく待つと以下のようにログイン画面が表示されます。何も表示されない場合はEnterキーを押すと表示されます。 + ![](../../img/raspicat/driver/windows-vcp-6.png) + 1. ユーザ名: `pi` パスワード: `raspberry` でログインします。パスワード入力中は画面に文字が出てきませんのでタイプミスのないように入力します。無事にログインできていると以下のような表示になります。 + ![](../../img/raspicat/driver/windows-vcp-7.png) + +## ネットワークへの接続 {: #network-setup} + +Wi-Fiへの接続方法を説明します。 + + +=== "Ubuntu Server" + + [https://ubuntu.com/server/docs/network-configuration](https://ubuntu.com/server/docs/network-configuration) + に詳細な説明が書かれています。 + IPアドレスの固定については[Ubuntu ServerでWi-Fiに接続し、IPアドレスを固定する](#wifi-static-ip)を参照してください。 + + 1. `$ sudo vim /etc/netplan/99_config.yaml`で設定ファイルを新規作成し、下記のように記述します。 + この例では、SSID:`raspimouse` パスワード:`rt-net`のネットワークに接続する場合について紹介します。 + ```yaml + network: + ethernets: + eth0: + dhcp4: true + optional: true + wifis: + wlan0: + access-points: + raspimouse: #ここにSSIDを書く + password: rt-net #ここにパスワードを書く + dhcp4: true + version: 2 + ``` + 1. `$ sudo netplan apply`を実行します + 1. `$ ip addr`を実行し、Wi-Fiに接続してIPアドレスを取得できているか確認します + +=== "Raspberry Pi OS" + 1. raspi-configで設定します + ```sh + $ WIFI_SSID="" # ここでSSIDを設定 + $ WIFI_PASS="" # ここでパスワードを設定 + $ sudo raspi-config nonint do_wifi_ssid_passphrase $WIFI_SSID $WIFI_PASS && echo "Wi-FI ON" + ``` + `Wi-Fi ON`とメッセージが返ってきたらWi-Fiへの接続設定完了です + 1. `$ ip addr`を実行し、Wi-Fiに接続してIPアドレスを取得できているか確認します + +## ソースファイルのダウンロードとインストール {: #driver-installation} + +Raspberry Pi Catのデバイスドライバのソースファイルは +[GitHub](https://github.com/rt-net/RaspberryPiMouse) +に公開されています。 + +!!! Warning + **Ubuntu PC**とssh接続された状態において、**Raspberry Pi**内で + `git clone`、`sudo apt install`コマンドを正常に実行するためには、それぞれ正しい時刻に設定しておく必要があります。 + +=== "Ubuntu Server" + 1. パルスカウンタの動作を安定させるためI2Cのボーレートを変更します + 1. `/boot/firmware/config.txt`を編集し、`dtparam=i2c_baudrate=62500`を追記します + 1. Raspberry Pi を再起動します + 1. `$ printf "%d\n" 0x$(xxd -ps /sys/class/i2c-adapter/i2c-1/of_node/clock-frequency)`を実行し、`62500`と表示されたら設定完了です。 + 1. 次のコマンドを実行し、デバイスドライバをインストールします + ```sh + $ git clone https://github.com/rt-net/RaspberryPiMouse.git $HOME/RaspberryPiMouse + $ cd $HOME/RaspberryPiMouse/utils + $ sudo apt install linux-headers-$(uname -r) build-essential + $ ./build_install.bash + ``` + 1. コマンド実行後にブザーが鳴ればインストール完了です + +=== "Raspberry Pi OS" + 1. パルスカウンタの動作を安定させるためI2Cのボーレートを変更します + 1. `/boot/config.txt`を編集し、`dtparam=i2c_baudrate=62500`を追記します + 1. Raspberry Pi を再起動します + 1. `$ printf "%d\n" 0x$(xxd -ps /sys/class/i2c-adapter/i2c-1/of_node/clock-frequency)`を実行し、`62500`と表示されたら設定完了です。 + 1. 次のコマンドを実行し、raspi-configからSSH, SPI, I2C, Serial Portの機能を有効化します + ```sh + $ sudo raspi-config nonint do_ssh 0 + $ sudo raspi-config nonint do_spi 0 + $ sudo raspi-config nonint do_i2c 0 + $ sudo raspi-config nonint do_serial 0 + ``` + 1. 次のコマンドを実行し、デバイスドライバをインストールします + ```sh + $ git clone https://github.com/rt-net/RaspberryPiMouse.git + $ cd RaspberryPiMouse/utils + $ sudo apt install raspberrypi-kernel-headers build-essential + $ ./build_install.bash + ``` + 1. コマンド実行後にブザーが鳴ればインストール完了です。 + +## デバイスドライバの自動インストール +デバイスドライバは起動たびにインストールする必要があります。 + +そのため、[rt-net/raspicat_setup_scripts](https://github.com/rt-net/raspicat_setup_scripts)を使用して、起動たびにデバイスドライバをインストールするためのサービスを登録します。 + +```sh +$ git clone https://github.com/rt-net/raspicat_setup_scripts.git $HOME/raspicat_setup_scripts +$ cd $HOME/raspicat_setup_scripts +$ make install +``` + +## その他 {: #misc} + +### Ubuntu ServerでWi-Fiに接続し、IPアドレスを固定する {: #wifi-static-ip} + +[https://ubuntu.com/server/docs/network-configuration](https://ubuntu.com/server/docs/network-configuration) +に詳細な説明が書かれています。 + +!!! info + IPアドレスを固定するとネットワークに影響が出る場合があります。会社等で利用する場合はネットワーク管理者にお問い合わせください。 + + +1. `$ sudo vim /etc/netplan/99_config.yaml`で設定ファイルを新規作成し、下記のように`dhcp4: false`としてIPアドレスを記述します。 +この例では、IPアドレスを`192.168.11.89`に固定します。__この設定値は環境によって変わりますのでご注意ください__。 +```txt +network: + ethernets: + eth0: + dhcp4: true + optional: true + wifis: + wlan0: + access-points: + ここにSSIDを書く: + password: ここにパスワードを書く + dhcp4: false + addresses: [192.168.11.89/24] + gateway4: 192.168.11.1 + nameservers: + addresses: [8.8.8.8, 192.168.11.1] + version: 2 +``` +2. `$ sudo netplan apply`を実行します +3. `$ ip addr`でWi-Fiに接続できているか確認します + + +### 有線LANを使用し、PCのネットワークを利用する {: #pc-lan} + +**Raspberry Pi**と**Ubuntu PC**間で有線LAN接続を行い、PCのネットワークを利用する手順について説明します。 + +!!! Warning + **Ubuntu PC**は**Wi-Fi**に接続している必要があります。 + +1. PC側でEthernetの接続プロファイルを作成します +`PROFILE-NAME`は任意の名前、`NIC-NAME`は`ip addr`コマンド等で調べたEthernetのインターフェイス名です。 +```sh +$ sudo apt install net-tools +$ nmcli connection add type ethernet con-name PROFILE-NAME ifname NIC-NAME ipv4.method shared +``` +2. プロファイルを作成後、プロファイルの適用を行います +`PROFILE-NAME`には、作成したプロファイル名を入れます。 +```sh +$ nmcli con up PROFILE-NAME ifname NIC-NAME +``` +3. `$ ip addr`で有線LAN接続ができているか確認します +4. Raspberry Piにssh接続 +Raspberry PiのIPアドレスを調べるために`arp-scan`コマンドを使用します。 +```sh +$ sudo apt install arp-scan +$ sudo arp-scan -l -I NIC-NAME +``` +Raspberry PiのIPアドレスが出てきたら、そのIPを使用しssh接続を行います。 +`Raspberry-Pi-IP`には、調べたIPアドレスを入れます。 +```sh +$ ssh ubuntu@Raspberry-Pi-IP +``` +5. ssh接続ができたら、Raspberry PiがPCのネットワークを利用できているか確認します +```sh +$ ping '8.8.8.8' +``` + +!!! info + 実行後の正常な出力結果は以下のとおりです。 + ``` + $ ping '8.8.8.8' + PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. + 64 bytes from 8.8.8.8: icmp_seq=1 ttl=110 time=91.2 ms + 64 bytes from 8.8.8.8: icmp_seq=2 ttl=110 time=38.5 ms + (以下省略) + ``` + +!!! Warning + **Ubuntu PC**が**Wi-Fi**に接続されている状態で、下記のように結果が何も返ってこない場合は + **Ubuntu PC**を一度シャットダウンして立ち上げ直すと、上記のように正常に動作することがあります。 + (rebootコマンドによる再起動では、正常に動作しない可能性がある) + ``` + $ ping '8.8.8.8' + PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. + ``` diff --git a/docs/raspicat/driver/samples.md b/docs/raspicat/driver/samples.md new file mode 100644 index 0000000..e0f104b --- /dev/null +++ b/docs/raspicat/driver/samples.md @@ -0,0 +1,193 @@ +--- +title: デバイスドライバのサンプルを動かす +robot: Raspberry Pi Cat +--- + +# サンプルプログラムの実行 + +デバイスドライバをインストールしたら、 +サンプルプログラムを実行しましょう。 + +このサンプルプログラムは[Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)でオープンソースソフトウェアとして公開しています。 +[https://github.com/rt-net/RaspberryPiMouse/tree/master/SampleProgram](https://github.com/rt-net/RaspberryPiMouse/tree/master/SampleProgram){target=_blank rel=noopener} + + +## 使用機材 {: #requirements} + +* セットアップ済みRaspberry Pi Cat本体 + * [製品マニュアル](https://rt-net.jp/products/raspberry-pi-cat/#downloads)を読んで組み立て済みの状態を前提としています + * Raspberry PiにOS(**Ubuntu Server 18.04** or **Ubuntu Server 22.04**)がインストール済みであること + * Raspberry Pi OSでのROS / ROS 2の動作は確認していません。 + * **デバイスドライバ**がインストール済みであること + * [デバイスドライバのインストール手順](../driver/install.md)を参照してください +* USB Type-Bケーブル(Raspberry Pi Catに同梱されています) +* ノートパソコン等のPC + +## 事前準備 {: #preparation} + +[デバイスドライバのインストール](./install.md)の[Raspberry Piへのログイン](./install.md#raspberry-pi-login)に沿ってRaspberry Piへログインします。 + +サンプルプログラムのディレクトリに移動します。 + +```sh +$ cd ~/RaspberryPiMouse/SampleProgram +``` + +ディレクトリにあるプログラムを実行すると、LEDやブザーを動かせます。 + +## LED {: #step1} + +LED0〜LED3が点滅します。 + +=== "Shell Script" + ```sh + $ bash step1.sh + ``` + +=== "C" + ```sh + $ gcc step1.c -o step1 + $ ./step1 + ``` + +=== "Python" + ```sh + $ python3 step1.py + ``` + +## ブザー {: #step2} + +キーボード入力でブザーを鳴らします。 入力キーと音階のペアは[SCALE](https://github.com/rt-net/RaspberryPiMouse/blob/master/SampleProgram/SCALE)を参照してください。 + +++0++を入力するとブザーが止まります。 ++c++を入力するとプログラムが終了します。(Shell Scriptでは++ctrl+c++で終了します。) + +=== "Shell Script" + ```sh + $ bash step2.sh + ``` + +=== "C" + ```sh + $ gcc step2.c -o step2 + $ ./step2 + ``` + +=== "Python" + ```sh + $ python3 step2.py + ``` + +## スイッチ {: #step3} + +スイッチを押してLEDを点消灯します。 組み合わせは次のとおりです。 + +* SW0 : LED3 +* SW1 : LED1 & LED2 +* SW2 : LED0 + +=== "Shell Script" + ```sh + $ bash step3.sh + ``` + +=== "C" + ```sh + $ gcc step3.c -o step3 + $ ./step3 + ``` + +=== "Python" + ```sh + $ python3 step3.py + ``` + +## モータ {: #step4} + +モータを回して右旋回、左旋回します。 + +=== "Shell Script" + ```sh + $ bash step4.sh + ``` + +=== "C" + ```sh + $ gcc step4.c -o step4 + $ ./step4 + ``` + +=== "Python" + ```sh + $ python3 step4.py + ``` + +## ライトセンサ {: #step5} + +ライトセンサの値を読み込みます。 + +=== "Shell Script" + ```sh + $ bash step5.sh + ``` + +=== "C" + ```sh + $ gcc step5.c -o step5 + $ ./step5 + ``` + +=== "Python" + ```sh + $ python3 step5.py + ``` + +## パルスカウンタ {: #step6} + +モータを回して、パルスカウンタの値を読み込みます。 + +=== "Shell Script" + ```sh + $ bash step6.sh + ``` + + 次のようにstep6.shを編集することで、符号付きのカウント値を読み取ることができます。 + + ```sh + # step6.sh + MOTOR_R=/dev/rtmotor_raw_r0 + MOTOR_L=/dev/rtmotor_raw_l0 + COUNTER_R=/dev/rtcounter_r1 # r0からr1に書き換え + COUNTER_L=/dev/rtcounter_l1 # l0からl1に書き換え + ``` + +=== "C" + ```sh + $ gcc step6.c -o step6 + $ ./step6 + ``` + + 次のようにstep6.cを編集することで、符号付きのカウント値を読み取ることができます。 + C言語の場合は、書き換えたあとに`gcc`コマンドでコンパイルを行う必要があります。 + + ```sh + // step6.c + #define FILE_MOTOR_L "/dev/rtmotor_raw_l0" + #define FILE_MOTOR_R "/dev/rtmotor_raw_r0" + #define FILE_COUNT_L "/dev/rtcounter_l1" # r0からr1に書き換え + #define FILE_COUNT_R "/dev/rtcounter_r1" # l0からl1に書き換え + ``` + +=== "Python" + ```sh + $ python3 step6.py + ``` + + 次のようにstep6.pyを編集することで、符号付きのカウント値を読み取ることができます。 + + ```sh + # step6.py + filename_motor_r = "/dev/rtmotor_raw_r0" + filename_motor_l = "/dev/rtmotor_raw_l0" + filename_count_r = "/dev/rtcounter_r1" # r0からr1に書き換え + filename_count_l = "/dev/rtcounter_l1" # l0からl1に書き換え + ``` \ No newline at end of file diff --git a/docs/raspicat/others.md b/docs/raspicat/others.md new file mode 100644 index 0000000..1672999 --- /dev/null +++ b/docs/raspicat/others.md @@ -0,0 +1,46 @@ +--- +title: 関連リンク集 (Raspberry Pi Cat) +robot: Raspberry Pi Cat +--- + +# 関連リンク集 + +## ハードウェア + +- :octicons-mark-github-16: +ハードウェア資料集 +[rt-net/RaspberryPiCat_Hardware](https://github.com/rt-net/RaspberryPiCat_Hardware) + +![](https://rt-net.github.io/images/raspberry-pi-cat/raspicat_step_cad.png) + +## ソフトウェア + +### デバイスドライバ + +- :octicons-mark-github-16: +デバイスドライバ(Raspberry Pi Mouse共通) +[rt-net/RaspberryPiMouse](https://github.com/rt-net/RaspberryPiMouse) + +### ROS + +- :octicons-mark-github-16: +Raspberry Pi Cat制御用ROSパッケージ +[rt-net/raspicat_ros](https://github.com/rt-net/raspicat_ros) + +- :octicons-mark-github-16: +書籍「Raspberry Piで学ぶ ROSロボット入門」をベースにした +Raspberry Pi Cat用のROSパッケージ +[rt-net/raspicat_basic](https://github.com/rt-net/raspicat_basic) + +- :octicons-mark-github-16: +SLAM/Navigationサンプル集 +[rt-net/raspicat_slam_navigation](https://github.com/rt-net/raspicat_slam_navigation) + +- :octicons-mark-github-16: +Gazeboシミュレーションパッケージ +[rt-net/raspicat_sim](https://github.com/rt-net/raspicat_sim) + +- :octicons-mark-github-16: +URDFパッケージ +[rt-net/raspicat_description](https://github.com/rt-net/raspicat_description) + diff --git a/docs/raspicat/products.md b/docs/raspicat/products.md index 8c45f35..c908359 100644 --- a/docs/raspicat/products.md +++ b/docs/raspicat/products.md @@ -9,11 +9,6 @@ Raspberry Pi Cat(ラズベリーパイキャット)は 屋外でも動かせる中型2輪ロボットです。 [Raspberry Pi Mouse](../raspimouse/products.md)をスケールアップしたROS対応の移動プラットフォームロボットです。 -!!! info - 本製品のソフトウェアチュートリアルは準備中です。更新時はTwitterにてお知らせします。 - Follow @rt_corp - - ![Raspberry Pi Cat](https://rt-net.github.io/images/raspberry-pi-cat/raspberry-pi-cat.png) ## 紹介動画 @@ -31,4 +26,6 @@ Raspberry Pi Cat(ラズベリーパイキャット)は 製品はこちらから購入できます。 -一部パーツ終売のため、本製品は生産終了しました。後継機を発売予定です。 \ No newline at end of file + +!!! info + 一部パーツ終売のため、本製品は生産終了しました。後継機を発売予定です。 \ No newline at end of file diff --git a/docs/raspicat/ros/install.md b/docs/raspicat/ros/install.md new file mode 100644 index 0000000..38ff006 --- /dev/null +++ b/docs/raspicat/ros/install.md @@ -0,0 +1,188 @@ +--- +title: ROS / ROS 2のインストール +robot: Raspberry Pi Cat +--- + +# ROS / ROS 2のインストール + +このページでは、以下の2つのデバイスへのROS / ROS 2のインストール方法を説明します。 + +* Ubuntuインストール済みのノートパソコン等のPC +* Ubuntuインストール済みのRaspberry Pi + +なお、ROS / ROS 2をすでにインストール済みの場合はこのページの手順は不要です。 + +## 使用機材 {: #requirements} +=== "ROS" + * セットアップ済みRaspberry Pi Cat本体 + * [製品マニュアル](https://rt-net.jp/products/raspberry-pi-cat/#downloads)を読んで組み立て済みの状態を前提としています + * Raspberry PiにOS(**Ubuntu Server 18.04**)がインストール済みであること + * Raspberry Pi OSでのROSの動作は確認していません。 + * **デバイスドライバ**がインストール済みであること + * [デバイスドライバのインストール手順](../driver/install.md)を参照してください + * USB Type-Bケーブル(Raspberry Pi Catに同梱されています) + * ノートパソコン等のPC + * OS(**Ubuntu Desktop 18.04**)がインストール済みであること + +=== "ROS 2" + * セットアップ済みRaspberry Pi Cat本体 + * [製品マニュアル](https://rt-net.jp/products/raspberry-pi-cat/#downloads)を読んで組み立て済みの状態を前提としています + * Raspberry PiにOS(**Ubuntu Server 22.04**)がインストール済みであること + * Raspberry Pi OSでのROSの動作は確認していません。 + * **デバイスドライバ**がインストール済みであること + * [デバイスドライバのインストール手順](../driver/install.md)を参照してください + * USB Type-Bケーブル(Raspberry Pi Catに同梱されています) + * ノートパソコン等のPC + * OS(**Ubuntu Desktop 22.04**)がインストール済みであること + +## 事前準備 {: #preparation} + +[デバイスドライバのインストール](../driver/install.md)の[Raspberry Piへのログイン](../driver/install.md#raspberry-pi-login)に沿ってRaspberry Piへログインします。 + +## ROS / ROS 2のインストール(公式のドキュメントに沿って進める場合) {: #official-document} + +=== "ROS" + [https://wiki.ros.org/melodic/Installation/Ubuntu](https://wiki.ros.org/melodic/Installation/Ubuntu){target=_blank rel=noopener} + を参考に、**ROS Melodic**をインストールします。 + +=== "ROS 2" + [https://docs.ros.org/humble/Installation/Ubuntu](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html){target=_blank rel=noopener} + を参考に、**ROS 2 Humble**をインストールします。 + +GUIを使用する場合は**Desktop-Full**を、 使用しない場合は**ROS-Base**パッケージをインストールします。 + +## ROS / ROS 2のインストール(インストールスクリプトを使う場合) {: #install-script} + +非公式のインストールスクリプトを使うことで簡単にROS / ROS 2をインストールできます。 + +### ノートパソコン等のPC + +=== "ROS" + + このROSインストールスクリプトは`curl`を使用します。以下のコマンドでインストールします。 + + ```sh + $ sudo apt install -y curl + ``` + + 以下のコマンドでROSインストールスクリプトを実行します。 + 環境にもよりますが完了までは10分以上かかる場合があります。 + + ```sh + $ bash -c "$(curl -SsfL u.ty0.jp/ros-melodic-desktop)" + ``` + + スクリプトが問題なく実行できれば以下のメッセージが表示されます。 + + ```txt + Success installing ROS melodic + Run 'source ~/.bashrc' + + If any error occurs, please refer to the following URL. + https://github.com/Tiryoh/ros_setup_scripts_ubuntu/ + ``` + + 以下のコマンドでインストールした設定を読み込みます。 + + ```sh + $ source ~/.bashrc + ``` + +=== "ROS 2" + + このROS 2インストールスクリプトは`curl`と`git`を使用します。以下のコマンドでインストールします。 + + ```sh + $ sudo apt install -y curl git + ``` + + 以下のコマンドでROS 2インストールスクリプトを実行します。 + 環境にもよりますが完了までは10分以上かかる場合があります。 + + ```sh + $ git clone https://github.com/Tiryoh/ros2_setup_scripts_ubuntu.git + $ cd ros2_setup_scripts_ubuntu + $ ./ros2-humble-desktop-main.sh + ``` + + スクリプトが問題なく実行できれば以下のメッセージが表示されます。 + + ```txt + Success installing ROS 2 humble + Run 'source /opt/ros/humble/setup.bash' + ``` + + 以下のコマンドでインストールした設定を読み込みます。 + + ```sh + $ source ~/.bashrc + ``` + +### Raspberry Pi + +!!! Warning + **Ubuntu PC**とssh接続された状態において、**Raspberry Pi**内で + `sudo apt install`、`git clone`コマンドを正常に実行するためには、それぞれ正しい時刻に設定しておく必要があります。 + + +=== "ROS" + + このROSインストールスクリプトは`curl`を使用します。以下のコマンドでインストールします。 + + ```sh + $ sudo apt install -y curl + ``` + + 以下のコマンドでROSインストールスクリプトを実行します。 + 環境にもよりますが完了までは10分以上かかる場合があります。 + + ```sh + $ bash -c "$(curl -SsfL u.ty0.jp/ros-melodic-ros-base)" + ``` + + スクリプトが問題なく実行できれば以下のメッセージが表示されます。 + + ```txt + Success installing ROS melodic + Run 'source ~/.bashrc' + + If any error occurs, please refer to the following URL. + https://github.com/Tiryoh/ros_setup_scripts_ubuntu/ + ``` + + 以下のコマンドでインストールした設定を読み込みます。 + + ```sh + $ source ~/.bashrc + ``` + + +=== "ROS 2" + + このROS 2インストールスクリプトは`curl`と`git`を使用します。以下のコマンドでインストールします。 + + ```sh + $ sudo apt install -y curl git + ``` + + 以下のコマンドでROS 2インストールスクリプトを実行します。 + 環境にもよりますが完了までは10分以上かかる場合があります。 + + ```sh + $ git clone https://github.com/Tiryoh/ros2_setup_scripts_ubuntu.git + $ cd ros2_setup_scripts_ubuntu + $ ./ros2-humble-ros-base-main.sh + ``` + + スクリプトが問題なく実行できれば以下のメッセージが表示されます。 + + ```txt + Success installing ROS 2 humble + Run 'source /opt/ros/humble/setup.bash' + ``` + + 以下のコマンドでインストールした設定を読み込みます。 + + ```sh + $ source ~/.bashrc + ``` diff --git a/docs/raspicat/ros/package-install.md b/docs/raspicat/ros/package-install.md new file mode 100644 index 0000000..e2c29f6 --- /dev/null +++ b/docs/raspicat/ros/package-install.md @@ -0,0 +1,123 @@ +--- +title: ROS / ROS 2パッケージのインストール +robot: Raspberry Pi Cat +--- + +# ROSパッケージのインストール + +このページでは、Raspberry Pi/Ubuntu PCへのROS / ROS 2パッケージのインストール方法を説明します。 + +## 使用機材 {: #requirements} + +=== "ROS" + + * セットアップ済みRaspberry Pi Cat本体 + * [製品マニュアル](https://rt-net.jp/products/raspberry-pi-cat/#downloads)を読んで組み立て済みの状態を前提としています + * Raspberry PiにOS(**Ubuntu Server 18.04**)がインストール済みであること + * Raspberry Pi OSでのROSの動作は確認していません。 + * **デバイスドライバ**がインストール済みであること + * [デバイスドライバのインストール手順](../driver/install.md)を参照してください + * ROSがインストール済みであること + * [ROS / ROS 2のインストール手順](./install.md)を参照してください + * USB Type-Bケーブル(Raspberry Pi Catに同梱されています) + * ノートパソコン等のPC + * OS(**Ubuntu Desktop 18.04**)がインストール済みであること + +=== "ROS 2" + + * セットアップ済みRaspberry Pi Cat本体 + * [製品マニュアル](https://rt-net.jp/products/raspberry-pi-cat/#downloads)を読んで組み立て済みの状態を前提としています + * Raspberry PiにOS(**Ubuntu Server 22.04**)がインストール済みであること + * Raspberry Pi OSでのROS 2の動作は確認していません。 + * **デバイスドライバ**がインストール済みであること + * [デバイスドライバのインストール手順](../driver/install.md)を参照してください + * ROS 2がインストール済みであること + * [ROS / ROS 2のインストール手順](./install.md)を参照してください + * USB Type-Bケーブル(Raspberry Pi Catに同梱されています) + * ノートパソコン等のPC + * OS(**Ubuntu Desktop 22.04**)がインストール済みであること + +## 事前準備 {: #preparation} + +[デバイスドライバのインストール](../driver/install.md)の[Raspberry Piへのログイン](../driver/install.md#raspberry-pi-login)に沿ってRaspberry Piへログインします。 + +## ROS / ROS 2パッケージのインストール {: #install-ros-packages} + +=== "ROS" + + 制御用のパッケージである + [rt-net/raspimouse](https://github.com/rt-net/raspimouse){target=_blank rel=noopener}、[rt-net/raspicat_ros](https://github.com/rt-net/raspicat_ros){target=_blank rel=noopener} + SLAM/ナビゲーション用のパッケージである + [rt-net/raspicat_slam_navigation](https://github.com/rt-net/raspicat_slam_navigation){target=_blank rel=noopener} + RaspberryPiCat用のURDF記述マクロを含んだパッケージである + [rt-net/raspicat_description](https://github.com/rt-net/raspicat_description){target=_blank rel=noopener} + をダウンロードしてインストールします。 + + !!! Tip + **Raspberry Pi**と**PC**の両方にダウンロードおよびインストールを行います。 + + !!! Warning + **Ubuntu PC**とssh接続された状態において、**Raspberry Pi**内で + `git clone`、`rosdep install`、`catkin_make`コマンドを正常に実行するためには、それぞれ正しい時刻に設定しておく必要があります。 + + ```sh + # Create workspace + $ source /opt/ros/melodic/setup.bash + $ mkdir -p ~/catkin_ws/src + $ cd ~/catkin_ws/src + + # Clone ROS packages + $ git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse.git + $ git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_description.git + $ git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspicat_ros.git + $ git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspicat_slam_navigation.git + $ git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspicat_description.git + + # Install dependencies + $ rosdep update + $ rosdep install -r -y -i --from-paths raspicat* raspimouse* + + # make & install + $ cd ~/catkin_ws && catkin_make + $ source ~/catkin_ws/devel/setup.bash + ``` + +=== "ROS 2" + + 制御用のパッケージである + [rt-net/raspimouse2](https://github.com/rt-net/raspimouse2){target=_blank rel=noopener}、[rt-net/raspicat_ros](https://github.com/rt-net/raspicat_ros/tree/ros2){target=_blank rel=noopener} + SLAM/ナビゲーション用のパッケージである + [rt-net/raspicat_slam_navigation](https://github.com/rt-net/raspicat_slam_navigation/tree/ros2){target=_blank rel=noopener} + RaspberryPiCat用のURDF記述マクロを含んだパッケージである + [rt-net/raspicat_description](https://github.com/rt-net/raspicat_description/tree/ros2){target=_blank rel=noopener} + をダウンロードしてインストールします。 + + !!! Tip + **Raspberry Pi**と**PC**の両方にダウンロードおよびインストールを行います。 + + !!! Warning + **Ubuntu PC**とssh接続された状態において、**Raspberry Pi**内で + `git clone`、`rosdep install`、`colcon build`コマンドを正常に実行するためには、それぞれ正しい時刻に設定しておく必要があります。 + + ```sh + # Create workspace + $ source /opt/ros/humble/setup.bash + $ mkdir -p ~/catkin_ws/src + $ cd ~/catkin_ws/src + + # Clone ROS 2 packages + $ git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse2.git + $ git clone -b ros2 https://github.com/rt-net/raspicat_ros.git + $ git clone -b ros2 https://github.com/rt-net/raspicat_description.git + $ git clone -b ros2 https://github.com/rt-net/raspicat_sim.git + $ git clone -b ros2 https://github.com/rt-net/raspicat_slam_navigation.git + + # Install dependencies + $ rosdep update + $ rosdep install -r -y -i --from-paths raspicat* raspimouse* + $ sudo apt install xterm + + # make & install + $ cd ~/catkin_ws && colcon build --symlink-install + $ source ~/catkin_ws/install/setup.bash + ``` \ No newline at end of file diff --git a/docs/raspicat/ros/samples.md b/docs/raspicat/ros/samples.md new file mode 100644 index 0000000..2e5309e --- /dev/null +++ b/docs/raspicat/ros/samples.md @@ -0,0 +1,301 @@ +--- +title: ROS / ROS 2の実行 +robot: Raspberry Pi Cat +--- + +# ROS / ROS 2を使用してRaspberry Pi Catの制御 + +=== "ROS" + + このページでは + 実機を使用した、SLAMからナビゲーションまでの実行方法を説明します。 + ## 使用機材 {: #requirements} + + * セットアップ済みRaspberry Pi Cat本体 + * [製品マニュアル](https://rt-net.jp/products/raspberry-pi-cat/#downloads)を読んで組み立て済みの状態を前提としています + * Raspberry PiにOS(**Ubuntu Server 18.04**)がインストール済みであること + * Raspberry Pi OSでのROSの動作は確認していません。 + * **デバイスドライバ**がインストール済みであること + * [デバイスドライバのインストール手順](../driver/install.md)を参照してください + * ROSがインストール済みであること + * [ROSのインストール手順](./install.md)を参照してください + * ROSパッケージがインストール済みであること + * [ROSパッケージのインストール手順](./package-install.md)を参照してください + * USB Type-Bケーブル(Raspberry Pi Catに同梱されています) + * ノートパソコン等のPC + * OS(**Ubuntu Desktop 18.04**)がインストール済みであること + + ## 事前準備 {: #preparation} + + ### ROSパッケージの読み込み {: #preparation-source-workspace} + + サンプルを実行する場合は下記コマンドを実行し、 + ROSとパッケージを読み込んでください。 + + ```sh + $ source /opt/ros/melodic/setup.bash + $ source ~/catkin_ws/devel/setup.bash + ``` + + ### Raspberry PiとPC間のROSネットワークを接続する {: #preparation-ros-master-uri} + + 環境変数`ROS_IP`、`ROS_MASTER_URI`を設定することで、 + PCからネットワークを介してRaspberry Pi側のトピックやサービスにアクセスできます。 + + Raspberry PiのIPアドレスが`192.168.11.89`、 + PCのIPアドレスが`192.168.11.100`のとき、 + 下記コマンドで環境変数を設定します。__この設定値は環境によって変わりますのでご注意ください__。 + + ```sh + # Raspberry Pi側 + $ export ROS_IP=192.168.11.89 + $ export ROS_MASTER_URI=http://192.168.11.89:11311/ + + # PC側 + # ROS_MASTER_URIにはRaspberry PiのIPアドレスを入力する + $ export ROS_IP=192.168.11.100 + $ export ROS_MASTER_URI=http://192.168.11.89:11311/ + ``` + + ネットワーク接続を切る場合は、 + `ROS_MASTER_URI`をデフォルトの`http://localhost:11311/`に戻します。 + + !!! Warning + PCから操縦する場合はネットワークと環境変数を設定してください。 + + ## キーボードで操縦する {: #teleop-keyboard} + + 操作方法はターミナルに出力されます。 + #### Raspberry Pi {: #teleop-keyboard-pi} + ```sh + # センサやモータ用のノードの立ち上げ + $ roslaunch raspicat_bringup raspicat_bringup.launch + ``` + + #### PC {: #teleop-keyboard-pc} + ```sh + # キーボード用のノードの立ち上げ + $ roslaunch raspicat_bringup teleop.launch joy:=false + ``` + + ## ジョイスティックコントローラで操縦する {: #teleop-joy} + + 操作方法は[こちら](https://github.com/rt-net/raspicat_ros/blob/main/raspicat_gamepad_controller/README.ja.md)のパッケージを参照してください。 + + === "ジョイスティックコントローラをPCに接続した場合" + #### Raspberry Pi + ```sh + # センサやモータ用のノードの立ち上げ + $ roslaunch raspicat_bringup raspicat_bringup.launch + ``` + #### PC + ```sh + # ジョイスティックコントローラ用のノードの立ち上げ + $ roslaunch raspicat_bringup teleop.launch joy:=true + ``` + === "ジョイスティックコントローラをRaspberry Pi 4に接続した場合" + #### Raspberry Pi + ```sh + # センサやモータ用およびジョイスティックコントローラ用のノードの立ち上げ + $ roslaunch raspicat_bringup raspicat_bringup.launch joy:=true + ``` + + ## LiDARでSLAM {: #lidar-slam} + + ジョイスティックコントローラおよびキーボードにてRaspberry Pi Catを操作出来る状態でSLAMを実行します。 + ここでは、**PC**上にて**SLAM**を実行する方法を紹介します。 + [raspicat_slam](https://github.com/rt-net/raspicat_slam_navigation/tree/main/raspicat_slam) + パッケージで実行が可能なSLAMは、[gmapping](http://wiki.ros.org/gmapping)、[cartographer](http://wiki.ros.org/cartographer)、[slam_toolbox](http://wiki.ros.org/slam_toolbox)の3種類です。 + **rosbag**を使用する場合はオフラインでSLAMを行うことができます。 + + !!! Warning + **Raspberry Pi**と**PC**間で通信を行い、**PC**上で**SLAM**を実行する場合は、時刻の同期が必要です。 + これは、**tf**関連のエラーを防ぐためです。 + + ### gmapping {: #lidar-slam-gmapping} + + === "Online SLAM" + #### Raspberry Pi + ```sh + # センサやモータ用のノードの立ち上げ + $ roslaunch raspicat_bringup raspicat_bringup.launch + ``` + #### PC + ```sh + # gmappingの実行 + $ roslaunch raspicat_slam raspicat_gmapping.launch joy:=true + + # 地図の保存 + $ roslaunch raspicat_slam map_save.launch map_file:=map-path + ``` + + === "Offline SLAM" + #### PC + ```sh + # rosbag playおよびgmappingの実行 + $ roslaunch raspicat_slam raspicat_gmapping.launch rosbag:=true rosbag_rate:=1 rosbag_topics:="/odom /scan /tf /tf_static" rosbag_filename:=rosbag-path + + # 地図の保存 + $ roslaunch raspicat_slam map_save.launch map_file:=map-path + ``` + + ### cartographer {: #lidar-slam-cartographer} + === "Online SLAM" + #### Raspberry Pi + ```sh + # センサやモータ用のノードの立ち上げ + $ roslaunch raspicat_bringup raspicat_bringup.launch + ``` + #### PC + ```sh + # cartographerの実行 + $ roslaunch raspicat_slam raspicat_cartographer.launch joy:=true + + # 地図の保存 + $ roslaunch raspicat_slam map_save.launch map_file:=map-path + ``` + + === "Offline SLAM" + #### PC + ```sh + # rosbag playおよびcartographerの実行 + $ roslaunch raspicat_slam raspicat_cartographer.launch rosbag:=true rosbag_rate:=1 rosbag_topics:="/odom /scan /tf /tf_static" rosbag_filename:=rosbag-path + + # 地図の保存 + $ roslaunch raspicat_slam map_save.launch map_file:=map-path + ``` + + ### slam_toolbox {: #lidar-slam-toolbox} + === "Online SLAM" + #### Raspberry Pi + ```sh + # センサやモータ用のノードの立ち上げ + $ roslaunch raspicat_bringup raspicat_bringup.launch + ``` + #### PC + ```sh + # slam_toolboxの実行 + $ roslaunch raspicat_slam raspicat_slam_toolbox.launch joy:=true + + # 地図の保存 + $ roslaunch raspicat_slam map_save.launch map_file:=map-path + ``` + + === "Offline SLAM" + #### PC + ```sh + # rosbag playおよびslam_toolboxの実行 + $ roslaunch raspicat_slam raspicat_slam_toolbox.launch rosbag:=true rosbag_rate:=1 rosbag_topics:="/odom /scan /tf /tf_static" rosbag_filename:=rosbag-path + + # 地図の保存 + $ roslaunch raspicat_slam map_save.launch map_file:=map-path + ``` + + ## LiDARでナビゲーション {: #lidar-navigation} + + SLAMによって作成した地図を使用し、Navigationを行います。 + [raspicat_navigation](https://github.com/rt-net/raspicat_slam_navigation/tree/main/raspicat_navigation) + パッケージで実行が可能なNavigationは、[move_base](http://wiki.ros.org/move_base)、[neonavigation](https://github.com/at-wat/neonavigation)の2種類です。 + + !!! Warning + **Raspberry Pi**と**PC**間で通信を行い、**PC**上で**Navigation**を実行する場合は、時刻の同期が必要です。 + これは、**tf**関連のエラーを防ぐためです。 + + === "move_base" + #### Raspberry Pi + ```sh + $ roscore + + # センサやモータ用のノードの立ち上げ + $ roslaunch raspicat_bringup raspicat_bringup.launch lidar_ether:=false lidar_usb:=true joy:=false + ``` + #### PC + ```sh + + # move_baseの実行 + $ roslaunch raspicat_navigation raspicat_navigation.launch navigation:="move_base" mcl_map_file:=map-path navigation_map_file:=map-path + ``` + + === "neonavigation" + #### Raspberry Pi + ```sh + $ roscore + + # センサやモータ用のノードの立ち上げ + $ roslaunch raspicat_bringup raspicat_bringup.launch lidar_ether:=false lidar_usb:=true joy:=false + ``` + #### PC + ```sh + # neonavigationの実行 + $ roslaunch raspicat_navigation raspicat_navigation.launch navigation:="neonav" mcl_map_file:=map-path navigation_map_file:=map-path + ``` + +=== "ROS 2" + このページでは + 実機を使用した、ジョイスティックコントローラで操縦する方法を説明します。 + ## 使用機材 {: #requirements} + + * セットアップ済みRaspberry Pi Cat本体 + * [製品マニュアル](https://rt-net.jp/products/raspberry-pi-cat/#downloads)を読んで組み立て済みの状態を前提としています + * Raspberry PiにOS(**Ubuntu Server 22.04**)がインストール済みであること + * Raspberry Pi OSでのROS 2の動作は確認していません。 + * **デバイスドライバ**がインストール済みであること + * [デバイスドライバのインストール手順](../driver/install.md)を参照してください + * ROS 2がインストール済みであること + * [ROS 2のインストール手順](./install.md)を参照してください + * ROS 2パッケージがインストール済みであること + * [ROS 2パッケージのインストール手順](./package-install.md)を参照してください + * USB Type-Bケーブル(Raspberry Pi Catに同梱されています) + * ノートパソコン等のPC + * OS(**Ubuntu Desktop 22.04**)がインストール済みであること + + ## 事前準備 {: #preparation} + + ### ROS 2パッケージの読み込み {: #preparation-source-workspace} + + サンプルを実行する場合は下記コマンドを実行し、 + ROS 2とパッケージを読み込んでください。 + + ```sh + $ source /opt/ros/humble/setup.bash + $ source ~/catkin_ws/install/setup.bash + ``` + + ## ジョイスティックコントローラで操縦する {: #teleop-joy} + + #### Raspberry Pi + ```sh + # センサやモータ用のノードの立ち上げ + $ ros2 launch raspicat_bringup raspicat.launch.py + ``` + #### PC + ```sh + # ジョイスティックコントローラ用のノードの立ち上げ + $ ros2 service call /motor_power std_srvs/SetBool '{data: true}' + $ ros2 launch raspicat_bringup joy.launch.py + ``` + + ### 操作について + 使用するコントローラは[F710](https://www.logitech.com/assets/34885/4/f710620-002923003403gswamr.pdf)であり + F710のゲームインターフェイスモードがDirectInputである前提で説明をします。 + + === "デジタル操作(ステータスインジケーターがオフの場合)" + Dパッド(十字キー)とBボタンを同時に操作することで、Raspberry Pi Catを動かすことが出来ます。 + また、この場合の操作は、並進速度が[0, 0.3]、回転速度が[0, ±0.4]のいずれかです。 + + Xボタンを使用することで、より速く走行させることができます。 + + | ボタン | 並進速度 [m/s] | 回転速度 [rad/s] | + | ------ | -------- | -------- | + | B | 0.3 | 0.4 | + | X | 0.5 | 1.0 | + === "アナログ操作(ステータスインジケーターがオフの場合)" + アナログミニスティック(左側)とBボタンを同時に操作することで、Raspberry Pi Catを動かすことが出来ます。 + また、この場合の操作は、並進速度が[0 ~ 0.3]、回転速度が[0 ~ ±0.4]の範囲です。 + + Xボタンを使用することで、より速く走行させることができます。 + + | ボタン | 並進速度 [m/s] | 回転速度 [rad/s] | + | ------ | -------- | -------- | + | B | 0.3 | 0.4 | + | X | 0.5 | 1.0 | diff --git a/docs/raspicat/simulator/install.md b/docs/raspicat/simulator/install.md new file mode 100644 index 0000000..5bad96d --- /dev/null +++ b/docs/raspicat/simulator/install.md @@ -0,0 +1,139 @@ +--- +title: シミュレータのインストール +robot: Raspberry Pi Cat +--- + +# シミュレータのインストール + +=== "ROS" + + このページでは、 + [raspicat_sim](https://github.com/rt-net/raspicat_sim){target=_blank rel=noopener} + パッケージを用いたシミュレーションのセットアップ方法と実行方法について説明します。 + +=== "ROS 2" + + このページでは、 + [raspicat_sim](https://github.com/rt-net/raspicat_sim/tree/ros2){target=_blank rel=noopener} + パッケージを用いたシミュレーションのセットアップ方法と実行方法について説明します。 + +## 使用機材 {: #requirements} + +=== "ROS" + + * ノートパソコン等のPC + * OS(**Ubuntu Desktop 18.04**)およびROSがインストール済みであることを前提としています + * インストール方法については[ROS / ROS 2のインストール](../ros/install.md)を参照してください + +=== "ROS 2" + + * ノートパソコン等のPC + * OS(**Ubuntu Desktop 22.04**)およびROS 2がインストール済みであることを前提としています + * インストール方法については[ROS / ROS 2のインストール](../ros/install.md)を参照してください + +## パッケージのダウンロードとインストール {: #install} + +=== "ROS" + + 制御用のパッケージである + [rt-net/raspimouse](https://github.com/rt-net/raspimouse){target=_blank rel=noopener}、[rt-net/raspicat_ros](https://github.com/rt-net/raspicat_ros){target=_blank rel=noopener} + SLAM/ナビゲーション用のパッケージである + [rt-net/raspicat_slam_navigation](https://github.com/rt-net/raspicat_slam_navigation){target=_blank rel=noopener} + シミュレータ用のパッケージである + [rt-net/raspicat_sim](https://github.com/rt-net/raspicat_sim.git){target=_blank rel=noopener} + RaspberryPiCat用のURDF記述マクロを含んだパッケージである + [rt-net/raspicat_description](https://github.com/rt-net/raspicat_description){target=_blank rel=noopener} + をダウンロードしてインストールします。 + + ```sh + # Create workspace + $ source /opt/ros/melodic/setup.bash + $ mkdir -p ~/catkin_ws/src + $ cd ~/catkin_ws/src + + # Clone ROS packages + $ git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse.git + $ git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse_description.git + $ git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspicat_ros.git + $ git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspicat_slam_navigation.git + $ git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspicat_sim.git + $ git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspicat_description.git + + # Install dependencies + $ rosdep update + $ rosdep install -r -y -i --from-paths raspicat* raspimouse* + + # make & install + $ cd ~/catkin_ws && catkin_make + $ source ~/catkin_ws/devel/setup.bash + + # Gazeboで使用するハードウェアモデルデータをダウンロード + $ rosrun raspicat_gazebo download_gazebo_models.sh + ``` + +=== "ROS 2" + + 制御用のパッケージである + [rt-net/raspimouse2](https://github.com/rt-net/raspimouse2){target=_blank rel=noopener}、[rt-net/raspicat_ros](https://github.com/rt-net/raspicat_ros/tree/ros2){target=_blank rel=noopener} + SLAM/ナビゲーション用のパッケージである + [rt-net/raspicat_slam_navigation](https://github.com/rt-net/raspicat_slam_navigation/tree/ros2){target=_blank rel=noopener} + RaspberryPiCat用のURDF記述マクロを含んだパッケージである + [rt-net/raspicat_description](https://github.com/rt-net/raspicat_description/tree/ros2){target=_blank rel=noopener} + をダウンロードしてインストールします。 + + ```sh + # Create workspace + $ source /opt/ros/humble/setup.bash + $ mkdir -p ~/catkin_ws/src + $ cd ~/catkin_ws/src + + # Clone ROS 2 packages + $ git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse2.git + $ git clone -b ros2 https://github.com/rt-net/raspicat_ros.git + $ git clone -b ros2 https://github.com/rt-net/raspicat_description.git + $ git clone -b ros2 https://github.com/rt-net/raspicat_sim.git + $ git clone -b ros2 https://github.com/rt-net/raspicat_slam_navigation.git + + # Install dependencies + $ rosdep update + $ rosdep install -r -y -i --from-paths raspicat* raspimouse* + $ sudo apt install xterm + + # make & install + $ cd ~/catkin_ws && colcon build --symlink-install + $ source ~/catkin_ws/install/setup.bash + + # Gazeboで使用するハードウェアモデルデータをダウンロード + $ ros2 run raspicat_gazebo download_gazebo_models.sh + ``` + +## 動作確認(キーボードで操縦) {: #teleop} + +=== "ROS" + + !!! Tip + 初回起動時において、Gazeboはモデルをインターネットからダウンロードします。 + そのため、シミュレータ環境の立ち上げに時間がかかる場合があります。 + + ```sh + # シミュレータの起動 + $ roslaunch raspicat_gazebo raspicat_with_iscas_museum.launch + + # キーボード操縦用ノードの立ち上げ(別のターミナルでコマンドを実行) + $ roslaunch raspicat_bringup teleop.launch joy:=false + ``` + +=== "ROS 2" + + !!! Tip + 初回起動時において、Gazeboはモデルをインターネットからダウンロードします。 + そのため、シミュレータ環境の立ち上げに時間がかかる場合があります。 + + ```sh + # シミュレータの起動 + $ ros2 launch raspicat_gazebo raspicat_with_iscas_museum.launch.py + + # キーボード操縦用ノードの立ち上げ(別のターミナルでコマンドを実行) + $ ros2 service call /motor_power std_srvs/SetBool '{data: true}' + $ ros2 launch raspicat_bringup teleop.launch.py teleop:=key + ``` \ No newline at end of file diff --git a/docs/raspicat/simulator/samples.md b/docs/raspicat/simulator/samples.md new file mode 100644 index 0000000..267c95e --- /dev/null +++ b/docs/raspicat/simulator/samples.md @@ -0,0 +1,309 @@ +--- +title: シミュレータでサンプルを動かす +robot: Raspberry Pi Cat +--- + +# シミュレータでサンプルを動かす + +=== "ROS" + + このページでは、 + [raspicat_sim](https://github.com/rt-net/raspicat_sim){target=_blank rel=noopener} + パッケージと + [raspicat_slam_navigation](https://github.com/rt-net/raspicat_slam_navigation){target=_blank rel=noopener} + パッケージを使ってシミュレータ上 + でSLAM / Navigationを実施する方法について説明します。 + +=== "ROS 2" + + このページでは、 + [raspicat_sim](https://github.com/rt-net/raspicat_sim/tree/ros2){target=_blank rel=noopener} + パッケージと + [raspicat_slam_navigation](https://github.com/rt-net/raspicat_slam_navigation/tree/ros2){target=_blank rel=noopener} + パッケージを使ってシミュレータ上 + でSLAM / Navigationを実施する方法について説明します。 + +## 使用機材 {: #requirements} + +=== "ROS" + + * ノートパソコン等のPC + * OS(**Ubuntu Desktop 18.04**)、ROS、シミュレータがインストール済みであることを前提としています + * インストール方法については[ROSのインストール](../ros/install.md)と[シミュレータのインストール](./install.md)を参照してください。 + +=== "ROS 2" + + * ノートパソコン等のPC + * OS(**Ubuntu Desktop 22.04**)、ROS 2、シミュレータがインストール済みであることを前提としています + * インストール方法については[ROSのインストール](../ros/install.md)と[シミュレータのインストール](./install.md)を参照してください。 + +## シミュレータ環境を立ち上げる {: #launch} + +!!! Tip + 初回起動時において、Gazeboはモデルをインターネットからダウンロードします。 + そのため、シミュレータ環境の立ち上げに時間がかかる場合があります。 + 事前にモデルをダウンロードしている場合は、すぐにシミュレータ環境が立ち上がります。 + +=== "ROS" + + #### Gazeboのみ立ち上げ + ```sh + # シミュレータの起動 + $ roslaunch raspicat_gazebo raspicat_with_iscas_museum.launch rviz:=false + ``` + #### GazeboとRVizの立ち上げ + ```sh + # シミュレータおよびRVizの起動 + $ roslaunch raspicat_gazebo raspicat_with_iscas_museum.launch + ``` + +=== "ROS 2" + + #### Gazeboのみ立ち上げ + ```sh + # シミュレータの起動 + $ ros2 launch raspicat_gazebo raspicat_with_iscas_museum.launch.py rviz:=false + ``` + #### GazeboとRVizの立ち上げ + ```sh + # シミュレータおよびRVizの起動 + $ ros2 launch raspicat_gazebo raspicat_with_iscas_museum.launch.py + ``` + +## 操縦する {: #teleop} + +=== "ROS" + + ![raspicat_sim](https://rt-net.github.io/images/raspberry-pi-cat/raspicat_gazebo_with_iscas_museum.gif) + +### キーボードで操縦する {: #teleop-keyboard} + +=== "ROS" + + ```sh + # シミュレータの起動 + $ roslaunch raspicat_gazebo raspicat_with_iscas_museum.launch + + # キーボード操縦用ノードの立ち上げ(別のターミナルでコマンドを実行) + $ roslaunch raspicat_bringup teleop.launch joy:=false + ``` + +=== "ROS 2" + + ```sh + # シミュレータの起動 + $ ros2 launch raspicat_gazebo raspicat_with_iscas_museum.launch.py + + # キーボード操縦用ノードの立ち上げ(別のターミナルでコマンドを実行) + $ ros2 service call /motor_power std_srvs/SetBool '{data: true}' + $ ros2 launch raspicat_bringup teleop.launch.py teleop:=key + ``` + +### ジョイスティックコントローラで操縦する {: #teleop-joy} + +=== "ROS" + + ```sh + # シミュレータの起動 + $ roslaunch raspicat_gazebo raspicat_with_iscas_museum.launch + + # キーボード操縦用ノードの立ち上げ(別のターミナルでコマンドを実行) + $ roslaunch raspicat_bringup teleop.launch joy:=true + ``` + +=== "ROS 2" + + ```sh + # シミュレータの起動 + $ ros2 launch raspicat_gazebo raspicat_with_iscas_museum.launch.py + + # キーボード操縦用ノードの立ち上げ(別のターミナルでコマンドを実行) + $ ros2 service call /motor_power std_srvs/SetBool '{data: true}' + $ ros2 launch raspicat_bringup teleop.launch.py teleop:=joy + ``` + +## シミュレータ環境でSLAM {: #slam} + +#### キーボードで操縦 {: #slam-teleop-keyboard} +=== "ROS" + + === "gmapping" + ```sh + # シミュレータの起動 + $ roslaunch raspicat_gazebo raspicat_with_iscas_museum.launch rviz:=false + + # gmappingの実行 + $ roslaunch raspicat_slam raspicat_gmapping.launch + + # キーボード操縦用ノードの立ち上げ + $ roslaunch raspicat_bringup teleop.launch joy:=false + + # 地図の保存(map_fileへのパスは任意のパスを指定できます) + $ roslaunch raspicat_slam map_save.launch map_file:=$(rospack find raspicat_slam)/config/maps + ``` + === "cartographer" + ```sh + # シミュレータの起動 + $ roslaunch raspicat_gazebo raspicat_with_iscas_museum.launch rviz:=false + + # cartographerの実行 + $ roslaunch raspicat_slam raspicat_cartographer.launch + + # キーボード操縦用ノードの立ち上げ + $ roslaunch raspicat_bringup teleop.launch joy:=false + + # 地図の保存(map_fileへのパスは任意のパスを指定できます) + $ roslaunch raspicat_slam map_save.launch map_file:=$(rospack find raspicat_slam)/config/maps + ``` + === "slam_toolbox" + ```sh + # シミュレータの起動 + $ roslaunch raspicat_gazebo raspicat_with_iscas_museum.launch rviz:=false + + # slam_toolboxの実行 + $ roslaunch raspicat_slam raspicat_slam_toolbox.launch + + # キーボード操縦用ノードの立ち上げ + $ roslaunch raspicat_bringup teleop.launch joy:=false + + # 地図の保存(map_fileへのパスは任意のパスを指定できます) + $ roslaunch raspicat_slam map_save.launch map_file:=$(rospack find raspicat_slam)/config/maps + ``` + +=== "ROS 2" + + === "slam_toolbox" + ```sh + # シミュレータの起動 + $ ros2 launch raspicat_gazebo raspicat_with_iscas_museum.launch.py + + # slam_toolboxの実行 + $ ros2 launch raspicat_slam raspicat_slam_toolbox.launch.py + + # キーボード操縦用ノードの立ち上げ + $ ros2 service call /motor_power std_srvs/SetBool '{data: true}' + $ ros2 launch raspicat_bringup teleop.launch.py teleop:=key + + # 地図の保存(地図の保存先は任意のパスを指定できます) + $ ros2 run nav2_map_server map_saver_cli -f ~/map + ``` + +#### ジョイスティックコントローラで操縦 {: #slam-teleop-joy} +=== "ROS" + + === "gmapping" + ```sh + # シミュレータの起動 + $ roslaunch raspicat_gazebo raspicat_with_iscas_museum.launch rviz:=false + + # gmappingの実行 + $ roslaunch raspicat_slam raspicat_gmapping.launch + + # ジョイスティック操縦用ノードの立ち上げ + $ roslaunch raspicat_bringup teleop.launch joy:=true + + # 地図の保存(map_fileへのパスは任意のパスを指定できます) + $ roslaunch raspicat_slam map_save.launch map_file:=$(rospack find raspicat_slam)/config/maps + ``` + + + === "cartographer" + ```sh + # シミュレータの起動 + $ roslaunch raspicat_gazebo raspicat_with_iscas_museum.launch rviz:=false + + # cartographerの実行 + $ roslaunch raspicat_slam raspicat_cartographer.launch + + # ジョイスティック操縦用ノードの立ち上げ + $ roslaunch raspicat_bringup teleop.launch joy:=true + + # 地図の保存(map_fileへのパスは任意のパスを指定できます) + $ roslaunch raspicat_slam map_save.launch map_file:=$(rospack find raspicat_slam)/config/maps + ``` + + + === "slam_toolbox" + ```sh + # シミュレータの起動 + $ roslaunch raspicat_gazebo raspicat_with_iscas_museum.launch rviz:=false + + # slam_toolboxの実行 + $ roslaunch raspicat_slam raspicat_slam_toolbox.launch + + # ジョイスティック操縦用ノードの立ち上げ + $ roslaunch raspicat_bringup teleop.launch joy:=true + + # 地図の保存(map_fileへのパスは任意のパスを指定できます) + $ roslaunch raspicat_slam map_save.launch map_file:=$(rospack find raspicat_slam)/config/maps + ``` + + +=== "ROS 2" + + === "slam_toolbox" + ```sh + # シミュレータの起動 + $ ros2 launch raspicat_gazebo raspicat_with_iscas_museum.launch.py + + # slam_toolboxの実行 + $ ros2 launch raspicat_slam raspicat_slam_toolbox.launch.py + + # キーボード操縦用ノードの立ち上げ + $ ros2 service call /motor_power std_srvs/SetBool '{data: true}' + $ ros2 launch raspicat_bringup teleop.launch.py teleop:=joy + + # 地図の保存(地図の保存先は任意のパスを指定できます) + $ ros2 run nav2_map_server map_saver_cli -f ~/map + ``` + +## シミュレータ環境でナビゲーション {: #navigation} +=== "ROS" + + === "move_base" + ```sh + # シミュレータの起動 + $ roslaunch raspicat_gazebo raspicat_with_iscas_museum.launch rviz:=false + + # move_baseの実行 + $ roslaunch raspicat_navigation raspicat_navigation.launch navigation:="move_base" mcl_map_file:=map-path navigation_map_file:=map-path + ``` + + + + === "neonavigation" + ```sh + # シミュレータの起動 + $ roslaunch raspicat_gazebo raspicat_with_iscas_museum.launch rviz:=false + + # neonavigationの実行 + $ roslaunch raspicat_navigation raspicat_navigation.launch navigation:="neonav" mcl_map_file:=map-path navigation_map_file:=map-path + ``` + + + +=== "ROS 2" + + === "Navigation 2" + ```sh + # シミュレータの起動 + $ ros2 launch raspicat_gazebo raspicat_with_iscas_museum.launch.py + + # Navigation 2の実行 + $ ros2 service call /motor_power std_srvs/SetBool '{data: true}' + $ ros2 launch raspicat_navigation raspicat_nav2.launch.py map:=$HOME/map.yaml + ``` + + !!! Tip + RVizのパネルにある`2D Pose Estimate`を使用して、初期位置をセットすることで + ナビゲーションが始まります。 \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 0c00f3c..257e0c6 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -113,6 +113,17 @@ nav: - 5. 関連リンク集: jnmouse/others.md - Raspberry Pi Cat: - 1. 製品について: raspicat/products.md + - 2. デバイスドライバ: + - 1. インストール: raspicat/driver/install.md + - 2. サンプルを動かす: raspicat/driver/samples.md + - 3. ROS / ROS 2: + - 1. ROS / ROS 2のインストール: raspicat/ros/install.md + - 2. ROS / ROS 2パッケージのインストール: raspicat/ros/package-install.md + - 3. ROS / ROS 2サンプルの実行: raspicat/ros/samples.md + - 4. シミュレータの実行: + - 1. シミュレータのインストール: raspicat/simulator/install.md + - 2. サンプルを動かす: raspicat/simulator/samples.md + - 5. 関連リンク集: raspicat/others.md - USB出力9軸IMUセンサモジュール: - 1. 製品について: usb9imu/products.md - 2. 関連リンク集: usb9imu/others.md