Main Content

Generate CUDA ROS Node from Simulink

Configure Simulink® Coder™ to generate and build a CUDA® ROS node from a Simulink model. You configure the model to simulate and generate CUDA code for ROS node. You then deploy the CUDA ROS node to local or remote device targets.

Prerequisites

  • Install and set up these MathWorks® products and support packages: Simulink Coder (required), Embedded Coder® (recommended), GPU Coder™, and GPU Coder Interface for Deep Learning (required for deep learning).

  • You can also install MATLAB® Coder™ Support Package for NVIDIA® Jetson™ and NVIDIA DRIVE™ Platforms (required for NVIDIA hardware connection).

  • Development computer with CUDA-enabled NVIDIA GPU.

  • Your target device can be a local host computer with a CUDA-enabled NVIDIA GPU, or a remote device such as an NVIDIA Jetson board.

  • To use GPU Coder for CUDA code generation, you must install NVIDIA graphics driver, CUDA toolkit, cuDNN library, and TensorRT library. For more information, see Installing Prerequisite Products (GPU Coder).

  • To set up the environment variables, see Setting Up the Prerequisite Products (GPU Coder).

  • To ensure you have the required third-party software, see ROS Toolbox System Requirements.

Verify GPU Environment for GPU Code Generation

To verify that your development computer has the drivers, tools, libraries, and configuration required for GPU code generation, enter these commands in the MATLAB Command Window:

gpuEnvObj = coder.gpuEnvConfig;
gpuEnvObj.BasicCodegen = 1;
gpuEnvObj.BasicCodeexec = 1;
gpuEnvObj.DeepLibTarget = "tensorrt";
gpuEnvObj.DeepCodeexec = 1;
gpuEnvObj.DeepCodegen = 1;
results = coder.checkGpuInstall(gpuEnvObj)

The output is representative. Your results might differ.

Compatible GPU           : PASSED 
CUDA Environment         : PASSED 
	Runtime   : PASSED 
	cuFFT     : PASSED 
	cuSOLVER  : PASSED 
	cuBLAS    : PASSED 
cuDNN Environment        : PASSED 
TensorRT Environment     : PASSED 
Basic Code Generation    : PASSED 
Basic Code Execution     : PASSED 
Deep Learning (TensorRT) Code Generation: PASSED 
Deep Learning (TensorRT) Code Execution: PASSED 

results = 

  struct with fields:

                 gpu: 1
                cuda: 1
               cudnn: 1
            tensorrt: 1
        basiccodegen: 1
       basiccodeexec: 1
         deepcodegen: 1
        deepcodeexec: 1
    tensorrtdatatype: 1
           profiling: 0

Configure Simulink Model for Simulation and GPU Code Generation

Configure a model to generate CUDA ROS Node.

  • Open the Simulink model you want to configure for GPU code generation.

  • From the Simulation tab, in the Prepare section, expand the gallery and, under Configuration & Simulation, select Model Settings.

  • From the left pane of the Configuration Parameters dialog box, select the Hardware Implementation node. Set Hardware Board to Robot Operating System (ROS) and specify the Device Vendor and Device Type for your hardware. Expand Device details and verify that Support long long is selected.

  • In the Simulation Target node, select GPU acceleration. If your model has deep learning blocks, then, under Deep Learning, select the appropriate Target library.

  • Select the Code Generation node. Under Target selection, set Language to C++, and select Generate GPU code.

  • If your model has deep learning blocks, expand the Code Generation node and select the Interface node. Then, under in Deep Learning select the appropriate value for Target library.

  • Select the GPU Code node and, under Libraries, enable cuBLAS, cuSOLVER, and cuFFT.

Code Generation and Deployment

To generate and deploy a CUDA ROS node to a ROS device, follow the steps in the Generate a Standalone ROS Node from Simulink example.

Limitations

  • Model reference is not supported.

  • The build folder path cannot contain any spaces.

Related Topics