网站大量收购闲置独家精品文档,联系QQ:2885784924

《鸿蒙机器人编程》3-实践课-动手编译及运行第一个ROS程序--实训指南.docxVIP

《鸿蒙机器人编程》3-实践课-动手编译及运行第一个ROS程序--实训指南.docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

ROS星火计划 从0到1搭建ROS环境 NXROBOExBot

PAGE8

实践课-动手编译及运行第一个ROS程序

课程内容:

本节将对Turtlesim功能包进行简单解读,了解功能包结构,创建及编译工作空间,了解launch文件作用及roslaunch命令使用。

教学目标:

了解Turtlesim功能包结构

掌握工作空间运行机制

掌握launch文件使用

一.功能包解析

1.Turtlesim功能包结构

Turtlesim功能包下主要有images、include、launch、msg、srv、src、tutorials活页夹及CMakeLists.txt和package.xml文件。

Images--海龟图片,用于程序加载和显示

Include--功能包头文件

launch--启动的配置文件

msg、srv--topic和service的数据类型定义文件

src--海龟绘制的源代码文件

tutorials--控制海龟运动的源代码文件

功能包共有四个node:

turtlesim_node:用来绘制窗口及turtlesim,并通过topic和service提供了控制turtlesim的相关接口;

teleop_turtle_key:利用turtlesim的相关接口用键盘控制turtlesim的运动;

draw_square:利用相关接口控制turtlesim给出矩形轨迹;

mimic:提供了复制海龟运动的接口。

后三个node是控制turtlesim的三种方式示例,放在tutorials文件夹。

2.核心代码简单解读

①TurtleApp类

节点turtlesim_node的入口在turtlesim.cpp中,通过QApplication的继承类TurtleApp实现QT程序的初始化,并完成了node的初始化;创建TurtleFrame对象,显示窗口;最后通过QApplication::exec()进入事件循环。

node的实例化使用了boost的智能指针,因为在包含档turtle_frame.h中已经进行了对NodeHandle实例化,所以此处使用了reset(),以保证智能指针的正常自动销毁。使用智能指针保证了NodeHandle同一实例对象在TurtleFrame类中的正常使用。

具体代码如下:

②TurtleFrame类

TurtleFrame继承自QFrame类,实现有框架的窗口部件。其主要作用是窗口部件与事件管理、海龟图片加载显示。它提供了clear、reset、spawn、kill四个service用来提供海龟的生成与销毁等操作调用接口。

clearCallback通过调用clear函数,用预定的背景色重绘窗口。但并未对海龟图片作任何操作,也就是说只重置背景及清除海龟运动轨迹。实现如下:

resetCallback先清空存放海龟对象的map,再重新生成海龟,最后调用clear函数。实现如下:

spawnCallback通过spawnTurtle函数以服务调用请求的位置、朝向及名字参数生成海龟。此处会对海龟命名重名给出出错提示。实现如下:

killCallback就是删除指定名的海龟,实际是通过key清除存放海龟对象map的相应条目,调用update()实现重绘。实现如下:

QT绘制事件及ROS事件

QT绘制事件通过update()手动触发或窗口变动自动触发,然后通过重写的paintEvent虚函数槽实现绘制。实现如下:

ROS事件通过QT的信号槽机制以16ms为周期进行,用onupdate()函数槽实现。

③Turtle类

实际上海龟的运动是通过海龟图片的平移与旋转实现的。具体代码在Turtle类中,共有一个订阅的TOPIC、两个发布的TOPIC及三个SERVICE。

订阅的TOPIC为:cmd_vel

cmd_vel:订阅海龟控制的速度信息

发布的TOPIC为:pose、color_sensor

pose:发布海龟的位置、朝向、及线速度和角速度

color_sensor:发布海龟底层的颜色

三个服务为:set_pen、teleport_relative、teleport_absolute

set_pen:为设置画笔颜色及宽度的服务接口

teleport_relative:以相对位置控制海龟运动

teleport_absolute:以绝对位置控制海龟运动

turtle对象创建中,同时以生成的海龟名为参数对NodeHandle进行了实例化,所以上面提到的发布的TOPIC及提供的SERVICE都是有海龟名这个命名空间的。

二.创建及编译工作空间

$mkdir-pcatkin_ws/src

在终端上,利用cd命令进入工作空间,然后用ca

文档评论(0)

青柠职教 + 关注
实名认证
服务提供商

从业10年,专注职业教育专业建设,实训室建设等。

1亿VIP精品文档

相关文档