えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

rosserial_arduino+Noeticの環境構築(エラーが出た場合の対処例)

f:id:Ray_ar:20210501181450p:plain

 ROS Noetic+rosserial_arduinoを講習用の環境構築をしましたが、少し躓いたので記載します。x86_64PCで動かしました。

 より詳しい環境構築法はこちら(Qitta @take4eng)

qiita.com

インストール

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