智能機器人技術 課件 項目6智能機器人計算好幫手_第1頁
智能機器人技術 課件 項目6智能機器人計算好幫手_第2頁
智能機器人技術 課件 項目6智能機器人計算好幫手_第3頁
智能機器人技術 課件 項目6智能機器人計算好幫手_第4頁
智能機器人技術 課件 項目6智能機器人計算好幫手_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

授課老師:連國云項目6:智能機器人計算好幫手《智能機器人技術》課程任務要求知識導入任務實施任務評價編寫server代碼文件,發(fā)布“/avg_server”service,通過該server求三個數(shù)的平均值任務要求知識導入任務實施任務評價自定義srv與

msg文件相類似,ROS系統(tǒng)的

service數(shù)據(jù)可以通過srv文件進行與語言無關的接口定義,srv文件一般放置在功能包的根目錄下的srv文件夾中。該文件包含request與response兩個數(shù)據(jù)域,數(shù)據(jù)域中的內(nèi)容與topic的msg數(shù)據(jù)類型相似,只是在

request與

response數(shù)據(jù)域之間需要使用“---”分割開來。任務要求知識導入任務實施任務評價要使用自定義的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顯示出來。任務要求知識導入任務實施任務評價代碼創(chuàng)建服務器以下的代碼在

myturtle_server功能包中實現(xiàn)了一個

turtle_command_server節(jié)點。通過該節(jié)點的代碼構建了一個名字叫做

/turtle_command_server的

service的服務器,通過此服務器控制turtle的運動與停止。任務要求知識導入任務實施任務評價#!/usr/bin/envpython#-*-coding:utf-8-*-#該例程將執(zhí)行/turtle_command服務,服務數(shù)據(jù)類型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)

#顯示請求數(shù)據(jù)rospy.loginfo("Publishturtlevelocitycommand![%d]",pubCommand)

#反饋數(shù)據(jù)returnTriggerResponse(1,"Changeturtlecommandstate!")任務要求知識導入任務實施任務評價def

turtle_command_server():#ROS節(jié)點初始化

rospy.init_node('turtle_command_server')#創(chuàng)建一個名為/turtle_command的server,注冊回調函數(shù)commandCallbacks=

rospy.Service('/turtle_command',Trigger,commandCallback)#循環(huán)等待回調函數(shù)

print

"Readytoreceiveturtlecommand."

thread.start_new_thread(command_thread,())

rospy.spin()if__name__==

"__main__":

turtle_command_server()任務要求知識導入任務實施任務評價(1)pubCommand=

False;初始化pubCommand參數(shù)為0(2)turtle_vel_pub=rospy.Publisher('/turtle1/cmd_vel',Twist,queue_size=10)發(fā)布名字為/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函數(shù),通過該函數(shù)封裝vel_msg的消息,并以0.1秒的間隔發(fā)送vel_msg消息。任務要求知識導入任務實施任務評價(4)defcommandCallback(req):globalpubCommandpubCommand=

bool(1-pubCommand)#顯示請求數(shù)據(jù)rospy.loginfo("Publishturtlevelocitycommand![%d]",pubCommand)#反饋數(shù)據(jù)returnTriggerResponse(1,"Changeturtlecommandstate!")定義commandCallback回調函數(shù),在該函數(shù)中將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()任務要求知識導入任務實施任務評價代碼創(chuàng)建服務器定義turtle_command_server函數(shù),在該函數(shù)中將初始化turtle_command_server節(jié)點,創(chuàng)建/turtle_command服務的實例,等待client的請求隊列,當隊列中有client請求將調用commandCallback回調函數(shù),并發(fā)布command_thread函數(shù)中定義topic的消息。任務要求知識導入任務實施任務評價代碼創(chuàng)建服務器總結起來,通過代碼實現(xiàn)service的服務器主要有4個步驟:(1)初始化ROS節(jié)點;(2)創(chuàng)建server實例,并指定所要回調函數(shù);(3)循環(huán)等待client發(fā)出的request,當有request時進入回調函數(shù);(4)執(zhí)行回調函數(shù),完成定義好的處理功能,并反饋response信息。完成了代碼編寫之后就可以進行功能包的編譯了。任務要求知識導入任務實施任務評價代碼創(chuàng)建服務器啟動小海龜?shù)姆抡娉绦?,用鍵盤控制小海龜?shù)倪\動,然后運行如下命令$turtle_command_server當發(fā)送client發(fā)送第奇數(shù)次request時小海龜就會運動,當client發(fā)送第偶數(shù)次request是小海龜就會停止。任務要求知識導入任務實施任務評價代碼創(chuàng)建服務器任務要求知識導入任務實施任務評價根據(jù)任務要求,具體的工作任務實施步驟如下:(1)創(chuàng)建功能包。在前面的任務重已經(jīng)指定catkin_ws為工作空間,在此仍然在此工作空間中創(chuàng)建package$cd~/catkin_ws/src$catkin_create_pkgcalc_average_02std_msgsrospymessage_runtimemessage_generation任務要求知識導入任務實施任務評價(2)自定義srv(a)創(chuàng)建scripts文件夾、srv文件夾$cdcalc_average_02$mkdirscripts$mkdirsrv(b)創(chuàng)建服務文件calcAvg.srv$cdsrv$geditcalcAvg.srvcalcAvg.srv文件的內(nèi)容如下:float64num1float64num2float64num3---float64avg任務要求知識導入任務實施任務評價(c)在CMakeLists.txt中添加以下內(nèi)容(可去除相對應的注釋)##Generateservicesinthe'srv'folderadd_service_files( FILES caclAvg.srv)(d)打開package.xml,檢查是否有以下內(nèi)容,沒有則手動添加<build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>任務要求知識導入任務實施任務評價(e)對自定義的srv進行編譯,設置環(huán)境變量$cd~/catkin_ws$catkin_make$source./devel/setup.bash(f)查看自定義的calcAvg.srv,檢查是否編譯成功$rossrvshowcalc_average_02/calcAvg任務要求知識導入任務實施任務評價(3)在CMakeLists.txt中添加以下內(nèi)容。(可去除相對應的注釋)generate_messages( DEPENDENCIES std_msgs)(4)根據(jù)server構造的步驟,編寫相應的代碼$cd~/catkin_ws/src/calc_avg_02/scripts$geditserver.py任務要求知識導入任務實施任務評價(5)對編寫的server.py進行編譯(a)在編寫的python代碼文件所在的文件夾下修改python代碼文件的權限,使其變成可執(zhí)行文件:$sudochmod+xserver.py(b)進行package編譯操作$cd~/catkin_ws#進入工作空間所在的文件夾$catkin_make#對工作空間內(nèi)所有的package都進行編譯$source~/catkin_ws/devel/setup.bash#更新package對應的環(huán)境變量通過這些操作,就可以完成所編寫package的編譯了任務要求知識導入任務實施任務評價(6)運行server節(jié)點,查看消息(a)啟動新的終端,輸入啟動ROS命令$roscore(b)啟動新的終端,輸入啟動talker節(jié)點命令$rosru

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論