引數伺服器
可透過網路訪問的共享的多變數字典。它是節點儲存引數的地方、用於配置引數、全域性共享引數。引數伺服器使用網際網路傳輸,在節點管理器中執行,實現整個通訊過程。它使用XML-RPC(RPC:遠端過程呼叫)資料型別為引數賦值,包括以下型別:32位整數、布林值、字串、雙精度浮點、ISO 8601日期、列表(List)、基於64位編碼的二進位制資料。
XML-RPC is among the simplest and most foolproof web service approaches that makes it easy for computers to call procedures on other computers.XML-RPC是最簡單、最萬無一失的web服務方法之一,它使計算機能夠輕鬆地在其他計算機上呼叫過程。
引數伺服器的配置方式非常的簡單靈活,總的來講有三種方式:
命令列維護(ros命令)launch檔案內讀寫node原始碼(通俗講就是編寫程式碼)之前講解的話題和服務,與此文講解的引數進行對比理解:
用最直白的話:
話題和服務是:節點A傳送資料,節點B接收資料(A:將糧食從家送到B的家門口,B直接在家門口取糧食)
引數是: 節點A和節點B都去同一個“引數伺服器”中設定或獲取資料(A:將糧食從家送到穀倉,B去穀倉取糧食帶回家)
⚫ 列出當前的引數$ rosparam list⚫ 顯示某個引數值$ rosparam get param_key⚫ 設定某個引數值$ rosparam set param_key param_value⚫ 儲存引數到檔案$ rosparam dump file_name⚫ 從檔案讀取引數$ rosparam load file_name⚫ 刪除引數$ rosparam delete param_key
YAML引數檔案:包含具體的引數值
程式碼:
如何獲取/設定引數
• 初始化ROS節點;• get函式獲取引數;• set函式設定引數;//doubi.cpp/** * 該例程設定/讀取海龜例程中的引數 */#include <string>#include <ros/ros.h>#include <std_srvs/Empty.h>int main(int argc, char **argv){ int red, green, blue; // ROS節點初始化 ros::init(argc, argv, "parameter_config"); // 建立節點控制代碼 ros::NodeHandle node; // 讀取背景顏色引數 ros::param::get("/background_r", red); ros::param::get("/background_g", green); ros::param::get("/background_b", blue); ROS_INFO("Get Backgroud Color[%d, %d, %d]", red, green, blue); // 設定背景顏色引數 ros::param::set("/background_r", 0); ros::param::set("/background_g", 255); ros::param::set("/background_b", 0); ROS_INFO("Set Backgroud Color[0, 255,0]"); // 讀取背景顏色引數 ros::param::get("/background_r", red); ros::param::get("/background_g", green); ros::param::get("/background_b", blue); ROS_INFO("Re-get Backgroud Color[%d, %d, %d]", red, green, blue); // 呼叫服務,重新整理背景顏色 ros::service::waitForService("/clear"); ros::ServiceClient clear_background = node.serviceClient<std_srvs::Empty>("/clear"); std_srvs::Empty srv; clear_background.call(srv); sleep(1); return 0;}
備註:建立功能包:catkin_create_pkg roscpp rospy std_srvs
新增依賴:
add_executable(doubixiaohanhan src/doubi.cpp)target_link_libraries(doubixiaohanhan ${catkin_LIBRARIES})
編譯及測試:
$ cd ~/catkin_ws$ catkin_make$ source devel/setup.bash$ roscore$ rosrun turtlesim turtlesim_node$ rosrun parameter doubixiaohanhan
最新評論