这个示例向您展示了如何从Simulink模型生成和构建一个独立的ROS节点。金宝app
在这个例子中,您配置了一个模型来为一个独立的ROS节点生成c++代码。然后在Ubuntu®Linux®系统上构建并运行ROS节点。
这个例子需要Simulink Coder™和金宝appEmbedded Coder™。
建立和运行生成的C ++代码需要安装具有ROS和SSH服务器的Ubuntu Linux系统。您可以使用自己的Ubuntu ROS系统,或者您可以使用用于机器人系统工具箱™示例的Linux虚拟机(参见开始凉亭和模拟的火炬有关说明)。
检查ros机器人的反馈控制例子。
配置一个模型,为独立的ROS节点生成c++代码。模型是比例控制器中引入的ros机器人的反馈控制例子。
开放RobotController.slx..单击链接或运行RobotController.
在命令窗口中。
在里面准备下节罗斯选项卡上,单击硬件设置打开硬件实现窗格中的。的硬件板设置章节包含特定于生成的ROS包的设置,例如将包含在package.xml
文件。改变维护者名称来ROS示例用户
.
该模型使用可变大小的数组。要使可变大小信号的代码生成成为可能,请检查适应信号下代码>接口>软件环境.如果适应信号选项不可见,请检查选项,使用嵌入式编码器功能在硬件实现>高级参数.
在里面求解器配置参数对话框的窗格,确保求解器类型被设定为固定步,并设置固定的大小来0.05
.在生成的代码中,固定步长定义了用于模型更新循环的实际时间步长(以秒为单位)执行由模型生成的代码(金宝app仿真软件编码器)).它可以使其更小(例如,0.001或0.0001),但对于电流目的是0.05就足够了。
一个ROS设备是任何安装了ROS并能够构建和运行ROS节点的Linux系统。如果你有Simulink金宝app Coder,你可以为一个独立的ROS节点生成代码。如果您的系统连接到ROS设备,Simulink还可以将生成的代码传输到ROS设备,构建一个金宝app可执行文件,并运行生成的ROS节点(这被称为“部署”ROS节点)。
在这个任务中,您将决定是要为ROS节点生成代码,还是要在ROS设备上构建并运行代码。如果您连接到一个ROS设备,您可以配置Simulink,将其用作您的ROS节点的部署目标。金宝app
下建模选项卡上,单击模型设置.
在里面硬件实现窗格中,选择一个建立动作下硬件板设置>目标硬件资源>组>构建选项.所选构建操作会影响模型时Simulink的行为。金宝app没有任何(默认设置)只生成ROS节点的代码,而不在外部ROS设备上构建它。建立和装载生成代码,将其传输到外部设备,并构建一个ROS节点可执行文件。如果您选择构建和运行,生成的节点可执行文件在构建末尾自动启动。
设置建立动作来建立和运行。
配置与外部ROS设备的连接。下罗斯标签,来自部署到下拉,点击管理远程设备.这将打开接入ROS设备对话框。在这个对话框中,您可以输入Simulink部署ROS节点所需的所有信息。金宝app这包括您的ROS设备的IP地址或主机名、您的登录凭据和Catkin工作区。改变柔荑花序工作区来〜/ catkin_ws_test.
.
ROS文件夹是ROS设备上ROS安装的位置。如果未指定此文件夹,则设置测试(请参阅下一步)尝试为您确定正确的文件夹。
如果ROS设备已打开并可从您的计算机访问,可以通过单击验证连接设置测试.该测试验证每个设备设置,如果发现问题,则在Simulink诊断查看器中显示警告和错误。金宝app如果可能的话,测试还建议如何解决这些问题。点击测试现在。
最有可能的是Catkin工作区〜/ catkin_ws_test.
目标设备上不存在。测试检测到这个问题,并建议创建文件夹并初始化工作区。点击使固定自动应用此操作。几秒钟后,您应该会看到一个绿色的通知,说明文件夹已成功创建。在下图中,您可以看到成功创建文件夹的示例。要验证Catkin工作区现在可用,请单击测试在连接设置对话框中。警告已经消失,Catkin工作区已经准备好构建您的ROS节点。
更改设备连接设置并测试它们,直到没有其他警告或错误显示。如果可以对您的设置进行自动修复,Simulink会通过显示金宝app使固定按钮。一旦你有了一套好的设置,点击好的在连接设置对话框中保存设置。
连接设置不具体到单个模型,但适用于Simulink中的所有ROS模型。金宝app
为独立的ROS节点生成代码,并在ROS设备上自动传输、构建和运行。使用运行在ROS设备上的ROS master运行生成的ROS节点。
1.在MATLAB®中,将当前文件夹更改为一个您有写权限的临时位置。
2.代码生成过程首先准备模拟模型,以确保所有块都被正确初始化。此准备需要与ROS Master有效连接。
在MATLAB中,可以使用Rosdevice.
对象,在ROS设备上启动ROS master。如果你不提供参数,Rosdevice.
使用您在Simulink对话框中输入的设备连接设置来连接到ROS设备。金宝app
d = rosdevice runcore(d);
3.使用罗斯尼特
将MATLAB连接到运行在ROS设备上的ROS主机:
rosinit (d.DeviceAddress)
4.告诉Sim金宝appulink将与Matlab相同的ROS连接设置。下模拟标签,in.准备部分中,选择ROS网络.设置ROS Master(ROS 1)和节点主机网络地址默认.
您只需每个Matlab会话执行步骤2 - 4,而不是每次生成ROS节点时才执行步骤2 - 4。
5.下罗斯选项卡上,单击部署>构建和运行.如果您得到关于总线类型不匹配的任何错误,关闭模型,从基本MATLAB工作空间中清除所有变量,并重新打开模型。
点击一下视图诊断链接在模型工具栏底部,以查看构建过程的输出。
6.代码生成完成后,ROS节点被转移到ROS设备上的Catkin工作区。节点在那里生成并开始自动运行。
生成的节点连接运行在ROS设备上的ROS master。
7.使用rosnode
列出所有运行的节点为ROS网络。“robotcontroller”应该在显示的节点列表中。
rosnode列表
您可以使用叛逆
要验证已部署的节点在ROS主题上发布数据以控制机器人运动:
叛逆信息/ mobile_base /命令/速度
运行新构建的ROS节点,并使用基于matlab的机器人模拟器验证其行为。
1.在MATLAB中,输入ExampleHelper金宝appSimulinkRobotROS
启动机器人模拟器。模拟器自动连接到运行在ROS设备上的ROS主机。如果您想连接到基于凉亭的机器人模拟,请参见从Simulink®连接到一个支持ros的机器人金宝app.
sim = ExampleHelper金宝appSimulinkRobotROS
2.验证模拟机器人向目标移动所期望的职位模型中指定的常量)。一旦达到目标[-10,10],机器人停止。
3.点击重置模拟将机器人的位置重置为[0,0]。机器人开始立即向目标位置移动。
4.在MATLAB中,您可以使用Simulink生成的ROS节点金宝appRosdevice.
对象。一旦部署了Si金宝appmulink模型,您就可以使用Rosdevice.
在任何点运行和停止节点,而无需在Simulink中重新构建它。金宝app
的availablenodes.
属性显示已部署的机器人控制器节点。的方法可以验证节点是否正在运行Isnoderunning.
函数。
d = rosdevice.
Isnoderunning(D,'robotController')
5.停止ROS节点运行。
stopnode(D,'robotController') isNodeRunning (d,'robotController')
6.点击重置模拟按钮在模拟窗口中。机器人停留在位置[0,0],不移动。
现在重新启动节点。
runnode(d,'robotController')
机器人再次开始向目标位置移动。
7.完成验证后,您可以按如下方式清理系统状态。
停止目标设备上运行的节点
stopnode(D,'robotController')
在主机上,关闭机器人模拟器图形窗口及类型rosshutdown
在MATLAB命令行。
rosshutdown
在Simulink中指定ROS网络设置金宝app:默认情况下,Simulin金宝appk使用from的ROS连接设置罗斯尼特
在MATLAB。要覆盖这些设置,请在Simulink中指定ROS连接设置。金宝app下模拟标签,in.准备部分中,选择ROS网络设置ROS主节点和节点主机的网络地址:
生成的C ++代码存档无论如何建立动作您选择(无,构建和加载,构建和运行),Simulink始终在当前文件夹中生成两个文件:包含C ++源金宝app代码(我们的示例中的RobotController.tgz)的存档和用于提取和构建C ++代码的shell脚本手动(build_ros_model.sh)。如果MATLAB计算机未连接到ROS设备,则可以手动传输文件并在那里构建它们。
处理器生成的代码:如果您使用来自其他产品(如Computer Vision S下载188bet金宝搏ystem Toolbox™)的块,生成的代码可能包括特定于处理器的优化,在Linux上构建ROS节点时可能会导致编译问题。在这些情况下,您需要让Simulink知道生成的代码在哪个平台上金宝app编译。你可以通过硬件实现“模型配置参数”对话框中的。
在Matlab运行ROS Master:在上面的示例中,您连接到运行在ROS设备上的ROS master。或者,你可以在MATLAB中创建一个ROS master。使用罗斯尼特
在MATLAB命令行:
rosinit (“NodeHost”, <您计算机的IP地址>)
例如,如果主计算机的IP地址为172.28.194.92,请使用以下命令:
rosinit (“NodeHost”,“172.28.194.92”)
的NodeHost
设置对于确保生成的ROS节点能够与MATLAB上的主设备通信非常重要。请注意:生成的ROS节点将使用NodeHost
在MATLAB中与全局ROS节点通信的IP地址,因此确保指定的IP地址可以从ROS设备访问(例如,使用平
).看看连接到ROS网络举例说明更详细的意义NodeHost
设置。
任务模式: 金宝appSimulink可以为多任务或单任务模式生成代码(参见基于时间的调度和代码生成(金宝app仿真软件编码器)).默认情况下,生成的ROS代码使用单任务模式(所有速率的单个线程),没有实时调度。这允许执行生成的ROS代码sudo
特权,但可能导致更少的可预测性能。
如果需要更具可预测的性能,则可以配置模型以使用多任务。在里面求解器配置参数的窗格对话框启用将每一个离散的速率视为一个单独的任务使多任务。在生成的代码中,这将为模型中的每个速率创建一个单独的线程,并为线程使用优先级调度。
要运行ROS节点,您需要在ROS设备上具有管理权限。金宝appSimulink自动检测当模型部署到目标设备时的权限是否不足。