Halo,這里是Ppeua。平時(shí)主要更新C語言,C++,數(shù)據(jù)結(jié)構(gòu)算法…感興趣就關(guān)注我吧!你定不會(huì)失望。

0.參數(shù)服務(wù)器概念
相較于之前的通信模型,參數(shù)服務(wù)器是最為簡(jiǎn)單的。在之前的模型中,ROSMASTER都是扮演一個(gè)幫二者連接在一起的橋梁。
而在參數(shù)服務(wù)器中:ROSMASTER變?yōu)榱艘粋€(gè)存儲(chǔ)消息的容器,供使用者自行完成增刪查改的操作.
其設(shè)計(jì)僅為存儲(chǔ)非二進(jìn)制的簡(jiǎn)單數(shù)據(jù),若需要高性能操作,建議采用其他通信方式.
容器中可存儲(chǔ)的參數(shù)類型:
- 32-bit integers
- booleans
- strings
- doubles
- iso8601 dates
- lists
- base64-encoded binary data
- 字典
1.參數(shù)服務(wù)器增加/修改參數(shù):
- 初始化節(jié)點(diǎn)
- 使用set_param函數(shù)進(jìn)行增加/修改
set_param有點(diǎn)類似hash:若參數(shù)服務(wù)器中無這個(gè)值,則增加,若有則修改為最新的值
import rospy
rospy.init_node("param")
#設(shè)置整形
rospy.set_param("p_int",10)
#設(shè)置浮點(diǎn)型
rospy.set_param("p_double",3.14)
#設(shè)置bool值
rospy.set_param("p_bool",True)
#設(shè)置string
rospy.set_param("p_string","hello python")
#設(shè)置List
rospy.set_param("p_list",["hello","haha","xixi"])
#設(shè)置字典
rospy.set_param("p_dict",{"name":"hulu","age":8})
2.參數(shù)服務(wù)器查找參數(shù)
常用的有以下幾個(gè)函數(shù):
-
get_param(key,value)
當(dāng)鍵存在的時(shí)候返回對(duì)應(yīng)值,若不存在則返回默認(rèn)值
get_param_cached(key,value)
與上方用法相同,只不過這個(gè)效率更高,其會(huì)現(xiàn)在緩存里查找,類似于操作系統(tǒng)內(nèi)存中快表的作用radius2=rospy.get_param_cached("radius_p",0.5) radius=rospy.get_param("radius_p",0.5)
-
get_param_names()
獲取當(dāng)前參數(shù)列表中所有的參數(shù)名并返回names=rospy.get_param_names() for name in names: print(name)
-
has_param(key)
判斷參數(shù)列表中是否有某一個(gè)參數(shù),
返回Bool值flag1=rospy.has_param("radius_p") if flag1: print("存在") else : print("不存在")
-
search_param(key)
尋找是否有這個(gè)消息,若無則返回None,若有則返回這個(gè)keykey=rospy.search_param("radius_p") print(key)
3.參數(shù)服務(wù)器刪除參數(shù):
-
delete_param(key)
刪除指定的key
較為簡(jiǎn)單就不演示用法了,之后會(huì)有一個(gè)實(shí)戰(zhàn)項(xiàng)目涉及
4.常用指令
會(huì)使用到之前配置使用的話題通信與服務(wù)通信.
使用這些命令可以在機(jī)器人運(yùn)行時(shí)動(dòng)態(tài)的查看各節(jié)點(diǎn)之間的關(guān)系及消息載體:
- rosnode:節(jié)點(diǎn)
- rostopic:話題
- rosservice:服務(wù)
- rosmsg:msg消息
- rossrv:srv消息
- rosparam:操作參數(shù)服務(wù)器
4.1 rosnode
我們先啟動(dòng)下之前配置好的自定義msg的sub與pub節(jié)點(diǎn),具體配置可以查看這篇文章話題通信案例
rosrun lesson2 demo02_pub.py
rosrun lesson2 demo02_sub.py
直接使用rosnode可以查看參數(shù)列表
-
rosnode ping 測(cè)試到節(jié)點(diǎn)的連接狀態(tài)
rosnode ping /person_pub
這里/pub_person為發(fā)送消息的節(jié)點(diǎn),僅為一個(gè)演示
-
rosnode list 列出活動(dòng)節(jié)點(diǎn)
rosnode list
使用這個(gè)命令可以查看當(dāng)前活動(dòng)的節(jié)點(diǎn)
-
rosnode info 打印節(jié)點(diǎn)信息
ronode info /person_pub ronode info /person_sub
這里打印出了發(fā)送與接受節(jié)點(diǎn)的信息,包含了以下內(nèi)容:
- 節(jié)點(diǎn)名稱
- 使用話題
- 接受/發(fā)送方
合理的使用可以更方便理清節(jié)點(diǎn)間的關(guān)系
- rosnode machine 列出指定設(shè)備上節(jié)點(diǎn)
-
rosnode kill 殺死某個(gè)節(jié)點(diǎn)
kill了訂閱節(jié)點(diǎn)rosnode kill /sub_person
-
rosnode cleanup 清除不可連接的節(jié)點(diǎn)
有時(shí)ctrl+c之后會(huì)導(dǎo)致部分節(jié)點(diǎn)不可使用,但仍在list中,此時(shí)可以用這個(gè)指令刷新一下
4.2 rostopic
先啟動(dòng)上方使用的兩個(gè)節(jié)點(diǎn)
直接在終端中輸入rostopic可以查看所有可以使用的指令
-
rostopic list 顯示當(dāng)前在使用的所有話題
rostopic list
例如這里使用的話題是/che
-
rostopic echo扮演接收方的工作,可以在屏幕上打印出話題信息
rostopic echo topic
例如這里可以驗(yàn)證發(fā)布方的信息是否正確
-
rostopic info/type兩個(gè)用處相同,顯示話題通信的消息類型,其中info包含了type類型
rostopic info topic
例如這里使用的是Person msg消息類型
-
rostopic find 尋找使用某消息類型的話題
rostopic find lesson2/Person
例如這里尋找使用lesson2/Person消息類型的話題是什么
-
rostopic pub 向某一話題發(fā)布消息
rostopic pub topic
例如這里向訂閱節(jié)點(diǎn)發(fā)布信息
4.3 rosmsg
rosmsg是用于顯示有關(guān) ROS消息類型的 信息的命令行工具
也與上方相同,可以直接輸入rosmsg就會(huì)顯示出可用指令
-
rosmsg list 列出所有消息類型
-
rosmsg show / info列出當(dāng)前消息類型中包含的具體類型
rosmsg show msg
-
rosmsg package列出某個(gè)包下的所有消息
rosmsg package pack
列出來turtlesim里的所有消息類型
-
rosmsg packages列出包含某消息的功能包
rosmsg package pack
列出包含turtlesim/Pose消息類型的所有包
4.4 rosservice
用來查詢相關(guān)服務(wù)信息
我們先啟動(dòng)下之前配置好的自定義srv的server與client節(jié)點(diǎn),具體配置可以查看這篇文章
rosrun lesson3_srv demo01_client.py
rosrun lesson3_srv demo01_server.py
在終端輸入rosservice也可以看到參數(shù)列表
-
rosservice list列出參數(shù)服務(wù)列表
-
rosservice call調(diào)用服務(wù)
這里調(diào)用/sum2 tab補(bǔ)齊 傳入兩個(gè)參數(shù)rosservice call /sum2
-
rosservice args查看srv消息具體參數(shù)
rosservice args /sum2
其余使用方法和上面相同
4.5 rossrv
與rosmsg差不多,也是查看srv的具體類型
4.6 rosparam
我們先啟動(dòng)下turtle 方便驗(yàn)證
rosrun turtlesim turtlesim_node
-
rosparam list列出參數(shù)列表
-
rosparam set設(shè)置具體參數(shù)數(shù)值
rosparam set 參數(shù)類型
-
rosparam get獲得具體參數(shù)數(shù)值
-
rosparam delete刪除參數(shù)
-
rosparam load將參數(shù)加載到磁盤中文章來源:http://www.zghlxwxcb.cn/news/detail-443436.html
-
rosparam dump從磁盤中加載參數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-443436.html
至此參數(shù)服務(wù)器通信及ros常用工具指令介紹結(jié)束
到了這里,關(guān)于【ROS】如何讓ROS中節(jié)點(diǎn)獲取數(shù)據(jù) III --參數(shù)服務(wù)器通信及ros常用工具指令介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!