14 #include <can_msgs/Frame.h> 34 const std::chrono::milliseconds loop_pause = std::chrono::milliseconds(10);
35 bool keep_going =
true;
46 std::chrono::system_clock::time_point next_time = std::chrono::system_clock::now();
47 next_time += loop_pause;
58 while ((ret = can_reader.
read(&
id, msg, &size, &extended, &t)) ==
OK)
60 can_msgs::Frame can_pub_msg;
61 can_pub_msg.header.frame_id =
"0";
63 can_pub_msg.dlc = size;
64 std::copy(msg, msg + 8, can_pub_msg.data.begin());
66 can_tx_pub.
publish(can_pub_msg);
73 std::this_thread::sleep_until(next_time);
83 ret = can_reader.
close();
107 ret = can_writer.
write(msg->id, const_cast<unsigned char*>(&(msg->data[0])), msg->dlc, msg->is_extended);
114 int main(
int argc,
char** argv)
119 ros::init(argc, argv,
"kvaser_can_bridge");
124 can_tx_pub = n.
advertise<can_msgs::Frame>(
"can_tx", 500);
137 ROS_ERROR(
"Kvaser CAN Interface - CAN hardware ID is invalid.");
148 ROS_ERROR(
"Kvaser CAN Interface - Circuit ID is invalid.");
159 ROS_ERROR(
"Kvaser CAN Interface - Bit Rate is invalid.");
168 std::thread can_read_thread(
can_read);
183 can_read_thread.join();
#define ROS_WARN_THROTTLE(rate,...)
void publish(const boost::shared_ptr< M > &message) const
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
int main(int argc, char **argv)
#define ROS_ERROR_THROTTLE(rate,...)
void can_rx_callback(const can_msgs::Frame::ConstPtr &msg)
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
return_statuses open(const int &hardware_id, const int &circuit_id, const int &bitrate, const bool &echo_on=true)
std::mutex keep_going_mut
bool getParam(const std::string &key, std::string &s) const
return_statuses read(long *id, unsigned char *msg, unsigned int *size, bool *extended, unsigned long *time)
ROSCPP_DECL void waitForShutdown()
ros::Publisher can_tx_pub
return_statuses write(const long &id, unsigned char *msg, const unsigned int &size, const bool &extended)
std::string return_status_desc(const return_statuses &ret)