2023年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

カテゴリー

ブログパーツ

無料ブログはココログ

« ROSでラズパイ2のGPIOを使う | トップページ | GPIOをノード間通信で使う »

2016年4月 2日 (土)

ROSでLチカ

今回はROSのノードとして実行できるLチカコードを作ります。まずは作業用のパッケージとしてrptestというのを作りました。ラズパイの勉強用パッケージという訳ですが、もちろん、名前は好きなものでかまいません。パッケージの作り方は以前の投稿を見てください。

パッケージのscrptsディレクトリの中にflash.pyという名前でLチカのコードを書きます。実行可能にしておくのをお忘れなく。簡単にはchmod 777 flash.pyで大丈夫です。

#!/usr/bin/env python
import roslib
import rospy
import time
import wiringpi
import subprocess

#main
if __name__ == '__main__':
    ### init io port ###
    subprocess.check_call('gpio export 11 out',shell=True)
    subprocess.check_call('gpio export 8 out',shell=True)
    ###
    rospy.init_node('ledflash')

    io = wiringpi.GPIO(wiringpi.GPIO.WPI_MODE_SYS)
    io.pinMode(11,io.OUTPUT)  # Setup pin 11
    io.pinMode(8,io.OUTPUT)  # Setup pin 8 

    while not rospy.is_shutdown():
        io.digitalWrite(11,1)
        io.digitalWrite(8,0)
        time.sleep(1)
        io.digitalWrite(11,0)
        io.digitalWrite(8,1)
        time.sleep(1)

    print('\rStopped')

最近ようやくきれいにコードをブログに載せることができるようになりました。このコードは11と8に接続したLEDを交互に点滅させるものです。

Dscn3366

注目しておきたいのは、subprocess.check_call('gpio export 11 out',shell=True)とその次の行です。これは括弧内のシェルコマンドを実行する記述で、このシェルコマンドでポート11と8をOUTPUTに設定しています。これを使うにはimport subprocessを記述しておく必要があります。

wiringPi-Pythonのラッパーを使うにはimport wiringpiを記述しておきます。この辺は情報が多く、また錯綜している感があるので、ともかく入出力ができることのみに専念しています。ポートの設定はちょっと苦労しましたが、結局gpio exportをつかうことでsudoなしで実行することができました。これはポートの入出力を設定するgpioコマンドで、このようにするとポートはその後プログラムでoutポートとしてアクセスすることが出来ます。よく例にあるgpio -g modeで設定すると、gpio writeコマンドだと使えますが、プログラムからは使えません。

gpio exportは一度設定すると再ログインするまではそのままなので、このようにプログラムで書かなくとも、シェルスクリプトで一回実行しておく方法でも良いのですが、必要なポートの設定はプログラムに書いた方が使いやすいと思います。

実行するにはroscoreを起動した後、rosrun rptest flash.pyでROSのノードとして実行します。次はメッセージを追加してそれらしくしてみます。

« ROSでラズパイ2のGPIOを使う | トップページ | GPIOをノード間通信で使う »

ROSさんお手やわらかに」カテゴリの記事

ラズパイでROS」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: ROSでLチカ:

« ROSでラズパイ2のGPIOを使う | トップページ | GPIOをノード間通信で使う »