主要内容

从MATLAB®生成一个独立的ROS节点

这个例子展示了如何从一个MATLAB函数为一个独立的ROS节点生成c++代码。然后展示如何在Windows®机器上构建和运行ROS节点。

先决条件

  • 这个例子需要MATLAB Coder™。

  • 构建和运行生成的c++代码需要一个安装了ROS和SSH服务器的Ubuntu Linux系统。你可以使用你自己的Ubuntu ROS系统,或者你可以使用Linux虚拟机的ROS工具箱示例(参见开始使用凉亭和模拟乌龟机器人指令)。

  • 您必须能够访问正确配置的C/ c++编译器。您可以使用墨西哥人设置cpp查看和更改默认编译器。有关详细信息,请参见改变默认的编译器

用功能控制一个ros机器人

打开功能robotROSFeedbackControl中引入的比例控制器ros机器人的反馈控制的例子。这个函数订阅/奥多姆先得到机器人当前的里程计状态,然后将比例控制器的输出发布为geometry_msgs /扭消息/ cmd_vel的话题。这样做提供了控制命令,使机器人移动到所需的位置。

复制robotROSFeedbackControl函数设置为本地目录,并更改defaultDesiredPos变量为所需的坐标。

从Linux虚拟机启动一个Gazebo Empty World露台空桌面应用程序。在用于ROS工具箱的Linux虚拟机中,机器人位于(0,0)默认位置。

运行以下命令在与虚拟机相同的ROS网络中创建MATLAB ROS节点。验证您是否观察到如下所示的相同的ROS节点。

d = rosdevice;rosinit (d.DeviceAddress) rosnode列表

运行控制器并观察机器人正在向发布的目的地移动。同时观察机器人在MATLAB图中显示的轨迹。保持此图打开,以比较MATLAB执行和生成的可执行节点的行为。

robotROSFeedbackControl

当机器人移动时,你可以改变想要的目的地。为此,从虚拟机打开一个新的终端,生成ROS存储库,并以a的形式发布新的目标坐标std_msgs / Float64MultiArray消息/桌子的话题。

~ $ / opt / ros /旋律/ local_setup来源。bash ~$ rostopic pub -1 /dest std_msgs/Float64MultiArray "{data:[0,0]}"

您可以在任何时候使用终止控制器ctrl - c或者从虚拟机在终端中输入以下命令。请注意,如果在虚拟机中打开一个新的终端,则必须从ROS存储库获取源。

~$ rostopic pub -1 /stop std_msgs/Bool "1"

你也可以调整distanceThrelinearVelocity,rotationGainrobotROSFeedbackControl.m来获得期望的机器人行为。对于本例中的比例控制器,以下参数范围提供了鲁棒性能。也可以将比例控制器替换为自定义控制器进行性能对比。

线性速度:0
            

要观察该行为,可以通过按重置虚拟机上的机器人Ctrl-R在露台。

为代码生成创建一个函数

要生成独立的c++节点,请修改该函数,使其与代码生成兼容。

  • 因为对象不支持代码生成,所以用结构体替换它们金宝approspublisherrossubscriber,rosmessage.指定名称-值对“DataFormat”、“结构”各自的函数调用将它们创建为结构。

  • 将修改后的MATLAB函数保存为robotROSFeedbackControlCodegen.m.确保你做的任何其他修改robotROSFeedbackControl功能体现在robotROSFeedbackControlCodegen

生成可执行文件robotROSFeedbackControlCodegen

的可执行节点robotROSFeedbackControlCodegen函数。指定硬件为“机器人操作系统(ROS)”.将构建操作设置为构建和运行以便在生成ROS节点后开始运行。调用plotPath绘制机器人的轨迹。

cfg = coder.config (exe);cfg。硬件=编码器。硬件(“机器人操作系统”);cfg.Hardware.BuildAction = '构建并运行';codegen robotROSFeedbackControlCodegen -args {} -config cfg plotPath

默认情况下,配置会在本地主机上生成并运行ROS节点。您可以选择在远程设备(例如虚拟机)上部署和运行ROS节点,而不是通过修改cfg。硬件.例如,如果您使用的是Linux虚拟机的ROS Toolbox,则需要在远程部署前设置以下配置参数。注意,远程设备的实际值可能不同。部署前请进行验证。

cfg.Hardware.RemoteDeviceAddress =“192.168.243.144”;cfg.Hardware.RemoteDeviceUsername =“用户”;cfg.Hardware.RemoteDevicePassword =“密码”;cfg.Hardware.DeployTo = '远程设备';

验证生成的ROS节点

在生成的可执行文件开始运行后,对于相同的目标坐标,验证机器人的轨迹与您在MATLAB执行期间观察到的相似。您还可以在虚拟机上的Gazebo中观察机器人的移动。当机器人处于运动状态时,可以发布不同的目标坐标。指的是用功能控制一个ros机器人部分,该部分说明如何通过虚拟机终端发布一组新的目标坐标。

按下键终止生成的ROS节点ctrl - c或者发送信息给/停止的话题。

关闭ROS系统。

rosshutdown

相关的话题