ROS2を使ってみる(1)

ロボット

1ROS2動作確認

メッセージのやり取りを確認します。

ふたつsshターミナルを開きましょう。

ひとつのsshターミナルで

source /opt/ros/foxy/setup.bash
ros2 run demo_nodes_py listener

と入力するとリスナー待ちになります。

もうひとつのターミナルから

source /opt/ros/foxy/setup.bash
ros2 run demo_nodes_cpp talker

と入力すると、

[INFO] [1653533384.855030522] [talker]: Publishing: ‘Hello World: 38’

[INFO] [1653533385.855152338] [talker]: Publishing: ‘Hello World: 39’

という感じでメッセージパブリッシングが始まります。

リスナー側は

[INFO] [1653533684.483144059] [listener]: I heard: [Hello World: 1]

[INFO] [1653533685.413835853] [listener]: I heard: [Hello World: 2]

てな感じでメッセージが表示されます。

どうやらインストールはうまくいっているようです。

 

次にGUIでの動作を見てみます。VNCかHDMIで接続したGUIから行います。

ターミナルを3つ使います。(それぞれターミナル1,ターミナル2,ターミナル3と呼びます)
ターミナル1から以下を入力すると亀さんが真ん中にいる絵が出ます。

ros2 run turtlesim turtlesim_node

ターミナル2から司令をいれます。

ros2 run turtlesim turtle_teleop_key

キーボードの矢印キーを押すと、なにがどうなのかすぐわかると思います。

ターミナル3から次のコマンドを入れます。

rqt_graph

ノードの図が出ます。

次にROS2で最低限の動きをさせる例を探しました。
これかな?

Raspberry Pi + ROS2 で、最低限のロボットプログラム(Python)を作成

でも、これをやる前に前提のパッケージを入れます。

pigpioの導入

Raspberry PiのGPIOを扱うことは難しいです。

IOピンの読み取り書き込みがCPUのレジスター操作となるからです。
たとえばpythonでプログラムを書く場合、いきなりレジスター操作は面倒と言わざるをえません。

巷ではデファクトになりつつあるpigpioパッケージを導入します。

からあげさん?のサイトになぜpigpioがいいのか書いてあります。コールバックが使えるとタイマーを回すことができてたいへんラクです。

ただしここではaptでpigpioパッケージが導入できているようですが、ubuntuサーバー20.04では次のようにエラーが出てインストールできませんでした。

すでにパッケージとして存在していないようです。

まずインストールにunzipが必要なので、インストールします。(すでにインストールされているかもしれません)

sudo apt install unzip

次にpythonのsetuptoolsをインストールします。(すでにインストールされているかもしれません)

sudo apt install python-setuptools python3-setuptools/

pigpioライブラリーのウェブページはhttps://abyz.me.uk/rpi/pigpio/のDownloadにやり方がでています。

wget https://github.com/joan2937/pigpio/archive/master.zip
unzip master.zip
cd pigpio-master
make
sudo make install

この手順でやってみます。
コンパイルですからちょっとかかります。
インストールしたらテストがついていますので、やってみます。

sudo ./x_pigpio

TEST 1.xxから9.xxまでパスしました。
次にpigpioはdaemonを起動して使うもののようです。daemonを起動してテストします。

sudo pigpiod    # start daemon

./x_pigpiod_if2 # check C      I/F to daemon
python3 ./x_pigpio.py   # check Python I/F to daemon
./x_pigs        # check pigs   I/F to daemon
./x_pipe        # check pipe   I/F to daemon

なおpigpiodを止めるには

sudo killall pigpiod

pigpiodを自動スタートしておくためには

sudo systemctl enable pigpiod

なのですが、/lib/systemd/system/pigpiod.service がない、と怒られました。
しかたないので、ウェブを探してもっともらしいファイルを作ります。
sudo nano /lib/systemd/system/pigpiod.serviceで

 [Unit]
 Description=Gpio Daemon
 [Service]
 ExecStart=/usr/local/bin/pigpiod
 Type=forking
 [Install]
 WantedBy=multi-user.target

なんとかスタートしたようです。

LED点滅テスト

LEDを写真のようなケーブルとブレッドボードを使って接続しました。
IOポート12に接続しています。

長く伸びている線は冷却ファン接続用です。

テストプログラムは以下のとおり。

import time
import pigpio 
pi = pigpio.pi() 
pi.set_mode(12, pigpio.OUTPUT) 
while True: 
    pi.write(18, 1) 
    time.sleep(0.5) 
    pi.write(18, 0) 
    time.sleep(0.5)

ここらへんで前提作業は終わり、ROS2を動かしてみます。
次の投稿へと続く。。。