tomoswifty / ros2serial_arduino

Package to send and receive data using serial communication between ROS 2 node and Arduino Mega
0 stars 2 forks source link

ROS 2からArduinoUNOに通信をしたい #1

Closed drinkBr closed 2 weeks ago

drinkBr commented 5 months ago

質問です。 ROS 2からArduinoUNOに通信するには99-usb-arduino-maga.rules内を書き換えればよいのでしょうか?また、これを書くにあたって参考にしたものがあれば教えていただけると幸いです。

よろしくおねがいします。

tomoswifty commented 5 months ago

質問ありがとうございます.

はい,.rulesファイルのidVenderなどをUnoのものを書き換えれば可能です.

このサイトを参考にしております. https://tech-lab.sios.jp/archives/26741

drinkBr commented 5 months ago

ご回答ありがとうございます。試してみます。

重ねて質問失礼します。udevの設定の際"cp udev/99-usb-arduino-mega.rules /etc/udev/rules.d"をTerminalで実行すると"cp: cannot create regular file : Permission denied"と表示されてしまいます。調べてみるとroot権限であれば正常に機能するようでした。投稿者様はroot権限で行われましたでしょうか?また、"cp udev/99-usb-arduino-mega.rules /etc/udev/rules.d"のetcというのは開発環境によって異なるのでしょうか?初期状態であればコピー&ペーストでできるのでしょうか?

質問が多くなってしまい大変恐縮ですが、よろしくおねがいします。

tomoswifty commented 5 months ago

そうですね,root権限が必要です. 説明不足でした.

私はsudoなどをつけて実行してます.

drinkBr commented 5 months ago

コメント修正している最中にかえしていただいたようで、ありがとうございます。一旦進めてみます。 また、疑問が出たときには頼りにさせていただきます。よろしくおねがいします。

drinkBr commented 5 months ago

質問です。

リンク先のキー入力用ノードからserial_send_nodeを介してArduinoUNOへのシリアル通信を試みています。Arduinoへの通信はRXのランプの点滅から確認できていますが,if文等で受け取ったデータによる条件分岐が出来ていません。直接的な質問とは離れてしまいますが,是非アドバイスをよろしくお願いします。 https://github.com/nek009/key_event

変更点及びArduinoのプログラムは以下の通りです。

#include"key_event_nodes/key_hit_event_node.hpp"および#include"key_event_msgs/msg/key_event.hpp"の追加 これに伴い~/ros2serial_arduino/include/ros2serial_arduino/内にkey_hit_event_node.hppを追加(include以降は新規作成)key_event_msgs::msg::KeyEvent 19行目 subscription_ = this->create_subscription( "key_hit_event", 10, std::bind(&MySubscriber::topic_callback, this, _1)); 29行目 %lf から%d msg->linear.xからmsg->key 33行目  bytes_written = snprintf(buf, sizeof(buf), "%7.3d\n", msg->key); 56行目 rclcpp::Subscription::SharedPtr subscription_; 78行目 char device_name[] = "/dev/ttyACM0" KERNEL=="ttyACM0", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0043", MODE:="0666" find_package(key_event_nodes REQUIRED) find_package(key_event_msgs REQUIRED) ament_target_dependencies(${target} "rclcpp" "std_msgs" "key_event_nodes" "key_event_msgs") #include String key;//keyがString(文字列) int i; void setup(){ Serial.begin( 115200 ); pinMode(2, OUTPUT); } void loop(){ if(Serial.available() > 0){ key = Serial.readString(); // key = Serial.readStringUntil('\n'); i = key.toInt(); //k入力時を想定 if (key == 107){ digitalWrite(2, LOW);} else { digitalWrite(2, HIGH);} } // if (i > 1){ // digitalWrite(2, HIGH); // } // else { // //digitalWrite(2, LOW); // } }