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を動かしてみます。
次の投稿へと続く。。。