https://github.com/micro-ros/micro-ros-demos
Sample code using rclc and rclcpp implementations.
https://github.com/micro-ros/micro-ros-demos
Last synced: 9 months ago
JSON representation
Sample code using rclc and rclcpp implementations.
- Host: GitHub
- URL: https://github.com/micro-ros/micro-ros-demos
- Owner: micro-ROS
- License: apache-2.0
- Created: 2018-11-05T09:49:38.000Z (over 7 years ago)
- Default Branch: jazzy
- Last Pushed: 2024-05-31T11:03:48.000Z (about 2 years ago)
- Last Synced: 2024-05-31T12:24:34.895Z (about 2 years ago)
- Language: C
- Size: 323 KB
- Stars: 78
- Watchers: 8
- Forks: 22
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# micro-ROS Demos
[](https://opensource.org/licenses/Apache-2.0)
## Overview
The primary purpose for this repository is to organise all packages for the [Micro-ROS project](https://microros.github.io/micro-ROS/) functionalities demonstrations.
All packages contained in this repository are a part of the Micro-ROS project stack.
## Previous step
To run all the demonstrations, you need to set up the ROS2 environment and build all the required packages.
Click [here](https://github.com/microROS/micro-ROS-doc) to read further about how to do this previous step.
## Package clusters
The repository contains the below packages clusters:
### Simple message demonstration
#### Packages
##### Int32_publisher
The purpose of the package is to publish one of the most basic ROS2 messages and demonstrate how Micro-ROS layers (rcl, typesupport and rmw) handle it.
For each publication, the message value increases in one unit order to see in the subscriber side the message variations.
##### Int32_subscriber
The purpose of the package is to subscribe to one of the most basic ROS2 messages and demonstrate how Micro-ROS layers (rcl, typesupport and rmw) handle it.
#### Run demonstration (Linux)
Run the micro-ROS Agent.
For the micro-ROS Agent to find the XML reference file, the execution must be done from the executable folder.
```bash
cd ~/agent_ws/install/uros_agent/lib/uros_agent/
./uros_agent udp 8888
```
You may prefer to run the Agent in the background and discard all outputs to keep using the same terminal for the next step.
```bash
cd ~/agent_ws/install/uros_agent/lib/uros_agent/
./uros_agent udp 8888 > /dev/null &
```
Run the publisher.
```bash
~/client_ws/install/int32_publisher_c/lib/int32_publisher_c/./int32_publisher_c
```
You may prefer to run the publisher in the background and discard all outputs to keep using the terminal for the next step.
```bash
~/client_ws/install/int32_publisher_c/lib/int32_publisher_c/./int32_publisher_c > /dev/null &
```
Run the subscriber.
```bash
~/client_ws/install/int32_subscriber_c/lib/int32_subscriber_c/./int32_subscriber_c
```
#### Run demonstration (Windows)
Run the micro-ROS Agent.
For the micro-ROS Agent to find the XML reference file, the execution must be done from the executable folder.
```bash
cd C:\A\install\Lib\uros_agent\
uros_agent.exe udp 8888
```
Run the publisher.
```bash
cd C:\C\install\Lib\int32_publisher_c\
int32_publisher_c.exe
```
Run the subscriber.
```bash
cd C:\C\install\Lib\int32_subscriber_c\
int32_subscriber_c.exe
```
### String message demonstration
#### String packages
##### String_publisher
The purpose of the package is to publish a simple string ROS2 message and demonstrate how Micro-ROS layers (rcl, typesupport and rmw) handle it.
For each publication, the message string number increases in one unit order to see in the subscriber side the message variations.
##### String_subscriber
The purpose of the package is to subscribe to a simple string ROS2 message and demonstrate how Micro-ROS layers (rcl, typesupport and rmw) handle it.
#### Run string demonstration (Linux)
Run the micro-ROS Agent.
For the micro-ROS Agent to find the XML reference file, the execution must be done from the executable folder.
```bash
cd ~/agent_ws/install/uros_agent/lib/uros_agent/
./uros_agent udp 8888
```
You may prefer to run the Agent in the background and discard all outputs to keep using the same terminal for the next step.
```bash
cd ~/agent_ws/install/uros_agent/lib/uros_agent/
./uros_agent udp 8888 > /dev/null &
```
Run the publisher.
```bash
~/client_ws/install/string_publisher_c/lib/string_publisher_c/./string_publisher_c
```
You may prefer to run the publisher in the background and discard all outputs in order to keep using the terminal for the next step.
```bash
~/client_ws/install/string_publisher_c/lib/string_publisher_c/./string_publisher_c > /dev/null &
```
Run the subscriber.
```bash
~/client_ws/install/string_subscriber_c/lib/string_subscriber_c/./string_subscriber_c
```
#### Run string demonstration (Windows)
Run the micro-ROS Agent.
For the micro-ROS Agent to find the XML reference file, the execution must be done from the executable folder.
```bash
cd C:\A\install\Lib\uros_agent\
uros_agent.exe udp 8888
```
Run the publisher.
```bash
cd C:\C\install\Lib\string_publisher_c\
string_publisher_c.exe
```
Run the subscriber.
```bash
cd C:\C\install\Lib\string_subscriber_c\
string_subscriber_c.exe
```
### Complex message demonstration
#### Complex packages
##### complex_msg
One of the purposes of the package is to demonstrate how typesupport code is generated for a complex message.
Also, the generation of a complex ROS2 structure message is used to demonstrate how the different layers (rcl, typesupport and rmw) handle it.
The message structure contains the following types:
- All primitive data types.
- Nested message data.
- Unbonded string data.
##### Complex_msg_publisher
The purpose of the package is to publish a complex ROS2 message and demonstrate how Micro-ROS layers (rcl, typesupport and rmw) handle it.
For each publication, the message values increases in one unit order to see in the subscriber side the message variations.
##### Complex_msg_subscriber
The purpose of the package is to subscribe to a complex ROS2 message and demonstrate how Micro-ROS layers (rcl, typesupport and rmw) handle it.
#### Run complex demonstration (Linux)
Run the micro-ROS Agent
```bash
cd ~/agent_ws/install/uros_agent/lib/uros_agent/
./uros_agent udp 8888
```
You may prefer to run the Agent in the background and discard all outputs to keep using the same terminal for the next step.
```bash
cd ~/agent_ws/install/uros_agent/lib/uros_agent/
./uros_agent udp 8888 > /dev/null &
```
Run the publisher.
```bash
~/client_ws/install/complex_msg_publisher_c/lib/complex_msg_publisher_c/./complex_msg_publisher_c
```
You may prefer to run the Agent in the background and discard all outputs to keep using the same terminal for the next step.
```bash
~/client_ws/install/complex_msg_publisher_c/lib/complex_msg_publisher_c/./complex_msg_publisher_c > /dev/null &
```
Run the subscriber.
```bash
~/client_ws/install/complex_msg_subscriber_c/lib/complex_msg_subscriber_c/./complex_msg_subscriber_c
```
#### Run complex demonstration (Windows)
Run the micro-ROS Agent.
For the micro-ROS Agent to find the XML reference file, the execution must be done from the executable folder.
```bash
cd C:\A\install\Lib\uros_agent\
uros_agent.exe udp 8888
```
Run the publisher.
```bash
cd C:\C\install\Lib\complex_msg_publisher_c\
complex_msg_publisher_c.exe
```
Run the subscriber.
```bash
cd C:\C\install\Lib\complex_msg_subscriber_c\
complex_msg_subscriber_c.exe
```
### Real application demonstration
This purpose of the packages is to demonstrate Micro-ROS stack can be used in a real application scenario.
In this demonstration, an altitude control system is simulated.
The primary purpose of this is to demonstrate how Micro-ROS communicates with ROS2 nodes.
#### Real application packages
##### rad0_actuator
The mission of this node is to simulate a dummy engine power actuator.
It receives power increments and publishes the total power amount as a DDS topic.
The node is built using the Micro-ROS middleware packages (rmw_micro_xrcedds and rosidl_typesupport_microxrcedds).
It is meant to be running in a microcontroller processor, but for this demonstration, the node runs on the host PC.
The node is connected to the DDS world through a Micro XRCE-DDS Agent.
##### rad0_altitude_sensor
The mission of this node is to simulate a dummy altitude sensor.
It publishes the altitude variations as a DDS topic.
The node is built using the Micro-ROS middleware packages (rmw_micro_xrcedds and rosidl_typesupport_microxrcedds).
It is meant to be running in a microcontroller processor, but for this demonstration, the node runs on the host PC.
The node is connected to the DDS world through a Micro XRCE-DDS Agent.
##### rad0_control
The mission of this node is to read altitude values and send to the actuator engine variations.
It also publishes the status (OK, WARNING or FAILURE) as a DDS topic.
The status depends on the altitude value.
The node is built using the ROS2 middleware packages (rmw_fastrtps and rosidl_typesupport_fastrtps).
It is meant to be running in on a regular PC, and it is directly connected to de DDS world.
##### rad0_display
The mission of this node is to simulate one LCD screen that prints the critical parameters.
It subscribes to the altitude, power and status messages available as a DDS topic.
The node is built using the Micro-ROS middleware packages (rmw_micro_xrcedds and rosidl_typesupport_microxrcedds).
It is meant to be running in a microcontroller processor, but for this demonstration, the node runs on the host PC.
The node is connected to the DDS world through a Micro XRCE-DDS Agent.
#### Run real application demonstration (Linux)
##### Micro-ROS nodes
Run the micro-ROS Agent.
For the micro-ROS Agent to find the XML reference file, the execution must be done from the executable folder.
```bash
cd ~/uros_WS/install/uros_agent/lib/uros_agent/
./uros_agent udp 8888
```
You may prefer to run the Agent in the background and discard all outputs to keep using the same terminal for the next step.
```bash
cd ~/uros_WS/install/uros_agent/lib/uros_agent/
./uros_agent udp 8888 > /dev/null &
```
Run the altitude_sensor node.
```bash
~/client_ws/install/rad0_altitude_sensor_c/lib/rad0_altitude_sensor_c/./rad0_altitude_sensor_c
```
You may prefer to run the publisher in the background and discard all outputs to keep using the terminal for the next steps.
```bash
~/client_ws/install/rad0_altitude_sensor_c/lib/rad0_altitude_sensor_c/./rad0_altitude_sensor_c > /dev/null &
```
Run the actuator node.
```bash
~/client_ws/install/rad0_actuator_c/lib/rad0_actuator_c/./rad0_actuator_c
```
You may prefer to run the publisher in the background and discard all outputs to keep using the terminal for the next steps.
```bash
~/client_ws/install/rad0_actuator_c/lib/rad0_actuator_c/./rad0_actuator_c > /dev/null &
```
Run the display node.
```bash
~/client_ws/install/rad0_display_c/lib/rad0_display_c/./rad0_display_c
```
##### ROS2 nodes
```bash
~/agent_ws/install/rad0_display_c/lib/rad0_display_c/./rad0_display_c
```
#### Run real application demonstration (Windows)
##### Micro-ROS nodes
Run the micro-ROS Agent.
For the micro-ROS Agent to find the XML reference file, the execution must be done from the executable folder.
```bash
cd C:\A\install\Lib\uros_agent\
uros_agent.exe udp 8888
```
Run the altitude_sensor node.
```bash
cd C:\C\install\Lib\rad0_altitude_sensor_c
rad0_altitude_sensor_c.exe
```
Run the actuator node.
```bash
cd C:\C\install\Lib\rad0_actuator_c
rad0_actuator_c.exe
```
Run the display node.
```bash
cd C:\C\install\Lib\rad0_display_c\
rad0_display_c.exe
```
##### ROS2 nodes
```bash
cd C:\A\install\Lib\rad0_control_cpp\
rad0_control_cpp.exe
```
## Purpose of the Project
This software is not ready for production use. It has neither been developed nor
tested for a specific use case. However, the license conditions of the
applicable Open Source licenses allow you to adapt the software to your needs.
Before using it in a safety relevant setting, make sure that the software
fulfills your requirements and adjust it according to any applicable safety
standards, e.g., ISO 26262.
## License
This repository is open-sourced under the Apache-2.0 license. See the [LICENSE](LICENSE) file for details.
For a list of other open-source components included in this repository,
see the file [3rd-party-licenses.txt](3rd-party-licenses.txt).
## Known Issues/Limitations
There are no known limitations.