ROS笔记—NodeHandle的使用

发布话题

advertise (const std::string &topic, uint32_t queue_size, bool latch=false)

uint32_t queue_size

1. 设置为0
A value of 0 here means an infinite queue, which can be dangerous. queue_size大小会影响内存的使用。
2. 设置为1,2,3
适用于10Hz的更新情况
设置为1,意味着系统总是使用最新发布的数据,only care about the latest measurement.
3. 设置大于10
系统更需要按顺序执行,例如digital_IO信号。

latch是可选的,他是布尔值,如果设置为true,会保存发布方的最后一条消息,并且新的订阅的对象连接到发布方时,发布方会将这条消息发送个订阅者。如果设置为false最后一条消息就不保存了。

订阅话题

subscribe (const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())

客户端调节服务节点

      serviceClient (const std::string &service_name, bool persistent=false, const M_string &header_values=M_string())

发布话题/发布服务

advertiseService (const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T *obj)

创建定时器

createTimer (Rate r, Handler h, Obj o, bool oneshot=false, bool autostart=true) const

从参数服务中获得某个参数bool

getParam (const std::string &key, std::string &s) const

设置参数void

setParam (const std::string &key, const char *s) const

ros::NodeHandle node_handle_;

laser_scan_subscriber_ = node_handle_.subscribe("laser_scan", 1, &LaserScan::ScanCallback, this);

void Foo::callback(const std_msgs::Empty::ConstPtr& message)
{
}
Foo foo_object;
ros::Subscriber sub = handle.subscribe("my_topic", 1, &Foo::callback, &foo_object);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ros::NodeHandleROS中的一个重要类,用于与ROS系统进行通信和交互。它提供了一系列方法和功能,用于创建和管理ROS节点、发布和订阅ROS话题、调用和提供ROS服务等。 以下是ros::NodeHandle的一些常见用法和功能: 1. 创建NodeHandle对象: ```cpp #include <ros/ros.h> int main(int argc, char** argv) { // 初始化ROS节点 ros::init(argc, argv, "my_node"); // 创建NodeHandle对象 ros::NodeHandle nh; // 其他操作... return 0; } ``` 2. 发布和订阅ROS话题: ```cpp #include <ros/ros.h> #include <std_msgs/String.h> int main(int argc, char** argv) { ros::init(argc, argv, "my_node"); ros::NodeHandle nh; // 创建发布者 ros::Publisher pub = nh.advertise<std_msgs::String>("my_topic", 10); // 创建订阅者 ros::Subscriber sub = nh.subscribe("my_topic", 10, callback); // 其他操作... ros::spin(); return 0; } void callback(const std_msgs::String::ConstPtr& msg) { // 处理接收到的消息 } ``` 3. 调用和提供ROS服务: ```cpp #include <ros/ros.h> #include <std_srvs/Empty.h> bool my_service(std_srvs::Empty::Request& req, std_srvs::Empty::Response& res) { // 处理服务请求 return true; } int main(int argc, char** argv) { ros::init(argc, argv, "my_node"); ros::NodeHandle nh; // 创建服务服务器 ros::ServiceServer server = nh.advertiseService("my_service", my_service); // 创建服务客户端 ros::ServiceClient client = nh.serviceClient<std_srvs::Empty>("my_service"); // 其他操作... return 0;} ``` 4. 获取ROS参数: ```cpp #include <ros/ros.h> int main(int argc, char** argv) { ros::init(argc, argv, "my_node"); ros::NodeHandle nh; // 获取参数 int my_param; nh.getParam("my_param", my_param); // 设置参数 nh.setParam("my_param", 123); // 其他操作... return 0; } ``` 这些只是ros::NodeHandle的一部分功能,它还提供了许多其他方法和功能,用于与ROS系统进行更高级的交互和通信。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值