此示例显示了如何从Simulink模型生成和构建独立ROS节点。万博1manbetx
在此示例中,配置模型以为独立ROS节点生成C ++代码。然后,您在Ubuntu®Linux®系统上构建并运行ROS节点。
此示例需要Simulink Coder™和嵌万博1manbetx入式编码器™。
构建和运行生成的c++代码需要一个安装了ROS和SSH服务器的Ubuntu Linux系统。你可以使用你自己的Ubuntu ROS系统,也可以使用用于Robotics system Toolbox™示例的Linux虚拟机(参见开始使用凉亭和模拟乌龟机器人指令)。
点评审查反馈控制ROS的机器人的例子。
配置模型以为独立ROS节点生成C ++代码。该模型是在中引入的比例控制器反馈控制ROS的机器人的例子。
打开RobotController.slx.单击链接或运行RobotController
在命令窗口。
在准备部分ROS选项卡,单击硬件设置打开硬件实现配置参数对话框的窗格。这硬件板设置部分包含特定于生成的ROS包的设置,例如包含在内的信息package.xml.
文件。改变维护人员的名字到ROS示例用户
.
该模型使用可变大小的数组。启用可变大小信号的代码生成,检查可变尺寸信号在下面代码生成>接口>软件环境.如果是可变尺寸信号选项不可见,选中该选项,使用嵌入式编码器功能在硬件实现>高级参数.
在解算器窗格中,确保解算器类型被设置为固定步骤和集合固定阶梯到0.05
.在生成的代码中,固定步长定义用于模型更新循环的实际时间步长(以秒为单位)(参见执行模型生成的代码(万博1manbetxSimulink编码器)).它可以做得更小(例如,0.001或0.0001),但对于目前的用途,0.05就足够了。
一种ROS设备是否安装了ROS的任何Linux系统,都能够构建和运行ROS节点。如果您有Simulink万博1manbetx编码器,则可以为独立ROS节点生成代码。如果您的系统连接到ROS设备,则Simulink还可以将生成的代码传输到ROS设备,构建可万博1manbetx执行文件,并运行生成的ROS节点(这被称为“部署”ROS节点)。
在此任务中,您可以决定是否要为ROS节点生成代码,或者是否要在ROS设备上构建并运行它。如果连接到ROS设备,则可以将Simulink配置为将其作为ROS节点的部署目标。万博1manbetx
在下面造型选项卡,单击模型设置.
在硬件实现配置参数对话框,请选择一个建立行动在下面硬件板设置>目标硬件资源>组> Build选项.所选的构建操作会影响Simulink在构建模型时的行为。万博1manbetx没有一个(默认设置)仅生成ROS节点的代码,而无需在外部ROS设备上构建它。构建和负载生成代码,将其传输到外部设备并构建ROS节点可执行文件。如果你选择建立和运行,生成的节点可执行文件将在构建结束时自动启动。
设定建立行动到构建和运行。
配置与外部ROS设备的连接。在下面ROS选项卡,从部署到下拉,点击管理远程设备.这将打开连接到ROS设备对话。在此对话框中,您可以输入Simulink需要部署ROS节点的所有信息。万博1manbetx这包括ROS设备,登录凭据和Catkin工作区的IP地址或主机名。改变Catkin工作区到~ / catkin_ws_test
.
ROS文件夹为ROS设备上安装的位置。如果您没有指定此文件夹,则设置测试(参见下一步)将尝试为您确定正确的文件夹。
如果ROS设备已经打开,并且可以从您的计算机访问,您可以通过单击来验证连接设置测试.如果找到问题,测试验证了Simulink诊断查看器中的每个设备设置和显示警告和错误。万博1manbetx如果可能,测试也表明如何修复问题。点击测试现在。
最有可能,Catkin Workspace~ / catkin_ws_test
目标设备上不存在。测试检测到此问题,并建议创建文件夹并初始化工作区。点击修复自动应用此操作。几秒钟后,您应该看到一个绿色的注意,该文件夹已成功创建。在下图中,您可以看到成功创建文件夹的示例。要验证Catkin工作空间现在可用,请单击测试在“连接设置”对话框中再次。警告已消失,Catkin工作区已准备好构建您的ROS节点。
更改设备连接设置并测试它们,直到没有显示其他警告或错误。如果可以自动修复设置,Simulink会通过显示万博1manbetx修复按钮。一旦您有一个很好的设置,请单击好吧在“连接设置”对话框中,以保存设置。
连接设置不是特定于单个模型,而是适用于Simulink中的所有ROS模型。万博1manbetx
为独立ROS节点生成代码,并在ROS设备上自动传输,构建和运行它。使用ROS设备上运行的ROS主站锻炼生成的ROS节点。
1。在MATLAB®中,将当前文件夹更改为具有写入权限的临时位置。
2。代码生成过程首先为模拟准备模型,以确保所有块都被正确初始化。此准备需要一个到ROS master的有效连接。
在Matlab中,您可以使用rosdevice
对象在ROS设备上启动ROS主机。如果您提供没有参数,rosdevice
使用您在Simulink对话框中输入的设备连接设置连接到ROS设备。万博1manbetx
d = rodevice runCore(d);
3.用rosinit
要将MATLAB连接到ROS设备上的ROS主站:
罗斯尼特(D.DeviceAddress)
4.告诉Sim万博1manbetxulink使用与MATLAB相同的ROS连接设置。在下面模拟选项卡,在准备部分,选择ROS网络.设置ROS Master (ROS 1)和Node Host的网络地址为默认的.
每个MATLAB会话只需要执行步骤2 - 4一次,而不是每次生成ROS节点。
5。在下面ROS选项卡,单击部署>构建和运行.如果您收到关于总线类型不匹配的任何错误,请关闭模型,清除Base Matlab工作区的所有变量,然后重新打开模型。
点击查看诊断链接模型工具栏底部,以查看构建过程的输出。
6。一旦代码生成完成,ROS节点将在ROS设备上传输到Catkin工作空间。该节点在那里构建并开始自动运行。
生成的节点连接到ROS设备上运行的ROS主站。
7。用rosnode.
要列出所有运行节点是ROS网络。“RobotController”应在显示的节点列表中。
rosnode.列表
您可以使用rostopic
验证部署节点在ROS主题上发布数据以控制机器人运动:
rostopic信息/ mobile_base /命令/速度
使用新建的ROS节点运行并使用基于MATLAB的机器人模拟器验证其行为。
1。在matlab,类型examplehelper万博1manbetxsimulinkrobotros.
启动机器人模拟器。模拟器自动连接到ROS设备上运行的ROS主站。如果要连接到基于凉亭的机器人仿真,请参阅从Simulink®连接到启用ROS的机器人万博1manbetx.
sim = examplehelper万博1manbetxsimulinkrobotros.
2。验证模拟机器人是否朝向目标移动(期望的职位模型中指定的常量)。机器人一旦到达目标就会停下来[- 10,10]。
3.点击重置仿真将机器人的位置重置为[0,0]。机器人立即开始向目标位置移动。
4.在MATLAB中,您可以管理由Simulink生成的ROS节点万博1manbetxrosdevice
目的。部署Simul万博1manbetxink模型后,您可以使用rosdevice
要在任何时候运行和停止节点,而无需在Simulink中重建它。万博1manbetx
这AvailableNodes
属性显示已部署的RobotController节点。您可以通过调用来验证节点正在运行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网络设置万博1manbetx:默认情况下,Simulin万博1manbetxk使用ROS连接设置rosinit
在matlab。要覆盖这些设置,请在Simulink中指定ROS连接设置。万博1manbetx在下面模拟选项卡,在准备部分,选择ROS网络并设置ROS主站和节点主机网络地址:
生成的c++代码归档:无论如何建立行动你选择(None, Build and load, Build and run), Simulink万博1manbetx总是会在你当前的文件夹中生成两个文件:一个包含c++源代码的归档文件(RobotController。tgz)和一个shell脚本,用于手动提取和构建c++代码(build_ros_model.sh)。如果您的MATLAB计算机没有连接到ROS设备,您可以手动传输文件并在那里构建它们。
处理器特定生成的代码:如果您使用来自其他产品的块(例如计算机Vision Systs manbetx 845embox™),则生成的代码可以包括特定于处理器的优化,这些优化会导致在Linux上构建ROS节点时的编译问题。在这些情况下,您需要让Simulink知道编译生成的代码的平台。万博1manbetx你可以通过这个硬件实现模型配置参数对话框的窗格。
在MATLAB中运行ROS Master:在上面的示例中,您连接到ROS设备上的ROS主站。或者,您可以在Matlab中创建ROS主。用rosinit
在matlab命令行:
罗斯尼特('nodehost',<计算机的IP地址>)
例如,如果主机的IP地址为172.28.194.92,则使用以下命令:
罗斯尼特('nodehost'那'172.28.194.92')
这nodehost.
设置对于确保生成的ROS节点能够在MATLAB上与主机通信非常重要。笔记:生成的ROS节点将使用nodehost.
IP地址要与MATLAB中的全局ROS节点进行通信,因此请确保从ROS设备访问指定的IP地址(例如,使用p
).看到连接到ROS网络有关其意义的更多细节的示例nodehost.
环境。
任务模式:S万博1manbetximulink可以为多任务或单任务模式生成代码(请参阅基于时间的调度和代码生成(万博1manbetxSimulink编码器)).默认情况下,生成的ROS代码使用单个任务模式(所有速率的单个线程)而无需实时调度。这允许生成的ROS代码没有苏达
特权,但可能导致较难预测的性能。
如果您需要更可预测的性能,您可以将模型配置为使用多任务。在解算器“配置参数”对话框中的将每个离散率视为单独的任务启用多任务。在生成的代码中,这为模型中的每个速率创建一个单独的线程,并使用线程的优先顺序调度。
运行ROS节点需要在ROS设备上具有管理权限。万博1manbetx当模型部署到目标设备时,Simulink会自动检测您的特权是否不足。