お盆は実家で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ではこれが必ず必要です
③
Groovy-PIDのリセットスイッチを押す
④
rosrun groovypid Groovy_LED_test
これでLEDがチカチカします