Rosserial中模板类的使用。以NodeHandle定义说起,关注Hardware

来源:互联网 发布:淘宝618大促 编辑:程序博客网 时间:2024/06/02 01:24

arduino-1.0.5$ gedit ./libraries/ros_lib/ros.h

namespace ros

{
#if defined(__AVR_ATmega8__) || defined(__AVR_ATmega168__)
  /* downsize our buffers */
  typedef NodeHandle_<ArduinoHardware, 6, 6, 150, 150> NodeHandle;

#elif defined(__AVR_ATmega328P__)

  typedef NodeHandle_<ArduinoHardware, 25, 25, 280, 280> NodeHandle;

#else

  typedef NodeHandle_<ArduinoHardware> NodeHandle;

#endif   

}


arduino-1.0.5$ gedit ./libraries/ros_lib/ros/node_handle.h

 /* Node Handle */
  template<class Hardware,
           int MAX_SUBSCRIBERS=25,
           int MAX_PUBLISHERS=25,
           int INPUT_SIZE=512,
           int OUTPUT_SIZE=512>
  class NodeHandle_ : public NodeHandleBase_
  {
    protected:
      Hardware hardware_;

      /* time used for syncing */
      unsigned long rt_time;
。。。
      
      Hardware* getHardware(){
        return &hardware_;
      }

      /* Start serial, initialize buffers */
      void initNode(){
        hardware_.init();
        mode_ = 0;
        bytes_ = 0;
        index_ = 0;
        topic_ = 0;
      };

      /* Start a named port, which may be network server IP, initialize buffers */
      void initNode(char *portName){
        hardware_.init(portName);
        mode_ = 0;
        bytes_ = 0;
        index_ = 0;
        topic_ = 0;
      };

然后在ArduinoHardware.h中再来具体定义实际的硬件方法。init  read write  time  setBaud  getBaud. 见arduino-1.0.5$ gedit ./libraries/ros_lib/ArduinoHardware.h



0 0