ROS2与Matlab入门教程-从Simulink生成独立的ROS2节点
说明:
- 介绍如何从Simulink模型生成和构建独立的ROS2节点
先决条件:
此示例需要Simulink Coder和Embedded Coder
使用Gazebo和Simulated TurtleBot入门中的说明下载虚拟机
查看启用 ROS 的机器人在 ROS 2 上的反馈控制示例
请参阅 ROS Simulink Support and Limitations中的 ROS 2 Model Build Failure
步骤:
配置代码生成模型
配置模型以为独立的 ROS 2 节点生成 C++ 代码。该模型是在 ROS 2 上启用 ROS 的机器人的反馈控制示例中引入的比例控制器
打开为 ROS 2 配置的机器人反馈控制模型 open_system("robotControllerROS2")。或者,调用
在ROS选项卡下,在Prepare中,单击Hardware settings。在Hardware implementation窗格中,Hardware board settings部分包含特定于生成的 ROS 2 包的设置,例如要包含在 package.xml文件中的信息。将维护者名称更改为ROS 2 Example User
该模型需要可变大小的数组。要启用此选项,请检查Code Generation > Interface > Software environment下的 variable-size signals
在Solver窗格中,确保 Solver Type设置为Fixed-step,并将Fixed-step size设置为0.05。在生成的代码中,Fixed-step size 定义了用于模型更新循环的实际时间步长(以秒为单位)(请参阅Execution of Code Generated from a Model (Simulink Coder))。它可以做得更小(例如,0.001 或 0.0001),但对于目前的目的,0.05 就足够了
将外部 ROS 包指定为依赖项:要将外部 ROS 2 包指定为生成的 ROS 2 节点的依赖项,请指定适当的工具链选项。在 Configuration parameters 中,在Code Generation > Toolchain Settings下,从下拉菜单中将Build configuration指定为Specify 。然后,您可以根据您希望与生成的 ROS 2 节点集成的外部 ROS 2 包指定所需的包、包含目录、链接库、库路径和定义
单击确定
生成 C++ ROS 2 节点
在此任务中,您为独立的 ROS 2 节点生成代码,并自动构建并在主机上运行它
在MATLAB中,将当前文件夹更改为您具有写入权限的位置
在Simulation选项卡下的Prepare中,选择ROS Toolbox > ROS Network
设置 ROS 2 网络的域 ID (ROS 2)。此示例使用域 ID 作为 25
如果要部署到本地设备,请将环境变量设置ROS_DOMAIN_ID为值 25,setenv在 MATLAB 中使用
设置 ROS 2 网络的 ROS 中间件(ROS 2)。此示例使用 ROS 中间件作为rmw_cyclonedds_cpp
如果您要部署到本地设备,请将环境变量设置RMW_IMPLEMENTATION为rmw_cyclonedds_cpp,setenv在 MATLAB 中使用
在ROS选项卡中,从Deploy 部分下拉菜单中,单击Build & Run。如果您收到有关总线类型不匹配的任何错误,请关闭模型,从基本 MATLAB 工作区中清除所有变量,然后重新打开模型。单击模型工具栏底部的查看诊断链接以查看构建过程的输出。
代码生成完成后,当前工作文件夹中构建的 ROS 2 节点开始自动运行。在 Windows® 中运行时,会打开一个命令窗口。不要关闭窗口,而是使用Ctrl+C关闭 ROS 2 节点
用于ros2 node列出所有运行节点的是 ROS 2 网络。robotControllerROS2应该在显示的节点列表中
ros2('node','list')
/robotControllerROS2
/ros_bridge
- 验证部署的节点是否发布了关于 ROS 2 主题的数据/cmd_vel,以控制模拟机器人的运动
ros2('topic','list')
/clock
/cmd_vel
/gazebo/link_states
/gazebo/model_states
/imu
/joint_states
/odom
/parameter_events
/rosout
/rosout_agg
/scan
/tf
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号