comCheck.cpp
Go to the documentation of this file.
1 #include <iostream>
2 #include <chrono>
3 
4 #include <boost/program_options.hpp>
5 #include <crazyflie_cpp/Crazyflie.h>
6 #include <crazyflie_cpp/crtp.h>
7 
9 {
11  uint64_t id,
12  uint64_t time_since_epoch)
13  : header(15, 0) // Link, echo
14  , id(id)
15  , time_since_epoch(time_since_epoch)
16  {
17  }
18  const crtp header;
19  const uint64_t id;
20  uint64_t time_since_epoch;
21 } __attribute__((packed));
22 
23 uint64_t getTimestamp()
24 {
25  auto now = std::chrono::high_resolution_clock::now();
26  auto now_us = std::chrono::time_point_cast<std::chrono::milliseconds>(now);
27 
28  auto value = now_us.time_since_epoch();
29  uint64_t time_since_epoch = value.count();
30  return time_since_epoch;
31 }
32 
33 // stats
34 uint32_t numPacketsReceived = 0;
35 uint64_t sumRoundtripTime = 0;
36 
37 uint32_t linkQualitySent = 0;
38 uint32_t linkQualityAcked = 0;
39 
41 {
42  uint64_t time_since_epoch = getTimestamp();
43 
44  const crtpMyPacket* packet = reinterpret_cast<const crtpMyPacket*>(ack.data);
45  uint64_t roundtripTime = time_since_epoch - packet->time_since_epoch;
46  // std::cout << "packet!" << (int)ack.size << " " << packet->id << " " << roundtripTime << " ms" << std::endl;
47 
48  sumRoundtripTime += roundtripTime;
50 }
51 
53 {
54  std::cout << "RSSI: " << (int)cb->rssi << std::endl;
55 }
56 
57 void onLinkQuality(float quality)
58 {
59  linkQualitySent += 100;
60  linkQualityAcked += quality * 100;
61  // std::cout << "Link quality: " << quality << std::endl;
62 }
63 
64 int main(int argc, char **argv)
65 {
66 
67  std::string uri;
68  std::string defaultUri("radio://0/80/2M/E7E7E7E7E7");
69  uint32_t numPackets;
70 
71  namespace po = boost::program_options;
72 
73  po::options_description desc("Allowed options");
74  desc.add_options()
75  ("help", "produce help message")
76  ("uri", po::value<std::string>(&uri)->default_value(defaultUri), "unique ressource identifier")
77  ("numPackets", po::value<uint32_t>(&numPackets)->default_value(1000), "unique ressource identifier")
78  ;
79 
80  try
81  {
82  po::variables_map vm;
83  po::store(po::parse_command_line(argc, argv, desc), vm);
84  po::notify(vm);
85 
86  if (vm.count("help")) {
87  std::cout << desc << "\n";
88  return 0;
89  }
90  }
91  catch(po::error& e)
92  {
93  std::cerr << e.what() << std::endl << std::endl;
94  std::cerr << desc << std::endl;
95  return 1;
96  }
97 
98  try
99  {
100  Crazyflie cf(uri);
101 
104 
105  // send pings to clear queue
106  for (size_t i = 0; i < 1000; ++i) {
107  cf.sendPing();
108  }
109 
111 
112  uint64_t start = getTimestamp();
113  for (uint64_t id = 0; id < numPackets; ++id) {
114  uint64_t time_since_epoch = getTimestamp();
115 
116  crtpMyPacket p(id, time_since_epoch);
117  // std::cout << "send " << id << " " << time_since_epoch << std::endl;
118 
119  crtpPacket_t packet;
120  packet.size = sizeof(crtpMyPacket)-1;
121  packet.header = *reinterpret_cast<const uint8_t*>(&p.header);
122  memcpy(packet.data, &p.id, sizeof(crtpMyPacket)-1);
123 
124  cf.queueOutgoingPacket(packet);
125  cf.transmitPackets();
126  }
127  uint64_t timeToSent = getTimestamp() - start;
128 
129  // send pings to clear queue
130  for (size_t i = 0; i < 1000; ++i) {
131  cf.sendPing();
132  }
133 
134  std::cout << "numPacketsReceived: " << numPacketsReceived / (double)numPackets * 100.0f << " %" << std::endl;
135  std::cout << "Avg. roundtrip time: " << sumRoundtripTime / (double) numPacketsReceived << " ms" << std::endl;
136  std::cout << numPackets / (timeToSent / 1000.0f) << " packets/s sent" << std::endl;
137  std::cout << "link quality: " << linkQualityAcked / (float)linkQualitySent << std::endl;
138 
139 
140  return 0;
141  }
142  catch(std::exception& e)
143  {
144  std::cerr << e.what() << std::endl;
145  return 1;
146  }
147 }
void setEmptyAckCallback(std::function< void(const crtpPlatformRSSIAck *)> cb)
void onGenericPacket(const ITransport::Ack &ack)
Definition: comCheck.cpp:40
uint64_t getTimestamp()
Definition: comCheck.cpp:23
uint8_t error
void onLinkQuality(float quality)
Definition: comCheck.cpp:57
float p[4][8]
Definition: Crazyflie.h:26
const T value
Definition: crtp.h:26
void sendPing()
Definition: Crazyflie.cpp:264
void setGenericPacketCallback(std::function< void(const ITransport::Ack &)> cb)
uint8_t data[CRTP_MAX_DATA_SIZE]
Definition: crtp.h:48
Definition: crtp.h:17
uint8_t data[32]
Definition: ITransport.h:19
void queueOutgoingPacket(const crtpPacket_t &packet)
int main(int argc, char **argv)
Definition: comCheck.cpp:64
uint32_t linkQualitySent
Definition: comCheck.cpp:37
uint32_t linkQualityAcked
Definition: comCheck.cpp:38
uint64_t sumRoundtripTime
Definition: comCheck.cpp:35
const crtp header
Definition: comCheck.cpp:18
void transmitPackets()
Definition: Crazyflie.cpp:273
uint64_t time_since_epoch
Definition: comCheck.cpp:20
const uint64_t id
Definition: comCheck.cpp:19
crtpMyPacket(uint64_t id, uint64_t time_since_epoch)
Definition: comCheck.cpp:10
uint32_t numPacketsReceived
Definition: comCheck.cpp:34
uint8_t size
Definition: crtp.h:44
void onEmptyAck(const crtpPlatformRSSIAck *cb)
Definition: comCheck.cpp:52
struct crtpMyPacket __attribute__((packed))
uint8_t rssi
Definition: crtp.h:1342
uint8_t ack
Definition: ITransport.h:1348
uint8_t header
Definition: crtp.h:47
void setLinkQualityCallback(std::function< void(float)> cb)


crazyflie_tools
Author(s): Wolfgang Hoenig
autogenerated on Mon Sep 28 2020 03:40:14