ROS之配置参数

介绍

  • ros参数服务器能保存的数据类型包括:字符串 整型 浮点型 布尔型 列表 词典等
  • ROS提供了两种管理参数的API,一个是在ros::param 命名空间,一个是通过ros::NodeHandle接口,在底层,参数服务器基于XMLRPC与节点进行通信。
  • 参数根据类型不同可分为:全局参数 相对参数 私有参数等。其中以“/”开头的为全局参数,以“~”开头的参数为私有参数,其他的为相对参数。
  • 在roslaunch文件中,当param作为launch标签的子标签出现时,参数为全局参数,当param标签作为node标签的子标签出现时,参数为相对参数。示例代码如下:
<launch>
   <param name="serial" value="5"/>
   <node name="client" pkg="example_3" type="client" output="screen">
       <param name="client_x" type="int" value="1">
   </node>
</launch>

操作参数

ROS提供了获取,设置,缓存,检查,删除,搜索等多种参数的操作方法

获取参数

参数的返回值目前支持int double std::string bool XmlRpc::XmlRpcValue等。
通过NodeHandle获取参数的示例代码如下:

ros::NodeHandle nh("~");
bool unreliable=false;
nh.getParam("unreliable",unreliable);

通过ros::param 命令空间获取参数:

const std::string param_name=argv[1];
ROS_INFO_STREAM("Loooking for TF in parameter: "<<param_name);
XmlRpc::XmlRpcValue tf_data;
ros::param::get(param_name,tf_data)

在ROS Groovy之后,开发者可以获取std::vector std::map 等作为容器的列表参数

ros::NodeHandle nh;
std::map<std::string,std::string> map_s,map_s2;
std::map<std::string,std::string>::iterator iter;
std::string mapStr;
map_s["a"]="foo";
map_s["b"]="bar";
map_s["c"]="baz";
nh.setParam("map_string",map_s);
nh.getParam("map_string",map_s2);
for(iter=map_s2.begin();iter!=map_s2.end();iter++)
{
    mapStr+=iter->second;
}

设置参数

通过Nodehandle设置参数

ros::NodeHandle nh;
nh.setParam("/user_sim_time",true);  //全局参数

通过ros::param命令空间设置参数

ros::param::set("~filename",argv[1]);    //私有参数

参数缓存

为了避免每次参数获取都需要访问参数服务器,ROS还提供了参数缓存功能
通过NodeHandle进行参数缓存:

ros::NodeHandle nh;
bool disable_file_logging=false;
nh.getParamCached("/rosout/disable_file_logging",disable_file_logging);

通过ros::param进行参数缓存:

bool diable_topics_;
ros::param::getCached("/rosout_disable_topics_generation",disable_topics_);

检查参数

NodeHandle:

ros::NodeHandle private_node("~");
if(!private_node.hasParam("turtle"))
{

}

ros::param

const std::string param_name=argv[1];
ROS_INFO_STREAM("Looking for TF in parameter: "<<param_name);
XmlRpc::XmlRpcValue tf_data;
if(!ros::param::has(param_name)||!rps::get(param_name,tf_data))
{
   ROS_FATAL_STREAM("Could not read TF from parameter server: "<<param_name);
   return -1;
}

删除参数

NodeHandle:

ros::NodeHandle nh;
nh.deleteParam("my_param");

ros::param

ros::param::del("my_param");

搜索参数

NodeHandle

std::string searched_param;
std::string tf_prefix;
ros::NodeHandle local_nh("~");
local_nh.searchParam("tf_prefix",searched_param);

ros::param

std::string key;
if(ros::param::search("bar",key))
{  }

使用YAML配置参数

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS Navigation是一个开源软件包,在ROS中用于机器人导航和路径规划。它提供了一种可配置的导航堆栈,其中包含了全面的导航功能,如感知、定位、地图构建、避障、路径规划等。在使用ROS Navigation前,需要基于机器人的硬件特性和环境情况进行相关配置。 首先,需要为机器人准备一个地图。可以使用SLAM算法进行自动构建,也可以手动建立。对于地图构建,ROS提供了Gmapping和Cartographer两个算法包。在地图环境中,还需对机器人传感器进行配置,如激光雷达、IMU等,以便机器人在导航过程中进行自我定位。 其次,在ROS Navigation中,需要进行路径规划和动态避障。路径规划可以使用全局规划器和局部规划器,全局规划器负责大致规划全局路径,局部规划器负责机器人在路径上的精细调整。动态避障则需要将机器人周围的环境信息转换为代价地图,在规划路径时考虑这些代价信息,以避免机器人与障碍物发生碰撞。 最后,积极优化ROS Navigation的参数。它可以通过更改参数来提高导航性能,如调整局部规划器的速度限制、安全距离等参数,还可以设置机器人导航相关的变量,如最大速度、转弯半径等,以优化导航路径和避障效果。 综上所述,ROS Navigation的配置需要对机器人硬件进行适配,构建机器人地图,配置机器人传感器,进行路径规划和动态避障,最终进行参数调优。只有在机器人相关配置参数优化适应具体使用场景时,ROS Navigation才能够实现更高效、更安全的导航。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值