《鸿蒙机器人编程》课件-8-实践课-动手编译及运行第一个ROS程序_第1页
《鸿蒙机器人编程》课件-8-实践课-动手编译及运行第一个ROS程序_第2页
《鸿蒙机器人编程》课件-8-实践课-动手编译及运行第一个ROS程序_第3页
《鸿蒙机器人编程》课件-8-实践课-动手编译及运行第一个ROS程序_第4页
《鸿蒙机器人编程》课件-8-实践课-动手编译及运行第一个ROS程序_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实践课-

动手编译及运行第一个ROS程序课程介绍课程内容:讲解Turtlesim功能包文件结构核心代码简单解读动手编译Turtlesim动手运行ROS节点,控制小乌龟运动目的:掌握功能包的编译与运行掌握rostopic和rosservice命令行工具的使用通过rostopic和rosservice工具了解topic和service的工作机理2©NXROBO2022TurtleSim运行效果3©NXROBO2022Turtlesim功能包文件结构功能包下主要有images、include、launch、msg、srv、src、tutorials活页夹及CMakeLists.txt和package.xml文件。Images--海龟图片,用于程序加载和显示Include--功能包头文件launch

--启动的配置文件msg、srv--topic和service的数据类型定义文件src--海龟绘制的源代码文件tutorials--控制海龟运动的源代码文件4©NXROBO2022Turtlesim功能包逻辑结构功能包共有四个node:turtlesim_node:用来绘制窗口及turtlesim,并通过topic和service提供了控制turtlesim的相关接口;teleop_turtle_key:利用turtlesim的相关接口用键盘控制turtlesim的运动;draw_square:利用相关接口控制turtlesim给出矩形轨迹;mimic:提供了复制海龟运动的接口。后三个node是控制turtlesim的三种方式示例,放在tutorials文件夹。5©NXROBO2022TurtleApp类节点turtlesim_node的入口在turtlesim.cpp中通过QApplication的继承类TurtleApp实现QT程序的初始化,并完成了node的初始化;创建TurtleFrame对象,显示窗口;最后通过QApplication::exec()进入事件循环。node的实例化使用了boost的智能指针,因为在包含档turtle_frame.h中已经进行了对NodeHandle实例化,所以此处使用了reset(),以保证智能指针的正常自动销毁。使用智能指针保证了NodeHandle同一实例对象在TurtleFrame类中的正常使用。6©NXROBO2022TurtleFrame类TurtleFrame继承自QFrame类,实现有框架的窗口部件其主要作用是窗口部件与事件管理、海龟图片加载显示提供了clear、reset、spawn、kill四个service用来提供海龟的生成与销毁等操作调用接口。7©NXROBO2022TurtleFrame类——clear服务实现clearCallback通过调用clear函数,用预定的背景色重绘窗口。但并未对海龟图片作任何操作,也就是说只重置背景及清除海龟运动轨迹。8©NXROBO2022TurtleFrame类——reset服务实现resetCallback先清空存放海龟对象的map,再重新生成海龟,最后调用clear函数。9©NXROBO2022TurtleFrame类——spawn服务实现spawnCallback通过spawnTurtle函数以服务调用请求的位置、朝向及名字参数生成海龟。此处会对海龟命名重名给出出错提示。10©NXROBO2022TurtleFrame类——kill服务实现killCallback就是删除指定名的海龟,实际是通过key清除存放海龟对象map的相应条目,调用update()实现重绘。11©NXROBO2022TurtleFrame类——QT绘制事件QT绘制事件通过update()手动触发或窗口变动自动触发,然后通过重写的paintEvent虚函数槽实现绘制12©NXROBO2022TurtleFrame类——ROS事件ROS事件通过QT的信号槽机制以16ms为周期进行用onupdate()函数槽实现13©NXROBO2022实际上海龟的运动是通过海龟图片的平移与旋转实现的。具体代码在Turtle类中,共有一个订阅的TOPIC、两个发布的TOPIC及三个SERVICE。订阅的TOPIC为:cmd_velcmd_vel:订阅海龟控制的速度信息。发布的TOPIC为:pose、color_sensorpose:发布海龟的位置、朝向、及线速度和角速度color_sensor:发布海龟底层的颜色三个服务为:set_pen、teleport_relative、teleport_absoluteset_pen:为设置画笔颜色及宽度的服务接口teleport_relative:以相对位置控制海龟运动teleport_absolute:以绝对位置控制海龟运动14©NXROBO2022Turtle类Turtle类turtle对象创建中,同时以生成的海龟名为参数对NodeHandle进行了实例化,所以上面提到的发布的TOPIC及提供的SERVICE都是有海龟名这个命名空间的。15©NXROBO2022package.xml和Cmakelist.txt16©NXROBO2022编译turtlesim在终端上,利用cd命令进入工作空间,然后用catkin_make编译

或17©NXROBO2022$cd~/catkin_ws

$catkin_make$cd~/catkin_ws$catkin_make-DCATKIN_WHITELIST_PACKAGES=“turtlesim”实操示例查看发布的TOPIC及其数据和提供的服务,rostopic和rosservice工具让海龟作圆周运动(可使用rqt工具):

生成新的海龟(可使用rqt工具):启动键盘控制:18rostopicpub/turtle1/command_velocityturtlesim/Velocity-r1--2.0-1.8roservicecallspawn330myturtlerosrunturtlesimturtle_teleop_key©NXROBO2022实操示例-海龟跟随launch文件<launch> <groupns="turtlesim1"> <nodepkg="turtlesim"name="sim"type="turtlesim_node"/> </group> <groupns="turtlesim2"> <nodepkg="turtlesim"name="sim"type="turtlesim_node"/> </group> <nodepkg="turtlesim"name="mimic"type="mimic"> <remapfrom="input"to="turtlesim1/turtle1"/> <remapfrom="output"to="turtlesim2/turtle1"/> </node> <nodepkg="turtlesim"name="turtle_teleop_key"type="turtle_teleop_key"> <remapfrom="/turtle1/cmd_vel"to="/turtlesim1/turtle1/cmd_vel"/> </node> </launch>19©NXROBO202

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论