ROSシリーズ
76-80
序文
パラメータサーバーは主に、異なるノード間でのデータストレージとデータ共有を実現するために使用されます。
1. パラメータサーバーの構成
ROS マスター
トーカー: パラメーター設定者
リスナー: パラメーター呼び出し者
2. ステップを使用する
1. データの書き込み: 追加、変更
コードは次のとおりです (C++)。
#include <ros/ros.h>
/**
* @brief
* 需要实现参数的新增与修改
* 需求:首先设置机器人的共享参数,类型、半径(0.15m)
* 在修改半径(0.2m)
* 实现:
* ros::NodeHandle
* setParam("键",值)
* ros::param
* set("键",值)
* 修改只需要先查rosparam list / get 获取,然后在程序里set修改即可
*/
int main(int argc, char* argv[])
{
// 初始化ros节点
ros::init(argc, argv, "set_param_c");
//创建ROS节点句柄
ros::NodeHandle nh;
//参数增
// 方案一
nh.setParam("type","xiaoHuang");
nh.setParam("radius", 0.15);
// 方案二
ros::param::set("type_param","xiaoBai");
ros::param::set("radius_param",0.15);
//参数修改
// 方案一
nh.setParam("radius",0.1);
// 方案二
ros::param::set("radius_param",0.1);
return 0;
}
ターミナルでのrosparam操作
rosparam list
rosparam get
効果:
2. データの読み取り: クエリ
コードは次のとおりです(例)。
#include <ros/ros.h>
/**
* @brief
* 演示参数查询
* 实现:
* ros::NodeHandle---------------------------------------
* param(键,默认值)
存在,返回对应结果,否则返回默认值
getParam(键,存储结果的变量)
存在,返回 true,且将值赋值给参数2
若果键不存在,那么返回值为 false,且不为参数2赋值
getParamCached键,存储结果的变量)--提高变量获取效率
存在,返回 true,且将值赋值给参数2
若果键不存在,那么返回值为 false,且不为参数2赋值
getParamNames(std::vector<std::string>)
获取所有的键,并存储在参数 vector 中
hasParam(键)
是否包含某个键,存在返回 true,否则返回 false
searchParam(参数1,参数2)
搜索键,参数1是被搜索的键,参数2存储搜索结果的变量
* ros::param
*/
int main(int argc, char* argv[])
{
setlocale(LC_ALL,"");
ros::init(argc, argv, "get_param_c");
ros::NodeHandle nh;
// ros::NodeHandle-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
// 1.param
double radius = nh.param("radius",0.5);
ROS_INFO("radius=%.2f",radius);
// 2.getparam
double radius2=0.0;
bool result = nh.getParam("radius_param", radius2);
if(result){
ROS_INFO("radius2 = %.2f", radius2);
}else{
ROS_INFO("查询变量不存在");
}
// 3.getParamCached键
// 4.getParamNames
std::vector<std::string> names; //创建一个vector用于保存节点名称 名称类型string
nh.getParamNames(names);
for (auto && name : names) //&&右值引用
{
ROS_INFO("遍历的元素是:%s",name.c_str());//遍历以后转换成c形式字符串
}
// 5.hasParam
bool flag1 = nh.hasParam("radius");
bool flag2 = nh.hasParam("radiusxxx");
ROS_INFO("radius 存在与否:%d", flag1);
ROS_INFO("radiusxxx 存在与否:%d", flag2);
// 6.
std::string key; // 定义一个变量来接收键值
nh.searchParam("radius",key);
ROS_INFO("搜索结果:%s",key.c_str());
return 0;
}
1. param
param クエリが存在し、対応する結果を返します。それ以外の場合はデフォルト値を返します。この時点のデフォルト値は 0.5 です。つまり、検索パラメータ サーバーに半径がない場合は、パラメータ サーバーが存在することを知るために 0.5 を返します。この名前のデータはありません
double radius = nh.param("radius",0.5);
ROS_INFO("radius=%.2f",radius);
2. getParam (キー、結果を格納する変数) が
存在する場合、true を返し、パラメータ 2 に値を代入します。
キーが存在しない場合、戻り値は false となり、パラメータ 2 に値は代入されません。
double radius2=0.0;
bool result = nh.getParam("radius_param", radius2);
if(result){
ROS_INFO("radius2 = %.2f", radius2);
}else{
ROS_INFO("查询变量不存在");
}
3. getParamCached キー(結果を格納する変数) – 変数取得の効率を向上します
。 存在し、true を返し、パラメータ 2 に値を代入します
。 キーが存在しない場合、戻り値は false になり、値は代入されません。値をパラメータ 2 に設定します。
与2一样,只是提高了性能,但肉眼看不出来
4. getParamNames(std ::vectorstd::string)
すべてのキーを取得し、パラメータ ベクトルに格納します。
std::vector<std::string> names; //创建vector用于保存节点名称
nh.getParamNames(names);
for (auto && name : names) //&&右值引用
{
ROS_INFO("遍历的元素是:%s",name.c_str());//遍历以后转换成c形式字符串
}
5. hasParam(key) に
特定のキーが含まれているかどうか、存在する場合は true を返し、それ以外の場合は false を返します。
bool flag1 = nh.hasParam("radius");
bool flag2 = nh.hasParam("radiusxxx");
ROS_INFO("radius 存在与否:%d", flag1);
ROS_INFO("radiusxxx 存在与否:%d", flag2);
- searchParam (パラメータ 1、パラメータ 2)
検索キー、パラメータ 1 は検索するキー、パラメータ 2 は検索結果を格納する変数
std::string key; // 定义一个变量来接收键值
nh.searchParam("radius",key);
ROS_INFO("搜索结果:%s",key.c_str());
実行結果
要約する
グローバル変数と同様に、
高パフォーマンスを目的として設計されていない RPC プロトコル通信を使用して、非バイナリの静的単純データを保存することをお勧めします:
32 ビット
doubles
bool
strings
iso8601 time