Main Content

runNode

Start ROS or ROS 2 node

Description

runNode(device,modelName) starts the ROS or ROS 2 node associated with the deployed Simulink® model named modelName. The node must be deployed in the workspace specified by the CatkinWorkspace property of the input rosdevice object or the ROS2Workspace property of the input ros2device object, device. By default, the node connects to the ROS master that MATLAB® is connected to with the device.DeviceAddress property.

example

runNode(device,modelName,masterURI) connects to the specified master URI. This syntax is applicable only when device is a rosdevice object.

runNode(device,modelName,masterURI,nodeHost) connects to the specified master URI and node host. The node advertises its address as the host name or IP address given in nodeHost. This syntax is applicable only when device is a rosdevice object.

Examples

collapse all

Connect to a remote ROS device and start a ROS node. Run a ROS core so that ROS nodes can communicate via a ROS network. You can run and stop a ROS core or node and check their status using a rosdevice object.

Create a connection to a ROS device. Specify the address, user name, and password of your specific ROS device. The device already contains the available ROS nodes that can be run using runNode.

ipaddress = '192.168.203.129';
d = rosdevice(ipaddress,'user','password');
d.ROSFolder = '/opt/ros/indigo';
d.CatkinWorkspace = '~/catkin_ws_test'
d = 
  rosdevice with properties:

      DeviceAddress: '192.168.203.129'
           Username: 'user'
          ROSFolder: '/opt/ros/indigo'
    CatkinWorkspace: '~/catkin_ws_test'
     AvailableNodes: {'robotcontroller'  'robotcontroller2'}

Run a ROS core. Connect MATLAB® to the ROS master using rosinit. This core enables you to run ROS nodes on your ROS device.

runCore(d)
rosinit(d.DeviceAddress,11311)
Initializing global node /matlab_global_node_84497 with NodeURI http://192.168.203.1:56034/

Check the available ROS nodes on the connected ROS device. These nodes listed were generated from Simulink® models following the process in the Get Started with ROS in Simulink example.

d.AvailableNodes
ans = 1×2 cell
    {'robotcontroller'}    {'robotcontroller2'}

Run a ROS node and specify the node name. Check if the node is running.

runNode(d,'RobotController')
running = isNodeRunning(d,'RobotController')
running = logical
   1

Stop the ROS node. Disconnect from the ROS network. Stop the ROS core.

stopNode(d,'RobotController')
rosshutdown
Shutting down global node /matlab_global_node_84497 with NodeURI http://192.168.203.1:56034/
stopCore(d)

Run multiple ROS nodes on a connected ROS device. ROS nodes can be generated using Simulink® models to perform different tasks on the ROS network. These nodes are then deployed on a ROS device and can be run independently of Simulink®.

This example uses two different Simulink models that have been deployed as ROS nodes. See Generate a Standalone ROS Node from Simulink and follow the instructions to generate and deploy a ROS node. Do this twice and name them 'robotcontroller' and 'robotcontroller2'. The 'robotcontroller' node sends velocity commands to a robot to navigate it to a given point. The 'robotcontroller2' node uses the same model, but doubles the linear velocity to drive the robot faster.

Create a connection to a ROS device. Specify the address, user name, and password of your specific ROS device. The device contains information about the ROS device, including the available ROS nodes that can be run using runNode.

ipaddress = '192.168.203.129';
d = rosdevice(ipaddress,'user','password')
d = 
  rosdevice with properties:

      DeviceAddress: '192.168.203.129'
           Username: 'user'
          ROSFolder: '/opt/ros/indigo'
    CatkinWorkspace: '~/catkin_ws'
     AvailableNodes: {0×1 cell}

d.CatkinWorkspace = '~/catkin_ws_test'
d = 
  rosdevice with properties:

      DeviceAddress: '192.168.203.129'
           Username: 'user'
          ROSFolder: '/opt/ros/indigo'
    CatkinWorkspace: '~/catkin_ws_test'
     AvailableNodes: {'robotcontroller'  'robotcontroller2'}

Run a ROS core. The ROS Core is the master enables you to run ROS nodes on your ROS device. Connect MATLAB® to the ROS master using rosinit. For this example, the port is set to 11311. rosinit can automatically select a port for you without specifying this input.

runCore(d)
rosinit(d.DeviceAddress,11311)
Initializing global node /matlab_global_node_66434 with NodeURI http://192.168.203.1:59395/

Check the available ROS nodes on the connected ROS device. The nodes listed in this example were generated from Simulink® models following the process in the Generate a Standalone ROS Node from Simulink example. Two separate nodes are generated, 'robotcontroller' and 'robotcontroller2', which have the linear velocity set to 1 and 2 in the model respectively.

d.AvailableNodes
ans = 1×2 cell
    {'robotcontroller'}    {'robotcontroller2'}

Start up the Robot Simulator using ExampleHelperSimulinkRobotROS. This simulator automatically connects to the ROS master on the ROS device. You will use this simulator to run a ROS node and control the robot.

sim = ExampleHelperSimulinkRobotROS;

Run a ROS node, specifying the node name. The 'robotcontroller' node commands the robot to a specific location ([-10 10]). Wait to see the robot drive.

runNode(d,'robotcontroller')
pause(10)

Reset the Robot Simulator to reset the robot position. Alternatively, click Reset Simulation. Because the node is still running, the robot continues back to the specific location. To stop sending commands, stop the node.

resetSimulation(sim.Simulator)
pause(5)

stopNode(d,'robotcontroller')

Run the 'robotcontroller2' node. This model drives the robot with twice the linear velocity. Reset the robot position. Wait to see the robot drive. You should see a wider turn due to the increased velocity.

runNode(d,'robotcontroller2')
resetSimulation(sim.Simulator)
pause(10)

Close the simulator. Stop the ROS node. Disconnect from the ROS network and stop the ROS core.

close
stopNode(d,'robotcontroller2')
rosshutdown
Shutting down global node /matlab_global_node_66434 with NodeURI http://192.168.203.1:59395/
stopCore(d)

Input Arguments

collapse all

ROS or ROS 2 device, specified as a rosdevice or ros2device object, respectively.

Name of the deployed Simulink model, specified as a character vector. If the model name is not valid, the function returns an error.

URI of the ROS master, specified as a character vector. On startup, the node connects to the ROS master with the given URI.

Host name for the node, specified as a character vector. The node uses this host name to advertise itself on the ROS network for others to connect to it.

Version History

Introduced in R2019b