十九、ROS 参数名称设置

1. 简介

在ROS中,参数名称可能出现重名,他不像话题重名那样,可以采用重映射加以解决。但是,可以通过添加不同的前缀,来区分不同的参数

  • 分类:
    • 全局:与命名空间平级
    • 相对:与节点名平级
    • 私有:节点名称的子级
  • 实现方法:
    • rosrun命令
    • launch文件
    • 编码实现

2. 实现方法

2.1 rosrun设置参数:参数名称使用的是私有模式

  • 格式:rosrun 包名 节点名 _参数名:=参数值
  • 代码实现:
    rosrun turtlesim turtlesim_node _A:=100
    
  • 运行结果:
    rosparam list
    /turtlesim/A
    

2.2 launch文件设置参数

  • 类型:
    • 在node标签外:全局参数
    • 在node标签内:私有参数
  • 代码实现:
    <!-- 设置参数 -->
    <launch>
        <!-- 格式1:全局 -->
        <param name="radius" value="10" />
        <!-- 格式2:局部 -->
        <node pkg="turtlesim" type="turtlesim_node" name="t1" ns="xxx">
            <param name="radius" value="20" />
        </node>
    </launch>
    
  • 运行结果:
    bash1:启动launch文件
    roslaunch launch_test_01 param_rename.launch
    
    bash2:查看参数列表
    rosparam list 
    /radius
    /xxx/t1/radius
    

2.3 编码设置参数

2.3.1 C++实现

  • 代码实现:
    #include"ros/ros.h"
    
    int main(int argc,char *argv[]){ 
        ros::init(argc,argv,"topic_name");
        ros::NodeHandle nh;
        /*
            使用ros::param来设置参数
        */
        // 1. 全局
        ros::param::set("/radiusA",100);
        // 2. 相对
        ros::param::set("radiusB",100);
        // 3. 私有
        ros::param::set("~radiusC",100);
        /*
            使用NodeHandle设置参数
        */
        // 1. 全局
        nh.setParam("/A",100);
        // 2. 相对
        nh.setParam("B",100);
        // 3. 私有
        ros::NodeHandle nh1("~");
        nh1.setParam("C",100);
        return 0;
    }
    
  • 运行结果:
    bash1:运行节点,并加入命名空间
    rosrun rename_01 topic_name __ns:=xxx
    
    bash2:查看参数列表
    rosparam list
    /A
    /radiusA
    /xxx/B
    /xxx/radiusB
    /xxx/topic_name/C
    /xxx/topic_name/radiusC
    

2.3.2 Python实现

  • 代码实现:
    #! /usr/bin/env python
    
    from ast import Str
    import rospy
    from std_msgs.msg import String
    
    if __name__ == "__main__":
        rospy.init_node("topic_name_p")
        # 1. 全局
        rospy.set_param("/p1",100)
        # 2. 相对
        rospy.set_param("py2",100)
        # 3. 私有
        rospy.set_param("~py3",100)
    
  • 运行结果:
    bash1:启动节点,并加入命名空间
    rosrun rename_01 topic_name_p.py __ns:=xxx
    
    bash2:查看参数列表
    rosparam list
    /p1
    /xxx/py2
    /xxx/topic_name_p/py3
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值