关于在ROS2中订阅话题/robot_description后,立马返回相应信息的实现问题

目前在学习ROS2的过程中,发现了一个感觉有点意思的问题。

操作步骤如下
1.打开了gazebo的例程

ros2 launch gazebo_ros2_control_demos diff_drive.launch.py 

2.查看话题

yong@yong-ubuntu:~$ ros2 topic list
/clock
/diff_drive_base_controller/cmd_vel_unstamped
/diff_drive_base_controller/odom
/diff_drive_base_controller/transition_event
/dynamic_joint_states
/joint_state_broadcaster/transition_event
/joint_states
/parameter_events
/performance_metrics
/robot_description
/rosout
/tf
/tf_static

3.订阅话题

yong@yong-ubuntu:~$ ros2 topic echo /robot_description
data: <?xml version="1.0" ?><robot name="diff_drive"><!-- Base Link --><link name="chassis"><collision><origin rpy="0 0 0" xyz="-0.151...
---

可以看到,在订阅话题后,立马收到了话题的响应,获取到了信息。
一开始我以为是话题发布者通过 get_subscription_count() 不断获取实时的订阅者数量,当发现订阅者数量发生变化时,发布一次话题(广播)。
然而,当我保持此次订阅,并重新创建另外一个订阅时,另外新创建的订阅会收到信息,这是正常的。但是原来打开的那个订阅,并没有收到新的信息。
在这里插入图片描述
所以,这个 /robot_description 话题是如何做到:
a.在订阅者订阅时立马发送一次信息给订阅者。
b.而且还是独立发送的。

答案是QoS,
参考这里
在这里插入图片描述
所以,假如我们也想要达到同样的效果,可以这样:

    rclcpp::QoS qos(10);
    qos = qos.transient_local(); // 就是这句起效
    command_subscribe = this->create_subscription<std_msgs::msg::String>("/robot_description", qos,
                         std::bind(&TopicSubscribe01::command_callback, this, std::placeholders::_1));
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值