日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[ROS](12)ROS通信 —— 参数服务器(Parameter Server)通信

發(fā)布時(shí)間:2024/1/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [ROS](12)ROS通信 —— 参数服务器(Parameter Server)通信 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??文章只是個(gè)人學(xué)習(xí)過程中學(xué)習(xí)筆記,主要參考ROS教程1 2


[ROS](01)創(chuàng)建ROS工作空間

[ROS](02)創(chuàng)建&編譯ROS軟件包Package

[ROS](03)CMakeLists.txt詳解

[ROS](04)package.xml詳解

目錄

  • 1、概述
  • 2、參數(shù)服務(wù)器通信機(jī)制
  • 3、參數(shù)命令rosparam
  • 4、參數(shù)服務(wù)器通信實(shí)操 -- 修改海龜模擬器的背景顏色
    • 4.1 調(diào)試工具實(shí)現(xiàn)
    • 4.2 編程實(shí)現(xiàn)(C++)
      • 4.2.1 程序代碼(turtle_set_param.cpp)
      • 4.2.2 配置CMakeLists.txt
      • 4.2.3 編譯、運(yùn)行
    • 4.3 編程實(shí)現(xiàn)(Python)
      • 4.3.1 程序代碼(turtle_set_param.py)
      • 4.3.2 配置CMakeLists.txt
      • 4.3.3 編譯、運(yùn)行
  • 5、rosparam實(shí)操
    • 5.1 rosparam list
    • 5.2 rosparam get
    • 5.3 rosparam set
    • 5.4 rosparam dump
    • 5.5 rosparam load
    • 5.6 rosparam delete

1、概述

??參數(shù)服務(wù)器(Parameter Server 3):是可以通過網(wǎng)絡(luò) API 訪問的共享的多變量字典。在運(yùn)行時(shí)節(jié)點(diǎn)(Nodes)使用此服務(wù)器去存儲(chǔ)和檢索參數(shù)。(類似于全局變量,存儲(chǔ)多個(gè)節(jié)點(diǎn)共享的數(shù)據(jù)。)

Tips:參數(shù)服務(wù)器不是為高性能(high-performance)而設(shè)計(jì)的,因此最好用于靜態(tài)、非二進(jìn)制的數(shù)據(jù),如配置參數(shù)。

2、參數(shù)服務(wù)器通信機(jī)制

??參數(shù)服務(wù)器通信 是ROS通信中一種比較特殊又比較簡單的通信方式。參數(shù)服務(wù)器在ROS Master內(nèi)部運(yùn)行。

圖2-1 參數(shù)服務(wù)器(Parameter Server)通信模型

3、參數(shù)命令rosparam

?? rosparam 4 能讓我們?cè)赗OS參數(shù)服務(wù)器(Parameter Server)上存儲(chǔ)和操作數(shù)據(jù)。參數(shù)服務(wù)器能夠存儲(chǔ)整型(integer)、浮點(diǎn)(float)、布爾(boolean)、字典(dictionaries)和列表(list)等數(shù)據(jù)類型。

命令功能
rosparam set 設(shè)置參數(shù)
rosparam get獲取參數(shù)
rosparam load 從文件中加載參數(shù)
rosparam dump 向文件中轉(zhuǎn)儲(chǔ)參數(shù)
rosparam delete刪除參數(shù)
rosparam list列出參數(shù)名

Tips:rosparam使用YAML標(biāo)記語言的語法。一般而言,YAML的表述很自然:1是整型,1.0是浮點(diǎn)型,one是字符串,true是布爾型,[1, 2, 3]是整型組成的列表,{a: b, c: d}是字典。

4、參數(shù)服務(wù)器通信實(shí)操 – 修改海龜模擬器的背景顏色

??通過ROS內(nèi)置的 海龜模擬器(turtlesim) 來進(jìn)行參數(shù)服務(wù)器通信的實(shí)操,這里我們以修改海龜模擬器背景顏色舉例:背景顏色修改為紫色(RGB: 160 32 240)。

??實(shí)現(xiàn)的步驟如下:
??步驟1:在新終端中啟動(dòng)roscore

roscore

??步驟2:在新終端中啟動(dòng)海龜模擬器的節(jié)點(diǎn)turtlesim_node

rosrun turtlesim turtlesim_node

??步驟3:在新終端中使用rosparam命令獲取參數(shù)列表。

rosparam list

圖4-1 修改海龜模擬器的背景顏色步驟1-3

??步驟4:通過調(diào)試工具rqt工具箱和編程的方式修改海龜模擬器的背景顏色。

圖4-2 海龜模擬器初始狀態(tài)

4.1 調(diào)試工具實(shí)現(xiàn)

??在新終端中輸入rqt命令打開rqt工具箱,然后在菜單欄中打開參數(shù)和服務(wù)插件,分別為Plugins/Configuration/Param Edit和Plugins/Services/Service Caller,如圖4-3所示。

圖4-3 rqt工具箱插件Param Edit(左)和 Service Caller(右)

??在Param Edit中將海龜模擬器turtlesim的背景顏色background_x的值改為紫色,如圖4-4所示①;然后在Service Caller中選擇調(diào)用clear服務(wù),如圖4-4所示②;最后點(diǎn)擊右上角Call使已被修改的參數(shù)生效。

圖4-4 通過調(diào)試工具的方式修改海龜模擬器的背景顏色為紫色

4.2 編程實(shí)現(xiàn)(C++)

??在beginner_tutorials軟件包的src目錄下創(chuàng)建修改海龜模擬器的背景顏色的源文件:

roscd beginner_tutorials cd src touch turtle_set_param.cpp

4.2.1 程序代碼(turtle_set_param.cpp)

#include "ros/ros.h" #include <std_srvs/Empty.h>int main(int argc, char **argv) {setlocale(LC_ALL,"");/* 初始化ROS節(jié)點(diǎn) */ros::init(argc,argv,"turtle_set_param");/* 為這個(gè)節(jié)點(diǎn)創(chuàng)建句柄 */ros::NodeHandle nh("turtlesim");int red, green, blue;/* 讀取海龜模擬器背景顏色參數(shù) */ros::param::get("/turtlesim/background_r",red);ros::param::get("/turtlesim/background_g",green);ros::param::get("/turtlesim/background_b",blue);ROS_INFO("Get turtlesim background color[%3d, %3d, %3d]",red ,green,blue);/* 設(shè)置海龜模擬器背景顏色參數(shù),設(shè)置為紫色(160,32,240) */ros::param::set("/turtlesim/background_r",160);ros::param::set("/turtlesim/background_g",32);ros::param::set("/turtlesim/background_b",240);ROS_INFO("Set turtlesim background color[%3d, %3d, %3d]",160 ,32,240);/* 讀取海龜模擬器背景顏色參數(shù) */ros::param::get("/turtlesim/background_r",red);ros::param::get("/turtlesim/background_g",green);ros::param::get("/turtlesim/background_b",blue);ROS_INFO("Again get turtlesim background color[%3d, %3d, %3d]",red ,green,blue);/* 調(diào)用 /clear 服務(wù),使已被修改的參數(shù)生效 */ros::service::waitForService("/clear");ros::ServiceClient client = nh.serviceClient<std_srvs::Empty>("/clear"); // 參數(shù)為空的服務(wù)std_srvs::Empty srvs;/* 服務(wù)調(diào)用 */if(client.call(srvs)){ROS_INFO("海龜模擬器turtlesim已修改的背景顏色已生效!");}else{ROS_INFO("調(diào)用服務(wù)失敗!");}return 0; }

4.2.2 配置CMakeLists.txt

??只需將這幾行添加到CMakeLists.txt文件的底部:

add_executable(turtle_set_param src/turtle_set_param.cpp) target_link_libraries(turtle_set_param ${catkin_LIBRARIES})

4.2.3 編譯、運(yùn)行

??在你的工作空間下執(zhí)行catkin_make編譯,將turtle_set_param.cpp編譯成可執(zhí)行文件turtle_set_param。編譯后,在終端中執(zhí)行過程如下所示。

圖4-5 運(yùn)行turtle_set_param,修改海龜模擬器的背景顏色

4.3 編程實(shí)現(xiàn)(Python)

??在beginner_tutorials軟件包的scripts目錄下創(chuàng)建修改海龜模擬器的背景顏色源文件:

roscd beginner_tutorials cd scripts touch turtle_set_param.py chmod +x turtle_set_param.py

4.3.1 程序代碼(turtle_set_param.py)

#!/usr/bin/env python # encoding: utf-8import rospy from std_srvs.srv import Emptydef turtle_set_param():# 初始化ROS節(jié)點(diǎn)rospy.init_node("turtle_set_param")# 讀取海龜模擬器背景顏色參數(shù)red = rospy.get_param("/turtlesim/background_r")green = rospy.get_param("/turtlesim/background_g")blue = rospy.get_param("/turtlesim/background_b")rospy.loginfo("Get turtlesim background color[%3d, %3d, %3d]",red ,green,blue)# 設(shè)置海龜模擬器背景顏色參數(shù),設(shè)置為紫色(160,32,240)rospy.set_param("/turtlesim/background_r",160)rospy.set_param("/turtlesim/background_g",32)rospy.set_param("/turtlesim/background_b",240)rospy.loginfo("Set turtlesim background color[%3d, %3d, %3d]",160 ,32,240)# 讀取海龜模擬器背景顏色參數(shù) red = rospy.get_param("/turtlesim/background_r")green = rospy.get_param("/turtlesim/background_g")blue = rospy.get_param("/turtlesim/background_b")rospy.loginfo("Again Get turtlesim background color[%3d, %3d, %3d]",red ,green,blue)# 調(diào)用 /clear 服務(wù),使已被修改的參數(shù)生效 rospy.wait_for_service("/clear")try:clear_client = rospy.ServiceProxy("/clear",Empty)clear_client()rospy.loginfo("海龜模擬器turtlesim已修改的背景顏色已生效!")except rospy.ServiceException as e:rospy.loginfo("調(diào)用服務(wù)失敗!")if __name__ == '__main__':turtle_set_param()

4.3.2 配置CMakeLists.txt

??只需catkin_install_python中添加scripts/turtle_set_param.py即可:

#安裝python可執(zhí)行腳本 catkin_install_python(PROGRAMSscripts/turtle_set_param.py... DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})

4.3.3 編譯、運(yùn)行

??其實(shí)這個(gè)例子很簡單,不需要編譯,直接執(zhí)行python文件就行。但是我們還是養(yǎng)成習(xí)慣吧,每次創(chuàng)建和修改代碼后,就catkin_make編譯一下,即使是Python節(jié)點(diǎn)也必須使用它。這是為了確保能為創(chuàng)建的消息和服務(wù)自動(dòng)生成Python代碼。

圖4-6 運(yùn)行turtle_set_param.py,修改海龜模擬器的背景顏色

5、rosparam實(shí)操

ROS提供了一個(gè)穩(wěn)定的命令行工具rosparam來設(shè)置和獲取參數(shù)。通過已運(yùn)行的海龜模擬器(turtlesim)來實(shí)操參數(shù)命令。

5.1 rosparam list

?? rosparam list 列出所有的參數(shù)名。

turtlesim節(jié)點(diǎn)在參數(shù)服務(wù)器上有3個(gè)參數(shù)用于設(shè)定背景顏色(RGB格式):/turtlesim/background_x

5.2 rosparam get

?? rosparam get [parameter-name] 獲取一個(gè)參數(shù)的值。

?? 也可以使用 rosparam get / 命令來顯示參數(shù)服務(wù)器上的所有內(nèi)容。

5.3 rosparam set

?? rosparam set [parameter-name] [parameter-value] 為參數(shù)設(shè)置一個(gè)值。

# 將 turtlesim 的背景顏色修改為紅色(RGB: 255 0 0)rosparam set /turtlesim/background_r 255rosparam set /turtlesim/background_g 0rosparam set /turtlesim/background_b 0

?? 上述指令修改了參數(shù)的值,但還未生效,因此我們需要調(diào)用clear服務(wù)使得參數(shù)的修改能生效:

rosservice call /clear

5.4 rosparam dump

?? rosparam dump[file-name] 將參數(shù)服務(wù)器的 YAML 格式的內(nèi)容轉(zhuǎn)儲(chǔ)到文件中。

# 在 beginner_tutorials軟件包下創(chuàng)建param目錄文件夾 roscd beginner_tutorials mkdir param # 在param目錄文件夾下將參數(shù)服務(wù)器的 YAML 格式的內(nèi)容轉(zhuǎn)儲(chǔ)到文件中。 cd param rosparam dump params_all.yaml

Node:參數(shù)保存位置為當(dāng)前執(zhí)行命令的目錄下。

?? rosparam dump[file-name] [namespace] 只轉(zhuǎn)儲(chǔ)指定命名空間中的參數(shù)。

# 在param目錄文件夾下轉(zhuǎn)儲(chǔ)指定命名空間中的參數(shù) rosparam dump params_specified.yaml turtlesim

5.5 rosparam load

?? rosparam load [file-name] 將 YAML 文件中的參數(shù)加載到指定的命名空間(默認(rèn)為/)。

修改params_all.yaml文件 turtlesim 的背景顏色修改為綠色(RGB: 0 255 0) rosparam load params_all.yaml rosservice call /clear

??甚至可以將YAML文件重載入新的命名空間,例如:copy_param

rosparam load params_specified.yaml copy_param

5.6 rosparam delete

?? rosparam delete [parameter-name] 刪除參數(shù)值。

rosparam delete /copy_param/background_r rosparam delete /copy_param/background_g


  • ROS.org. ROS教程[EB/OL]. 2020-12-22[2022-7-5]. http://wiki.ros.org/cn/ROS/Tutorials. ??

  • ROS.org. 理解ROS服務(wù)和參數(shù)[EB/OL]. 2020-12-23[2022-11-02]. https://wiki.ros.org/cn/ROS/Tutorials/UnderstandingServicesParams. ??

  • ROS.org. Parameter Server[EB/OL]. 2018-11-08[2022-11-02]. https://wiki.ros.org/Parameter%20Server. ??

  • ROS.org. rosparam[EB/OL].2014-06-29[2022-11-02]. https://wiki.ros.org/rosparam ??

  • 總結(jié)

    以上是生活随笔為你收集整理的[ROS](12)ROS通信 —— 参数服务器(Parameter Server)通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。