Generate a ROS 2 Component Node from Simulink
ROS 2 component nodes provide enhanced modularity and efficiency when integrating multiple different algorithms for robotic applications. Unlike traditional nodes that run as separate processes, you can dynamically load and execute ROS 2 component nodes during runtime in a shared process. This enables more efficient resource utilization and easy testing of individual algorithms in a complex robotic system.
You can use Simulink® to generate code for a model as a ROS 2 component shared library and deploy it to a device running ROS 2. On the device running ROS 2, you can then load the generated component.
Prerequisites
The device running ROS 2 where you deploy the component node must have an
rclcpp_components
package installed.See ROS 2 Model Build Failure in ROS and ROS 2 Simulink Support and Limitations.
To ensure you have the proper third-party software, see ROS Toolbox System Requirements.
Configure Simulink Model for ROS 2 Component Node Generation
Follow these steps to configure a Simulink model for ROS 2 component node generation:
Open your Simulink model.
On the ROS tab of the Simulink Toolstrip, in the Prepare section, click Hardware settings. In the Hardware implementation pane, Hardware board settings section contains settings specific to the generated ROS 2 package, such as the information to be included in the
package.xml
file.In the left pane, select Solver and, in the Solver selection section, ensure that Solver Type is set to
Fixed-step
, and set Fixed-step size to desired value. In generated code, the fixed-step size defines the actual time step, in seconds used for the model update loop.On the ROS tab, from the Deploy Type section, select the deployment type as Component Node.
Generate ROS 2 Component Node from Simulink
Follow these steps to generate ROS 2 component node from Simulink:
On the ROS tab, in the Connect section, specify the ROS Network as
Robot Operating System 2 (ROS 2)
.From the Deploy To drop down, specify
Localhost
, if you are deploying to the local machine. If you are deploying to a remote device, specifyRemote Device
and configure the remote device settings by selecting Manage Remote Device.In the Deploy section drop down, click Build Model. If you are deploying to the local machine, click Generate Code.
Click on the View Diagnostics link at the bottom of the model toolbar to see the output of the build process. Simulink generates a shared library for the model, and copies it to the local or remote device, and builds the ROS 2 workspace.
Load ROS 2 Components on Deployed Device
After you deploy the ROS 2 component shared library for the model, you can load the component on the ROS 2 device in one of these ways:
Run-time composition using component container
Compile-time composition using hardcoded nodes
Composition using a launch file
This example shows the steps to load the ROS 2 component with run-time composition using a component container. For more information about the other two methods, see Composing multiple nodes in a single process in the ROS 2 documentation.
The deployed ROS 2 component node has these characteristics:
ROS 2 package name — Name of the Simulink model, in lower case
Component node class name with namespace —
SLROS2::SLROSComponent
Note that a Simulink model always deploys as a single ROS 2 component node whose node
class type is SLROS2::SLROSComponent
. The component node inherits
only the name of the ROS 2 package from the Simulink model name.
Start the component container in a terminal. You must source
setup.bash
under your ROS 2 workspace before starting the
component container.
$ ros2 run rclcpp_components component_container
In a new terminal, load the ROS 2 component node. You must source
setup.bash
in this new terminal as well.
$ ros2 component load /ComponentManager packageName SLROS2::SLROSComponent
To check whether the component has been loaded, open a new terminal and enter this command.
$ ros2 component list
If the component has been loaded correctly, the corresponding ROS 2 node is now discoverable on the network. Verify that the node is listed on the network.
$ ros2 node list
Next Steps
For an example of deploying ROS 2 component nodes for a sign following robot application, see Generate and Deploy ROS 2 Component Nodes for Sign Following Robot Using Simulink.