matlab simulink节点,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
matlab simulink节点,ROS与Matlab语言入门教程-从Simulink中创建单独的ROS节点相关推荐
- matlab怎么删除对象,ROS与Matlab语言入门教程-在Gazebo中增加、建立和移除对象
本例程探索如何深层次地与MATLAB中的Gazebo仿真器交互.主题包括创建简单的模型.增加链接和加入模型.将模型连接在一起和应用力到物体. 预备知识:"4.2 开始使用Gazebo和仿真的 ...
- c++ 结构体赋值_《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事
一.学习目标 了解C语言的结构体的使用方法 了解C语言结构体的结构的赋值 了解多种C语言结构体变量的赋值方法和取值方法 目录 <零基础看得懂的C语言入门教程>--(二)简单带你了解流程 & ...
- c语言入门教程文库,C语言入门教程(全集)课件
C语言入门教程(全集)课件 01123364105 Y N p AB X=0? YN P1 A A P2 a a b b Y Y N N y n A B P A A B X=0? 3 a97 3 U ...
- 2017年Go语言入门教程-徐培成-专题视频课程
2017年Go语言入门教程-3763人已学习 课程介绍 Go语言入门教程,只要你懂中文都可以看的懂本套教程,为任何想学习Go语言研制的教程. 课程收益 让任何人都可以轻松掌握G ...
- GO语言入门教程(二)
Hello,各位小伙伴,在接着之前发表的Go语言系列教程之投石问路之后,我们大致了解了一下Go语言的发展史和Go语言的优势,另外我也带着小伙伴进行了Go语言环境的安装和常用命令的介绍.接下来我们就正式 ...
- java编程输出平行四边形_JAVA语言入门教程之打印图形实例——打印平行四边形...
本文主要向大家介绍了JAVA语言入门教程之打印图形实例--打印平行四边形,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 输出平行四边形: public class Parallelo ...
- C语言入门教程学习 C语言学习包括哪些?
嵌入式开发有一定了解的朋友们知道是在操作系统内部开发的,对于操作系统内部来说基本上都是用C语言来进行编译的,所以说对于C语言的学习在嵌入式开发过程中是非常重要的.下面就给大家介绍一些C语言入门教程的相 ...
- 小白都能看懂的C语言入门教程
文章目录 C语言入门教程 1. 第一个C语言程序HelloWorld 2. C语言的数据类型 3. 常量变量的使用 4. 自定义标识符#define 5. 枚举的使用 6. 字符串和转义字符 7. 判 ...
- 计算机语言中的逻辑型数据,零基础易语言入门教程(五)之逻辑型数据类型
在上篇文章给大家介绍了零基础易语言入门教程(四)之数据类型,上篇针对数值到文本类型知识,今天给大家介绍下逻辑型数据. 具体方法和步骤如下所示: 1.逻辑型数据非真即假: 首先申请一个局部变量(A)类型 ...
- iOS开发之c语言入门教程
苹果作为移动互联的高端品牌,iOS操作系统也被用户公认为是最好用的移动互联网操作系统.据了解,曾一度拒绝为iOS平台对出浏览器的火狐在今年5月份的时候,他们却食言了.今天,Mozilla宣布iOS版F ...
最新文章
- 如何应付表数据过大的查询问题?(如何尽量避免大表关联)[转]
- BugkuCTF-Misc:Linux
- Java 8:在2分钟内将智能流与数据库一起使用
- 这个城市快递外卖小哥将配电子号牌了,违法2起以上停止派单
- 微信小程序第三方平台和附近的小程序将开放
- 一款很好看的个人主页简单源码
- 虹科教您固定工业树莓派Modbus RTU设备编号
- 开源、个人博客等网站搭建、上云费用控、软件程序爱好者资源集锦
- Java之颜色工具-yellowcong
- 化痰止咳平喘药题库【1】
- 绕过 iOS 代码签名验证 ldid
- FPGA_demo2:按键测试
- 那些年的,那些人的,那些事。
- eclipse's problem
- 又写无关IT的东西:经济学术语
- 如何用java打印1-100_在java中使用10个线程打印1到100
- 利用Matplotlib绘制莫比乌斯带
- Node* create()的含义
- 阴阳师服务器无法显示,阴阳师服务器崩了修复了吗 突然出现无法登陆
- 2021 年 10 月推荐阅读的10篇精选ML论文