記事一覧

rosserial で M5Atom Lite Lチカ 備忘録

rosserial で M5Atom Lite Lチカ 備忘録



こんにちはRoboTakaoです。
前回、Arduinoでrosserialのテストをしましたが。今回はM5Atomです。
でもすぐにはうまく動きませんでした。


環境

ubuntu 18.04.3
ROS Melodic
M5Atom Lite


前回のスケッチをM5Atom用に改造して、LEDを最初はブルーで点灯させて
コマンド送信したら1秒だけレッドにするようにしました。


試したところ、まずはrosserialで接続をするところで以下エラーとなり進みません

$ rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0

Unable to sync with device; possible link problem or link software version mismatch such as hydro rosserial_python with groovy Arduino

rosserial08.png

シリアルモニタを覗いて見ると、どうやらリブートを繰り返しているよう。

rosserial09.png

いろいろ調べて見ると、M5Stackの場合はros.hをインクルードする前に以下を入れる必要があるとのこと
参考サイト



#undef ESP32
#include <ros.h>


これで前回同様にコマンド入力するとうまくLEDが制御できました。

ターミナルで実行

$ roscore
$ rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0
$ rostopic pub toggle_led std_msgs/Empty --once

rosserial10.png

rosserial12.png

rosserial13.png




スケッチ


/*
* rosserial Subscriber Example
* Blinks an LED on callback
*/
#include "M5Atom.h"
#undef ESP32 //It's nessesary for M5Atom.
#include <ros.h>
#include <std_msgs/Empty.h>

ros::NodeHandle nh;

void messageCb( const std_msgs::Empty& toggle_msg){
M5.dis.drawpix(0, 0x00ff00); //red
delay(1000);
M5.dis.drawpix(0, 0x0000ff); //blue
}

ros::Subscriber sub("toggle_led", &messageCb );

void setup()
{
M5.begin(true, false, true);
M5.dis.drawpix(0, 0x000000); //black(dummy)
M5.dis.drawpix(0, 0x0000ff); //blue
nh.initNode();
nh.subscribe(sub);
}

void loop()
{
nh.spinOnce();
delay(1);
}

スポンサードリンク

コメント

コメントの投稿

非公開コメント

プロフィール

RoboTakao

Author:RoboTakao
みなさんご訪問ありがとうございます。ロボット作りたいけどお小遣いそんなにないし、簡単でローコストでロボットを作るための私のプロジェクトを紹介します。

ウェブサイトもありますのでそちらもよろしくお願いします。
http://robotakao.jp/

スポンサーリンク