PdsNode.h
Go to the documentation of this file.
1 /*********************************************************************
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2017-2020, Dataspeed Inc.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the following
15  * disclaimer in the documentation and/or other materials provided
16  * with the distribution.
17  * * Neither the name of Dataspeed Inc. nor the names of its
18  * contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *********************************************************************/
34 
35 #ifndef _PDS_NODE_H_
36 #define _PDS_NODE_H_
37 
38 #include <ros/ros.h>
39 
40 // ROS messages
41 #include <dataspeed_pds_msgs/Mode.h>
42 #include <dataspeed_pds_msgs/Relay.h>
43 #include <dataspeed_pds_msgs/Script.h>
44 #include <dataspeed_pds_msgs/Status.h>
45 
46 // Sync messages from multiple units
50 
51 // LCM and messages
52 #include <lcm/lcm-cpp.hpp>
53 #include <dataspeed_pds_lcm/mode_t.hpp>
54 #include <dataspeed_pds_lcm/relay_request_t.hpp>
55 #include <dataspeed_pds_lcm/script_request_t.hpp>
56 #include <dataspeed_pds_lcm/status_t.hpp>
57 
58 namespace dataspeed_pds_lcm
59 {
60 
61 typedef enum {
62  MASTER = 0,
63  SLAVE1 = 1,
64  SLAVE2 = 2,
65  SLAVE3 = 3,
66 } UnitId;
67 
68 const ros::Duration TIMEOUT(0.5);
69 
70 class PdsNode
71 {
72 public:
73  PdsNode(ros::NodeHandle &node, ros::NodeHandle &priv_nh, lcm::LCM *lcm);
74  ~PdsNode();
75 
76 private:
77  void lcmRecvStatus(const lcm::ReceiveBuffer* buf, const std::string &chan, const status_t *lcm);
78  void recvRelay(const dataspeed_pds_msgs::Relay::ConstPtr &msg);
79  void recvMode(const dataspeed_pds_msgs::Mode::ConstPtr &msg);
80  void recvScript(const dataspeed_pds_msgs::Script::ConstPtr &msg);
81 
82  // Subscribed topics
86 
87  // Published topics
89 
90  // Detect presence of multiple units
94 
95  // Time synchronization of multiple units
96  typedef dataspeed_pds_msgs::Status SyncMsg;
97  typedef dataspeed_pds_msgs::Status::ConstPtr SyncPtr;
108  void recvSyncSlave1(const SyncPtr& master, const SyncPtr& slave1);
109  void recvSyncSlave2(const SyncPtr& master, const SyncPtr& slave1, const SyncPtr& slave2);
110  void recvSyncSlave3(const SyncPtr& master, const SyncPtr& slave1, const SyncPtr& slave2, const SyncPtr& slave3);
111 
112  // LCM object
113  lcm::LCM lcm_;
114 
115 }; // class PdsNode
116 
117 } // namespace dataspeed_pds_lcm
118 
119 #endif // _PDS_NODE_H_
120 
ros::Publisher
dataspeed_pds_lcm::PdsNode::stamp_slave2_
ros::Time stamp_slave2_
Definition: PdsNode.h:124
dataspeed_pds_lcm::PdsNode::sync_ros_slave3_
message_filters::Synchronizer< SyncPolicy3 > * sync_ros_slave3_
Definition: PdsNode.h:135
message_filters::Synchronizer
dataspeed_pds_lcm::PdsNode::sync_msg_slave2_
message_filters::PassThrough< SyncMsg > sync_msg_slave2_
Definition: PdsNode.h:138
pass_through.h
dataspeed_pds_lcm::PdsNode::recvScript
void recvScript(const dataspeed_pds_msgs::Script::ConstPtr &msg)
Definition: PdsNode.cpp:193
dataspeed_pds_lcm::UnitId
UnitId
Definition: PdsNode.h:93
ros.h
dataspeed_pds_lcm::PdsNode::pub_status_
ros::Publisher pub_status_
Definition: PdsNode.h:120
dataspeed_pds_lcm::PdsNode::sub_script_
ros::Subscriber sub_script_
Definition: PdsNode.h:117
dataspeed_pds_lcm::TIMEOUT
const ros::Duration TIMEOUT(0.5)
dataspeed_pds_lcm::SLAVE1
@ SLAVE1
Definition: PdsNode.h:127
dataspeed_pds_lcm::PdsNode::sub_mode_
ros::Subscriber sub_mode_
Definition: PdsNode.h:116
dataspeed_pds_lcm::PdsNode::SyncMsg
dataspeed_pds_msgs::Status SyncMsg
Definition: PdsNode.h:128
dataspeed_pds_lcm::PdsNode::SyncPolicy3
message_filters::sync_policies::ApproximateTime< SyncMsg, SyncMsg, SyncMsg, SyncMsg > SyncPolicy3
Definition: PdsNode.h:132
dataspeed_pds_lcm::PdsNode::sync_msg_slave1_
message_filters::PassThrough< SyncMsg > sync_msg_slave1_
Definition: PdsNode.h:137
message_filters::sync_policies::ApproximateTime
dataspeed_pds_lcm::PdsNode::lcm_
lcm::LCM lcm_
Definition: PdsNode.h:145
dataspeed_pds_lcm::PdsNode::recvSyncSlave1
void recvSyncSlave1(const SyncPtr &master, const SyncPtr &slave1)
Definition: PdsNode.cpp:200
dataspeed_pds_lcm::PdsNode::sub_relay_
ros::Subscriber sub_relay_
Definition: PdsNode.h:115
dataspeed_pds_lcm::SLAVE2
@ SLAVE2
Definition: PdsNode.h:128
dataspeed_pds_lcm::PdsNode::sync_msg_slave3_
message_filters::PassThrough< SyncMsg > sync_msg_slave3_
Definition: PdsNode.h:139
dataspeed_pds_lcm::PdsNode::SyncPtr
dataspeed_pds_msgs::Status::ConstPtr SyncPtr
Definition: PdsNode.h:129
dataspeed_pds_lcm::PdsNode::SyncPolicy1
message_filters::sync_policies::ApproximateTime< SyncMsg, SyncMsg > SyncPolicy1
Definition: PdsNode.h:130
dataspeed_pds_lcm::PdsNode::sync_ros_slave2_
message_filters::Synchronizer< SyncPolicy2 > * sync_ros_slave2_
Definition: PdsNode.h:134
dataspeed_pds_lcm::PdsNode::recvSyncSlave2
void recvSyncSlave2(const SyncPtr &master, const SyncPtr &slave1, const SyncPtr &slave2)
Definition: PdsNode.cpp:209
dataspeed_pds_lcm::PdsNode::recvMode
void recvMode(const dataspeed_pds_msgs::Mode::ConstPtr &msg)
Definition: PdsNode.cpp:186
dataspeed_pds_lcm::PdsNode::~PdsNode
~PdsNode()
Definition: PdsNode.cpp:108
dataspeed_pds_lcm::PdsNode::lcmRecvStatus
void lcmRecvStatus(const lcm::ReceiveBuffer *buf, const std::string &chan, const status_t *lcm)
Definition: PdsNode.cpp:124
dataspeed_pds_lcm::PdsNode::stamp_slave1_
ros::Time stamp_slave1_
Definition: PdsNode.h:123
ros::Time
message_filters::PassThrough< SyncMsg >
dataspeed_pds_lcm
Definition: nodelet.cpp:40
dataspeed_pds_lcm::PdsNode::recvSyncSlave3
void recvSyncSlave3(const SyncPtr &master, const SyncPtr &slave1, const SyncPtr &slave2, const SyncPtr &slave3)
Definition: PdsNode.cpp:220
dataspeed_pds_lcm::SLAVE3
@ SLAVE3
Definition: PdsNode.h:129
synchronizer.h
approximate_time.h
dataspeed_pds_lcm::MASTER
@ MASTER
Definition: PdsNode.h:126
dataspeed_pds_lcm::PdsNode::recvRelay
void recvRelay(const dataspeed_pds_msgs::Relay::ConstPtr &msg)
Definition: PdsNode.cpp:178
dataspeed_pds_lcm::PdsNode::stamp_slave3_
ros::Time stamp_slave3_
Definition: PdsNode.h:125
dataspeed_pds_lcm::PdsNode::PdsNode
PdsNode(ros::NodeHandle &node, ros::NodeHandle &priv_nh, lcm::LCM *lcm)
Definition: PdsNode.cpp:72
dataspeed_pds_lcm::PdsNode::SyncPolicy2
message_filters::sync_policies::ApproximateTime< SyncMsg, SyncMsg, SyncMsg > SyncPolicy2
Definition: PdsNode.h:131
ros::Duration
dataspeed_pds_lcm::PdsNode::sync_msg_master_
message_filters::PassThrough< SyncMsg > sync_msg_master_
Definition: PdsNode.h:136
dataspeed_pds_lcm::PdsNode::sync_ros_slave1_
message_filters::Synchronizer< SyncPolicy1 > * sync_ros_slave1_
Definition: PdsNode.h:133
ros::NodeHandle
ros::Subscriber


dataspeed_pds_lcm
Author(s): Kevin Hallenbeck , Eric Myllyoja , Michael Lohrer
autogenerated on Wed Mar 2 2022 00:11:47