注目キーワード
  1. Photoshop
  2. Python
  3. Raspberry Pi
  4. Arduino

ラズパイとROS2_GPIO制御パッケージでLチカをしてみた

  • 2021年6月2日
  • ROS2

この記事は

「Ubuntu Server20.04.2 LTS」OSの「Raspberry Pi 4 Model B」を使って「ROS2 Foxy」の学習ログを書き記した自分用ノート

になり、今回はROS2 FoxyとラズパイでGPIO制御をしてみたのでまとめてみました。

 

今回のROS2を用いたGPIO制御

GitHub:ROS 2 Raspberry Pi GPIO Control Package

から「ros2_py_gpio」パッケージを使用します。

 

実際にこのROS2パッケージを動作させると

ros2pygpio

とGPIO制御でLチカを行うことできます。

 

このようにROS2でLチカなどをしたい方は是非ご覧ください。

それでは早速始めていきましょう。

 

ROS2でGPIO制御するまでの準備

冒頭でも紹介していますが、ROS2でGPIO制御した動作環境を今一度まとめておきます。

 

動作環境・用意したもの

PC:Windows10

マイコン:Raspberry Pi 4 Model B

マイコンOS:Ubuntu 20.04.2 LTS Server

制御方式:ROS2 Foxy

PC-マイコン間:TeraTermによるSSH、XmingによるGUI表示

電子部品:ジャンパー線、LED

 

Raspberry PiでROS2を使おうとする方なら、問題ないと思いますが、念のため共有しておきます。

 

また、LEDとRaspberry Piの配線は

LED  ⇄ Raspberry Pi 配線+側 ⇄ GPIO17(GPIO_GEN0)

-側 ⇄ GND

と接続しています。

 

ROS2を用いたGPIO制御パッケージの準備

まずはROS2用GPIO制御パッケージをクローンしていきます。

 

私はdev_wsにてROS2パッケージを管理しているので、ワークスペース直下のsrcフォルダへディレクトリを移動します。

※ ROS2チュートリアルでのワークスペース名

cd ~/dev_ws/src

 

パッケージ管理のディレクトリへ移動できたら、GitHubからros2_pi_gpioパッケージをインストールしましょう。

git clone https://github.com/mlherd/ros2_pi_gpio.git

上記を実行すると、パッケージがインストールされるはずです。

 

このままパッケージのサンプルを動かしても良いのですが

参照パスを変更する箇所

があるので確認をします。

 

cd ~/dev_ws/src/ros2_pi_gpio/pi_gpio/pi_gpio

でpi_gpio/pi_gpioへディレクトリを移動し

 

sudo nano pi_gpio_server.py

nanoなどのお好みの編集方法でプログラムを変更していきます。

pi_gpio_server.py

ros2pigpio_python_01

 

プログラムの中に.txtファイルを参照している箇所があるので、srcフォルダ下にパッケージを入れた場合は

f = open(“src/ros2_pi_gpio/pi_gpio/gpio_pins.txt”, “r”)

と変更をします。

 

ここは各自、参照パスを合わせましょう。

パスが正しく設定されていれば、準備OKです。

 

ROS2でGPIO制御パッケージを実行

ではROS2でGPIO制御していきましょう。

 

新しくターミナルを開き

cd ~/dev_ws

とワークスペースへディレクトリを移動し

 

colcon build

ビルドします。

もちろんパッケージセレクトで指定したパッケージのみビルドしても大丈夫です。

 

ビルドできたら

. install/setup.bash

ros2 run pi_gpio pi_gpio_serve

とgpio サーバーを起動させます。

 

起動直後はgpio_pins.txtに指定されたGPIOピンと役割が出力されます。

ros2pigpio_python_02

 

同様に、新しくパッケージを開き

cd ~/dev_ws

. install/setup.bash

 

下記のアクションコマンドを一つずつ実行してみましょう。

ros2 action send_goal pi_gpio_server pi_gpio_interface/action/GPIO {‘gpio: “17,high”‘}

ros2 action send_goal pi_gpio_server pi_gpio_interface/action/GPIO {‘gpio: “17,low”‘}

 

ros2pigpio_python_03

 

一つずつ実行すると

Goal finished with status: SUCCEEDED

と表示されLEDが点滅するはずです。

 

ROS2サーバー、アクションの様子

当サイトでは毎度記載していますが

rqt_graph

でどのようなやり取りが行われているか確認をしてみます。

 

ros2pigpio_python_04

 

どうやらpi_gpio_server→actionといった流れでシステムが構築されていると分かります。

それもそのはずで、ROS2でGPIO制御する際に

ros2 run パッケージ名_server

ros2 action ・・・・・・

と実行していますからね。

 

以上、ros2_py_gpioパッケージの紹介と簡単な使い方でした。

ros2でgpio制御できるようにするのと、このような簡単なサーバー、アクションシステムも作れるように、既存パッケージから作り方を覚えていきたいと思います。

 

お疲れ様でした。

ros2pigpio_python_topthubnail
学びに関する情報をチェック!