< >
Home » ROS2与Matlab入门教程 » ROS2与Matlab入门教程-生成代码以从Simulink手动部署ROS2节点

ROS2与Matlab入门教程-生成代码以从Simulink手动部署ROS2节点

说明:

  • 介绍如何从Simulink模型生成C++代码以部署为独立的ROS2节点

先决条件:

  • 此示例需要Simulink Coder和Embedded Coder

  • 具有 ROS 的 Ubuntu Linux 系统对于构建和运行生成的 C++ 代码

步骤:

open_system( "robotFeedbackControllerROS2" );
  • 在ROS选项卡下,单击硬件设置。在Hardware implementation 窗格中,Hardware board settings 部分包含特定于生成的 ROS 2 包的设置,例如要包含在package.xml文件中的信息。将维护者名称更改为ROS 2 Example User, 点击Apply

  • 该模型需要可变大小的数组。要启用此选项,请检查Code Generation > Interface > Software environment下的 variable-size signals

  • 在Solver窗格中,确保求解器Type设置为Fixed-step,并将Fixed-step size设置为0.05。在生成的代码中,Fixed-step size 定义了用于模型更新循环的实际时间步长(以秒为单位)(请参阅Execution of Code Generated from a Model (Simulink Coder) (Simulink Coder))。它可以做得更小(例如,0.001 或 0.0001),但对于目前的目的,0.05 就足够了

  • 单击确定

  • 配置代码生成的构建选项

  • 配置模型后,您必须指定目标硬件的构建选项并设置文件夹或构建生成的代码

  • 打开配置参数对话框。在建模选项卡下,单击模型设置

  • 在Hardware Implementation选项卡的Target hardware resources下,单击Build options组。将构建操作设置为Build。此设置可确保为 ROS 2 节点生成代码,而无需在外部 ROS 2 设备上构建代码

  • 生成和部署代码,在此任务中,为 ROS 2 节点生成源代码,手动部署到 Ubuntu Linux 系统,并在 Linux 系统上构建它

  • 在 MATLAB 中,将当前文件夹更改为您具有写入权限的位置

  • 在Simulation选项卡下的Prepare中,选择ROS Toolbox > ROS Network

  • 设置 ROS 2 网络的域 ID (ROS 2)。此示例使用域 ID 作为 25

  • 在ROS选项卡中,从Deploy 部分中,单击Build Model。如果您收到有关总线类型不匹配的任何错误,请关闭模型,从基本 MATLAB 工作区中清除所有变量,然后重新打开模型。单击模型工具栏底部的查看诊断链接以查看构建过程的输出

  • 构建完成后,src包含包源代码的文件夹将写入您的文件夹

请输入图片描述

  • src通过在 MATLAB 命令行窗口中执行以下命令,将文件夹压缩为 tar 文件:
>>tar('src.tar','src');
  • 生成 tar 文件后,手动将其传输到目标机器。此示例假设您使用Gazebo 和 Simulated TurtleBot中的虚拟机。虚拟机配置为接受 SSH 和 SCP 连接。如果您使用自己的 Linux 系统,请咨询您的系统管理员以获取安全的文件传输方式

  • 确保您的主机系统(包含您的src.tar文件的系统)具有 SCP 客户端。对于 Windows® 系统,下一步假设pcsp.exe已安装 PuTTY SCP 客户端 ( )

  • 使用 SCP 将文件传输到 Linux 虚拟机上的用户主目录。用户名是user,密码是password。替换<virtual_machine_ip>为您的虚拟机 IP 地址

  • Windows 主机系统:

pscp.exe src.tar user@<virtual_machine_ip>:
  • Linux 或 macOS 主机系统:
scp src.tar user@<virtual_machine_ip>:
  • 构建并运行 ROS 2 节点

  • 在 Linux 系统上,执行以下命令创建 Catkin 工作空间并解压源代码。您可以使用现有的 Catkin 工作区

mkdir ~/ros2_ws_simulink
tar -C ~/ros2_ws_simulink/ -x​​vf ~/src.tar
  • 在 Linux 中使用以下命令构建 ROS 2 节点。替换<path_to_catkin_ws>为您的 catkin 工作区的路径。在此示例中,<path_to_catkin_ws>将是~/ros2_ws_simulink。(注意:在构建过程中可能会出现一些参数未使用等警告。这些参数仅在 Simulink 环境下需要,不会影响构建过程。)
cd <path_to_catkin_ws>
source /opt/ros/foxy/local_setup.sh
colcon build
  • 验证是否使用以下命令创建了节点可执行文件:
file ~/ros2_ws_simulink/install/robotfeedbackcontrollerros2/lib/robotfeedbackcontrollerros2/robotFeedbackControllerROS2
  • 如果成功创建了可执行文件,该命令将列出有关该文件的信息。该模型现在可以作为独立的 ROS 2 节点在您的设备上运行

  • (可选)然后您可以使用这些命令运行该节点。替换<path_to_catkin_ws>为您的 catkin 工作区的路径

  • 双击虚拟机桌面上的Gazebo Empty和ROS Bridge设置 Gazebo 环境。设置环境变量并使用以下命令运行 ROS 2 节点:

export ROS_DOMAIN_ID=25 
source /opt/ros/foxy/local_setup.sh 
~/<path_to_catkin_ws>/install/robotfeedbackcontrollerros2/lib/robotfeedbackcontrollerros2/robotFeedbackControllerROS2
  • 注意:机器人可能会在一个意想不到的位置旋转,这是因为姿态和世界在 Gazebo 中发生了偏移。重新启动虚拟机并重新运行 Gazebo 和节点

  • 您还可以使用ros2 node列出 ROS 2 网络中所有正在运行的节点。robotFeedbackControllerROS2应该在显示的节点列表中

ros2('node','list')
  • 验证此 ROS 2 节点是否发布有关 ROS 2 主题的数据/cmd_vel,以控制模拟机器人的运动
ros2('topic','list')
  • 如果您看不到预期的节点和主题,请尝试ROS_DOMAIN_ID使用setenvMATLAB 命令行窗口中的命令进行设置
setenv("ROS_DOMAIN_ID","25")

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与matlab入门教程