Owl Positioning System: a Wi-Fi-based, infrastructure-centred indoor positioning system. http://owlps.pu-pm.univ-fcomte.fr/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TODO.t2t 9.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. Work to do in OwlPS
  2. = Documentation =
  3. - Known Doxygen problems:
  4. - Struct member fields are not documented with INLINE_SIMPLE_STRUCTS
  5. http://bugs.debian.org/725122
  6. - Ugly NAME (new line) in libraries' man pages
  7. http://bugs.debian.org/630020
  8. - Missing spaces around const
  9. http://bugs.debian.org/630018
  10. - Documentation pages to be added:
  11. - owlps-basics.t2t: basics of indoor positioning (definitions:
  12. reference point, etc.), common command-line options, etc.
  13. - owlps-experimenting.t2t: useful information gathered from the
  14. previous experiments.
  15. http://git.lm7.fr/?p=owlps-experiments.git
  16. - Possibly owlps-autocalibration.t2t to expand the section
  17. “Autocalibration algorithms” of owlps-positionerd.t2t. Sources of
  18. information: PhD thesis, IPIN 2013 article.
  19. = Global =
  20. - Known bugs:
  21. - libconfuse bug (Listener & Aggregator): http://bugs.debian.org/639115
  22. - Check the size of the received packets to avoid buffer overflows.
  23. - Use select(2) or poll(2)
  24. Using polling for sockets would avoid setting up some threads,
  25. especially the autocalibration threads in the Listener, i.e.
  26. autocalibrate() and autocalibrate_hello(), and listen_for_aps() in the
  27. Aggregator.
  28. See also select_tut(2).
  29. - Eliminate remaining exit() calls to avoid memory leaks on exit.
  30. - Handle IPv6.
  31. = Global – maybe someday =
  32. - Use atexit() / on_exit() instead of goto to clean at exit
  33. - Support string-based positioning requests
  34. Along with the binary requests, implement a string-based request
  35. format. Each packet will contain a CSV string describing the request's
  36. information. This will make easier to develop clients in other
  37. languages than C and over other protocols than UDP.
  38. - Add a library to parse aggregation files, handling the different
  39. formats ?
  40. It could be used by Positioner and external programs.
  41. = Aggregator =
  42. - An empty positioner_host should turn off communication with the
  43. positioning server.
  44. - Option to overwrite the output file (ask for a confirmation!).
  45. - Outputs should include all the timestamps
  46. The CSV output file and the socket should include the capture
  47. timestamp and the reception timestamp on the Aggregator. This would
  48. help the Positioner's --replay option (to be adapted to use the
  49. aggregation time instead of the request time).
  50. - Allow a different aggregation timeout for each request type.
  51. - Refactor add_captured_request().
  52. - got_request(): option for the maximal difference time
  53. For implicit packets, we consider that packets from the same MAC and
  54. received within an interval of 10ms are part of the same request. We
  55. should define an option to allow user to choose the time he wants.
  56. = Listener =
  57. - Known bugs:
  58. - On OpenWrt Backfire (10.03), when the program is statically linked,
  59. using both -D and -A at the same time makes the program block on
  60. the first thread. This is a known issue of uClibc:
  61. https://dev.openwrt.org/ticket/4809
  62. - Better handling of retried packets ?
  63. Currently we ignore any packet with the Retry bit. This can lead to
  64. completely ignore the given packet (or even request) if the original
  65. packet is never received, which can happen under certain
  66. circumstances.
  67. Before changing this behaviour, it must be thought seriously: taking
  68. into account only the original packet means that all the listeners
  69. measure the signal strength from the same packet, which is what we
  70. want in most cases.
  71. This could be implemented as an option.
  72. - Refactor and review read_packet().
  73. - Filter the number of implicit packets per mobile?
  74. Currently, in passive or mixed mode, //all// the received packets are
  75. transmitted to the aggregator.
  76. - Option "read-only autocalibration" allowing to listen for
  77. autocalibration requests without sending requests.
  78. - read_packet(): use ieee80211_header_size for all implicit packets
  79. Currently the size is corrected only for data packets.
  80. = Client =
  81. - Log sent requests?
  82. - Qt version of the client
  83. We could either modify the current OwlPS Client to add an optional GUI
  84. (optional dependency on Qt) or create a new, purely graphical client.
  85. A Qt client would be portable to Android thanks to the Necessitas
  86. project: http://necessitas.kde.org/
  87. A port of Qt for Apple iOS was also developed but seems inactive:
  88. https://qt.gitorious.org/qt/qt-iphone-clone/activities
  89. = UDP to HTTP =
  90. - Delete inactive clients after a given amount of time.
  91. - Refactor prepare_answer().
  92. = Positioner =
  93. == Known bugs ==
  94. - With autocalibration on in meshing mode, all the CPs declared in
  95. listeners.csv must be in coverage or the reference points will not be
  96. generated.
  97. == Algorithms ==
  98. - Add to the result the information "area error" (whether on not the
  99. computed result is in the same room as the real position).
  100. - Handle the power and antenna gain difference between the calibration
  101. mobile (or pseudo-mobile, for autocalibration) and the mobile to
  102. position.
  103. - MinMax: add option to set the step (and use a different step for X, Y
  104. and Z?).
  105. - MinMax: reduce the research space as proposed by F. Lassabe (PhD
  106. report, Fig. 2.6 p. 38 and explanations pp. 38-39).
  107. == Autocalibration ==
  108. - Generate reference points in 3D.
  109. - To select the reference CPs, we should use the distance along with the
  110. angle and coverage.
  111. - Handle 2 CPs, not only >2 CPs with mesh autocalibration.
  112. - Option z-level-number: the Z coordinate represents a floor number. If
  113. unactivated, Z is in metres and the topology is used to determine a
  114. change of level.
  115. - Generated CalibrationRequest have always nb_packets == 1.
  116. It is tricky to set a number of packets for generated requests, since
  117. the CPs can transmit a different number of packets in their
  118. autocalibration requests. A solution could be to use the biggest
  119. number amongst the reference autocalibration requests used. A simpler
  120. solution could be to assume that all the CPs transmit the same number
  121. of packets.
  122. == User interface ==
  123. - Move autocalibration-related options from the "positioning" category
  124. to a dedicated category.
  125. - When reading the CPs, add them to the mobiles' list (or another way to
  126. be able to have a single entry for a CP).
  127. - Add option positioning.self-calibrate (or autocalibrate), short option
  128. -A, to activate automatically the options needed by the
  129. autocalibration.
  130. - Add option dump-configuration (displays the config & exits), if it is
  131. possible with boost_program_options.
  132. - Improve --verbose (and/or debug level): print the options, etc.
  133. - Case-insensitive string comparison (for algorithm names, etc.).
  134. - Use a prefix for configuration files (search for config files set with
  135. relative path in owlps-positioner.cfg in the same directory).
  136. == Miscellaneous new features ==
  137. - Add a statistics framework (StatisticsMedium), that would provide
  138. information at the end of the execution.
  139. The information that could be provided include:
  140. - number of requests treated, by type
  141. - for each algorithm:
  142. - mean error
  143. - number of results for which the room is wrong
  144. - number of results for which the floor is wrong
  145. - error information by room
  146. == Refactoring ==
  147. - Move Stock::generate_reference_point() & friends to a dedicated class.
  148. - Write a class for Request::type?
  149. CalibrationRequest::direction uses a dedicated class Direction, why
  150. not Request::type? That would simplify writing of the type to streams
  151. (no need to cast each time any more).
  152. - Wi-Fi devices' list
  153. - Merge Stock::mobiles & Stock::aps?
  154. - Factorise AccessPointsReaderCSV & MobilesReaderCSV?
  155. - Members renaming
  156. - InputMedium:
  157. - current_line_nb & get_current_line_nb()
  158. - get_next_request() −> read_next_request()
  159. - Input: get_next_request() −> read_next_request()
  160. - Area: p_min et p_max −> coord_min et coord_max
  161. == Optimisation & code improvement ==
  162. - Eliminate const_cast where possible.
  163. - Use the 'ws' stream manipulator to eat whitespaces.
  164. - Change ss_t type to int_fast8_t?
  165. - Multithreading (OpenMP?):
  166. - algorithms (parallelize computation of the different algorithms for
  167. the same request);
  168. - and/or requests (parallelize computation of several requests).
  169. - ReferencePoint: the request list should be an unordered_set instead of
  170. a vector, to guarantee the unicity of the elements.
  171. - Pre-allocate vectors' memory with reserve().
  172. "C++ en action", p. 217.
  173. - Copy of containers to streams (in some operator<<() for instance).
  174. "C++ en action", p. 275.
  175. - Review all the classes to respect principles exposed in "Coder
  176. proprement", chapter 6, p. 103: do not implement accessors for each
  177. class attribute, etc.
  178. == Unit tests ==
  179. - Classes with incomplete tests:
  180. - InterlinkNetworks: compute()
  181. - Measurement: average, variance, standard deviation, operations
  182. - MinMax: trilaterate_2d()
  183. - OutputCSV: write(ResultList)
  184. - Point3D: distance & angle operations
  185. - PosUtil: most functions
  186. - ReferencePoint: operations
  187. - Stock: a lot of functions
  188. - Classes without tests or with mock test files (possibly untestable or
  189. not worth testing, to be checked):
  190. - Autocalibration
  191. - AutocalibrationLine
  192. - AutocalibrationMesh
  193. - CapturePointsReaderCSV
  194. - CartographyAlgorithm
  195. - CSVStringReader
  196. - FBCM
  197. - FRBHMBasic
  198. - Input
  199. - InputDataReader
  200. - InputLogMedium
  201. - InputMedium
  202. - InputUDPSocket
  203. - MobilesReaderCSV
  204. - NSS
  205. - Output
  206. - OutputMedium
  207. - OutputNetworkSocket
  208. - OutputTCPSocketEvAAL
  209. - OutputUDPSocket
  210. - Positioning
  211. - PositioningAlgorithm
  212. - ResultList
  213. - TrilaterationAlgorithm
  214. - TrilaterationMethod
  215. - Timestamp: there is a probability of 10^-6 that the value in
  216. nanoseconds and the rounded value in milliseconds are identical, in
  217. which case one of the tests can fail. This could be fixed by retrying
  218. the same test a couple of times.