UnderTurrets
		
2024-08-27 13:12:56浏览 528
	 
	
	
	
	
1.节点初始化
ROSCPP_DECL void init(int &argc, char **argv, const std::string& name, uint32_t options = 0);
ROSCPP_DECL void init(const M_string& remappings, const std::string& name, uint32_t options = 0);
ROSCPP_DECL void init(const VP_string& remapping_args, const std::string& name, uint32_t options = 0);
| 参数 | 含义 | 
|---|
| argc | main函数的第一个参数 | 
| argv | main函数的第二个参数 | 
| name | 节点的名字,必须是唯一的 | 
2.话题通信
2.1 创建发布者对象
template <class M>
Publisher NodeHandle::advertise(const std::string& topic, uint32_t queue_size, bool latch = false);
  
template <class M>
Publisher NodeHandle::advertise(const std::string& topic, uint32_t queue_size,
                        const SubscriberStatusCallback& connect_cb,
                        const SubscriberStatusCallback& disconnect_cb = SubscriberStatusCallback(),
                        const VoidConstPtr& tracked_object = VoidConstPtr(),
                        bool latch = false);
| 参数 | 含义 | 
|---|
| topic | 话题的名字,必须是唯一的 | 
| queue_size | 等待发送给订阅者的最大消息数量 | 
| latch | 如果为 true,该话题发布的最后一条消息将被保存,并且后期当有订阅者连接时会将该消息发送给订阅者 | 
2.2 消息发布
template <typename M>
      void Publisher::publish(const M& message) const;
2.3 创建订阅者对象
template<class M>
Subscriber NodeHandle::subscribe(const std::string& topic, uint32_t queue_size, void(*fp)(const boost::shared_ptr<M const>&), const TransportHints& transport_hints = TransportHints());
template<class M>
Subscriber NodeHandle::subscribe(const std::string& topic, uint32_t queue_size, const boost::function<void (const boost::shared_ptr<M const>&)>& callback,
                         const VoidConstPtr& tracked_object = VoidConstPtr(), const TransportHints& transport_hints = TransportHints());
| 参数 | 含义 | 
|---|
| topic | 话题的名字,必须是唯一的 | 
| queue_size | main函数的第二个参数 | 
| fp | 回调函数的函数指针 | 
| return | 调用成功时,返回一个订阅者对象,失败时,返回空对象 | 
3.服务通信
3.1 创建服务对象
  template<class T, class MReq, class MRes>
  ServiceServer NodeHandle::advertiseService(const std::string& service, bool(T::*srv_func)(MReq &, MRes &), T *obj);
  
  template<class T, class MReq, class MRes>
  ServiceServer NodeHandle::advertiseService(const std::string& service, bool(T::*srv_func)(ServiceEvent<MReq, MRes>&), T *obj);
  template<class T, class MReq, class MRes>
  ServiceServer NodeHandle::advertiseService(const std::string& service, bool(T::*srv_func)(MReq &, MRes &), const boost::shared_ptr<T>& obj);
  template<class T, class MReq, class MRes>
  ServiceServer NodeHandle::advertiseService(const std::string& service, bool(T::*srv_func)(ServiceEvent<MReq, MRes>&), const boost::shared_ptr<T>& obj);
  template<class MReq, class MRes>
  ServiceServer NodeHandle::advertiseService(const std::string& service, bool(*srv_func)(MReq&, MRes&));
  template<class MReq, class MRes>
  ServiceServer NodeHandle::advertiseService(const std::string& service, bool(*srv_func)(ServiceEvent<MReq, MRes>&));
  
  template<class MReq, class MRes>
  ServiceServer NodeHandle::advertiseService(const std::string& service, const boost::function<bool(MReq&, MRes&)>& callback, 
                                 const VoidConstPtr& tracked_object = VoidConstPtr());
  template<class S>
  ServiceServer NodeHandle::advertiseService(const std::string& service, const boost::function<bool(S&)>& callback, 
                                 const VoidConstPtr& tracked_object = VoidConstPtr());
| 参数 | 含义 | 
|---|
| service | 服务名称,必须是唯一的 | 
| srv_func | 接收到请求时,需要处理请求的回调函数 | 
| return | 请求成功时返回服务对象,否则返回空对象 | 
3.2 创建客户对象
  template<class MReq, class MRes>
  ServiceClient NodeHandle::serviceClient(const std::string& service_name, bool persistent = false, 
                              const M_string& header_values = M_string());
  template<class Service>
  ServiceClient NodeHandle::serviceClient(const std::string& service_name, bool persistent = false, 
                              const M_string& header_values = M_string());
                            
| 参数 | 含义 | 
|---|
| service_name | 服务名称,必须是唯一的 | 
3.3 客户发送请求
  template<class Service>
  bool ServiceClient::call(Service& service);
| 参数 | 含义 | 
|---|
| service | .srv文件定义的服务类型 | 
3.4 客户对象等待服务
ROSCPP_DECL bool service::waitForService(const std::string& service_name, int32_t timeout);
ROSCPP_DECL bool service::waitForService(const std::string& service_name, ros::Duration timeout = ros::Duration(-1));
| 参数 | 含义 | 
|---|
| service_name | 被等待的服务名称,必须是唯一的 | 
| timeout | 等待最大时常,默认为 -1,可以永久等待直至节点关闭 | 
| return | 成功返回 true,否则返回 false | 
4. 回旋函数
4.1 spin
4.2 spinOnce
ROSCPP_DECL void spinOnce();
5.时间
5.1 时刻
5.1.1 获取当前时刻
ros::init(argc,argv,"hello_time");
ros::NodeHandle nh;
ros::Time right_now = ros::Time::now();
ROS_INFO("当前时刻:%.2f",right_now.toSec());
ROS_INFO("当前时刻:%d",right_now.sec);
5.1.2 设置时刻
ros::init(argc,argv,"hello_time");
ros::NodeHandle nh;
ros::Time someTime(100,100000000);
ROS_INFO("时刻:%.2f",someTime.toSec()); 
ros::Time someTime2(100.3);
ROS_INFO("时刻:%.2f",someTime2.toSec()); 
5.2 时间间隔
5.2.1 设置时间间隔
ros::init(argc,argv,"hello_time");
ros::NodeHandle nh;
ros::Duration du(10);
ROS_INFO("持续时间:%.2f",du.toSec());
5.2.2 进行休眠
ros::init(argc,argv,"hello_time");
ros::NodeHandle nh;
ros::Duration du(10);
du.sleep();
5.3 设置运行频率
Rate::Rate(double frequency);
6.参数设置
6.1 修改或新增参数
  void NodeHandle::setParam(const std::string& key, const XmlRpc::XmlRpcValue& v) const;
  void NodeHandle::setParam(const std::string& key, const std::string& s) const;
  void NodeHandle::setParam(const std::string& key, const char* s) const;
  void NodeHandle::setParam(const std::string& key, double d) const;
  void NodeHandle::setParam(const std::string& key, int i) const;
  void NodeHandle::setParam(const std::string& key, bool b) const;
  void NodeHandle::setParam(const std::string& key, const std::vector<std::string>& vec) const;
  void NodeHandle::setParam(const std::string& key, const std::vector<double>& vec) const;
  void NodeHandle::setParam(const std::string& key, const std::vector<float>& vec) const;
  void NodeHandle::setParam(const std::string& key, const std::vector<int>& vec) const;
  void NodeHandle::setParam(const std::string& key, const std::vector<bool>& vec) const;
  void NodeHandle::setParam(const std::string& key, const std::map<std::string, std::string>& map) const;
  void NodeHandle::setParam(const std::string& key, const std::map<std::string, double>& map) const;
  void NodeHandle::setParam(const std::string& key, const std::map<std::string, float>& map) const;
  void NodeHandle::setParam(const std::string& key, const std::map<std::string, int>& map) const;
  void NodeHandle::setParam(const std::string& key, const std::map<std::string, bool>& map) const;
- ROS提供了16种可以设置的参数类型,如上。
- 使用 ros::param::set有完全相同的效果
6.2 获取参数
6.3 删除参数