ROS勉強記その3:Raspberry Pi 4+ROS(Noetic) を使ってPS4コントローラーの操作でGPIOを制御してLチカ

投稿日:2023年2月26日
最終更新日:2023年3月20日

Raspberry Pi 4+ROSを使ってPS4コントローラーでGPIOを制御する

前回はラズパイにROSをインストールして、PS4コントローラーを使うための環境をセットアップした。今回はラズパイのGPIOピンにLEDを接続して、PS4コントローラーからGPIOを制御することでLチカをやってみる。

 

実行環境

Raspberry Pi 4 Model B / 4GB

Ubuntu Server 20.04.5 LTS(64-bit)

ROS Noetic Ninjemys

ワイヤレスコントローラーDUALSHOCK 4(Playstation4コントローラー)

 

pigpioをインストール

GPIO制御にはpigpioを使う。pigpioについては以前以下でも書いたので説明は省略する。

【電子工作】pigpio + PythonでLチカしてみる(Raspberry Pi 4で遊ぼう日記 その10)

ただし、上の記事ではRaspberrry Pi OSをインストールして使っていたのでpigpioはデフォルトでインストールされていたが、今回はUbuntu ServerをOSとして使っているため、pigpioを自分でインストールする必要がある。

インストールするにはpigpioの公式サイトの説明にある通り、以下の手順を順番にラズパイのターミナルで実行していけばOK。

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

これで準備は完了。

 

PS4コントローラーの入力を受け取りGPIOを制御するSubscriberを実装

今回はjoyノードからmessageを受けとるsubscriberノードを実装することで、Lチカを実現する(joyは前回の日記でインストール済み)。まずはROSのノードを以下のお決まりのステップで作成。今回はgpio_joyという名前でパッケージをつくり、gpio_joy_test.pyという名前でPythonでコードを実装する。(あとから見るとcatkin_create_pkgは余分なものが入っている気がするが…まぁいいか)

cd ~/catkin_ws/src
mkdir gpio_joy
cd gpio_joy
catkin_create_pkg gpio_joy roscpp rospy std_msgs sensor_msgs
cd gpio_joy/src
code gpio_joy_test.py

今回はGPIO19にLEDを接続してLチカさせることにした。以下がコードの内容。msg.buttons[0]はPS4コントローラーの□ボタンを押したときに1になり、離したときに0になるので、この入力をpigpioでGPIO19ピンに反映させることで、□ボタンが押されているときにLEDを光らせている。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import rospy
import pigpio
from sensor_msgs.msg import Joy

GPIO_PIN = 19

pi = pigpio.pi()
pi.set_mode(GPIO_PIN, pigpio.OUTPUT)

def callback(msg):
    p_out = msg.buttons[0]
    pi.write(GPIO_PIN, p_out)

def listener():
    rospy.init_node('listener', anonymous=True)
    rospy.Subscriber('/joy', Joy, callback)
    rospy.spin()

if __name__ == '__main__':
    listener()

コーディングが出来たら、以下で権限をつけておく。

chmod +x gpio_joy_test.py

これでパッケージの準備は完了。

 

Raspberry PiとLEDを接続してLチカをやってみる

Raspberry PiとLEDはブレッドボードを使って接続する。今回はLEDと抵抗をラズベリーパイの35pin(GPIO 19)と39pin(GND)に接続した。抵抗値は適当に330Ωにしておいた。

あとは以下の順番で実行するだけ。まずはds4drvを実行して、前回と同様PS4コントローラーPSボタン + ShareButtonを長押しして接続する。

sudo ds4drv

次に、pigpiodを起動させておく。

sudo pigpiod

あとはROSのノードを実行していくだけ。もちろんlaunchファイルにまとめてもOK。

roscore
rosrun joy joy_node
rosrun gpio_joy gpio_joy_test.py

以下が実行してみた動画。□ボタンを押したらLEDが点灯していることがわかる。(ちなみにブレッドボードの上の方の回路は過去の残骸なので関係なし笑)

次回はもう少しロボットっぽく(?)、DCモーターをPWM制御して動かしていきたいと思う。

ROS勉強記まとめ

この勉強記は以下のページでまとめてます。

ROS(Robot Operating System)勉強記 まとめ


投稿者: wakky

映画と旅行が大好きなエンジニア。お酒、ゲーム、読書も好き。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください