您当前的位置: 首页 >  c++

鱼香ROS

暂无认证

  • 0浏览

    0关注

    498博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

《动手学ROS2》5.3使用C++玩转参数

鱼香ROS 发布时间:2021-11-12 09:23:11 ,浏览量:0

本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途。 公众号

5.3使用C++玩转参数

大家好,我是小鱼,本节课带大家一起学习如何使用C++来对参数进行操作。

本节课的任务是通过参数实现动态调整王二卖二手书的价格。

1.编写代码

打开village_wang下的wang2.cpp,我们可以看到王二节点同样是继承于rclcpp:Node的,因此王二也具备了操作参数的能力。

class SignalDogNode : public rclcpp::Node
函数名称描述declare_parameter声明和初始化一个参数declare_parameters声明和初始化一堆参数get_parameter通过参数名字获取一个参数get_parameters获取具有给定前缀的所有参数的参数值set_parameters设置一组参数的值更多函数rclcpp: rclcpp:Node

完成王二卖书章节价格的参数,我们只需要做两步即可,声明参数和获取参数

1.1 声明参数

首先在Wang2的private中声明一个章节单价,默认值是1,代表一元一章。

//声明一下书的单价
unsigned int novel_price = 1;

然后在构造函数中声明参数

//声明参数
this->declare_parameter("novel_price", novel_price);
1.2 获取并设置参数

最后在收到买书请求回调函数中sell_book_callback调更新并使用该参数

//更新参数
this->get_parameter("novel_price",novel_price);
unsigned int novelsNum = int( request->money / novel_price ); //应给小说数量,一块钱一章

修改完成后的新增的SignalDogNode代码如下:

class SignalDogNode : public rclcpp::Node
{

public:
    // 构造函数
    SignalDogNode(std::string name) : Node(name)
    {
        //声明参数
        this->declare_parameter("novel_price", novel_price);
    }

private:
    //声明一下书的单价
    unsigned int novel_price = 1;
    
    // 声明一个回调函数,当收到买书请求时调用该函数,用于处理数据
    void sell_book_callback(const village_interfaces::srv::SellNovel::Request::SharedPtr request,
                            const village_interfaces::srv::SellNovel::Response::SharedPtr response)
    {
   
        //更新参数
        this->get_parameter("novel_price",novel_price);
        unsigned int novelsNum = int( request->money / novel_price ); //应给小说数量,钱/小说章节单价=章节数
};
2.测试 2.1编译程序
colcon build --packages-select village_wang
2.2 运行节点 2.2.1 运行王二节点
source install/setup.bash
ros2 run village_wang wang2_node 

image-20210906114050417

2.2.2 运行李四写书
source install/setup.bash
ros2  run village_li li4_node 

image-20210906114314258

2.2 运行李四节点
ros2 run village_li  li4_node

image-20210903163746196

2.3 使用ros2 param命令行测试 2.3.1 查看参数列表
ros2 param list

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xh0HEx4K-1636352451187)(http://d2lros2foxy.fishros.com/chapt5/5.2使用Python玩转参数/imgs/image-20210906114451599.png)]

2.3.2 查看描述
ros2 param describe /wang2 novel_price

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bOYGkqRQ-1636352451188)(http://d2lros2foxy.fishros.com/chapt5/5.2使用Python玩转参数/imgs/image-20210906114521147.png)]

2.3.3 获取参数值
ros2 param get /wang2 novel_price

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ze6qhQME-1636352451188)(http://d2lros2foxy.fishros.com/chapt5/5.2使用Python玩转参数/imgs/image-20210906114549163.png)]

2.3.4 设置参数值提高价钱

这里设置成2,将小说的价钱涨到2元一章,然后我们启动张三,看一下张三能够买到几本小说

ros2 param set /wang2 novel_price 2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C8a5gS2U-1636352451189)(http://d2lros2foxy.fishros.com/chapt5/5.2使用Python玩转参数/imgs/image-20210906115120436.png)]

运行张三节点,可以看到张三最终只收到了两章小说,

source install/setup.bash
ros2 run  village_zhang zhang3_node

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LEXBxEsV-1636352451189)(http://d2lros2foxy.fishros.com/chapt5/5.2使用Python玩转参数/imgs/image-20210906114946013.png)]

可以看到,花了5块钱的张三只买到了两章小说,CPI又上涨了~

3.总结

通过本节的学习,我们已经完成了ROS2中参数的基本使用,更多的姿势还需你在实践中探索和发现,也可以通过官方文档进行学习。

  • 参考文档:rclcpp: rclcpp::Node Class Reference (ros2.org)
作者介绍:

我是小鱼,机器人领域资深玩家,现深圳某独脚兽机器人算法工程师一枚 初中学习编程,高中开始接触机器人,大学期间打机器人相关比赛实现月入2W+(比赛奖金) 目前在输出机器人学习指南、论文注解、工作经验,欢迎大家关注小智,一起交流技术,学习机器人

关注
打赏
1666092100
查看更多评论
立即登录/注册

微信扫码登录

0.0433s