ROS Noetic+rosserial_arduinoを講習用の環境構築をしましたが、少し躓いたので記載します。x86_64PCで動かしました。
より詳しい環境構築法はこちら(Qitta @take4eng)
インストール
sudo apt install ros-noetic-rosserial sudo apt install ros-noetic-rosserial-python sudo apt install ros-noetic-rosserial-arduino
ros_libの配置
$ rosrun rosserial_arduino make_libraries.py <Arduinoのライブラリパス>
エラーが出た箇所
私の環境では、このままコンパイルしてもエラーが出てしまいました…
fatal error: cstring: No such file or directory #include <cstring> ^~~~~~~~~ compilation terminated. ボードArduino UNOに対するコンパイル時にエラーが発生しました。
Rosserial Arduino Compilation Error: No <CSTRING> - ROS Answers: Open Source Q&A Forumと同様のエラーです。
msg.hを修正すると解決しました。 Rosserial Arduino Compilation Error: No <CSTRING> - ROS Answers: Open Source Q&A Forum の答えを参考に修正しました。
ros_libライブラリ内にros_lib/ros/msg.hがあるので、そのファイルのcstring(1箇所)をstring.hに変更して、std::memcpy(2箇所)をmemcpyに変更すればいいです。これでコンパイルが通りました。
rosserial_arduinoでインポートエラー
エラーの内容
(noetic):~/ros1_ws$ rosrun rosserial_arduino serial_node.py Traceback (most recent call last): File "/opt/ros/noetic/lib/rosserial_arduino/serial_node.py", line 37, in <module> from rosserial_arduino import SerialClient File "/opt/ros/noetic/lib/python3/dist-packages/rosserial_arduino/__init__.py", line 1, in <module> from SerialClient import * ModuleNotFoundError: No module named 'SerialClient'
rosserial_arduino/init.pyを変更すると解決するみたいです。
sudo gedit /opt/ros/noetic/lib/python3/dist-packages/rosserial_arduino/__init__.py > geditで編集 > from SerialClient import * → from .SerialClient import * > 変更して閉じる
これで、動くようになりました。
実行例
プログラムはこれを使いました。
rosserial/Blink.pde at noetic-devel · ros-drivers/rosserial · GitHub
Terminal 1
$ roscore
Terminal 2
rosrun rosserial_arduino serial_node.py /dev/ttyACM0
Terminal 3
$ rostopic pub /toggle_led std_msgs/Empty --once
ArduinoでLチカ
— Ar-Ray (@Ray255Ar) 2021年5月1日
(※ROS Noeticからメッセージを受信中) pic.twitter.com/7rfsxzYgFR