嚴格來說 Parameter Server 其實不太可以說是一種通訊方式,而是靜態儲存變數的一種方法。ROS Cpp 提供了兩個方法來讓我們調用。
兩個的使用方法是一樣的,就單純看個人喜好來做使用了~
我們在拿 Param 參數有三種方法
//Get Param 的三種方法
//① ros::param::get() 拿到參數 “param1”的 值 ,存到 parameter1 中
bool ifget1 = ros::param::get("param1", parameter1);
//② ros::NodeHandle::getParam()拿到參數,跟上面一樣的功能
bool ifget2 = nh.getParam("param2",parameter2);
//③ ros::NodeHandle::param() 跟上面一樣的功能
//但如果拿不到指定的參數,它可以给參數指定一個初始值 (像是 5201314)
nh.param("param3", parameter3, 5201314);
Set Param 有兩種方法
//Set Param 的兩種方法
// ros::param::set() 設置參數
parameter4 = 4;
ros::param::set("param4", parameter4);
// ros::NodeHandle::setParam() 設置參數
parameter5 = 5;
nh.setParam("param5",parameter5);
檢查參數的兩種方法
//Check Param 的兩種方法
//ros::NodeHandle::hasParam()
bool ifparam5 = nh.hasParam("param5");
//ros::param::has()
bool ifparam6 = ros::param::has("param6");
刪除參數的兩種方法
//Delete Param 的兩種方法
//ros::NodeHandle::deleteParam()
bool ifdeleted5 = nh.deleteParam("param5");
//ros::param::del()
bool ifdeleted6 = ros::param::del("param6");
以上便是所有 cpp 的基礎寫法,接下來來看看 launch
這邊是 Parameter Server 的 launch 寫法,他依樣有兩種方式, param、 rosparam
這邊要注意的是,使用 rosparam 寫法會將參數轉成 YAML 格式來載入,注意 param 前面必須為空格,不能用Tab,否則YAML 會解析錯誤
<launch>
<!--param 參數設定-->
<param name="param1" value="1" />
<param name="param2" value="2" />
<!--param name="table_description" command="$(find xacro)/xacro.py $(find gazebo_worlds)/objects/table.urdf.xacro" /-->
<!--rosparam 參數設定-->
<rosparam>
param3: 3
param4: 4
param5: 5
</rosparam>
<!--以上寫法將參數轉成 YAML 格式來載入,注意 param 前面必須為空格,不能用Tab,否則YAML 會解析錯誤-->
<!--rosparam file="$(find robot_sim_demo)/config/xbot-u_control.yaml" command="load" /-->
<node pkg="param_demo" type="param_demo" name="param_demo" output="screen" />
</launch>
以上便是 Parameter Server 的載入方法,明天將會帶來 ROS Cpp 的最後一個章節 Time and Log