ROS2与Matlab入门教程-ROS2自定义消息支持
说明:
- 介绍如何在MATLAB中创建ROS 2自定义消息
介绍:
自定义消息是用户定义的消息,可以使用它来扩展ROS2当前支持的消息类型集
如果正在发送和接收支持的消息类型,则不需要使用自定义消息
步骤:
自定义消息内容,ROS 2 自定义消息在包含 msg 目录的 ROS 2 包文件夹中指定
该msg文件夹包含您所有的自定义消息类型定义
例如,文件夹中的 packageexample_b_msgs具有custom以下文件夹和文件结构
该包包含一种自定义消息类型,Standalone.msg. MATLAB 使用这些文件生成使用包中包含的自定义消息所需的文件。有关消息命名约定的更多信息
确保您的自定义消息包正确后,记下文件夹路径位置,然后ros2genmsg使用指定路径调用。
以下示例提供了三个消息example_package_a, example_package_b,example_package_c它们具有依赖关系。此示例还说明您可以使用包含多条消息的文件夹并同时生成它们
要在 MATLAB 中设置自定义消息,请在新会话中打开 MATLAB。将您的自定义消息文件夹放在一个位置并记下文件夹路径。
在此示例中,自定义消息接口文件夹存在于当前目录中。如果您在单独的位置创建自定义消息包,请提供包含自定义消息包的文件夹的适当路径
folderPath = fullfile(pwd,"custom");
copyfile("example_*_msgs",folderPath);
- 指定自定义消息文件的文件夹路径并调用ros2genmsg为 MATLAB 创建自定义消息
ros2genmsg(folderPath)
Identifying message files in folder 'U:/Documents/MATLAB/Examples/ros-ex44405863/custom'.Done.
Validating message files in folder 'U:/Documents/MATLAB/Examples/ros-ex44405863/custom'.Done.
[3/3] Generating MATLAB interfaces for custom message packages... Done.
Running colcon build in folder 'U:/Documents/MATLAB/Examples/ros-ex44405863/custom/matlab_msg_gen/win64'.
Build in progress. This may take several minutes...
Build succeeded.build log
调用ros2 msg list以验证新自定义消息的创建
现在可以使用上面创建的自定义消息作为标准消息。有关发送和接收消息的更多信息,请参阅与 ROS 2 发布者和订阅者交换数据
创建发布者以使用example_package_b/Standalone消息
node = ros2node("/node_1");
pub = ros2publisher(node,"/example_topic","example_b_msgs/Standalone");
- 在同一主题上创建订阅者
sub = ros2subscriber(node, "/example_topic" );
- 创建消息并发送消息
custom_msg = ros2message("example_b_msgs/Standalone");
custom_msg.int_property = uint32(12);
custom_msg.string_property='This is ROS 2 custom message example';
send(pub,custom_msg);
pause(3) % Allow a few seconds for the message to arrive
- 使用LatestMessage字段了解订阅者最近收到的消息
sub.LatestMessage
ans = struct with fields:
int_property: 12
string_property: 'This is ROS 2 custom message example'
Remove the created ROS objects.
- 删除创建的 ROS 对象
clear node pub sub
用自定义定义替换内置消息的定义。
MATLAB 提供了很多内置的 ROS 2 消息类型。您可以使用上面详述的相同自定义消息创建工作流程将这些消息类型的定义替换为新定义。当您替换内置消息包的定义时,您必须确保自定义消息包文件夹包含.msg相应内置消息包中所有消息类型的新定义(文件)。
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号