へっぽこ元ロボコニスト

ロボコンに燃え尽きた自分が日々の出来事を書くだけのブログです twitter:@mozyanari_tech

MENU

2019/8/15(Raspberry PiのROSからpigpioを使ってGroovy-PIDを動かしてLチカしてみる)


スポンサーリンク

お盆は実家でSLAMの勉強

前回の記事です
mozyanari.hatenablog.com

前回はTeratermからGroovy-PIDを動かしました
このままだとロボットでは使えないので,Raspberry PiのROSからpigpioを使ってGroovy-PID上のLEDを動かしてみます

つなぎ方や動作確認,raspberry piにROSを入れることはすでに終わっている前提とします
ただ前回はGroovy IoTからPCにつなぎましたが,今回はGroovy IoTからraspberry piをUSB接続します

環境

Raspberry Pi 3 B
OS:Ubuntu Mate
ROS:Kinetic

プログラム


今回のプログラムはgitで配布しているので,git cloneで取ってください
github.com

解説

#include <pigpiod_if2.h>
pi = pigpio_start(NULL,NULL);

説明するまでもなくpigpioの初期化です
詳しい説明は以前の記事にあります
mozyanari.hatenablog.com


char l = 0x6c;
char space = 0x20;
char zero = 0x30;
char one = 0x31;
char enter = 0x0D;

Groovy PIDはTeratermで送信するasciiコードで動いています
つまり,前回やったTeratermでLチカさせたコマンドは
「l」 「 」(space) 「0」「」(改行)= 「0x6c」「0x20」「0x30」「0x0D」
を送ればいいことになります
ここではそのコマンドを定義しています
また,シリアル通信は8bitで送受信を行うのでcharにしといたほうが安全です


int serial_flag = serial_open(pi,"/dev/ttyACM0",57600,0);

ここでUSB接続したシリアルポートを開いています

第一引数

pigpioを初期化した時に返ってきた値を使用しています

第二引数

/dev/ttyACM0を指定していますが,他に接続している物があったり,OSのバージョンによっては違うものが出てくるかもしれませんがその時はここを適宜変更してください

第三引数

Groovy-PIDを動かすのに必要なボーレートは57600なのでここはこの値で固定です


serial_write(pi,serial_flag,&l,1);
serial_write(pi,serial_flag,&space,1);
serial_write(pi,serial_flag,&zero,1);
serial_write(pi,serial_flag,&enter,1);

この部分でシリアル通信でデータを送信しています

第一引数

pigpioを初期化した時に返ってきた値を使用しています

第二引数

シリアル通信を初期化した時の値を使用しています
第一,第二と初期化の時に返ってきた値を使うことで,もしどちらかの初期化が失敗したら動かないようになっています

第三引数

送信したいデータのアドレスを渡しています


実行

sudo pigpiod

まずは絶対にこれを実行します

roscore

ROSではこれが必ず必要です


f:id:masanari7430:20190727165240j:plain
Groovy-PIDのリセットスイッチを押す

rosrun groovypid Groovy_LED_test

これでLEDがチカチカします