在本例,用户将会配置一个模型为一个单独的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节点相关推荐

  1. matlab怎么删除对象,ROS与Matlab语言入门教程-在Gazebo中增加、建立和移除对象

    本例程探索如何深层次地与MATLAB中的Gazebo仿真器交互.主题包括创建简单的模型.增加链接和加入模型.将模型连接在一起和应用力到物体. 预备知识:"4.2 开始使用Gazebo和仿真的 ...

  2. c++ 结构体赋值_《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事

    一.学习目标 了解C语言的结构体的使用方法 了解C语言结构体的结构的赋值 了解多种C语言结构体变量的赋值方法和取值方法 目录 <零基础看得懂的C语言入门教程>--(二)简单带你了解流程 & ...

  3. 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 ...

  4. 2017年Go语言入门教程-徐培成-专题视频课程

    2017年Go语言入门教程-3763人已学习 课程介绍         Go语言入门教程,只要你懂中文都可以看的懂本套教程,为任何想学习Go语言研制的教程. 课程收益     让任何人都可以轻松掌握G ...

  5. GO语言入门教程(二)

    Hello,各位小伙伴,在接着之前发表的Go语言系列教程之投石问路之后,我们大致了解了一下Go语言的发展史和Go语言的优势,另外我也带着小伙伴进行了Go语言环境的安装和常用命令的介绍.接下来我们就正式 ...

  6. java编程输出平行四边形_JAVA语言入门教程之打印图形实例——打印平行四边形...

    本文主要向大家介绍了JAVA语言入门教程之打印图形实例--打印平行四边形,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 输出平行四边形: public class Parallelo ...

  7. C语言入门教程学习 C语言学习包括哪些?

    嵌入式开发有一定了解的朋友们知道是在操作系统内部开发的,对于操作系统内部来说基本上都是用C语言来进行编译的,所以说对于C语言的学习在嵌入式开发过程中是非常重要的.下面就给大家介绍一些C语言入门教程的相 ...

  8. 小白都能看懂的C语言入门教程

    文章目录 C语言入门教程 1. 第一个C语言程序HelloWorld 2. C语言的数据类型 3. 常量变量的使用 4. 自定义标识符#define 5. 枚举的使用 6. 字符串和转义字符 7. 判 ...

  9. 计算机语言中的逻辑型数据,零基础易语言入门教程(五)之逻辑型数据类型

    在上篇文章给大家介绍了零基础易语言入门教程(四)之数据类型,上篇针对数值到文本类型知识,今天给大家介绍下逻辑型数据. 具体方法和步骤如下所示: 1.逻辑型数据非真即假: 首先申请一个局部变量(A)类型 ...

  10. iOS开发之c语言入门教程

    苹果作为移动互联的高端品牌,iOS操作系统也被用户公认为是最好用的移动互联网操作系统.据了解,曾一度拒绝为iOS平台对出浏览器的火狐在今年5月份的时候,他们却食言了.今天,Mozilla宣布iOS版F ...

最新文章

  1. 如何应付表数据过大的查询问题?(如何尽量避免大表关联)[转]
  2. BugkuCTF-Misc:Linux
  3. Java 8:在2分钟内将智能流与数据库一起使用
  4. 这个城市快递外卖小哥将配电子号牌了,违法2起以上停止派单
  5. 微信小程序第三方平台和附近的小程序将开放
  6. 一款很好看的个人主页简单源码
  7. 虹科教您固定工业树莓派Modbus RTU设备编号
  8. 开源、个人博客等网站搭建、上云费用控、软件程序爱好者资源集锦
  9. Java之颜色工具-yellowcong
  10. 化痰止咳平喘药题库【1】
  11. 绕过 iOS 代码签名验证 ldid
  12. FPGA_demo2:按键测试
  13. 那些年的,那些人的,那些事。
  14. eclipse's problem
  15. 又写无关IT的东西:经济学术语
  16. 如何用java打印1-100_在java中使用10个线程打印1到100
  17. 利用Matplotlib绘制莫比乌斯带
  18. Node* create()的含义
  19. 阴阳师服务器无法显示,阴阳师服务器崩了修复了吗 突然出现无法登陆
  20. 2021 年 10 月推荐阅读的10篇精选ML论文

热门文章

  1. 微信演示制作软件易企秀的上手体验(图文)
  2. node在Fedora 22系统下开发环境搭建
  3. 接口自动化:淘宝的登录、搜索商品、确认订单、付款流程
  4. Start11软件1.0版发布:如果适应了win10或win7的系统,可一键将win11改回
  5. android录音工具,推荐四款十分好用的安卓录音应用
  6. 常见移动端兼容性问题
  7. Java网络编程net-1-地址-1
  8. 好玩的小霸王游戏机HTML网站源码
  9. 三种PS切图方法—简单易懂
  10. Vue 项目更新,浏览器不需强制刷新就可更新版本! 防止缓存