Arduino library for communicating with ROS2(DDS)
- Recommend version (present)
ros2arduino | ROS2 | Micro-XRCE-DDS Agent |
---|---|---|
0.1.2 | Dashing Diademata Patch1 | 1.1.0 |
For the Micro-XRCE-DDS Agent, please install it using following commands.
$ git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
$ cd Micro-XRCE-DDS-Agent && git checkout v1.1.0
$ mkdir build && cd build
$ cmake ..
$ make
$ sudo make install
$ sudo ldconfig /usr/local/lib/
- All
ros2arduino | ROS2 | Micro-XRCE-DDS Agent |
---|---|---|
0.1.2 | Dashing Diademata Patch1 | 1.1.0 |
0.1.1 | Dashing Diademata | 1.1.0 |
0.0.9 | Crystal Clemmys | 1.0.1 |
Based on the normal behavior of publisher and subscriber.
- OpenCR
- OpenCM9.04
- Arduino MKR ZERO
- Arduino DUE
- ESP32 (not support TCP yet)
Implemented | Note | |
---|---|---|
Serial | YES | |
UDP | YES | ESP32, ESP8266, Ethernet |
TCP | NO | Debugging... |
You must install ROS2 and XRCE-DDS Agent. (The version should be the same as the Version-specific dependencies above)
- ROS2
- XRCE-DDS Agent
- Micro-XRCE-DDS Agent for FastRTPS
- [File] - [Examples] - [ros2arduino]
- Serial
- [publisher]
- UDP
- [publisher_wifi_udp]
- [publisher_ethernet_udp]
- TCP
- [publisher_wifi_tcp]
- [publisher_ethernet_tcp]
- Serial
- [Sketch] - [Upload]
-
Please refer to eProsima manual for Micro-XRCE-DDS-Agent usage.
-
0.1.0 or above (Micro-XRCE-DDS-Agent 1.1.0 or above)
- Serial
$ MicroXRCEAgent serial --dev /dev/ttyACM0 -b 115200
- UDP
$ MicroXRCEAgent udp -p 2018
- TCP
$ MicroXRCEAgent tcp -p 2018
- Serial
-
0.0.9 (Micro-XRCE-DDS-Agent 1.0.1)
- Serial
$ MicroXRCEAgent --serial /dev/ttyACM0 115200
- UDP
$ MicroXRCEAgent --udp 2018
- TCP
$ MicroXRCEAgent --tcp 2018
- Serial
$ ros2 topic echo /arduino_chatter
- Use the reference method supported by Client and Agent. Please refer to eProsima manual for detailed usage.
- For this feature, You need to change the settings(code) in ros2arduino library.
- In the user_config.h file, you must set the value of UXR_CREATE_ENTITIES_USING_REF to 1 like below.
#define UXR_CREATE_ENTITIES_USING_REF 1
#define USER_ROS2_PUBLISHER_MAX 10
#define USER_ROS2_SUBSCRIBER_MAX 10
For example, create .refs file(in XML format) and run the Agent with the following options:
$ MicroXRCEAgent serial --dev /dev/ttyACM0 -b 115200 -r ros2arduino.refs
- ros2arduino.refs
<profiles>
<participant profile_name="ros2arduino_xml_node">
<rtps>
<name>ros2arduino_basic_node</name>
<builtin>
<domainId>0</domainId>
</builtin>
</rtps>
</participant>
<data_writer profile_name="arduino_chatter">
<topic>
<kind>NO_KEY</kind>
<name>rt/arduino_chatter</name>
<dataType>std_msgs::msg::dds_::String_</dataType>
<historyQos>
<kind>KEEP_LAST</kind>
<depth>10</depth>
</historyQos>
</topic>
</data_writer>
<data_reader profile_name="arduino_led">
<topic>
<name>rt/arduino_led</name>
<dataType>std_msgs::msg::dds_::Bool_</dataType>
</topic>
</data_reader>
<topic profile_name="Bool">
<kind>NO_KEY</kind>
<name>Bool</name>
<dataType>std_msgs::msg::dds_::Bool_</dataType>
</topic>
<topic profile_name="String">
<kind>NO_KEY</kind>
<name>String</name>
<dataType>std_msgs::msg::dds_::String_</dataType>
</topic>
</profiles>
- Feature
- Only one node available
- Publisher
- Subscriber
- Communication
- Serial
- UDP
- Feature
- ROS2 service
- Communication
- TCP (Debugging)
- Enhancements
- Memory allocation / Management
- Reduce memory usages
- Reusable API interfaces
- Reasonable SW structure