Home » ROS与Matlab入门教程 » ROS与Matlab语言入门教程-从Simulink中创建单独的ROS节点

ROS与Matlab语言入门教程-从Simulink中创建单独的ROS节点

在本例,用户将会配置一个模型为一个单独的ROS节点生成C++代码,将会转换代码到Ubuntu Linux系统,编译ROS节点并运行。

预备知识

这个例程需要嵌入式编码器;

必须要有Ubuntu Linux系统用于编译和运行生成的C++代码,用户可以使用自己的Ubuntu系统,或使用机器人系统工具箱的Linux虚拟机例程(相关说明请查阅“开始使用Gazebo和仿真TurtleBot”)。

复习“使能ROS机器人的反馈控制”例程。

任务1-配置模型以生成代码

本任务中,用户将会配置一个模型为单独的ROS节点生成C++代码,该模型将是在“ROS使能的机器人的反馈控制”例程介绍的比例控制器。

打开“proportional controller model”“ robotExROSFeedbackControlExample”,选择“Edit > Select All”,然后“Edit > Copy”。

打开一个新的Simulink模型,选择“Edit > Paste”。

点击“Simulation > Model Configuration Parameters”。

在配置参数对话框的“Code Generation”面板,设置“System target file”为“ert.tlc”并点击“Apply”。然后,从“Target hardware”选择“Robot Operating System (ROS)”,再次点击“Apply”。观察到“ToolChain”被设置为“Catkin”。

请输入图片描述

在配置参数对话框的“Solver”面板,确保解算机(Solver)的“Type”设置为“Fixed-step”,并设置“Fixed-step size”为0.05。在生成的代码中,“Fixed-step size”定义了实际的时间步进,以秒为单位,用于模型的更新循环(参阅About Model Execution)。该值可以设置更小(如0.001或0.0001),但是本例0.05就已经足够了。

请输入图片描述

参数配置对话框的“Coder Target”让用户定制生成的C++代码,“Package Information”组包含的信息将会被包含在生成的ROS节点的“package.xml”文件。更改“Maintainer name”为“ROS Example User”。

请输入图片描述

点击“OK”关闭配置参数对话框,并保存模型的文件名为“RobotController.slx”。

任务2-生成C++ROS节点

(1)在MATLAB中,更改当前的文件夹到一个临时的位置,用户拥有写的权限。
(2)代码生成过程,首先准备为仿真准备模型,以确认所有的块都正确初始化。该准备工作需要已经启动有效的ROS主控节点。如果用户想要执行代码生成,选择“Tools > Robot Operating System (ROS) > Configure Network Addresses”,然后设置“ROS Master”和“Node Host”的“Network Address”的值为“Default”。

请输入图片描述

(3)在MATLAB命令行中输入“rosinit”,创建一个本地的ROS主控节点。
(4)点击“Code > C/C++ Code > Build Model”,如果用户发现任何有关总线类型不匹配,则关闭模型,从基本MATLAB工作空间中清除所有变量,再重新打开模型。
(5)一旦编译完成,用户将会在当前文件夹看到两个文件:“RobotController.tgz”(包含C++代码的归档文件)和“build_ros_model.sh”(用于提取和编译C++代码的shell脚本)。

请输入图片描述

任务3-转换文件到ROS系统

本任务假设用户正在使用带有机器人系统工具箱例程的Linux虚拟机,虚拟机被配置接收SSH和SCP的连接。如果用户使用自己的Linux系统,则向系统管理员咨询一个安全的方式转换文件。

(1)确保用户的宿主系统(包含“RobotController.tgz”和“build_ros_model.sh”文件的系统)拥有SCP客户端,对于Windows系统,下一步假设已经安装了PuTTY SCP客户端(pscp.exe)。
(2)使用SCP转换“RobotController.tgz”和“build_ros_model.sh”到用户的Linux虚拟机上的根目录(用户名是“user”,密码是“password”)。下面是示例的转换指令运行在宿主系统(用虚拟机的IP地址替换指令中的“192.168.60.163”):
如果宿主系统是Windows:
pscp.exe RobotController.tgz build_ros_model.sh user@192.168.60.163:
如果宿主系统是Linux或者Mac OS X
scp RobotController.tgz build_ros_model.sh user@192.168.60.163:
注意:“build_ros_model.sh”文件并不是模型特有的,所以只需被转换一次。

任务4-编译ROS节点

(1)在Linux系统,执行如下的命令以创建一个Catkin工作空间,只需做一次。(如果用户已经有一个Catkin工作空间,可以直接使用该工作空间)。
mkdir -p ~/catkin_ws_simulink/src
cd ~/catkin_ws_simulink/src
catkin_init_workspace
(2)在Linux系统执行如下的指令以解压缩并编译ROS节点
cd ~

./build_ros_model.sh RobotController.tgz ~/catkin_ws_simulink

请输入图片描述

(3)生成的源码在“~/catkin_ws_simulink/src/robotcontroller/”下,查看“package.xml”的内容。
(4)使用如下的指令验证节点的可执行文件,如果可执行文件成功创建,指令将会列出有关可执行文件的信息。
file ~/catkin_ws_simulink/devel/lib/robotcontroller/robotcontroller_node

请输入图片描述

任务5-运行和验证ROS节点

本任务中,用户将会运行新建立的ROS节点并使用基于MATLAB的机器人仿真器验证节点的表现。

(1)在Ubuntu Linux系统,启动ROS主控节点,如果指令返回错误“roscore”已经存在,那么进行下一步。
roscore &
(2)在宿主系统,根据如下代码启动基于MATLAB的机器人仿真器(参阅从Simulink连接到ROS使能的机器人),该仿真器发布到“/odom”话题。
rosinit('192.168.60.163') % replace with IP address of ROS master
ExampleHelperRobotSimulator
(3)在Ubuntu Linux系统,运行新建立的ROS节点,该节点对从“/odom”话题接收到的新消息作出反应。
~/catkin_ws_simulink/devel/lib/robotcontroller/robotcontroller_node
(4)在Ubuntu Linux系统,打开一个新的终端并使用“rostopic list”和“rosnode info”验证节点是活动的。

请输入图片描述

(5)在宿主计算机,验证仿真机器人向目标运动(“Desired Position”在模型中由常量指定),一旦机器人到达目的地则停止。当机器人停止,点击“ExampleHelperRobotSimulator”图像窗口上的“Randomize Location”,这将使机器人移动到一个随机的位置,那么机器人又要从该位置向目的地移动。
(6)一旦用户完成验证,可以通过根据如下步骤清除系统状态。
在宿主计算机,关闭“ExampleHelperRobotSimulator”图像窗口并在MATLAB命令行输入“rosshutdown”。
在Ubuntu Linux系统,运行下面的指令:
pkill -f robotcontroller
pkill -f roscore

高级话题和故障排除

指定处理器生成代码:如果用户使用其它产品(如计算机视觉系统工具箱)的块,生成代码可能包括处理器指定最优化,导致在Linux上建立ROS节点时的编译问题。这种情况下,用户需要让Simulink知道生成的代码编译的平台,可以通过模型配置参数对话框的“Hardware Implementation”面板实现。

请输入图片描述

需要的包:机器人系统工具箱包含许多ROS消息类型(如Baxter或PR2),是标准ROS发布的一部分。如果用户的Simulink模型包含非标准或用户自己的消息类型,用户将会成功地仿真和生成代码。然而,为了使用“build_ros_model.sh”建立生成的ROS节点,用户首先需要下载并安装所有需要的包。下面是一种实现方式(假设需要的包是“baxter_core_msgs”)。

Refresh the list of available packages

sudo apt-get update

Search the list for ROS Baxter packages (e.g., ros-hydro-baxter-core-msgs)

apt-cache search baxter

Download and install the required package

sudo apt-get install ros-hydro-baxter-core-msgs

任务模式:Simulink既可以生成多任务模式也可生成单任务模式(参阅“Time-Based Scheduling and Code Generation”)。默认情况下,使用单任务模式(单线程for all the rates)生成ROS节点,不带有实时线程调度。这允许生成ROS节点不需要“sudo”权限的执行,但是会导致更少的可预料的表现。

如果用户需要更多可预料的表现,用户可以配置模型以使用多任务。在配置参数对话框的“Solver”面板,设置“Tasking mode for periodic sample times”为“MultiTasking”。生成代码过程中,这将为模型中的每个等级创建一个单独的线程,并为线程使用优先级调度。

请输入图片描述

为了运行ROS节点,用户需要按下述使用“sudo”:

sudo -E ~/catkin_ws_simulink/devel/lib/robotcontroller/robotcontroller_node

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros与matlab语言入门教程