智能机器人技术 课件 项目6智能机器人计算好帮手_第1页
智能机器人技术 课件 项目6智能机器人计算好帮手_第2页
智能机器人技术 课件 项目6智能机器人计算好帮手_第3页
智能机器人技术 课件 项目6智能机器人计算好帮手_第4页
智能机器人技术 课件 项目6智能机器人计算好帮手_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

授课老师:连国云项目6:智能机器人计算好帮手《智能机器人技术》课程任务要求知识导入任务实施任务评价编写server代码文件,发布“/avg_server”service,通过该server求三个数的平均值任务要求知识导入任务实施任务评价自定义srv与

msg文件相类似,ROS系统的

service数据可以通过srv文件进行与语言无关的接口定义,srv文件一般放置在功能包的根目录下的srv文件夹中。该文件包含request与response两个数据域,数据域中的内容与topic的msg数据类型相似,只是在

request与

response数据域之间需要使用“---”分割开来。任务要求知识导入任务实施任务评价要使用自定义的srv类型,还需要编译srv文件。srv文件的编译主要有3个步骤:(1)在pacakge.xml文件中追加功能包的依赖。打开pacakge.xml文件,在该文件的尾部追加以下代码:<build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>自定义srv任务要求知识导入任务实施任务评价(2)在CMakeLists.txt中添加相应的编译选项。(a)在find_package中添加消息生成依赖的功能包message_generation,这样在编译时才能找到所需的文件,find_package(……message_generation)(b)在catkin_package中添加消息生成依赖的功能包message_generation,catkin_package(……message_runtime)(c)在add_message_files和generate_messages中设置需要编译的srv文件,add_service_files(FILESperson_level.srv)generate_messages(DEPENDENCIESstd_msgs)任务要求知识导入任务实施任务评价(3)使用catkin_make进行编译。完成相关的编译设置后,就可以进行编译了,采用catkin_make进行编译。编译成功后,可以使用相关命令查看自定义的person_level,rossrvshowperson_level如果编译的消息类型没有问题,就会把定义的srv显示出来。任务要求知识导入任务实施任务评价代码创建服务器以下的代码在

myturtle_server功能包中实现了一个

turtle_command_server节点。通过该节点的代码构建了一个名字叫做

/turtle_command_server的

service的服务器,通过此服务器控制turtle的运动与停止。任务要求知识导入任务实施任务评价#!/usr/bin/envpython#-*-coding:utf-8-*-#该例程将执行/turtle_command服务,服务数据类型std_srvs/Trigger

import

rospyimport

thread,timefrom

geometry_msgs.msg

importTwistfrom

std_srvs.srv

importTrigger,TriggerResponse

pubCommand=

False;turtle_vel_pub=rospy.Publisher('/turtle1/cmd_vel',Twist,queue_size=10)任务要求知识导入任务实施任务评价def

command_thread():while

True:ifpubCommand:vel_msg=Twist()vel_msg.linear.x=

0.5vel_msg.angular.z=

0.2turtle_vel_pub.publish(vel_msg)

time.sleep(0.1)任务要求知识导入任务实施任务评价def

commandCallback(req):globalpubCommandpubCommand=

bool(1-pubCommand)

#显示请求数据rospy.loginfo("Publishturtlevelocitycommand![%d]",pubCommand)

#反馈数据returnTriggerResponse(1,"Changeturtlecommandstate!")任务要求知识导入任务实施任务评价def

turtle_command_server():#ROS节点初始化

rospy.init_node('turtle_command_server')#创建一个名为/turtle_command的server,注册回调函数commandCallbacks=

rospy.Service('/turtle_command',Trigger,commandCallback)#循环等待回调函数

print

"Readytoreceiveturtlecommand."

thread.start_new_thread(command_thread,())

rospy.spin()if__name__==

"__main__":

turtle_command_server()任务要求知识导入任务实施任务评价(1)pubCommand=

False;初始化pubCommand参数为0(2)turtle_vel_pub=rospy.Publisher('/turtle1/cmd_vel',Twist,queue_size=10)发布名字为/turtle1/cmd_vel的topic任务要求知识导入任务实施任务评价(3)def

command_thread():while

True:ifpubCommand:vel_msg=Twist()vel_msg.linear.x=

0.5vel_msg.angular.z=

0.2turtle_vel_pub.publish(vel_msg)

time.sleep(0.1)定义command_thread函数,通过该函数封装vel_msg的消息,并以0.1秒的间隔发送vel_msg消息。任务要求知识导入任务实施任务评价(4)defcommandCallback(req):globalpubCommandpubCommand=

bool(1-pubCommand)#显示请求数据rospy.loginfo("Publishturtlevelocitycommand![%d]",pubCommand)#反馈数据returnTriggerResponse(1,"Changeturtlecommandstate!")定义commandCallback回调函数,在该函数中将pubCommand变量取反,并显示成功信息。任务要求知识导入任务实施任务评价(5)defturtle_command_server():rospy.init_node('turtle_command_server')s=rospy.Service('/turtle_command',Trigger,commandCallback)

print"Readytoreceiveturtlecommand."thread.start_new_thread(command_thread,())rospy.spin()任务要求知识导入任务实施任务评价代码创建服务器定义turtle_command_server函数,在该函数中将初始化turtle_command_server节点,创建/turtle_command服务的实例,等待client的请求队列,当队列中有client请求将调用commandCallback回调函数,并发布command_thread函数中定义topic的消息。任务要求知识导入任务实施任务评价代码创建服务器总结起来,通过代码实现service的服务器主要有4个步骤:(1)初始化ROS节点;(2)创建server实例,并指定所要回调函数;(3)循环等待client发出的request,当有request时进入回调函数;(4)执行回调函数,完成定义好的处理功能,并反馈response信息。完成了代码编写之后就可以进行功能包的编译了。任务要求知识导入任务实施任务评价代码创建服务器启动小海龟的仿真程序,用键盘控制小海龟的运动,然后运行如下命令$turtle_command_server当发送client发送第奇数次request时小海龟就会运动,当client发送第偶数次request是小海龟就会停止。任务要求知识导入任务实施任务评价代码创建服务器任务要求知识导入任务实施任务评价根据任务要求,具体的工作任务实施步骤如下:(1)创建功能包。在前面的任务重已经指定catkin_ws为工作空间,在此仍然在此工作空间中创建package$cd~/catkin_ws/src$catkin_create_pkgcalc_average_02std_msgsrospymessage_runtimemessage_generation任务要求知识导入任务实施任务评价(2)自定义srv(a)创建scripts文件夹、srv文件夹$cdcalc_average_02$mkdirscripts$mkdirsrv(b)创建服务文件calcAvg.srv$cdsrv$geditcalcAvg.srvcalcAvg.srv文件的内容如下:float64num1float64num2float64num3---float64avg任务要求知识导入任务实施任务评价(c)在CMakeLists.txt中添加以下内容(可去除相对应的注释)##Generateservicesinthe'srv'folderadd_service_files( FILES caclAvg.srv)(d)打开package.xml,检查是否有以下内容,没有则手动添加<build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>任务要求知识导入任务实施任务评价(e)对自定义的srv进行编译,设置环境变量$cd~/catkin_ws$catkin_make$source./devel/setup.bash(f)查看自定义的calcAvg.srv,检查是否编译成功$rossrvshowcalc_average_02/calcAvg任务要求知识导入任务实施任务评价(3)在CMakeLists.txt中添加以下内容。(可去除相对应的注释)generate_messages( DEPENDENCIES std_msgs)(4)根据server构造的步骤,编写相应的代码$cd~/catkin_ws/src/calc_avg_02/scripts$geditserver.py任务要求知识导入任务实施任务评价(5)对编写的server.py进行编译(a)在编写的python代码文件所在的文件夹下修改python代码文件的权限,使其变成可执行文件:$sudochmod+xserver.py(b)进行package编译操作$cd~/catkin_ws#进入工作空间所在的文件夹$catkin_make#对工作空间内所有的package都进行编译$source~/catkin_ws/devel/setup.bash#更新package对应的环境变量通过这些操作,就可以完成所编写package的编译了任务要求知识导入任务实施任务评价(6)运行server节点,查看消息(a)启动新的终端,输入启动ROS命令$roscore(b)启动新的终端,输入启动talker节点命令$rosru

温馨提示

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

评论

0/150

提交评论