From 46b7ddff4e154dc79115642951f053a6ad53c4fb Mon Sep 17 00:00:00 2001 From: yangfuyuan Date: Tue, 17 Jul 2018 23:56:04 +0800 Subject: [PATCH] 1. add imu sync 2. update sdk version to v1.3.6 --- CMakeLists.txt | 7 + README.md | 40 +- config/config.ini | 7 + launch/ydlidar.launch | 12 - package.xml | 4 + sdk/CMakeLists.txt | 7 +- sdk/README.md | 135 +- sdk/doc/html/_c_yd_lidar_8h_source.html | 16 +- sdk/doc/html/_matrix_8hpp.html | 171 ++ sdk/doc/html/_matrix_8hpp__dep__incl.map | 9 + sdk/doc/html/_matrix_8hpp__dep__incl.md5 | 1 + sdk/doc/html/_matrix_8hpp__dep__incl.png | Bin 0 -> 27475 bytes sdk/doc/html/_matrix_8hpp__incl.map | 9 + sdk/doc/html/_matrix_8hpp__incl.md5 | 1 + sdk/doc/html/_matrix_8hpp__incl.png | Bin 0 -> 34208 bytes sdk/doc/html/_matrix_8hpp_source.html | 108 ++ sdk/doc/html/_square_matrix_8hpp.html | 275 +++ .../html/_square_matrix_8hpp__dep__incl.map | 9 + .../html/_square_matrix_8hpp__dep__incl.md5 | 1 + .../html/_square_matrix_8hpp__dep__incl.png | Bin 0 -> 27643 bytes sdk/doc/html/_square_matrix_8hpp__incl.map | 9 + sdk/doc/html/_square_matrix_8hpp__incl.md5 | 1 + sdk/doc/html/_square_matrix_8hpp__incl.png | Bin 0 -> 28869 bytes sdk/doc/html/_square_matrix_8hpp_source.html | 108 ++ sdk/doc/html/_vector2_8hpp.html | 152 ++ sdk/doc/html/_vector2_8hpp__dep__incl.map | 9 + sdk/doc/html/_vector2_8hpp__dep__incl.md5 | 1 + sdk/doc/html/_vector2_8hpp__dep__incl.png | Bin 0 -> 27313 bytes sdk/doc/html/_vector2_8hpp__incl.map | 9 + sdk/doc/html/_vector2_8hpp__incl.md5 | 1 + sdk/doc/html/_vector2_8hpp__incl.png | Bin 0 -> 30136 bytes sdk/doc/html/_vector2_8hpp_source.html | 105 ++ sdk/doc/html/_vector3_8hpp.html | 156 ++ sdk/doc/html/_vector3_8hpp__dep__incl.map | 9 + sdk/doc/html/_vector3_8hpp__dep__incl.md5 | 1 + sdk/doc/html/_vector3_8hpp__dep__incl.png | Bin 0 -> 27288 bytes sdk/doc/html/_vector3_8hpp__incl.map | 9 + sdk/doc/html/_vector3_8hpp__incl.md5 | 1 + sdk/doc/html/_vector3_8hpp__incl.png | Bin 0 -> 30119 bytes sdk/doc/html/_vector3_8hpp_source.html | 109 ++ sdk/doc/html/_vector_8hpp.html | 145 ++ sdk/doc/html/_vector_8hpp__dep__incl.map | 9 + sdk/doc/html/_vector_8hpp__dep__incl.md5 | 1 + sdk/doc/html/_vector_8hpp__dep__incl.png | Bin 0 -> 30181 bytes sdk/doc/html/_vector_8hpp__incl.map | 9 + sdk/doc/html/_vector_8hpp__incl.md5 | 1 + sdk/doc/html/_vector_8hpp__incl.png | Bin 0 -> 28823 bytes sdk/doc/html/_vector_8hpp_source.html | 102 + sdk/doc/html/annotated.html | 94 +- sdk/doc/html/class_c_yd_lidar-members.html | 4 +- sdk/doc/html/class_c_yd_lidar.html | 8 +- sdk/doc/html/class_event-members.html | 4 +- sdk/doc/html/class_event.html | 6 +- sdk/doc/html/class_locker-members.html | 4 +- sdk/doc/html/class_locker.html | 6 +- sdk/doc/html/class_scoped_locker-members.html | 4 +- sdk/doc/html/class_scoped_locker.html | 6 +- sdk/doc/html/class_thread-members.html | 4 +- sdk/doc/html/class_thread.html | 6 +- sdk/doc/html/classes.html | 60 +- ...ine__feature_1_1_line_feature-members.html | 117 ++ .../classline__feature_1_1_line_feature.html | 139 ++ sdk/doc/html/classmatrix_1_1_dcm.html | 107 ++ .../html/classmatrix_1_1_matrix-members.html | 153 ++ sdk/doc/html/classmatrix_1_1_matrix.html | 386 ++++ .../classmatrix_1_1_matrix__coll__graph.map | 2 + .../classmatrix_1_1_matrix__coll__graph.md5 | 1 + .../classmatrix_1_1_matrix__coll__graph.png | Bin 0 -> 3825 bytes ...classmatrix_1_1_matrix__inherit__graph.map | 3 + ...classmatrix_1_1_matrix__inherit__graph.md5 | 1 + ...classmatrix_1_1_matrix__inherit__graph.png | Bin 0 -> 4816 bytes ...classmatrix_1_1_square_matrix-members.html | 160 ++ .../html/classmatrix_1_1_square_matrix.html | 284 +++ ...smatrix_1_1_square_matrix__coll__graph.map | 3 + ...smatrix_1_1_square_matrix__coll__graph.md5 | 1 + ...smatrix_1_1_square_matrix__coll__graph.png | Bin 0 -> 6458 bytes ...trix_1_1_square_matrix__inherit__graph.map | 3 + ...trix_1_1_square_matrix__inherit__graph.md5 | 1 + ...trix_1_1_square_matrix__inherit__graph.png | Bin 0 -> 4924 bytes .../html/classmatrix_1_1_vector-members.html | 168 ++ sdk/doc/html/classmatrix_1_1_vector.html | 313 ++++ .../html/classmatrix_1_1_vector2-members.html | 175 ++ sdk/doc/html/classmatrix_1_1_vector2.html | 334 ++++ .../classmatrix_1_1_vector2__coll__graph.map | 4 + .../classmatrix_1_1_vector2__coll__graph.md5 | 1 + .../classmatrix_1_1_vector2__coll__graph.png | Bin 0 -> 9936 bytes ...lassmatrix_1_1_vector2__inherit__graph.map | 4 + ...lassmatrix_1_1_vector2__inherit__graph.md5 | 1 + ...lassmatrix_1_1_vector2__inherit__graph.png | Bin 0 -> 8209 bytes .../html/classmatrix_1_1_vector3-members.html | 179 ++ sdk/doc/html/classmatrix_1_1_vector3.html | 410 ++++ .../classmatrix_1_1_vector3__coll__graph.map | 4 + .../classmatrix_1_1_vector3__coll__graph.md5 | 1 + .../classmatrix_1_1_vector3__coll__graph.png | Bin 0 -> 9905 bytes ...lassmatrix_1_1_vector3__inherit__graph.map | 4 + ...lassmatrix_1_1_vector3__inherit__graph.md5 | 1 + ...lassmatrix_1_1_vector3__inherit__graph.png | Bin 0 -> 8181 bytes .../classmatrix_1_1_vector__coll__graph.map | 3 + .../classmatrix_1_1_vector__coll__graph.md5 | 1 + .../classmatrix_1_1_vector__coll__graph.png | Bin 0 -> 7205 bytes ...classmatrix_1_1_vector__inherit__graph.map | 3 + ...classmatrix_1_1_vector__inherit__graph.md5 | 1 + ...classmatrix_1_1_vector__inherit__graph.png | Bin 0 -> 5369 bytes ...sserial_1_1_millisecond_timer-members.html | 4 +- .../classserial_1_1_millisecond_timer.html | 8 +- .../html/classserial_1_1_serial-members.html | 4 +- sdk/doc/html/classserial_1_1_serial.html | 8 +- ...1_serial_1_1_scoped_read_lock-members.html | 4 +- ...erial_1_1_serial_1_1_scoped_read_lock.html | 6 +- ..._serial_1_1_scoped_write_lock-members.html | 4 +- ...rial_1_1_serial_1_1_scoped_write_lock.html | 6 +- ...al_1_1_serial_1_1_serial_impl-members.html | 4 +- ..._1_1serial_1_1_serial_1_1_serial_impl.html | 8 +- ...ssydlidar_1_1_y_dlidar_driver-members.html | 77 +- .../classydlidar_1_1_y_dlidar_driver.html | 190 +- ...lidar_1_1_y_dlidar_driver__coll__graph.map | 9 +- ...lidar_1_1_y_dlidar_driver__coll__graph.md5 | 2 +- ...lidar_1_1_y_dlidar_driver__coll__graph.png | Bin 11794 -> 14892 bytes sdk/doc/html/common_8h_source.html | 7 +- .../dir_0834a1453ead243784276400df23f54f.html | 5 +- .../dir_109f68d84cef4a133396a0be144fa9b1.html | 105 ++ .../dir_3808e3f8fe545b07b1d2715928fb0eea.html | 5 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 5 +- .../dir_68d46136ab8a8bc94545215845910cfb.html | 5 +- .../dir_6f9635d4fbfa321d4c00f29df5cd540c.html | 5 +- .../dir_82aec79caba402669c6c7bcbbee3baec.html | 117 ++ .../dir_cfa68689d3aca823fc84b2132e590e35.html | 5 +- .../dir_d44c64559bbebec7f509842c48db8b23.html | 5 +- sdk/doc/html/files.html | 48 +- sdk/doc/html/functions.html | 110 +- sdk/doc/html/functions_eval.html | 4 +- sdk/doc/html/functions_func.html | 38 +- sdk/doc/html/functions_vars.html | 73 +- sdk/doc/html/graph_legend.html | 3 +- .../html/helper__functions_8hpp_source.html | 102 + sdk/doc/html/hierarchy.html | 165 ++ sdk/doc/html/index.html | 3 +- sdk/doc/html/inherit_graph_0.map | 3 + sdk/doc/html/inherit_graph_0.md5 | 1 + sdk/doc/html/inherit_graph_0.png | Bin 0 -> 1207 bytes sdk/doc/html/inherit_graph_1.map | 3 + sdk/doc/html/inherit_graph_1.md5 | 1 + sdk/doc/html/inherit_graph_1.png | Bin 0 -> 1130 bytes sdk/doc/html/inherit_graph_10.map | 3 + sdk/doc/html/inherit_graph_10.md5 | 1 + sdk/doc/html/inherit_graph_10.png | Bin 0 -> 1246 bytes sdk/doc/html/inherit_graph_11.map | 3 + sdk/doc/html/inherit_graph_11.md5 | 1 + sdk/doc/html/inherit_graph_11.png | Bin 0 -> 1078 bytes sdk/doc/html/inherit_graph_12.map | 3 + sdk/doc/html/inherit_graph_12.md5 | 1 + sdk/doc/html/inherit_graph_12.png | Bin 0 -> 1372 bytes sdk/doc/html/inherit_graph_13.map | 3 + sdk/doc/html/inherit_graph_13.md5 | 1 + sdk/doc/html/inherit_graph_13.png | Bin 0 -> 1458 bytes sdk/doc/html/inherit_graph_14.map | 3 + sdk/doc/html/inherit_graph_14.md5 | 1 + sdk/doc/html/inherit_graph_14.png | Bin 0 -> 1705 bytes sdk/doc/html/inherit_graph_15.map | 3 + sdk/doc/html/inherit_graph_15.md5 | 1 + sdk/doc/html/inherit_graph_15.png | Bin 0 -> 1077 bytes sdk/doc/html/inherit_graph_16.map | 3 + sdk/doc/html/inherit_graph_16.md5 | 1 + sdk/doc/html/inherit_graph_16.png | Bin 0 -> 1335 bytes sdk/doc/html/inherit_graph_17.map | 3 + sdk/doc/html/inherit_graph_17.md5 | 1 + sdk/doc/html/inherit_graph_17.png | Bin 0 -> 1673 bytes sdk/doc/html/inherit_graph_18.map | 3 + sdk/doc/html/inherit_graph_18.md5 | 1 + sdk/doc/html/inherit_graph_18.png | Bin 0 -> 1504 bytes sdk/doc/html/inherit_graph_19.map | 3 + sdk/doc/html/inherit_graph_19.md5 | 1 + sdk/doc/html/inherit_graph_19.png | Bin 0 -> 843 bytes sdk/doc/html/inherit_graph_2.map | 3 + sdk/doc/html/inherit_graph_2.md5 | 1 + sdk/doc/html/inherit_graph_2.png | Bin 0 -> 1195 bytes sdk/doc/html/inherit_graph_20.map | 3 + sdk/doc/html/inherit_graph_20.md5 | 1 + sdk/doc/html/inherit_graph_20.png | Bin 0 -> 1826 bytes sdk/doc/html/inherit_graph_21.map | 4 + sdk/doc/html/inherit_graph_21.md5 | 1 + sdk/doc/html/inherit_graph_21.png | Bin 0 -> 3362 bytes sdk/doc/html/inherit_graph_22.map | 8 + sdk/doc/html/inherit_graph_22.md5 | 1 + sdk/doc/html/inherit_graph_22.png | Bin 0 -> 12976 bytes sdk/doc/html/inherit_graph_23.map | 4 + sdk/doc/html/inherit_graph_23.md5 | 1 + sdk/doc/html/inherit_graph_23.png | Bin 0 -> 3535 bytes sdk/doc/html/inherit_graph_24.map | 4 + sdk/doc/html/inherit_graph_24.md5 | 1 + sdk/doc/html/inherit_graph_24.png | Bin 0 -> 4580 bytes sdk/doc/html/inherit_graph_25.map | 3 + sdk/doc/html/inherit_graph_25.md5 | 1 + sdk/doc/html/inherit_graph_25.png | Bin 0 -> 910 bytes sdk/doc/html/inherit_graph_26.map | 3 + sdk/doc/html/inherit_graph_26.md5 | 1 + sdk/doc/html/inherit_graph_26.png | Bin 0 -> 1476 bytes sdk/doc/html/inherit_graph_27.map | 3 + sdk/doc/html/inherit_graph_27.md5 | 1 + sdk/doc/html/inherit_graph_27.png | Bin 0 -> 1548 bytes sdk/doc/html/inherit_graph_28.map | 3 + sdk/doc/html/inherit_graph_28.md5 | 1 + sdk/doc/html/inherit_graph_28.png | Bin 0 -> 855 bytes sdk/doc/html/inherit_graph_29.map | 3 + sdk/doc/html/inherit_graph_29.md5 | 1 + sdk/doc/html/inherit_graph_29.png | Bin 0 -> 1697 bytes sdk/doc/html/inherit_graph_3.map | 3 + sdk/doc/html/inherit_graph_3.md5 | 1 + sdk/doc/html/inherit_graph_3.png | Bin 0 -> 1283 bytes sdk/doc/html/inherit_graph_30.map | 3 + sdk/doc/html/inherit_graph_30.md5 | 1 + sdk/doc/html/inherit_graph_30.png | Bin 0 -> 814 bytes sdk/doc/html/inherit_graph_31.map | 3 + sdk/doc/html/inherit_graph_31.md5 | 1 + sdk/doc/html/inherit_graph_31.png | Bin 0 -> 1093 bytes sdk/doc/html/inherit_graph_32.map | 3 + sdk/doc/html/inherit_graph_32.md5 | 1 + sdk/doc/html/inherit_graph_32.png | Bin 0 -> 1030 bytes sdk/doc/html/inherit_graph_33.map | 3 + sdk/doc/html/inherit_graph_33.md5 | 1 + sdk/doc/html/inherit_graph_33.png | Bin 0 -> 1344 bytes sdk/doc/html/inherit_graph_34.map | 3 + sdk/doc/html/inherit_graph_34.md5 | 1 + sdk/doc/html/inherit_graph_34.png | Bin 0 -> 1412 bytes sdk/doc/html/inherit_graph_35.map | 3 + sdk/doc/html/inherit_graph_35.md5 | 1 + sdk/doc/html/inherit_graph_35.png | Bin 0 -> 1449 bytes sdk/doc/html/inherit_graph_36.map | 3 + sdk/doc/html/inherit_graph_36.md5 | 1 + sdk/doc/html/inherit_graph_36.png | Bin 0 -> 1264 bytes sdk/doc/html/inherit_graph_37.map | 3 + sdk/doc/html/inherit_graph_37.md5 | 1 + sdk/doc/html/inherit_graph_37.png | Bin 0 -> 1297 bytes sdk/doc/html/inherit_graph_38.map | 3 + sdk/doc/html/inherit_graph_38.md5 | 1 + sdk/doc/html/inherit_graph_38.png | Bin 0 -> 1243 bytes sdk/doc/html/inherit_graph_39.map | 3 + sdk/doc/html/inherit_graph_39.md5 | 1 + sdk/doc/html/inherit_graph_39.png | Bin 0 -> 1086 bytes sdk/doc/html/inherit_graph_4.map | 3 + sdk/doc/html/inherit_graph_4.md5 | 1 + sdk/doc/html/inherit_graph_4.png | Bin 0 -> 813 bytes sdk/doc/html/inherit_graph_40.map | 3 + sdk/doc/html/inherit_graph_40.md5 | 1 + sdk/doc/html/inherit_graph_40.png | Bin 0 -> 1377 bytes sdk/doc/html/inherit_graph_41.map | 3 + sdk/doc/html/inherit_graph_41.md5 | 1 + sdk/doc/html/inherit_graph_41.png | Bin 0 -> 1693 bytes sdk/doc/html/inherit_graph_42.map | 3 + sdk/doc/html/inherit_graph_42.md5 | 1 + sdk/doc/html/inherit_graph_42.png | Bin 0 -> 1304 bytes sdk/doc/html/inherit_graph_43.map | 3 + sdk/doc/html/inherit_graph_43.md5 | 1 + sdk/doc/html/inherit_graph_43.png | Bin 0 -> 1085 bytes sdk/doc/html/inherit_graph_44.map | 3 + sdk/doc/html/inherit_graph_44.md5 | 1 + sdk/doc/html/inherit_graph_44.png | Bin 0 -> 1908 bytes sdk/doc/html/inherit_graph_45.map | 3 + sdk/doc/html/inherit_graph_45.md5 | 1 + sdk/doc/html/inherit_graph_45.png | Bin 0 -> 2141 bytes sdk/doc/html/inherit_graph_46.map | 3 + sdk/doc/html/inherit_graph_46.md5 | 1 + sdk/doc/html/inherit_graph_46.png | Bin 0 -> 1456 bytes sdk/doc/html/inherit_graph_47.map | 3 + sdk/doc/html/inherit_graph_47.md5 | 1 + sdk/doc/html/inherit_graph_47.png | Bin 0 -> 1310 bytes sdk/doc/html/inherit_graph_48.map | 3 + sdk/doc/html/inherit_graph_48.md5 | 1 + sdk/doc/html/inherit_graph_48.png | Bin 0 -> 1376 bytes sdk/doc/html/inherit_graph_49.map | 3 + sdk/doc/html/inherit_graph_49.md5 | 1 + sdk/doc/html/inherit_graph_49.png | Bin 0 -> 848 bytes sdk/doc/html/inherit_graph_5.map | 3 + sdk/doc/html/inherit_graph_5.md5 | 1 + sdk/doc/html/inherit_graph_5.png | Bin 0 -> 1409 bytes sdk/doc/html/inherit_graph_50.map | 3 + sdk/doc/html/inherit_graph_50.md5 | 1 + sdk/doc/html/inherit_graph_50.png | Bin 0 -> 1534 bytes sdk/doc/html/inherit_graph_6.map | 3 + sdk/doc/html/inherit_graph_6.md5 | 1 + sdk/doc/html/inherit_graph_6.png | Bin 0 -> 1641 bytes sdk/doc/html/inherit_graph_7.map | 3 + sdk/doc/html/inherit_graph_7.md5 | 1 + sdk/doc/html/inherit_graph_7.png | Bin 0 -> 1321 bytes sdk/doc/html/inherit_graph_8.map | 3 + sdk/doc/html/inherit_graph_8.md5 | 1 + sdk/doc/html/inherit_graph_8.png | Bin 0 -> 1302 bytes sdk/doc/html/inherit_graph_9.map | 3 + sdk/doc/html/inherit_graph_9.md5 | 1 + sdk/doc/html/inherit_graph_9.png | Bin 0 -> 1295 bytes sdk/doc/html/inherits.html | 367 ++++ sdk/doc/html/line__feature_8h_source.html | 107 ++ sdk/doc/html/lock_8h_source.html | 101 + sdk/doc/html/locker_8h_source.html | 5 +- sdk/doc/html/math_8hpp_source.html | 107 ++ sdk/doc/html/md_README.html | 187 +- .../html/md__home_yang_tmp_sdk_README.html | 78 +- sdk/doc/html/namespacemembers.html | 3 +- sdk/doc/html/namespacemembers_enum.html | 3 +- sdk/doc/html/namespaces.html | 3 +- sdk/doc/html/namespaceserial.html | 3 +- sdk/doc/html/pages.html | 5 +- sdk/doc/html/search/all_0.js | 7 + sdk/doc/html/search/all_10.js | 13 +- sdk/doc/html/search/all_12.js | 11 +- sdk/doc/html/search/all_13.js | 21 +- sdk/doc/html/search/all_14.js | 14 +- sdk/doc/html/search/all_15.html | 26 + sdk/doc/html/search/all_15.js | 4 + sdk/doc/html/search/all_16.html | 26 + sdk/doc/html/search/all_16.js | 15 + sdk/doc/html/search/all_17.html | 26 + sdk/doc/html/search/all_17.js | 5 + sdk/doc/html/search/all_3.js | 4 + sdk/doc/html/search/all_4.js | 7 +- sdk/doc/html/search/all_9.js | 5 +- sdk/doc/html/search/all_a.js | 1 + sdk/doc/html/search/all_b.js | 5 + sdk/doc/html/search/all_d.js | 5 +- sdk/doc/html/search/all_e.js | 9 +- sdk/doc/html/search/all_f.js | 1 + sdk/doc/html/search/classes_0.js | 7 +- sdk/doc/html/search/classes_1.js | 5 +- sdk/doc/html/search/classes_2.js | 4 +- sdk/doc/html/search/classes_3.js | 2 +- sdk/doc/html/search/classes_4.js | 5 +- sdk/doc/html/search/classes_5.js | 6 +- sdk/doc/html/search/classes_6.js | 8 +- sdk/doc/html/search/classes_7.js | 5 +- sdk/doc/html/search/classes_8.js | 13 +- sdk/doc/html/search/classes_9.js | 10 +- sdk/doc/html/search/classes_a.js | 2 +- sdk/doc/html/search/classes_b.html | 26 + sdk/doc/html/search/classes_b.js | 17 + sdk/doc/html/search/classes_c.html | 26 + sdk/doc/html/search/classes_c.js | 6 + sdk/doc/html/search/classes_d.html | 26 + sdk/doc/html/search/classes_d.js | 9 + sdk/doc/html/search/classes_e.html | 26 + sdk/doc/html/search/classes_e.js | 4 + sdk/doc/html/search/files_0.html | 26 + sdk/doc/html/search/files_0.js | 4 + sdk/doc/html/search/files_1.html | 26 + sdk/doc/html/search/files_1.js | 5 + sdk/doc/html/search/files_2.html | 26 + sdk/doc/html/search/files_2.js | 6 + sdk/doc/html/search/functions_1.js | 2 + sdk/doc/html/search/functions_2.js | 1 + sdk/doc/html/search/functions_6.js | 1 + sdk/doc/html/search/functions_7.js | 4 +- sdk/doc/html/search/functions_9.js | 4 + sdk/doc/html/search/functions_a.js | 9 +- sdk/doc/html/search/functions_b.js | 10 +- sdk/doc/html/search/functions_c.js | 3 +- sdk/doc/html/search/functions_d.html | 26 + sdk/doc/html/search/functions_d.js | 5 + sdk/doc/html/search/pages_0.js | 2 +- sdk/doc/html/search/searchdata.js | 37 +- sdk/doc/html/search/variables_0.js | 2 + sdk/doc/html/search/variables_10.html | 26 + sdk/doc/html/search/variables_10.js | 4 + sdk/doc/html/search/variables_2.js | 3 +- sdk/doc/html/search/variables_3.js | 5 +- sdk/doc/html/search/variables_7.js | 2 + sdk/doc/html/search/variables_9.js | 2 + sdk/doc/html/search/variables_b.js | 5 +- sdk/doc/html/search/variables_d.js | 3 +- sdk/doc/html/search/variables_e.html | 26 + sdk/doc/html/search/variables_e.js | 6 + sdk/doc/html/search/variables_f.html | 26 + sdk/doc/html/search/variables_f.js | 4 + sdk/doc/html/serial_8h_source.html | 5 +- sdk/doc/html/stdlib__imports_8hpp.html | 129 ++ .../html/stdlib__imports_8hpp__dep__incl.map | 10 + .../html/stdlib__imports_8hpp__dep__incl.md5 | 1 + .../html/stdlib__imports_8hpp__dep__incl.png | Bin 0 -> 36169 bytes sdk/doc/html/stdlib__imports_8hpp__incl.map | 2 + sdk/doc/html/stdlib__imports_8hpp__incl.md5 | 1 + sdk/doc/html/stdlib__imports_8hpp__incl.png | Bin 0 -> 6952 bytes sdk/doc/html/stdlib__imports_8hpp_source.html | 102 + sdk/doc/html/struct_laser_config-members.html | 4 +- sdk/doc/html/struct_laser_config.html | 8 +- sdk/doc/html/struct_laser_scan-members.html | 4 +- sdk/doc/html/struct_laser_scan.html | 6 +- sdk/doc/html/struct_package_node-members.html | 4 +- sdk/doc/html/struct_package_node.html | 6 +- sdk/doc/html/struct_point_cloud-members.html | 105 ++ sdk/doc/html/struct_point_cloud.html | 118 ++ sdk/doc/html/structcmd__packet-members.html | 4 +- sdk/doc/html/structcmd__packet.html | 6 +- .../html/structdevice__health-members.html | 4 +- sdk/doc/html/structdevice__health.html | 6 +- sdk/doc/html/structdevice__info-members.html | 4 +- sdk/doc/html/structdevice__info.html | 6 +- .../html/structfunction__state-members.html | 4 +- sdk/doc/html/structfunction__state.html | 6 +- .../structlidar__ans__header-members.html | 4 +- sdk/doc/html/structlidar__ans__header.html | 6 +- ...ne__feature_1_1___p_o_i_n_t_t-members.html | 109 ++ ...structline__feature_1_1___p_o_i_n_t_t.html | 120 ++ ...__feature_1_1__generate__line-members.html | 113 ++ ...ructline__feature_1_1__generate__line.html | 132 ++ ...tructline__feature_1_1__least-members.html | 110 ++ .../html/structline__feature_1_1__least.html | 123 ++ ...structline__feature_1_1__line-members.html | 115 ++ .../html/structline__feature_1_1__line.html | 146 ++ ...ctline__feature_1_1__line__coll__graph.map | 3 + ...ctline__feature_1_1__line__coll__graph.md5 | 1 + ...ctline__feature_1_1__line__coll__graph.png | Bin 0 -> 3440 bytes ...tructline__feature_1_1__point-members.html | 114 ++ .../html/structline__feature_1_1__point.html | 135 ++ ...line__feature_1_1_cached_data-members.html | 109 ++ .../structline__feature_1_1_cached_data.html | 120 ++ ...tructline__feature_1_1_params-members.html | 121 ++ .../html/structline__feature_1_1_params.html | 156 ++ ...ine__feature_1_1_point_params-members.html | 115 ++ .../structline__feature_1_1_point_params.html | 138 ++ ...tline__feature_1_1_range_data-members.html | 110 ++ .../structline__feature_1_1_range_data.html | 123 ++ sdk/doc/html/structnode__info-members.html | 12 +- sdk/doc/html/structnode__info.html | 35 +- .../html/structnode__info__coll__graph.map | 3 + .../html/structnode__info__coll__graph.md5 | 1 + .../html/structnode__info__coll__graph.png | Bin 0 -> 3059 bytes sdk/doc/html/structnode__package-members.html | 4 +- sdk/doc/html/structnode__package.html | 6 +- .../html/structnode__packages-members.html | 4 +- sdk/doc/html/structnode__packages.html | 6 +- sdk/doc/html/structodom__info-members.html | 112 ++ sdk/doc/html/structodom__info.html | 146 ++ sdk/doc/html/structpoint__info-members.html | 106 ++ sdk/doc/html/structpoint__info.html | 119 ++ sdk/doc/html/structpose__info-members.html | 107 ++ sdk/doc/html/structpose__info.html | 123 ++ .../html/structsampling__rate-members.html | 4 +- sdk/doc/html/structsampling__rate.html | 6 +- .../html/structscan__exposure-members.html | 4 +- sdk/doc/html/structscan__exposure.html | 6 +- .../html/structscan__frequency-members.html | 4 +- sdk/doc/html/structscan__frequency.html | 6 +- .../html/structscan__heart__beat-members.html | 4 +- sdk/doc/html/structscan__heart__beat.html | 6 +- sdk/doc/html/structscan__points-members.html | 4 +- sdk/doc/html/structscan__points.html | 6 +- .../html/structscan__rotation-members.html | 4 +- sdk/doc/html/structscan__rotation.html | 6 +- sdk/doc/html/structscan_dot-members.html | 4 +- sdk/doc/html/structscan_dot.html | 6 +- .../structserial_1_1_port_info-members.html | 4 +- sdk/doc/html/structserial_1_1_port_info.html | 6 +- .../structserial_1_1_timeout-members.html | 4 +- sdk/doc/html/structserial_1_1_timeout.html | 6 +- .../structserial_1_1termios2-members.html | 4 +- sdk/doc/html/structserial_1_1termios2.html | 6 +- sdk/doc/html/thread_8h_source.html | 5 +- sdk/doc/html/timer_8h_source.html | 5 +- sdk/doc/html/unix_8h_source.html | 5 +- sdk/doc/html/unix__serial_8h_source.html | 7 +- sdk/doc/html/utilities_8h_source.html | 111 ++ sdk/doc/html/utils_8h_source.html | 5 +- sdk/doc/html/v8stdint_8h_source.html | 5 +- sdk/doc/html/win_8h_source.html | 5 +- sdk/doc/html/win__serial_8h_source.html | 7 +- sdk/doc/html/ydliar.png | Bin 0 -> 1613 bytes sdk/doc/html/ydlidar__driver_8h_source.html | 133 +- sdk/doc/latex/Makefile | 21 - sdk/doc/latex/annotated.tex | 35 - sdk/doc/latex/class_c_yd_lidar.tex | 50 - sdk/doc/latex/class_event.tex | 49 - sdk/doc/latex/class_locker.tex | 43 - sdk/doc/latex/class_scoped_locker.tex | 31 - .../class_scoped_locker__coll__graph.md5 | 1 - .../class_scoped_locker__coll__graph.pdf | Bin 12111 -> 0 bytes sdk/doc/latex/class_thread.tex | 55 - .../classserial_1_1_millisecond_timer.tex | 17 - sdk/doc/latex/classserial_1_1_serial.tex | 791 -------- ...serial_1_1_serial_1_1_scoped_read_lock.tex | 13 - ...erial_1_1_serial_1_1_scoped_write_lock.tex | 13 - ...l_1_1serial_1_1_serial_1_1_serial_impl.tex | 160 -- .../classydlidar_1_1_y_dlidar_driver.tex | 1658 ----------------- ...lidar_1_1_y_dlidar_driver__coll__graph.md5 | 1 - ...lidar_1_1_y_dlidar_driver__coll__graph.pdf | Bin 14515 -> 0 bytes .../dir_0834a1453ead243784276400df23f54f.tex | 5 - .../dir_3808e3f8fe545b07b1d2715928fb0eea.tex | 5 - .../dir_68267d1309a1af8e8297ef4c3efbcdba.tex | 8 - .../dir_68d46136ab8a8bc94545215845910cfb.tex | 5 - .../dir_6f9635d4fbfa321d4c00f29df5cd540c.tex | 5 - .../dir_cfa68689d3aca823fc84b2132e590e35.tex | 5 - .../dir_d44c64559bbebec7f509842c48db8b23.tex | 5 - sdk/doc/latex/doxygen.sty | 477 ----- sdk/doc/latex/md_README.tex | 17 - .../latex/md__home_yang_tmp_sdk_README.tex | 54 - sdk/doc/latex/namespaces.tex | 4 - sdk/doc/latex/namespaceserial.tex | 169 -- sdk/doc/latex/refman.tex | 193 -- sdk/doc/latex/struct_laser_config.tex | 46 - sdk/doc/latex/struct_laser_scan.tex | 41 - .../latex/struct_laser_scan__coll__graph.md5 | 1 - .../latex/struct_laser_scan__coll__graph.pdf | Bin 12338 -> 0 bytes sdk/doc/latex/struct_package_node.tex | 16 - sdk/doc/latex/structcmd__packet.tex | 22 - sdk/doc/latex/structdevice__health.tex | 16 - sdk/doc/latex/structdevice__info.tex | 22 - sdk/doc/latex/structfunction__state.tex | 13 - sdk/doc/latex/structlidar__ans__header.tex | 25 - sdk/doc/latex/structnode__info.tex | 25 - sdk/doc/latex/structnode__package.tex | 40 - .../structnode__package__coll__graph.md5 | 1 - .../structnode__package__coll__graph.pdf | Bin 12673 -> 0 bytes sdk/doc/latex/structnode__packages.tex | 31 - sdk/doc/latex/structsampling__rate.tex | 13 - sdk/doc/latex/structscan__exposure.tex | 13 - sdk/doc/latex/structscan__frequency.tex | 13 - sdk/doc/latex/structscan__heart__beat.tex | 13 - sdk/doc/latex/structscan__points.tex | 13 - sdk/doc/latex/structscan__rotation.tex | 13 - sdk/doc/latex/structscan_dot.tex | 19 - sdk/doc/latex/structserial_1_1_port_info.tex | 44 - ...tructserial_1_1_port_info__coll__graph.md5 | 1 - ...tructserial_1_1_port_info__coll__graph.pdf | Bin 13237 -> 0 bytes sdk/doc/latex/structserial_1_1_timeout.tex | 81 - sdk/doc/latex/structserial_1_1termios2.tex | 34 - sdk/include/CYdLidar.h | 34 +- sdk/include/line_feature.h | 53 + sdk/include/utilities.h | 120 ++ sdk/include/ydlidar_driver.h | 105 +- sdk/matrix/.clang-tidy | 9 + sdk/matrix/.gitignore | 37 + sdk/matrix/.travis.yml | 40 + sdk/matrix/CMakeLists.txt | 84 + sdk/matrix/matrix/Matrix.hpp | 547 ++++++ sdk/matrix/matrix/SquareMatrix.hpp | 318 ++++ sdk/matrix/matrix/Vector.hpp | 102 + sdk/matrix/matrix/Vector2.hpp | 63 + sdk/matrix/matrix/Vector3.hpp | 130 ++ sdk/matrix/matrix/helper_functions.hpp | 34 + sdk/matrix/matrix/math.hpp | 8 + sdk/matrix/matrix/stdlib_imports.hpp | 93 + sdk/samples/main.cpp | 59 +- sdk/src/CYdLidar.cpp | 196 +- sdk/src/common.h | 2 +- sdk/src/line_feature.cpp | 394 ++++ sdk/src/lock.c | 48 +- sdk/src/ydlidar_driver.cpp | 330 +++- src/ydlidar_client.cpp | 1 + src/ydlidar_node.cpp | 699 ++----- 546 files changed, 14182 insertions(+), 5691 deletions(-) delete mode 100644 launch/ydlidar.launch create mode 100644 sdk/doc/html/_matrix_8hpp.html create mode 100644 sdk/doc/html/_matrix_8hpp__dep__incl.map create mode 100644 sdk/doc/html/_matrix_8hpp__dep__incl.md5 create mode 100644 sdk/doc/html/_matrix_8hpp__dep__incl.png create mode 100644 sdk/doc/html/_matrix_8hpp__incl.map create mode 100644 sdk/doc/html/_matrix_8hpp__incl.md5 create mode 100644 sdk/doc/html/_matrix_8hpp__incl.png create mode 100644 sdk/doc/html/_matrix_8hpp_source.html create mode 100644 sdk/doc/html/_square_matrix_8hpp.html create mode 100644 sdk/doc/html/_square_matrix_8hpp__dep__incl.map create mode 100644 sdk/doc/html/_square_matrix_8hpp__dep__incl.md5 create mode 100644 sdk/doc/html/_square_matrix_8hpp__dep__incl.png create mode 100644 sdk/doc/html/_square_matrix_8hpp__incl.map create mode 100644 sdk/doc/html/_square_matrix_8hpp__incl.md5 create mode 100644 sdk/doc/html/_square_matrix_8hpp__incl.png create mode 100644 sdk/doc/html/_square_matrix_8hpp_source.html create mode 100644 sdk/doc/html/_vector2_8hpp.html create mode 100644 sdk/doc/html/_vector2_8hpp__dep__incl.map create mode 100644 sdk/doc/html/_vector2_8hpp__dep__incl.md5 create mode 100644 sdk/doc/html/_vector2_8hpp__dep__incl.png create mode 100644 sdk/doc/html/_vector2_8hpp__incl.map create mode 100644 sdk/doc/html/_vector2_8hpp__incl.md5 create mode 100644 sdk/doc/html/_vector2_8hpp__incl.png create mode 100644 sdk/doc/html/_vector2_8hpp_source.html create mode 100644 sdk/doc/html/_vector3_8hpp.html create mode 100644 sdk/doc/html/_vector3_8hpp__dep__incl.map create mode 100644 sdk/doc/html/_vector3_8hpp__dep__incl.md5 create mode 100644 sdk/doc/html/_vector3_8hpp__dep__incl.png create mode 100644 sdk/doc/html/_vector3_8hpp__incl.map create mode 100644 sdk/doc/html/_vector3_8hpp__incl.md5 create mode 100644 sdk/doc/html/_vector3_8hpp__incl.png create mode 100644 sdk/doc/html/_vector3_8hpp_source.html create mode 100644 sdk/doc/html/_vector_8hpp.html create mode 100644 sdk/doc/html/_vector_8hpp__dep__incl.map create mode 100644 sdk/doc/html/_vector_8hpp__dep__incl.md5 create mode 100644 sdk/doc/html/_vector_8hpp__dep__incl.png create mode 100644 sdk/doc/html/_vector_8hpp__incl.map create mode 100644 sdk/doc/html/_vector_8hpp__incl.md5 create mode 100644 sdk/doc/html/_vector_8hpp__incl.png create mode 100644 sdk/doc/html/_vector_8hpp_source.html create mode 100644 sdk/doc/html/classline__feature_1_1_line_feature-members.html create mode 100644 sdk/doc/html/classline__feature_1_1_line_feature.html create mode 100644 sdk/doc/html/classmatrix_1_1_dcm.html create mode 100644 sdk/doc/html/classmatrix_1_1_matrix-members.html create mode 100644 sdk/doc/html/classmatrix_1_1_matrix.html create mode 100644 sdk/doc/html/classmatrix_1_1_matrix__coll__graph.map create mode 100644 sdk/doc/html/classmatrix_1_1_matrix__coll__graph.md5 create mode 100644 sdk/doc/html/classmatrix_1_1_matrix__coll__graph.png create mode 100644 sdk/doc/html/classmatrix_1_1_matrix__inherit__graph.map create mode 100644 sdk/doc/html/classmatrix_1_1_matrix__inherit__graph.md5 create mode 100644 sdk/doc/html/classmatrix_1_1_matrix__inherit__graph.png create mode 100644 sdk/doc/html/classmatrix_1_1_square_matrix-members.html create mode 100644 sdk/doc/html/classmatrix_1_1_square_matrix.html create mode 100644 sdk/doc/html/classmatrix_1_1_square_matrix__coll__graph.map create mode 100644 sdk/doc/html/classmatrix_1_1_square_matrix__coll__graph.md5 create mode 100644 sdk/doc/html/classmatrix_1_1_square_matrix__coll__graph.png create mode 100644 sdk/doc/html/classmatrix_1_1_square_matrix__inherit__graph.map create mode 100644 sdk/doc/html/classmatrix_1_1_square_matrix__inherit__graph.md5 create mode 100644 sdk/doc/html/classmatrix_1_1_square_matrix__inherit__graph.png create mode 100644 sdk/doc/html/classmatrix_1_1_vector-members.html create mode 100644 sdk/doc/html/classmatrix_1_1_vector.html create mode 100644 sdk/doc/html/classmatrix_1_1_vector2-members.html create mode 100644 sdk/doc/html/classmatrix_1_1_vector2.html create mode 100644 sdk/doc/html/classmatrix_1_1_vector2__coll__graph.map create mode 100644 sdk/doc/html/classmatrix_1_1_vector2__coll__graph.md5 create mode 100644 sdk/doc/html/classmatrix_1_1_vector2__coll__graph.png create mode 100644 sdk/doc/html/classmatrix_1_1_vector2__inherit__graph.map create mode 100644 sdk/doc/html/classmatrix_1_1_vector2__inherit__graph.md5 create mode 100644 sdk/doc/html/classmatrix_1_1_vector2__inherit__graph.png create mode 100644 sdk/doc/html/classmatrix_1_1_vector3-members.html create mode 100644 sdk/doc/html/classmatrix_1_1_vector3.html create mode 100644 sdk/doc/html/classmatrix_1_1_vector3__coll__graph.map create mode 100644 sdk/doc/html/classmatrix_1_1_vector3__coll__graph.md5 create mode 100644 sdk/doc/html/classmatrix_1_1_vector3__coll__graph.png create mode 100644 sdk/doc/html/classmatrix_1_1_vector3__inherit__graph.map create mode 100644 sdk/doc/html/classmatrix_1_1_vector3__inherit__graph.md5 create mode 100644 sdk/doc/html/classmatrix_1_1_vector3__inherit__graph.png create mode 100644 sdk/doc/html/classmatrix_1_1_vector__coll__graph.map create mode 100644 sdk/doc/html/classmatrix_1_1_vector__coll__graph.md5 create mode 100644 sdk/doc/html/classmatrix_1_1_vector__coll__graph.png create mode 100644 sdk/doc/html/classmatrix_1_1_vector__inherit__graph.map create mode 100644 sdk/doc/html/classmatrix_1_1_vector__inherit__graph.md5 create mode 100644 sdk/doc/html/classmatrix_1_1_vector__inherit__graph.png create mode 100644 sdk/doc/html/dir_109f68d84cef4a133396a0be144fa9b1.html create mode 100644 sdk/doc/html/dir_82aec79caba402669c6c7bcbbee3baec.html create mode 100644 sdk/doc/html/helper__functions_8hpp_source.html create mode 100644 sdk/doc/html/hierarchy.html create mode 100644 sdk/doc/html/inherit_graph_0.map create mode 100644 sdk/doc/html/inherit_graph_0.md5 create mode 100644 sdk/doc/html/inherit_graph_0.png create mode 100644 sdk/doc/html/inherit_graph_1.map create mode 100644 sdk/doc/html/inherit_graph_1.md5 create mode 100644 sdk/doc/html/inherit_graph_1.png create mode 100644 sdk/doc/html/inherit_graph_10.map create mode 100644 sdk/doc/html/inherit_graph_10.md5 create mode 100644 sdk/doc/html/inherit_graph_10.png create mode 100644 sdk/doc/html/inherit_graph_11.map create mode 100644 sdk/doc/html/inherit_graph_11.md5 create mode 100644 sdk/doc/html/inherit_graph_11.png create mode 100644 sdk/doc/html/inherit_graph_12.map create mode 100644 sdk/doc/html/inherit_graph_12.md5 create mode 100644 sdk/doc/html/inherit_graph_12.png create mode 100644 sdk/doc/html/inherit_graph_13.map create mode 100644 sdk/doc/html/inherit_graph_13.md5 create mode 100644 sdk/doc/html/inherit_graph_13.png create mode 100644 sdk/doc/html/inherit_graph_14.map create mode 100644 sdk/doc/html/inherit_graph_14.md5 create mode 100644 sdk/doc/html/inherit_graph_14.png create mode 100644 sdk/doc/html/inherit_graph_15.map create mode 100644 sdk/doc/html/inherit_graph_15.md5 create mode 100644 sdk/doc/html/inherit_graph_15.png create mode 100644 sdk/doc/html/inherit_graph_16.map create mode 100644 sdk/doc/html/inherit_graph_16.md5 create mode 100644 sdk/doc/html/inherit_graph_16.png create mode 100644 sdk/doc/html/inherit_graph_17.map create mode 100644 sdk/doc/html/inherit_graph_17.md5 create mode 100644 sdk/doc/html/inherit_graph_17.png create mode 100644 sdk/doc/html/inherit_graph_18.map create mode 100644 sdk/doc/html/inherit_graph_18.md5 create mode 100644 sdk/doc/html/inherit_graph_18.png create mode 100644 sdk/doc/html/inherit_graph_19.map create mode 100644 sdk/doc/html/inherit_graph_19.md5 create mode 100644 sdk/doc/html/inherit_graph_19.png create mode 100644 sdk/doc/html/inherit_graph_2.map create mode 100644 sdk/doc/html/inherit_graph_2.md5 create mode 100644 sdk/doc/html/inherit_graph_2.png create mode 100644 sdk/doc/html/inherit_graph_20.map create mode 100644 sdk/doc/html/inherit_graph_20.md5 create mode 100644 sdk/doc/html/inherit_graph_20.png create mode 100644 sdk/doc/html/inherit_graph_21.map create mode 100644 sdk/doc/html/inherit_graph_21.md5 create mode 100644 sdk/doc/html/inherit_graph_21.png create mode 100644 sdk/doc/html/inherit_graph_22.map create mode 100644 sdk/doc/html/inherit_graph_22.md5 create mode 100644 sdk/doc/html/inherit_graph_22.png create mode 100644 sdk/doc/html/inherit_graph_23.map create mode 100644 sdk/doc/html/inherit_graph_23.md5 create mode 100644 sdk/doc/html/inherit_graph_23.png create mode 100644 sdk/doc/html/inherit_graph_24.map create mode 100644 sdk/doc/html/inherit_graph_24.md5 create mode 100644 sdk/doc/html/inherit_graph_24.png create mode 100644 sdk/doc/html/inherit_graph_25.map create mode 100644 sdk/doc/html/inherit_graph_25.md5 create mode 100644 sdk/doc/html/inherit_graph_25.png create mode 100644 sdk/doc/html/inherit_graph_26.map create mode 100644 sdk/doc/html/inherit_graph_26.md5 create mode 100644 sdk/doc/html/inherit_graph_26.png create mode 100644 sdk/doc/html/inherit_graph_27.map create mode 100644 sdk/doc/html/inherit_graph_27.md5 create mode 100644 sdk/doc/html/inherit_graph_27.png create mode 100644 sdk/doc/html/inherit_graph_28.map create mode 100644 sdk/doc/html/inherit_graph_28.md5 create mode 100644 sdk/doc/html/inherit_graph_28.png create mode 100644 sdk/doc/html/inherit_graph_29.map create mode 100644 sdk/doc/html/inherit_graph_29.md5 create mode 100644 sdk/doc/html/inherit_graph_29.png create mode 100644 sdk/doc/html/inherit_graph_3.map create mode 100644 sdk/doc/html/inherit_graph_3.md5 create mode 100644 sdk/doc/html/inherit_graph_3.png create mode 100644 sdk/doc/html/inherit_graph_30.map create mode 100644 sdk/doc/html/inherit_graph_30.md5 create mode 100644 sdk/doc/html/inherit_graph_30.png create mode 100644 sdk/doc/html/inherit_graph_31.map create mode 100644 sdk/doc/html/inherit_graph_31.md5 create mode 100644 sdk/doc/html/inherit_graph_31.png create mode 100644 sdk/doc/html/inherit_graph_32.map create mode 100644 sdk/doc/html/inherit_graph_32.md5 create mode 100644 sdk/doc/html/inherit_graph_32.png create mode 100644 sdk/doc/html/inherit_graph_33.map create mode 100644 sdk/doc/html/inherit_graph_33.md5 create mode 100644 sdk/doc/html/inherit_graph_33.png create mode 100644 sdk/doc/html/inherit_graph_34.map create mode 100644 sdk/doc/html/inherit_graph_34.md5 create mode 100644 sdk/doc/html/inherit_graph_34.png create mode 100644 sdk/doc/html/inherit_graph_35.map create mode 100644 sdk/doc/html/inherit_graph_35.md5 create mode 100644 sdk/doc/html/inherit_graph_35.png create mode 100644 sdk/doc/html/inherit_graph_36.map create mode 100644 sdk/doc/html/inherit_graph_36.md5 create mode 100644 sdk/doc/html/inherit_graph_36.png create mode 100644 sdk/doc/html/inherit_graph_37.map create mode 100644 sdk/doc/html/inherit_graph_37.md5 create mode 100644 sdk/doc/html/inherit_graph_37.png create mode 100644 sdk/doc/html/inherit_graph_38.map create mode 100644 sdk/doc/html/inherit_graph_38.md5 create mode 100644 sdk/doc/html/inherit_graph_38.png create mode 100644 sdk/doc/html/inherit_graph_39.map create mode 100644 sdk/doc/html/inherit_graph_39.md5 create mode 100644 sdk/doc/html/inherit_graph_39.png create mode 100644 sdk/doc/html/inherit_graph_4.map create mode 100644 sdk/doc/html/inherit_graph_4.md5 create mode 100644 sdk/doc/html/inherit_graph_4.png create mode 100644 sdk/doc/html/inherit_graph_40.map create mode 100644 sdk/doc/html/inherit_graph_40.md5 create mode 100644 sdk/doc/html/inherit_graph_40.png create mode 100644 sdk/doc/html/inherit_graph_41.map create mode 100644 sdk/doc/html/inherit_graph_41.md5 create mode 100644 sdk/doc/html/inherit_graph_41.png create mode 100644 sdk/doc/html/inherit_graph_42.map create mode 100644 sdk/doc/html/inherit_graph_42.md5 create mode 100644 sdk/doc/html/inherit_graph_42.png create mode 100644 sdk/doc/html/inherit_graph_43.map create mode 100644 sdk/doc/html/inherit_graph_43.md5 create mode 100644 sdk/doc/html/inherit_graph_43.png create mode 100644 sdk/doc/html/inherit_graph_44.map create mode 100644 sdk/doc/html/inherit_graph_44.md5 create mode 100644 sdk/doc/html/inherit_graph_44.png create mode 100644 sdk/doc/html/inherit_graph_45.map create mode 100644 sdk/doc/html/inherit_graph_45.md5 create mode 100644 sdk/doc/html/inherit_graph_45.png create mode 100644 sdk/doc/html/inherit_graph_46.map create mode 100644 sdk/doc/html/inherit_graph_46.md5 create mode 100644 sdk/doc/html/inherit_graph_46.png create mode 100644 sdk/doc/html/inherit_graph_47.map create mode 100644 sdk/doc/html/inherit_graph_47.md5 create mode 100644 sdk/doc/html/inherit_graph_47.png create mode 100644 sdk/doc/html/inherit_graph_48.map create mode 100644 sdk/doc/html/inherit_graph_48.md5 create mode 100644 sdk/doc/html/inherit_graph_48.png create mode 100644 sdk/doc/html/inherit_graph_49.map create mode 100644 sdk/doc/html/inherit_graph_49.md5 create mode 100644 sdk/doc/html/inherit_graph_49.png create mode 100644 sdk/doc/html/inherit_graph_5.map create mode 100644 sdk/doc/html/inherit_graph_5.md5 create mode 100644 sdk/doc/html/inherit_graph_5.png create mode 100644 sdk/doc/html/inherit_graph_50.map create mode 100644 sdk/doc/html/inherit_graph_50.md5 create mode 100644 sdk/doc/html/inherit_graph_50.png create mode 100644 sdk/doc/html/inherit_graph_6.map create mode 100644 sdk/doc/html/inherit_graph_6.md5 create mode 100644 sdk/doc/html/inherit_graph_6.png create mode 100644 sdk/doc/html/inherit_graph_7.map create mode 100644 sdk/doc/html/inherit_graph_7.md5 create mode 100644 sdk/doc/html/inherit_graph_7.png create mode 100644 sdk/doc/html/inherit_graph_8.map create mode 100644 sdk/doc/html/inherit_graph_8.md5 create mode 100644 sdk/doc/html/inherit_graph_8.png create mode 100644 sdk/doc/html/inherit_graph_9.map create mode 100644 sdk/doc/html/inherit_graph_9.md5 create mode 100644 sdk/doc/html/inherit_graph_9.png create mode 100644 sdk/doc/html/inherits.html create mode 100644 sdk/doc/html/line__feature_8h_source.html create mode 100644 sdk/doc/html/lock_8h_source.html create mode 100644 sdk/doc/html/math_8hpp_source.html create mode 100644 sdk/doc/html/search/all_15.html create mode 100644 sdk/doc/html/search/all_15.js create mode 100644 sdk/doc/html/search/all_16.html create mode 100644 sdk/doc/html/search/all_16.js create mode 100644 sdk/doc/html/search/all_17.html create mode 100644 sdk/doc/html/search/all_17.js create mode 100644 sdk/doc/html/search/classes_b.html create mode 100644 sdk/doc/html/search/classes_b.js create mode 100644 sdk/doc/html/search/classes_c.html create mode 100644 sdk/doc/html/search/classes_c.js create mode 100644 sdk/doc/html/search/classes_d.html create mode 100644 sdk/doc/html/search/classes_d.js create mode 100644 sdk/doc/html/search/classes_e.html create mode 100644 sdk/doc/html/search/classes_e.js create mode 100644 sdk/doc/html/search/files_0.html create mode 100644 sdk/doc/html/search/files_0.js create mode 100644 sdk/doc/html/search/files_1.html create mode 100644 sdk/doc/html/search/files_1.js create mode 100644 sdk/doc/html/search/files_2.html create mode 100644 sdk/doc/html/search/files_2.js create mode 100644 sdk/doc/html/search/functions_d.html create mode 100644 sdk/doc/html/search/functions_d.js create mode 100644 sdk/doc/html/search/variables_10.html create mode 100644 sdk/doc/html/search/variables_10.js create mode 100644 sdk/doc/html/search/variables_e.html create mode 100644 sdk/doc/html/search/variables_e.js create mode 100644 sdk/doc/html/search/variables_f.html create mode 100644 sdk/doc/html/search/variables_f.js create mode 100644 sdk/doc/html/stdlib__imports_8hpp.html create mode 100644 sdk/doc/html/stdlib__imports_8hpp__dep__incl.map create mode 100644 sdk/doc/html/stdlib__imports_8hpp__dep__incl.md5 create mode 100644 sdk/doc/html/stdlib__imports_8hpp__dep__incl.png create mode 100644 sdk/doc/html/stdlib__imports_8hpp__incl.map create mode 100644 sdk/doc/html/stdlib__imports_8hpp__incl.md5 create mode 100644 sdk/doc/html/stdlib__imports_8hpp__incl.png create mode 100644 sdk/doc/html/stdlib__imports_8hpp_source.html create mode 100644 sdk/doc/html/struct_point_cloud-members.html create mode 100644 sdk/doc/html/struct_point_cloud.html create mode 100644 sdk/doc/html/structline__feature_1_1___p_o_i_n_t_t-members.html create mode 100644 sdk/doc/html/structline__feature_1_1___p_o_i_n_t_t.html create mode 100644 sdk/doc/html/structline__feature_1_1__generate__line-members.html create mode 100644 sdk/doc/html/structline__feature_1_1__generate__line.html create mode 100644 sdk/doc/html/structline__feature_1_1__least-members.html create mode 100644 sdk/doc/html/structline__feature_1_1__least.html create mode 100644 sdk/doc/html/structline__feature_1_1__line-members.html create mode 100644 sdk/doc/html/structline__feature_1_1__line.html create mode 100644 sdk/doc/html/structline__feature_1_1__line__coll__graph.map create mode 100644 sdk/doc/html/structline__feature_1_1__line__coll__graph.md5 create mode 100644 sdk/doc/html/structline__feature_1_1__line__coll__graph.png create mode 100644 sdk/doc/html/structline__feature_1_1__point-members.html create mode 100644 sdk/doc/html/structline__feature_1_1__point.html create mode 100644 sdk/doc/html/structline__feature_1_1_cached_data-members.html create mode 100644 sdk/doc/html/structline__feature_1_1_cached_data.html create mode 100644 sdk/doc/html/structline__feature_1_1_params-members.html create mode 100644 sdk/doc/html/structline__feature_1_1_params.html create mode 100644 sdk/doc/html/structline__feature_1_1_point_params-members.html create mode 100644 sdk/doc/html/structline__feature_1_1_point_params.html create mode 100644 sdk/doc/html/structline__feature_1_1_range_data-members.html create mode 100644 sdk/doc/html/structline__feature_1_1_range_data.html create mode 100644 sdk/doc/html/structnode__info__coll__graph.map create mode 100644 sdk/doc/html/structnode__info__coll__graph.md5 create mode 100644 sdk/doc/html/structnode__info__coll__graph.png create mode 100644 sdk/doc/html/structodom__info-members.html create mode 100644 sdk/doc/html/structodom__info.html create mode 100644 sdk/doc/html/structpoint__info-members.html create mode 100644 sdk/doc/html/structpoint__info.html create mode 100644 sdk/doc/html/structpose__info-members.html create mode 100644 sdk/doc/html/structpose__info.html create mode 100644 sdk/doc/html/utilities_8h_source.html create mode 100644 sdk/doc/html/ydliar.png delete mode 100644 sdk/doc/latex/Makefile delete mode 100644 sdk/doc/latex/annotated.tex delete mode 100644 sdk/doc/latex/class_c_yd_lidar.tex delete mode 100644 sdk/doc/latex/class_event.tex delete mode 100644 sdk/doc/latex/class_locker.tex delete mode 100644 sdk/doc/latex/class_scoped_locker.tex delete mode 100644 sdk/doc/latex/class_scoped_locker__coll__graph.md5 delete mode 100644 sdk/doc/latex/class_scoped_locker__coll__graph.pdf delete mode 100644 sdk/doc/latex/class_thread.tex delete mode 100644 sdk/doc/latex/classserial_1_1_millisecond_timer.tex delete mode 100644 sdk/doc/latex/classserial_1_1_serial.tex delete mode 100644 sdk/doc/latex/classserial_1_1_serial_1_1_scoped_read_lock.tex delete mode 100644 sdk/doc/latex/classserial_1_1_serial_1_1_scoped_write_lock.tex delete mode 100644 sdk/doc/latex/classserial_1_1serial_1_1_serial_1_1_serial_impl.tex delete mode 100644 sdk/doc/latex/classydlidar_1_1_y_dlidar_driver.tex delete mode 100644 sdk/doc/latex/classydlidar_1_1_y_dlidar_driver__coll__graph.md5 delete mode 100644 sdk/doc/latex/classydlidar_1_1_y_dlidar_driver__coll__graph.pdf delete mode 100644 sdk/doc/latex/dir_0834a1453ead243784276400df23f54f.tex delete mode 100644 sdk/doc/latex/dir_3808e3f8fe545b07b1d2715928fb0eea.tex delete mode 100644 sdk/doc/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex delete mode 100644 sdk/doc/latex/dir_68d46136ab8a8bc94545215845910cfb.tex delete mode 100644 sdk/doc/latex/dir_6f9635d4fbfa321d4c00f29df5cd540c.tex delete mode 100644 sdk/doc/latex/dir_cfa68689d3aca823fc84b2132e590e35.tex delete mode 100644 sdk/doc/latex/dir_d44c64559bbebec7f509842c48db8b23.tex delete mode 100644 sdk/doc/latex/doxygen.sty delete mode 100644 sdk/doc/latex/md_README.tex delete mode 100644 sdk/doc/latex/md__home_yang_tmp_sdk_README.tex delete mode 100644 sdk/doc/latex/namespaces.tex delete mode 100644 sdk/doc/latex/namespaceserial.tex delete mode 100644 sdk/doc/latex/refman.tex delete mode 100644 sdk/doc/latex/struct_laser_config.tex delete mode 100644 sdk/doc/latex/struct_laser_scan.tex delete mode 100644 sdk/doc/latex/struct_laser_scan__coll__graph.md5 delete mode 100644 sdk/doc/latex/struct_laser_scan__coll__graph.pdf delete mode 100644 sdk/doc/latex/struct_package_node.tex delete mode 100644 sdk/doc/latex/structcmd__packet.tex delete mode 100644 sdk/doc/latex/structdevice__health.tex delete mode 100644 sdk/doc/latex/structdevice__info.tex delete mode 100644 sdk/doc/latex/structfunction__state.tex delete mode 100644 sdk/doc/latex/structlidar__ans__header.tex delete mode 100644 sdk/doc/latex/structnode__info.tex delete mode 100644 sdk/doc/latex/structnode__package.tex delete mode 100644 sdk/doc/latex/structnode__package__coll__graph.md5 delete mode 100644 sdk/doc/latex/structnode__package__coll__graph.pdf delete mode 100644 sdk/doc/latex/structnode__packages.tex delete mode 100644 sdk/doc/latex/structsampling__rate.tex delete mode 100644 sdk/doc/latex/structscan__exposure.tex delete mode 100644 sdk/doc/latex/structscan__frequency.tex delete mode 100644 sdk/doc/latex/structscan__heart__beat.tex delete mode 100644 sdk/doc/latex/structscan__points.tex delete mode 100644 sdk/doc/latex/structscan__rotation.tex delete mode 100644 sdk/doc/latex/structscan_dot.tex delete mode 100644 sdk/doc/latex/structserial_1_1_port_info.tex delete mode 100644 sdk/doc/latex/structserial_1_1_port_info__coll__graph.md5 delete mode 100644 sdk/doc/latex/structserial_1_1_port_info__coll__graph.pdf delete mode 100644 sdk/doc/latex/structserial_1_1_timeout.tex delete mode 100644 sdk/doc/latex/structserial_1_1termios2.tex create mode 100644 sdk/include/line_feature.h create mode 100644 sdk/include/utilities.h create mode 100755 sdk/matrix/.clang-tidy create mode 100755 sdk/matrix/.gitignore create mode 100755 sdk/matrix/.travis.yml create mode 100755 sdk/matrix/CMakeLists.txt create mode 100755 sdk/matrix/matrix/Matrix.hpp create mode 100755 sdk/matrix/matrix/SquareMatrix.hpp create mode 100755 sdk/matrix/matrix/Vector.hpp create mode 100755 sdk/matrix/matrix/Vector2.hpp create mode 100755 sdk/matrix/matrix/Vector3.hpp create mode 100755 sdk/matrix/matrix/helper_functions.hpp create mode 100755 sdk/matrix/matrix/math.hpp create mode 100755 sdk/matrix/matrix/stdlib_imports.hpp create mode 100644 sdk/src/line_feature.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ac0c38..95fb30c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,8 @@ find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(rmw REQUIRED) find_package(sensor_msgs REQUIRED) +find_package(visualization_msgs REQUIRED) +find_package(geometry_msgs REQUIRED) set(SDK_PATH "./sdk/") @@ -27,18 +29,23 @@ include_directories( ${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/sdk/include ${PROJECT_SOURCE_DIR}/sdk/src + ${PROJECT_SOURCE_DIR}/sdk/matrix ) add_executable(ydlidar_node src/ydlidar_node.cpp ${SDK_SRC}) ament_target_dependencies(ydlidar_node "rclcpp" "sensor_msgs" + "visualization_msgs" + "geometry_msgs" ) add_executable(ydlidar_client src/ydlidar_client.cpp) ament_target_dependencies(ydlidar_client "rclcpp" "sensor_msgs" + "visualization_msgs" + "geometry_msgs" ) diff --git a/README.md b/README.md index 78a0cac..604ba89 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -YDLIDAR ROS2 PACKAGE V1.3.1 +YDLIDAR ROS2 PACKAGE V1.3.5 ===================================================================== ROS2 node and test application for YDLIDAR @@ -65,6 +65,22 @@ resolution_fixed (bool, default: true) indicated whether the LIDAR has a fixed angular resolution. +auto_reconnect (bool, default: true) + + indicated whether the LIDAR auto reconnection. + +debug (bool, default: false) + + indicated whether the LIDAR save parsing. + +reversion (bool, default: false) + + indicated whether the LIDAR data rotation 180°. + +intensities (bool, default: false) + + indicated whether the LIDAR has intensity. + angle_min (double, default: -180) Min valid angle (°) for LIDAR data. @@ -93,11 +109,33 @@ frequency (double, default: 7) the LIDAR scanning frequency. +sensor_x (double, default: 0) + + the LIDAR X axis installation coordinates + +sensor_y (double, default: 0) + + the LIDAR Y axis installation coordinates + +sensor_yaw (double, default: 0) + + the LIDAR installation direction + + + + Upgrade Log ===================================================================== + +2018-07-16 version:1.3.5 + + 1.Update SDK verison to 1.3.6 + + 2.add imu sync. + 2018-04-16 version:1.3.1 1.Update SDK verison to 1.3.1 diff --git a/config/config.ini b/config/config.ini index adfba78..dd1778f 100644 --- a/config/config.ini +++ b/config/config.ini @@ -8,8 +8,15 @@ angle_fixed =TRUE resolution_fixed =FALSE heartbeat =FALSE low_exposure =FALSE +auto_reconnect = TRUE +reversion = FALSE +debug = FALSE +intensities = FALSE angle_max =180 angle_min =-180 max_range =16.0 min_range =0.08 frequency =7.0 +sensor_x =0.0 +sensor_y =0.0 +sensor_yaw =0.0 diff --git a/launch/ydlidar.launch b/launch/ydlidar.launch deleted file mode 100644 index 782d600..0000000 --- a/launch/ydlidar.launch +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/package.xml b/package.xml index 935377f..4674546 100644 --- a/package.xml +++ b/package.xml @@ -13,9 +13,13 @@ rclcpp sensor_msgs + visualization_msgs + geometry_msgs rclcpp sensor_msgs + visualization_msgs + geometry_msgs ament_cmake_gtest ament_lint_auto diff --git a/sdk/CMakeLists.txt b/sdk/CMakeLists.txt index 740f897..1af8cf4 100644 --- a/sdk/CMakeLists.txt +++ b/sdk/CMakeLists.txt @@ -3,6 +3,8 @@ cmake_minimum_required(VERSION 2.8) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") include_directories(include) include_directories(src) +include_directories(matrix) + IF (WIN32) FILE(GLOB SDK_SRC @@ -11,6 +13,8 @@ FILE(GLOB SDK_SRC "src/*.h" "src/impl/windows/*.cpp" "src/impl/windows/*.h" + "matrix/matrix/*.hpp" + ) ELSE() @@ -20,13 +24,14 @@ FILE(GLOB SDK_SRC "src/*.h" "src/impl/unix/*.cpp" "src/impl/unix/*.h" + "matrix/matrix/*.hpp" + ) ENDIF() add_subdirectory(samples) - add_library(ydlidar_driver SHARED ${SDK_SRC}) set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) IF (WIN32) diff --git a/sdk/README.md b/sdk/README.md index b188a4e..08fe3f4 100644 --- a/sdk/README.md +++ b/sdk/README.md @@ -1,4 +1,4 @@ -YDLIDAR SDK PACKAGE V1.3.3 +YDLIDAR SDK PACKAGE V1.3.6 ===================================================================== SDK [test](https://github.com/yangfuyuan/sdk) application for YDLIDAR @@ -7,48 +7,86 @@ Visit EAI Website for more details about [YDLIDAR](http://www.ydlidar.com/) . How to build YDLIDAR SDK samples ===================================================================== + $ git clone https://github.com/yangfuyuan/sdk + $ cd sdk + $ git checkout master + $ cd .. + $ mkdir build + $ cd build + $ cmake ../sdk + $ make ###linux + $ vs open Project.sln ###windows - + How to run YDLIDAR SDK samples ===================================================================== + $ cd samples linux: $ ./ydlidar_test - $Please enter the lidar port:/dev/ttyUSB0 - $Please enter the lidar baud rate:230400 + + $ Please enter the lidar port:/dev/ttyUSB0 + + $ Please enter the lidar baud rate:115200 + + $ Please enter the lidar intensity:0 + windows: $ ydlidar_test.exe - $Please enter the lidar port:COM3 - $Please enter the lidar baud rate:230400 + + $ Please enter the lidar port:COM3 + + $ Please enter the lidar baud rate:115200 + + $ Please enter the lidar intensity:0 ===================================================================== You should see YDLIDAR's scan result in the console: - Yd Lidar running correctly ! The health status: good - [YDLIDAR] Connection established in [/dev/ttyUSB0]: - Firmware version: 2.0.9 - Hardware version: 2 - Model: G4 - Serial: 2018022700000003 - [YDLIDAR INFO] Current Sampling Rate : 9K - [YDLIDAR INFO] Current Scan Frequency : 7.400000Hz - [YDLIDAR INFO] Now YDLIDAR is scanning ...... - Scan received: 43 ranges - Scan received: 1361 ranges - Scan received: 1412 ranges + YDLIDAR C++ TEST + Please enter the lidar port:/dev/ttyUSB0 + Please enter the lidar baud rate:115200 + Please enter the lidar intensity:1 + fhs_lock: creating lockfile: 25148 + + Yd Lidar running correctly ! The health status: good + firmware: 273 + [YDLIDAR] Connection established in [/dev/ttyUSB0]: + Firmware version: 1.1.7 + Hardware version: 1 + Model: S4 + Serial: 2018022700000003 + [YDLIDAR INFO] Current Sampling Rate : 4K + [YDLIDAR INFO] Current Scan Frequency : 7.000000Hz + set EXPOSURE MODEL SUCCESS!!! + [YDLIDAR INFO] Now YDLIDAR is scanning ...... + min_angle: -3.141593 + max_angle: 3.141593 + Scan received: 571 ranges + fit line size: 9 + line length: 0.127150, line angle: -1.888069 + line length: 0.149980, line angle: -2.520781 + line length: 0.149141, line angle: -2.590903 + line length: 0.186178, line angle: -2.221969 + line length: 0.123318, line angle: -2.354801 + line length: 0.086761, line angle: 2.476112 + line length: 0.035698, line angle: 2.552944 + line length: 0.108063, line angle: 0.907348 + line length: 0.115837, line angle: -1.229582 + Lidar point data structure @@ -56,18 +94,44 @@ Lidar point data structure data structure: + struct odom_info { + + uint64_t stamp; ///< 时间戳 + + double x; ///< x位置 + + double y; ///< y位置 + + double phi; ///< 角度方向 + + double v; ///< 线速度 + + double w; ///< 角速度 + + double dx; ///< x位置增量 + + double dy; ///< y位置增量 + + double dth; ///< 方向增量 + + }; + struct node_info { - uint8_t sync_quality;//!intensity + uint8_t sync_flag;//new scan flag + + uint16_t sync_quality;//!intensity uint16_t angle_q6_checkbit; //!angle - uint16_t distance_q2; //! distance + uint16_t distance_q; //! distance uint64_t stamp; //! time stamp uint8_t scan_frequence;//! current_frequence = scan_frequence/10.0, If the current value equals zero, it is an invalid value - + + odom_info current_odom; //! current odometry sync pose + } __attribute__((packed)) ; example: @@ -79,18 +143,18 @@ example: current_time_stamp = data[i].stamp; - current_distance = data[i].distance_q2/4.f; + current_distance = data[i].distance_q; //v1.3.5版本之后距离不用右移2位 current_angle = ((data[i].angle_q6_checkbit>>LIDAR_RESP_MEASUREMENT_ANGLE_SHIFT)/64.0f); - current_intensity = (float)(data[i].sync_quality >> 2); + current_intensity = (float)(data[i].sync_quality);//v1.3.5版本之后信号质量不用右移2位 ###note:current_frequence = data[0].scan_frequence/10.0. ###if the current_frequence value equals zero, it is an invalid value. code: - + void ParseScan(node_info* data, const size_t& size) { double current_frequence, current_distance, current_angle, current_intensity; @@ -109,9 +173,9 @@ code: current_angle = ((data[i].angle_q6_checkbit>>LIDAR_RESP_MEASUREMENT_ANGLE_SHIFT)/64.0f);//LIDAR_RESP_MEASUREMENT_ANGLE_SHIFT equals 8 - current_distance = data[i].distance_q2/4.f; + current_distance = data[i].distance_q; - current_intensity = (float)(data[i].sync_quality >> 2); + current_intensity = (float)(data[i].sync_quality ); } @@ -132,6 +196,24 @@ code: Upgrade Log ===================================================================== + +2018-07-17 version:1.3.6 + + 1.add fit line. + + +2018-05-23 version:1.3.5 + + 1.add sync imu or odometry. + + 2.update scan protocol. + +2018-05-23 version:1.3.4 + + 1.add automatic reconnection if there is an exception + + 2.add serial file lock. + 2018-05-14 version:1.3.3 1.add the heart function constraint. @@ -145,4 +227,3 @@ Upgrade Log 2018-04-16 version:1.3.1 1.Compensate for each laser point timestamp. - diff --git a/sdk/doc/html/_c_yd_lidar_8h_source.html b/sdk/doc/html/_c_yd_lidar_8h_source.html index eea56b4..7fad325 100644 --- a/sdk/doc/html/_c_yd_lidar_8h_source.html +++ b/sdk/doc/html/_c_yd_lidar_8h_source.html @@ -4,7 +4,7 @@ -YDLIDAR SDK: /home/yang/tmp/sdk/include/CYdLidar.h Source File +YDLIDAR SDK: include/CYdLidar.h Source File @@ -22,10 +22,9 @@ - @@ -91,8 +90,15 @@
CYdLidar.h
-
1 
2 #pragma once
3 #include "utils.h"
4 #include "ydlidar_driver.h"
5 #include <math.h>
6 
7 #if !defined(__cplusplus)
8 #ifndef __cplusplus
9 #error "The YDLIDAR SDK requires a C++ compiler to be built"
10 #endif
11 #endif
12 #define PropertyBuilderByName(type, name, access_permission)\
13  access_permission:\
14  type m_##name;\
15  public:\
16  inline void set##name(type v) {\
17  m_##name = v;\
18  }\
19  inline type get##name() {\
20  return m_##name;\
21 }\
22 
23 #ifndef _countof
24 #define _countof(_Array) (int)(sizeof(_Array) / sizeof(_Array[0]))
25 #endif
26 
27 #ifndef M_PI
28 #define M_PI 3.1415926
29 #endif
30 
31 #define DEG2RAD(x) ((x)*M_PI/180.)
32 
33 class YDLIDAR_API CYdLidar
34 {
35  PropertyBuilderByName(float,MaxRange,private)
36  PropertyBuilderByName(float,MinRange,private)
37  PropertyBuilderByName(float,MaxAngle,private)
38  PropertyBuilderByName(float,MinAngle,private)
39  PropertyBuilderByName(int,ScanFrequency,private)
40 
41  PropertyBuilderByName(bool,Intensities,private)
42  PropertyBuilderByName(bool,FixedResolution,private)
43  PropertyBuilderByName(bool,Exposure,private)
44  PropertyBuilderByName(bool,HeartBeat,private)
45  PropertyBuilderByName(bool,Reversion, private)
46 
47  PropertyBuilderByName(int,SerialBaudrate,private)
48  PropertyBuilderByName(int,SampleRate,private)
49 
50  PropertyBuilderByName(std::string,SerialPort,private)
51  PropertyBuilderByName(std::vector<float>,IgnoreArray,private)
52 
53 
54 public:
55  CYdLidar();
56  virtual ~CYdLidar();
57 
58  bool initialize();
59 
60  // Return true if laser data acquistion succeeds, If it's not
61  bool doProcessSimple(LaserScan &outscan, bool &hardwareError);
62 
63  //Turn on the motor enable
64  bool turnOn();
65  //Turn off the motor enable and close the scan
66  bool turnOff();
67 
69  bool getDeviceHealth() const;
70 
72  bool getDeviceInfo(int &type);
73 
75  bool checkHeartBeat() const;
76 
78  bool checkScanFrequency();
79 
80  //Turn off lidar connection
81  void disconnecting();
82 
83 protected:
88  bool checkCOMMs();
89 
93  bool checkStatus();
94 
98  bool checkHardware();
99 
100 
101 
102 private:
103  bool isScanning;
104  int node_counts ;
105  double each_angle;
106  int show_error;
107 }; // End of class
108 
Definition: ydlidar_driver.h:212
-
Definition: CYdLidar.h:33
+
1 
2 #pragma once
3 #include "line_feature.h"
4 #include "utils.h"
5 #include "ydlidar_driver.h"
6 #include <math.h>
7 #include "matrix/math.hpp"
8 
9 #if !defined(__cplusplus)
10 #ifndef __cplusplus
11 #error "The YDLIDAR SDK requires a C++ compiler to be built"
12 #endif
13 #endif
14 #define PropertyBuilderByName(type, name, access_permission)\
15  access_permission:\
16  type m_##name;\
17  public:\
18  inline void set##name(type v) {\
19  m_##name = v;\
20  }\
21  inline type get##name() {\
22  return m_##name;\
23 }\
24 
25 #ifndef _countof
26 #define _countof(_Array) (int)(sizeof(_Array) / sizeof(_Array[0]))
27 #endif
28 
29 #ifndef M_PI
30 #define M_PI 3.1415926
31 #endif
32 
33 #ifndef DEG2RAD
34 #define DEG2RAD(x) ((x)*M_PI/180.)
35 #endif
36 
37 using namespace line_feature;
38 
39 class YDLIDAR_API CYdLidar
40 {
41  PropertyBuilderByName(float,MaxRange,private)
42  PropertyBuilderByName(float,MinRange,private)
43  PropertyBuilderByName(float,MaxAngle,private)
44  PropertyBuilderByName(float,MinAngle,private)
45  PropertyBuilderByName(int,ScanFrequency,private)
46 
47  PropertyBuilderByName(bool,Intensities,private)
48  PropertyBuilderByName(bool,FixedResolution,private)
49  PropertyBuilderByName(bool,Exposure,private)
50  PropertyBuilderByName(bool,HeartBeat,private)
51  PropertyBuilderByName(bool,Reversion, private)
52  PropertyBuilderByName(bool,AutoReconnect, private)
53  PropertyBuilderByName(bool,EnableDebug, private)
54 
55 
56 
57  PropertyBuilderByName(int,SerialBaudrate,private)
58  PropertyBuilderByName(int,SampleRate,private)
59 
60  PropertyBuilderByName(std::string,SerialPort,private)
61  PropertyBuilderByName(std::vector<float>,IgnoreArray,private)
62 
63 
64 public:
65  CYdLidar();
66  virtual ~CYdLidar();
67 
68  bool initialize();
69 
70  // Return true if laser data acquistion succeeds, If it's not
71  bool doProcessSimple(LaserScan &outscan, LaserScan &syncscan, PointCloud &pointcloud, std::vector<gline>& lines, bool &hardwareError);
72 
73  //Turn on the motor enable
74  bool turnOn();
75  //Turn off the motor enable and close the scan
76  bool turnOff();
77 
79  bool getDeviceHealth() const;
80 
82  bool getDeviceInfo(int &type);
83 
85  bool checkHeartBeat() const;
86 
88  bool checkScanFrequency();
89 
94  void setSyncOdometry(const odom_info& odom);
95 
100  void setSensorPose(const pose_info& pose);
101 
102  //Turn off lidar connection
103  void disconnecting();
104 
105 protected:
110  bool checkCOMMs();
111 
115  bool checkStatus();
116 
120  bool checkHardware();
121 
122 
123 
124 private:
125  bool isScanning;
126  int node_counts ;
127  double each_angle;
128  int show_error;
129 
130  matrix::SquareMatrix<double, 3> sensor_matrix;
131  matrix::SquareMatrix<double, 3> sensor_matrix_inv;
132  matrix::SquareMatrix<double, 3> robot_matrix;
133  matrix::Vector<double, 3> lidar_sensor_vector;
134  matrix::Vector<double, 3> current_sensor_vector;
135 
136  LineFeature line_feature_;
137 
138 }; // End of class
139 
+ +
Definition: ydlidar_driver.h:108
+
Definition: ydlidar_driver.h:249
+
Definition: ydlidar_driver.h:263
+
Definition: CYdLidar.h:39
+
Definition: line_feature.h:13
+
Definition: line_feature.h:10
+
Definition: ydlidar_driver.h:94
YDLIDAR SDK -  V1.3.3 +  V1.3.6
+ + + + + +
+
YDLIDAR SDK +  V1.3.6 +
+
+ + + + + + + +
+
+ + +
+ +
+ + + +
+ +
+
Matrix.hpp File Reference
+
+
+
#include <cstdio>
+#include <cstring>
+#include "math.hpp"
+
+Include dependency graph for Matrix.hpp:
+
+
+ + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  matrix::Vector< Type, M >
 
class  matrix::Matrix< Type, M, N >
 
+ + + + + + + + + + + + + + + + +

+Functions

+template<typename Type , size_t M, size_t N>
Matrix< Type, M, N > matrix::zeros ()
 
+template<typename Type , size_t M, size_t N>
Matrix< Type, M, N > matrix::ones ()
 
+template<typename Type , size_t M, size_t N>
Matrix< Type, M, N > matrix::operator* (Type scalar, const Matrix< Type, M, N > &other)
 
+template<typename Type , size_t M, size_t N>
bool matrix::isEqual (const Matrix< Type, M, N > &x, const Matrix< Type, M, N > &y, const Type eps=1e-4f)
 
+template<typename Type >
bool matrix::isEqualF (Type x, Type y, Type eps=1e-4f)
 
+

Detailed Description

+

A simple matrix template library.

+
Author
James Goppert james.nosp@m..gop.nosp@m.pert@.nosp@m.gmai.nosp@m.l.com
+
+ + + + diff --git a/sdk/doc/html/_matrix_8hpp__dep__incl.map b/sdk/doc/html/_matrix_8hpp__dep__incl.map new file mode 100644 index 0000000..67fe8d3 --- /dev/null +++ b/sdk/doc/html/_matrix_8hpp__dep__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sdk/doc/html/_matrix_8hpp__dep__incl.md5 b/sdk/doc/html/_matrix_8hpp__dep__incl.md5 new file mode 100644 index 0000000..7bc21e9 --- /dev/null +++ b/sdk/doc/html/_matrix_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +aaae535b132837f2f84bcd8acf0a15a6 \ No newline at end of file diff --git a/sdk/doc/html/_matrix_8hpp__dep__incl.png b/sdk/doc/html/_matrix_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..bee85b72bdb56679d5e1ca11dd4cf90ddcabf159 GIT binary patch literal 27475 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 HVeJ1u1;rii literal 0 HcmV?d00001 diff --git a/sdk/doc/html/_matrix_8hpp__incl.map b/sdk/doc/html/_matrix_8hpp__incl.map new file mode 100644 index 0000000..7da1ce5 --- /dev/null +++ b/sdk/doc/html/_matrix_8hpp__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sdk/doc/html/_matrix_8hpp__incl.md5 b/sdk/doc/html/_matrix_8hpp__incl.md5 new file mode 100644 index 0000000..75fbb68 --- /dev/null +++ b/sdk/doc/html/_matrix_8hpp__incl.md5 @@ -0,0 +1 @@ +ea53e5fa1e6cbdc3e965f73b1c51b16c \ No newline at end of file diff --git a/sdk/doc/html/_matrix_8hpp__incl.png b/sdk/doc/html/_matrix_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..c669e7ff01282e44e17e389a5ae892e64e10f85d GIT binary patch literal 34208 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 Se~W^DuPb)| literal 0 HcmV?d00001 diff --git a/sdk/doc/html/_matrix_8hpp_source.html b/sdk/doc/html/_matrix_8hpp_source.html new file mode 100644 index 0000000..f1fb2a3 --- /dev/null +++ b/sdk/doc/html/_matrix_8hpp_source.html @@ -0,0 +1,108 @@ + + + + + + +YDLIDAR SDK: matrix/matrix/Matrix.hpp Source File + + + + + + + + + + + +
+
+
Matrix.hpp
+
+
+Go to the documentation of this file.
1 
9 #pragma once
10 
11 #include <cstdio>
12 #include <cstring>
13 
14 #if defined(SUPPORT_STDIOSTREAM)
15 #include <iostream>
16 #include <iomanip>
17 #endif // defined(SUPPORT_STDIOSTREAM)
18 
19 #include "math.hpp"
20 
21 namespace matrix
22 {
23 
24 template <typename Type, size_t M>
25 class Vector;
26 
27 template<typename Type, size_t M, size_t N>
28 class Matrix
29 {
30 
31 public:
32 
33  Type _data[M][N];
34 
35  // Constructors
36  Matrix() : _data() {}
37 
38  Matrix(const Type data_[][N]) : _data()
39  {
40  memcpy(_data, data_, sizeof(_data));
41  }
42 
43  Matrix(const Type *data_) : _data()
44  {
45  memcpy(_data, data_, sizeof(_data));
46  }
47 
48  Matrix(const Matrix &other) : _data()
49  {
50  memcpy(_data, other._data, sizeof(_data));
51  }
52 
57  Type *data()
58  {
59  return _data[0];
60  }
61 
62  const Type *data() const
63  {
64  return _data[0];
65  }
66 
67  inline Type operator()(size_t i, size_t j) const
68  {
69  return _data[i][j];
70  }
71 
72  inline Type &operator()(size_t i, size_t j)
73  {
74  return _data[i][j];
75  }
76 
77  Matrix<Type, M, N> & operator=(const Matrix<Type, M, N> &other)
78  {
79  if (this != &other) {
80  memcpy(_data, other._data, sizeof(_data));
81  }
82  return (*this);
83  }
84 
89  // this might use a lot of programming memory
90  // since it instantiates a class for every
91  // required mult pair, but it provides
92  // compile time size_t checking
93  template<size_t P>
95  {
96  const Matrix<Type, M, N> &self = *this;
98  res.setZero();
99 
100  for (size_t i = 0; i < M; i++) {
101  for (size_t k = 0; k < P; k++) {
102  for (size_t j = 0; j < N; j++) {
103  res(i, k) += self(i, j) * other(j, k);
104  }
105  }
106  }
107 
108  return res;
109  }
110 
111  Matrix<Type, M, N> emult(const Matrix<Type, M, N> &other) const
112  {
113  Matrix<Type, M, N> res;
114  const Matrix<Type, M, N> &self = *this;
115 
116  for (size_t i = 0; i < M; i++) {
117  for (size_t j = 0; j < N; j++) {
118  res(i, j) = self(i, j)*other(i, j);
119  }
120  }
121 
122  return res;
123  }
124 
125  Matrix<Type, M, N> edivide(const Matrix<Type, M, N> &other) const
126  {
127  Matrix<Type, M, N> res;
128  const Matrix<Type, M, N> &self = *this;
129 
130  for (size_t i = 0; i < M; i++) {
131  for (size_t j = 0; j < N; j++) {
132  res(i, j) = self(i, j)/other(i, j);
133  }
134  }
135 
136  return res;
137  }
138 
139  Matrix<Type, M, N> operator+(const Matrix<Type, M, N> &other) const
140  {
141  Matrix<Type, M, N> res;
142  const Matrix<Type, M, N> &self = *this;
143 
144  for (size_t i = 0; i < M; i++) {
145  for (size_t j = 0; j < N; j++) {
146  res(i, j) = self(i, j) + other(i, j);
147  }
148  }
149 
150  return res;
151  }
152 
153  Matrix<Type, M, N> operator-(const Matrix<Type, M, N> &other) const
154  {
155  Matrix<Type, M, N> res;
156  const Matrix<Type, M, N> &self = *this;
157 
158  for (size_t i = 0; i < M; i++) {
159  for (size_t j = 0; j < N; j++) {
160  res(i, j) = self(i, j) - other(i, j);
161  }
162  }
163 
164  return res;
165  }
166 
167  // unary minus
168  Matrix<Type, M, N> operator-() const
169  {
170  Matrix<Type, M, N> res;
171  const Matrix<Type, M, N> &self = *this;
172 
173  for (size_t i = 0; i < M; i++) {
174  for (size_t j = 0; j < N; j++) {
175  res(i, j) = -self(i, j);
176  }
177  }
178 
179  return res;
180  }
181 
182  void operator+=(const Matrix<Type, M, N> &other)
183  {
184  Matrix<Type, M, N> &self = *this;
185  self = self + other;
186  }
187 
188  void operator-=(const Matrix<Type, M, N> &other)
189  {
190  Matrix<Type, M, N> &self = *this;
191  self = self - other;
192  }
193 
194  template<size_t P>
195  void operator*=(const Matrix<Type, N, P> &other)
196  {
197  Matrix<Type, M, N> &self = *this;
198  self = self * other;
199  }
200 
205  Matrix<Type, M, N> operator*(Type scalar) const
206  {
207  Matrix<Type, M, N> res;
208  const Matrix<Type, M, N> &self = *this;
209 
210  for (size_t i = 0; i < M; i++) {
211  for (size_t j = 0; j < N; j++) {
212  res(i, j) = self(i, j) * scalar;
213  }
214  }
215 
216  return res;
217  }
218 
219  inline Matrix<Type, M, N> operator/(Type scalar) const
220  {
221  return (*this)*(1/scalar);
222  }
223 
224  Matrix<Type, M, N> operator+(Type scalar) const
225  {
226  Matrix<Type, M, N> res;
227  const Matrix<Type, M, N> &self = *this;
228 
229  for (size_t i = 0; i < M; i++) {
230  for (size_t j = 0; j < N; j++) {
231  res(i, j) = self(i, j) + scalar;
232  }
233  }
234 
235  return res;
236  }
237 
238  inline Matrix<Type, M, N> operator-(Type scalar) const
239  {
240  return (*this) + (-1*scalar);
241  }
242 
243  void operator*=(Type scalar)
244  {
245  Matrix<Type, M, N> &self = *this;
246 
247  for (size_t i = 0; i < M; i++) {
248  for (size_t j = 0; j < N; j++) {
249  self(i, j) = self(i, j) * scalar;
250  }
251  }
252  }
253 
254  void operator/=(Type scalar)
255  {
256  Matrix<Type, M, N> &self = *this;
257  self = self * (1.0f / scalar);
258  }
259 
260  inline void operator+=(Type scalar)
261  {
262  *this = (*this) + scalar;
263  }
264 
265  inline void operator-=(Type scalar)
266  {
267  *this = (*this) - scalar;
268  }
269 
270 
275  void write_string(char * buf, size_t n) const
276  {
277  buf[0] = '\0'; // make an empty string to begin with (we need the '\0' for strlen to work)
278  const Matrix<Type, M, N> &self = *this;
279  for (size_t i = 0; i < M; i++) {
280  for (size_t j = 0; j < N; j++) {
281  snprintf(buf + strlen(buf), n - strlen(buf), "\t%8.2g", double(self(i, j))); // directly append to the string buffer
282  }
283  snprintf(buf + strlen(buf), n - strlen(buf), "\n");
284  }
285  }
286 
287  void print() const
288  {
289  static const size_t n = 10*N*M;
290  char * buf = new char[n];
291  write_string(buf, n);
292  printf("%s\n", buf);
293  delete[] buf;
294  }
295 
296  Matrix<Type, N, M> transpose() const
297  {
298  Matrix<Type, N, M> res;
299  const Matrix<Type, M, N> &self = *this;
300 
301  for (size_t i = 0; i < M; i++) {
302  for (size_t j = 0; j < N; j++) {
303  res(j, i) = self(i, j);
304  }
305  }
306 
307  return res;
308  }
309 
310  // tranpose alias
311  inline Matrix<Type, N, M> T() const
312  {
313  return transpose();
314  }
315 
316  template<size_t P, size_t Q>
317  Matrix<Type, P, Q> slice(size_t x0, size_t y0) const
318  {
319  Matrix<Type, P, Q> res(&(_data[x0][y0]));
320  return res;
321  }
322 
323  template<size_t P, size_t Q>
324  void set(const Matrix<Type, P, Q> &m, size_t x0, size_t y0)
325  {
326  Matrix<Type, M, N> &self = *this;
327  for (size_t i = 0; i < P; i++) {
328  for (size_t j = 0; j < Q; j++) {
329  self(i + x0, j + y0) = m(i, j);
330  }
331  }
332  }
333 
334  void setRow(size_t i, const Matrix<Type, N, 1> &row)
335  {
336  Matrix<Type, M, N> &self = *this;
337  for (size_t j = 0; j < N; j++) {
338  self(i, j) = row(j, 0);
339  }
340  }
341 
342  void setCol(size_t j, const Matrix<Type, M, 1> &col)
343  {
344  Matrix<Type, M, N> &self = *this;
345  for (size_t i = 0; i < M; i++) {
346  self(i, j) = col(i, 0);
347  }
348  }
349 
350  void setZero()
351  {
352  memset(_data, 0, sizeof(_data));
353  }
354 
355  inline void zero()
356  {
357  setZero();
358  }
359 
360  void setAll(Type val)
361  {
362  Matrix<Type, M, N> &self = *this;
363 
364  for (size_t i = 0; i < M; i++) {
365  for (size_t j = 0; j < N; j++) {
366  self(i, j) = val;
367  }
368  }
369  }
370 
371  inline void setOne()
372  {
373  setAll(1);
374  }
375 
376  void setIdentity()
377  {
378  setZero();
379  Matrix<Type, M, N> &self = *this;
380 
381  for (size_t i = 0; i < M && i < N; i++) {
382  self(i, i) = 1;
383  }
384  }
385 
386  inline void identity()
387  {
388  setIdentity();
389  }
390 
391  inline void swapRows(size_t a, size_t b)
392  {
393  if (a == b) {
394  return;
395  }
396 
397  Matrix<Type, M, N> &self = *this;
398 
399  for (size_t j = 0; j < N; j++) {
400  Type tmp = self(a, j);
401  self(a, j) = self(b, j);
402  self(b, j) = tmp;
403  }
404  }
405 
406  inline void swapCols(size_t a, size_t b)
407  {
408  if (a == b) {
409  return;
410  }
411 
412  Matrix<Type, M, N> &self = *this;
413 
414  for (size_t i = 0; i < M; i++) {
415  Type tmp = self(i, a);
416  self(i, a) = self(i, b);
417  self(i, b) = tmp;
418  }
419  }
420 
421  Matrix<Type, M, N> abs() const
422  {
424  for (size_t i=0; i<M; i++) {
425  for (size_t j=0; j<N; j++) {
426  r(i,j) = Type(fabs((*this)(i,j)));
427  }
428  }
429  return r;
430  }
431 
432  Type max() const
433  {
434  Type max_val = (*this)(0,0);
435  for (size_t i=0; i<M; i++) {
436  for (size_t j=0; j<N; j++) {
437  Type val = (*this)(i,j);
438  if (val > max_val) {
439  max_val = val;
440  }
441  }
442  }
443  return max_val;
444  }
445 
446  Type min() const
447  {
448  Type min_val = (*this)(0,0);
449  for (size_t i=0; i<M; i++) {
450  for (size_t j=0; j<N; j++) {
451  Type val = (*this)(i,j);
452  if (val < min_val) {
453  min_val = val;
454  }
455  }
456  }
457  return min_val;
458  }
459 
460 };
461 
462 template<typename Type, size_t M, size_t N>
463 Matrix<Type, M, N> zeros() {
465  m.setZero();
466  return m;
467 }
468 
469 template<typename Type, size_t M, size_t N>
470 Matrix<Type, M, N> ones() {
472  m.setOne();
473  return m;
474 }
475 
476 template<typename Type, size_t M, size_t N>
477 Matrix<Type, M, N> operator*(Type scalar, const Matrix<Type, M, N> &other)
478 {
479  return other * scalar;
480 }
481 
482 template<typename Type, size_t M, size_t N>
483 bool isEqual(const Matrix<Type, M, N> &x,
484  const Matrix<Type, M, N> &y, const Type eps=1e-4f) {
485 
486  bool equal = true;
487 
488  for (size_t i = 0; i < M; i++) {
489  for (size_t j = 0; j < N; j++) {
490  if (fabs(x(i, j) - y(i, j)) > eps) {
491  equal = false;
492  break;
493  }
494  }
495  if (equal == false) break;
496  }
497 
498 
499  if (!equal) {
500  static const size_t n = 10*N*M;
501  char * buf = new char[n];
502  x.write_string(buf, n);
503  printf("not equal\nx:\n%s\n", buf);
504  y.write_string(buf, n);
505  printf("y:\n%s\n", buf);
506  delete[] buf;
507  }
508  return equal;
509 }
510 
511 
512 template<typename Type>
513 bool isEqualF(Type x,
514  Type y, Type eps=1e-4f) {
515 
516  bool equal = true;
517 
518  if (fabs(x - y) > eps) {
519  equal = false;
520  }
521 
522  if (!equal) {
523  printf("not equal\nx:\n%g\ny:\n%g\n", double(x), double(y));
524  }
525  return equal;
526 }
527 
528 #if defined(SUPPORT_STDIOSTREAM)
529 template<typename Type, size_t M, size_t N>
530 std::ostream& operator<<(std::ostream& os,
532 {
533  for (size_t i = 0; i < M; ++i) {
534  os << "[";
535  for (size_t j = 0; j < N; ++j) {
536  os << std::setw(10) << static_cast<double>(matrix(i, j));
537  os << "\t";
538  }
539  os << "]" << std::endl;
540  }
541  return os;
542 }
543 #endif // defined(SUPPORT_STDIOSTREAM)
544 
545 } // namespace matrix
546 
547 /* vim: set et fenc=utf-8 ff=unix sts=0 sw=4 ts=4 : */
Definition: Matrix.hpp:25
+
Type * data()
Definition: Matrix.hpp:57
+
Definition: helper_functions.hpp:5
+
void write_string(char *buf, size_t n) const
Definition: Matrix.hpp:275
+
Matrix< Type, M, N > operator*(Type scalar) const
Definition: Matrix.hpp:205
+
Definition: Matrix.hpp:28
+
Matrix< Type, M, P > operator*(const Matrix< Type, N, P > &other) const
Definition: Matrix.hpp:94
+
+ + + + diff --git a/sdk/doc/html/_square_matrix_8hpp.html b/sdk/doc/html/_square_matrix_8hpp.html new file mode 100644 index 0000000..ab7a898 --- /dev/null +++ b/sdk/doc/html/_square_matrix_8hpp.html @@ -0,0 +1,275 @@ + + + + + + +YDLIDAR SDK: matrix/matrix/SquareMatrix.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
YDLIDAR SDK +  V1.3.6 +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
SquareMatrix.hpp File Reference
+
+
+
#include "math.hpp"
+#include "helper_functions.hpp"
+
+Include dependency graph for SquareMatrix.hpp:
+
+
+ + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

class  matrix::Matrix< Type, M, N >
 
class  matrix::Vector< Type, M >
 
class  matrix::SquareMatrix< Type, M >
 
+ + + + + +

+Typedefs

+typedef SquareMatrix< float, 3 > matrix::SquareMatrix3f
 
+typedef SquareMatrix< float, 3 > matrix::Matrix3f
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Functions

+template<typename Type , size_t M>
SquareMatrix< Type, M > matrix::eye ()
 
+template<typename Type , size_t M>
SquareMatrix< Type, M > matrix::diag (Vector< Type, M > d)
 
+template<typename Type , size_t M>
SquareMatrix< Type, M > matrix::expm (const Matrix< Type, M, M > &A, size_t order=5)
 
template<typename Type , size_t M>
bool matrix::inv (const SquareMatrix< Type, M > &A, SquareMatrix< Type, M > &inv)
 
template<typename Type , size_t M>
SquareMatrix< Type, M > matrix::inv (const SquareMatrix< Type, M > &A)
 
template<typename Type , size_t M>
SquareMatrix< Type, M > matrix::cholesky (const SquareMatrix< Type, M > &A)
 
template<typename Type , size_t M>
SquareMatrix< Type, M > matrix::choleskyInv (const SquareMatrix< Type, M > &A)
 
+

Detailed Description

+

A square matrix

+
Author
James Goppert james.nosp@m..gop.nosp@m.pert@.nosp@m.gmai.nosp@m.l.com
+

Function Documentation

+ +
+
+
+template<typename Type , size_t M>
+ + + + + + + + +
SquareMatrix<Type, M> matrix::cholesky (const SquareMatrix< Type, M > & A)
+
+

cholesky decomposition

+

Note: A must be positive definite

+ +
+
+ +
+
+
+template<typename Type , size_t M>
+ + + + + + + + +
SquareMatrix<Type, M> matrix::choleskyInv (const SquareMatrix< Type, M > & A)
+
+

cholesky inverse

+

TODO: Check if gaussian elimination jumps straight to back-substitution for L or we need to do it manually. Will impact speed otherwise.

+ +
+
+ +
+
+
+template<typename Type , size_t M>
+ + + + + + + + + + + + + + + + + + +
bool matrix::inv (const SquareMatrix< Type, M > & A,
SquareMatrix< Type, M > & inv 
)
+
+

inverse based on LU factorization with partial pivotting

+ +
+
+ +
+
+
+template<typename Type , size_t M>
+ + + + + + + + +
SquareMatrix<Type, M> matrix::inv (const SquareMatrix< Type, M > & A)
+
+

inverse based on LU factorization with partial pivotting

+ +
+
+
+ + + + diff --git a/sdk/doc/html/_square_matrix_8hpp__dep__incl.map b/sdk/doc/html/_square_matrix_8hpp__dep__incl.map new file mode 100644 index 0000000..8d0f495 --- /dev/null +++ b/sdk/doc/html/_square_matrix_8hpp__dep__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sdk/doc/html/_square_matrix_8hpp__dep__incl.md5 b/sdk/doc/html/_square_matrix_8hpp__dep__incl.md5 new file mode 100644 index 0000000..c8f13f6 --- /dev/null +++ b/sdk/doc/html/_square_matrix_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +194833b8b7a761d29b272aa25b3db833 \ No newline at end of file diff --git a/sdk/doc/html/_square_matrix_8hpp__dep__incl.png b/sdk/doc/html/_square_matrix_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..8913355d7ae7974f7cd03dba6ed9ad05a4869678 GIT binary patch literal 27643 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 + + + + + + + + diff --git a/sdk/doc/html/_square_matrix_8hpp__incl.md5 b/sdk/doc/html/_square_matrix_8hpp__incl.md5 new file mode 100644 index 0000000..4d655ce --- /dev/null +++ b/sdk/doc/html/_square_matrix_8hpp__incl.md5 @@ -0,0 +1 @@ +045e441e1fcf44d819688bb25a36ad9a \ No newline at end of file diff --git a/sdk/doc/html/_square_matrix_8hpp__incl.png b/sdk/doc/html/_square_matrix_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..2862cd5b3a94fe05cbce52b633d2d803d3862817 GIT binary patch literal 28869 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 + + + + + +YDLIDAR SDK: matrix/matrix/SquareMatrix.hpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
YDLIDAR SDK +  V1.3.6 +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
SquareMatrix.hpp
+
+
+Go to the documentation of this file.
1 
9 #pragma once
10 
11 #include "math.hpp"
12 #include "helper_functions.hpp"
13 
14 namespace matrix
15 {
16 
17 template <typename Type, size_t M, size_t N>
18 class Matrix;
19 
20 template <typename Type, size_t M>
21 class Vector;
22 
23 template<typename Type, size_t M>
24 class SquareMatrix : public Matrix<Type, M, M>
25 {
26 public:
27  SquareMatrix() :
29  {
30  }
31 
32  SquareMatrix(const Type *data_) :
33  Matrix<Type, M, M>(data_)
34  {
35  }
36 
37  SquareMatrix(const Matrix<Type, M, M> &other) :
38  Matrix<Type, M, M>(other)
39  {
40  }
41 
42  // inverse alias
43  inline SquareMatrix<Type, M> I() const
44  {
46  if(inv(*this, i)) {
47  return i;
48  } else {
49  i.setZero();
50  return i;
51  }
52  }
53 
54 
55  // inverse alias
56  inline bool I(SquareMatrix<Type, M> &i) const
57  {
58  return inv(*this, i);
59  }
60 
61 
62  Vector<Type, M> diag() const
63  {
64  Vector<Type, M> res;
65  const SquareMatrix<Type, M> &self = *this;
66 
67  for (size_t i = 0; i < M; i++) {
68  res(i) = self(i, i);
69  }
70  return res;
71  }
72 
73  Type trace() const
74  {
75  Type res = 0;
76  const SquareMatrix<Type, M> &self = *this;
77 
78  for (size_t i = 0; i < M; i++) {
79  res += self(i, i);
80  }
81  return res;
82  }
83 
84 };
85 
87 
88 template<typename Type, size_t M>
91  m.setIdentity();
92  return m;
93 }
94 
95 template<typename Type, size_t M>
98  for (size_t i=0; i<M; i++) {
99  m(i,i) = d(i);
100  }
101  return m;
102 }
103 
104 template<typename Type, size_t M>
105 SquareMatrix<Type, M> expm(const Matrix<Type, M, M> & A, size_t order=5)
106 {
108  SquareMatrix<Type, M> A_pow = A;
109  res.setIdentity();
110  size_t i_factorial = 1;
111  for (size_t i=1; i<=order; i++) {
112  i_factorial *= i;
113  res += A_pow / Type(i_factorial);
114  A_pow *= A_pow;
115  }
116 
117  return res;
118 }
119 
120 
124 template<typename Type, size_t M>
126 {
128  L.setIdentity();
129  SquareMatrix<Type, M> U = A;
131  P.setIdentity();
132 
133  //printf("A:\n"); A.print();
134 
135  // for all diagonal elements
136  for (size_t n = 0; n < M; n++) {
137 
138  // if diagonal is zero, swap with row below
139  if (fabs(static_cast<float>(U(n, n))) < 1e-8f) {
140  //printf("trying pivot for row %d\n",n);
141  for (size_t i = n + 1; i < M; i++) {
142 
143  //printf("\ttrying row %d\n",i);
144  if (fabs(static_cast<float>(U(i, n))) > 1e-8f) {
145  //printf("swapped %d\n",i);
146  U.swapRows(i, n);
147  P.swapRows(i, n);
148  L.swapRows(i, n);
149  L.swapCols(i, n);
150  break;
151  }
152  }
153  }
154 
155 #ifdef MATRIX_ASSERT
156  //printf("A:\n"); A.print();
157  //printf("U:\n"); U.print();
158  //printf("P:\n"); P.print();
159  //fflush(stdout);
160  //ASSERT(fabs(U(n, n)) > 1e-8f);
161 #endif
162 
163  // failsafe, return zero matrix
164  if (fabs(static_cast<float>(U(n, n))) < 1e-8f) {
165  return false;
166  }
167 
168  // for all rows below diagonal
169  for (size_t i = (n + 1); i < M; i++) {
170  L(i, n) = U(i, n) / U(n, n);
171 
172  // add i-th row and n-th row
173  // multiplied by: -a(i,n)/a(n,n)
174  for (size_t k = n; k < M; k++) {
175  U(i, k) -= L(i, n) * U(n, k);
176  }
177  }
178  }
179 
180  //printf("L:\n"); L.print();
181  //printf("U:\n"); U.print();
182 
183  // solve LY=P*I for Y by forward subst
184  //SquareMatrix<Type, M> Y = P;
185 
186  // for all columns of Y
187  for (size_t c = 0; c < M; c++) {
188  // for all rows of L
189  for (size_t i = 0; i < M; i++) {
190  // for all columns of L
191  for (size_t j = 0; j < i; j++) {
192  // for all existing y
193  // subtract the component they
194  // contribute to the solution
195  P(i, c) -= L(i, j) * P(j, c);
196  }
197 
198  // divide by the factor
199  // on current
200  // term to be solved
201  // Y(i,c) /= L(i,i);
202  // but L(i,i) = 1.0
203  }
204  }
205 
206  //printf("Y:\n"); Y.print();
207 
208  // solve Ux=y for x by back subst
209  //SquareMatrix<Type, M> X = Y;
210 
211  // for all columns of X
212  for (size_t c = 0; c < M; c++) {
213  // for all rows of U
214  for (size_t k = 0; k < M; k++) {
215  // have to go in reverse order
216  size_t i = M - 1 - k;
217 
218  // for all columns of U
219  for (size_t j = i + 1; j < M; j++) {
220  // for all existing x
221  // subtract the component they
222  // contribute to the solution
223  P(i, c) -= U(i, j) * P(j, c);
224  }
225 
226  // divide by the factor
227  // on current
228  // term to be solved
229  //
230  // we know that U(i, i) != 0 from above
231  P(i, c) /= U(i, i);
232  }
233  }
234 
235  //check sanity of results
236  for (size_t i = 0; i < M; i++) {
237  for (size_t j = 0; j < M; j++) {
238  if (!is_finite(P(i,j))) {
239  return false;
240  }
241  }
242  }
243  //printf("X:\n"); X.print();
244  inv = P;
245  return true;
246 }
247 
251 template<typename Type, size_t M>
253 {
255  if(inv(A, i)) {
256  return i;
257  } else {
258  i.setZero();
259  return i;
260  }
261 }
262 
268 template<typename Type, size_t M>
270 {
272  for (size_t j = 0; j < M; j++) {
273  for (size_t i = j; i < M; i++) {
274  if (i==j) {
275  float sum = 0;
276  for (size_t k = 0; k < j; k++) {
277  sum += L(j, k)*L(j, k);
278  }
279  Type res = A(j, j) - sum;
280  if (res <= 0) {
281  L(j, j) = 0;
282  } else {
283  L(j, j) = sqrt(res);
284  }
285  } else {
286  float sum = 0;
287  for (size_t k = 0; k < j; k++) {
288  sum += L(i, k)*L(j, k);
289  }
290  if (L(j, j) <= 0) {
291  L(i, j) = 0;
292  } else {
293  L(i, j) = (A(i, j) - sum)/L(j, j);
294  }
295  }
296  }
297  }
298  return L;
299 }
300 
307 template<typename Type, size_t M>
309 {
310  SquareMatrix<Type, M> L_inv = inv(cholesky(A));
311  return L_inv.T()*L_inv;
312 }
313 
315 
316 } // namespace matrix
317 
318 /* vim: set et fenc=utf-8 ff=unix sts=0 sw=4 ts=4 : */
Definition: Matrix.hpp:25
+
SquareMatrix< Type, M > cholesky(const SquareMatrix< Type, M > &A)
Definition: SquareMatrix.hpp:269
+
SquareMatrix< Type, M > choleskyInv(const SquareMatrix< Type, M > &A)
Definition: SquareMatrix.hpp:308
+
Definition: SquareMatrix.hpp:24
+
Definition: helper_functions.hpp:5
+
bool inv(const SquareMatrix< Type, M > &A, SquareMatrix< Type, M > &inv)
Definition: SquareMatrix.hpp:125
+
Definition: Matrix.hpp:28
+
+ + + + diff --git a/sdk/doc/html/_vector2_8hpp.html b/sdk/doc/html/_vector2_8hpp.html new file mode 100644 index 0000000..4bfe7ec --- /dev/null +++ b/sdk/doc/html/_vector2_8hpp.html @@ -0,0 +1,152 @@ + + + + + + +YDLIDAR SDK: matrix/matrix/Vector2.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
YDLIDAR SDK +  V1.3.6 +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Vector2.hpp File Reference
+
+
+
#include "math.hpp"
+
+Include dependency graph for Vector2.hpp:
+
+
+ + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  matrix::Vector< Type, M >
 
class  matrix::Vector2< Type >
 
+ + + +

+Typedefs

+typedef Vector2< float > matrix::Vector2f
 
+

Detailed Description

+

2D vector class.

+
Author
James Goppert james.nosp@m..gop.nosp@m.pert@.nosp@m.gmai.nosp@m.l.com
+
+ + + + diff --git a/sdk/doc/html/_vector2_8hpp__dep__incl.map b/sdk/doc/html/_vector2_8hpp__dep__incl.map new file mode 100644 index 0000000..48c0c11 --- /dev/null +++ b/sdk/doc/html/_vector2_8hpp__dep__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sdk/doc/html/_vector2_8hpp__dep__incl.md5 b/sdk/doc/html/_vector2_8hpp__dep__incl.md5 new file mode 100644 index 0000000..e43c425 --- /dev/null +++ b/sdk/doc/html/_vector2_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +04b717ada91b4fa9e6ae6d6a66043cbd \ No newline at end of file diff --git a/sdk/doc/html/_vector2_8hpp__dep__incl.png b/sdk/doc/html/_vector2_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..740f630e275304d4c47570981b47a81646710fec GIT binary patch literal 27313 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 Ke3E|l^8Wx{y2Pdc literal 0 HcmV?d00001 diff --git a/sdk/doc/html/_vector2_8hpp__incl.map b/sdk/doc/html/_vector2_8hpp__incl.map new file mode 100644 index 0000000..c117a97 --- /dev/null +++ b/sdk/doc/html/_vector2_8hpp__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sdk/doc/html/_vector2_8hpp__incl.md5 b/sdk/doc/html/_vector2_8hpp__incl.md5 new file mode 100644 index 0000000..e56746c --- /dev/null +++ b/sdk/doc/html/_vector2_8hpp__incl.md5 @@ -0,0 +1 @@ +95ffd9c8ecf79ab8fae6e3362c1cac3a \ No newline at end of file diff --git a/sdk/doc/html/_vector2_8hpp__incl.png b/sdk/doc/html/_vector2_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..ac13308175e80844aa1e45e476ebba4bf20e2387 GIT binary patch literal 30136 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

OQPVslrLUtS!uQ4>*@)?rPw}Aw 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 literal 0 HcmV?d00001 diff --git a/sdk/doc/html/_vector2_8hpp_source.html b/sdk/doc/html/_vector2_8hpp_source.html new file mode 100644 index 0000000..73be024 --- /dev/null +++ b/sdk/doc/html/_vector2_8hpp_source.html @@ -0,0 +1,105 @@ + + + + + + +YDLIDAR SDK: matrix/matrix/Vector2.hpp Source File + + + + + + + + + + +

+
+ + + + + + +
+
YDLIDAR SDK +  V1.3.6 +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Vector2.hpp
+
+
+Go to the documentation of this file.
1 
9 #pragma once
10 
11 #include "math.hpp"
12 
13 namespace matrix
14 {
15 
16 template <typename Type, size_t M>
17 class Vector;
18 
19 template<typename Type>
20 class Vector2 : public Vector<Type, 2>
21 {
22 public:
23 
25 
26  Vector2() :
28  {
29  }
30 
31  Vector2(const Matrix21 & other) :
32  Vector<Type, 2>(other)
33  {
34  }
35 
36  Vector2(const Type *data_) :
37  Vector<Type, 2>(data_)
38  {
39  }
40 
41  Vector2(Type x, Type y) : Vector<Type, 2>()
42  {
43  Vector2 &v(*this);
44  v(0) = x;
45  v(1) = y;
46  }
47 
48  Type cross(const Matrix21 & b) const {
49  const Vector2 &a(*this);
50  return a(0)*b(1, 0) - a(1)*b(0, 0);
51  }
52 
53  Type operator%(const Matrix21 & b) const {
54  return (*this).cross(b);
55  }
56 
57 };
58 
59 typedef Vector2<float> Vector2f;
60 
61 } // namespace matrix
62 
63 /* vim: set et fenc=utf-8 ff=unix sts=0 sw=4 ts=4 : */
Definition: Matrix.hpp:25
+
Definition: Vector2.hpp:20
+
Definition: helper_functions.hpp:5
+
Definition: Matrix.hpp:28
+
+ + + + diff --git a/sdk/doc/html/_vector3_8hpp.html b/sdk/doc/html/_vector3_8hpp.html new file mode 100644 index 0000000..5b90f8a --- /dev/null +++ b/sdk/doc/html/_vector3_8hpp.html @@ -0,0 +1,156 @@ + + + + + + +YDLIDAR SDK: matrix/matrix/Vector3.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
YDLIDAR SDK +  V1.3.6 +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Vector3.hpp File Reference
+
+
+
#include "math.hpp"
+
+Include dependency graph for Vector3.hpp:
+
+
+ + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + +

+Classes

class  matrix::Matrix< Type, M, N >
 
class  matrix::Vector< Type, M >
 
class  matrix::Dcm< Type >
 
class  matrix::Vector3< Type >
 
+ + + +

+Typedefs

+typedef Vector3< float > matrix::Vector3f
 
+

Detailed Description

+

3D vector class.

+
Author
James Goppert james.nosp@m..gop.nosp@m.pert@.nosp@m.gmai.nosp@m.l.com
+
+ + + + diff --git a/sdk/doc/html/_vector3_8hpp__dep__incl.map b/sdk/doc/html/_vector3_8hpp__dep__incl.map new file mode 100644 index 0000000..97a6412 --- /dev/null +++ b/sdk/doc/html/_vector3_8hpp__dep__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sdk/doc/html/_vector3_8hpp__dep__incl.md5 b/sdk/doc/html/_vector3_8hpp__dep__incl.md5 new file mode 100644 index 0000000..989c080 --- /dev/null +++ b/sdk/doc/html/_vector3_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +2db8c4aebd930259db98425fd7795fe7 \ No newline at end of file diff --git a/sdk/doc/html/_vector3_8hpp__dep__incl.png b/sdk/doc/html/_vector3_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..49f5ebcf5b1782a32e876c4841c50c885adb1176 GIT binary patch literal 27288 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�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 literal 0 HcmV?d00001 diff --git a/sdk/doc/html/_vector3_8hpp__incl.map b/sdk/doc/html/_vector3_8hpp__incl.map new file mode 100644 index 0000000..c6a7126 --- /dev/null +++ b/sdk/doc/html/_vector3_8hpp__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sdk/doc/html/_vector3_8hpp__incl.md5 b/sdk/doc/html/_vector3_8hpp__incl.md5 new file mode 100644 index 0000000..32a1837 --- /dev/null +++ b/sdk/doc/html/_vector3_8hpp__incl.md5 @@ -0,0 +1 @@ +ad04c8e6ec43c49732657f47a48488e4 \ No newline at end of file diff --git a/sdk/doc/html/_vector3_8hpp__incl.png b/sdk/doc/html/_vector3_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..e1a86e392d21ac5d3c581092c1b88461b08c4ae5 GIT binary patch literal 30119 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%0DG2}(gLOuke;{K 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 + + + + + +YDLIDAR SDK: matrix/matrix/Vector3.hpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
YDLIDAR SDK +  V1.3.6 +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Vector3.hpp
+
+
+Go to the documentation of this file.
1 
9 #pragma once
10 
11 #include "math.hpp"
12 
13 namespace matrix
14 {
15 
16 template <typename Type, size_t M, size_t N>
17 class Matrix;
18 
19 template <typename Type, size_t M>
20 class Vector;
21 
22 template<typename Type>
23 class Dcm;
24 
25 template<typename Type>
26 class Vector3 : public Vector<Type, 3>
27 {
28 public:
29 
31 
32  Vector3() :
34  {
35  }
36 
37  Vector3(const Matrix31 & other) :
38  Vector<Type, 3>(other)
39  {
40  }
41 
42  Vector3(const Type *data_) :
43  Vector<Type, 3>(data_)
44  {
45  }
46 
47  Vector3(Type x, Type y, Type z) : Vector<Type, 3>()
48  {
49  Vector3 &v(*this);
50  v(0) = x;
51  v(1) = y;
52  v(2) = z;
53  }
54 
55  Vector3 cross(const Matrix31 & b) const {
56  const Vector3 &a(*this);
57  Vector3 c;
58  c(0) = a(1)*b(2,0) - a(2)*b(1,0);
59  c(1) = -a(0)*b(2,0) + a(2)*b(0,0);
60  c(2) = a(0)*b(1,0) - a(1)*b(0,0);
61  return c;
62  }
63 
68  inline Vector3 operator+(Vector3 other) const
69  {
70  return Matrix31::operator+(other);
71  }
72 
73  inline Vector3 operator-(Vector3 other) const
74  {
75  return Matrix31::operator-(other);
76  }
77 
78  inline Vector3 operator-() const
79  {
80  return Matrix31::operator-();
81  }
82 
83  inline Vector3 operator*(Type scalar) const
84  {
85  return Matrix31::operator*(scalar);
86  }
87 
88  inline Type operator*(Vector3 b) const
89  {
91  }
92 
93  inline Vector3 operator%(const Matrix31 & b) const {
94  return (*this).cross(b);
95  }
96 
100  inline Vector3 unit() const {
101  return Vector3(Vector<Type, 3>::unit());
102  }
103 
104  inline Vector3 normalized() const {
105  return unit();
106  }
107 
108 
109  Dcm<Type> hat() const { // inverse to Dcm.vee() operation
110  const Vector3 &v(*this);
111  Dcm<Type> A;
112  A(0,0) = 0;
113  A(0,1) = -v(2);
114  A(0,2) = v(1);
115  A(1,0) = v(2);
116  A(1,1) = 0;
117  A(1,2) = -v(0);
118  A(2,0) = -v(1);
119  A(2,1) = v(0);
120  A(2,2) = 0;
121  return A;
122  }
123 
124 };
125 
126 typedef Vector3<float> Vector3f;
127 
128 } // namespace matrix
129 
130 /* vim: set et fenc=utf-8 ff=unix sts=0 sw=4 ts=4 : */
Definition: Matrix.hpp:25
+
Vector3 operator+(Vector3 other) const
Definition: Vector3.hpp:68
+
Definition: Vector3.hpp:23
+
Definition: Vector3.hpp:26
+
Definition: helper_functions.hpp:5
+
Definition: Matrix.hpp:28
+
Matrix< Type, M, P > operator*(const Matrix< Type, N, P > &other) const
Definition: Matrix.hpp:94
+
Vector3 unit() const
Definition: Vector3.hpp:100
+
+ + + + diff --git a/sdk/doc/html/_vector_8hpp.html b/sdk/doc/html/_vector_8hpp.html new file mode 100644 index 0000000..5a68f93 --- /dev/null +++ b/sdk/doc/html/_vector_8hpp.html @@ -0,0 +1,145 @@ + + + + + + +YDLIDAR SDK: matrix/matrix/Vector.hpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
YDLIDAR SDK +  V1.3.6 +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Vector.hpp File Reference
+
+
+
#include "math.hpp"
+
+Include dependency graph for Vector.hpp:
+
+
+ + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  matrix::Matrix< Type, M, N >
 
class  matrix::Vector< Type, M >
 
+

Detailed Description

+

Vector class.

+
Author
James Goppert james.nosp@m..gop.nosp@m.pert@.nosp@m.gmai.nosp@m.l.com
+
+ + + + diff --git a/sdk/doc/html/_vector_8hpp__dep__incl.map b/sdk/doc/html/_vector_8hpp__dep__incl.map new file mode 100644 index 0000000..a31d12d --- /dev/null +++ b/sdk/doc/html/_vector_8hpp__dep__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sdk/doc/html/_vector_8hpp__dep__incl.md5 b/sdk/doc/html/_vector_8hpp__dep__incl.md5 new file mode 100644 index 0000000..4d18cc2 --- /dev/null +++ b/sdk/doc/html/_vector_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +4879a095ad5bf81bed502abe6604d102 \ No newline at end of file diff --git a/sdk/doc/html/_vector_8hpp__dep__incl.png b/sdk/doc/html/_vector_8hpp__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..eb879f97ca3c646be7081da17a1aa78f7883bf0d GIT binary patch literal 30181 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 literal 0 HcmV?d00001 diff --git a/sdk/doc/html/_vector_8hpp__incl.map b/sdk/doc/html/_vector_8hpp__incl.map new file mode 100644 index 0000000..5f05ad7 --- /dev/null +++ b/sdk/doc/html/_vector_8hpp__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sdk/doc/html/_vector_8hpp__incl.md5 b/sdk/doc/html/_vector_8hpp__incl.md5 new file mode 100644 index 0000000..be66c1c --- /dev/null +++ b/sdk/doc/html/_vector_8hpp__incl.md5 @@ -0,0 +1 @@ +64aa47aeec14b106403ef0d963e49a61 \ No newline at end of file diff --git a/sdk/doc/html/_vector_8hpp__incl.png b/sdk/doc/html/_vector_8hpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..4e7497c9127e945940a58716bc0df6e19d60fea2 GIT binary patch literal 28823 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 literal 0 HcmV?d00001 diff --git a/sdk/doc/html/_vector_8hpp_source.html b/sdk/doc/html/_vector_8hpp_source.html new file mode 100644 index 0000000..6ed543f --- /dev/null +++ b/sdk/doc/html/_vector_8hpp_source.html @@ -0,0 +1,102 @@ + + + + + + +YDLIDAR SDK: matrix/matrix/Vector.hpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
YDLIDAR SDK +  V1.3.6 +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Vector.hpp
+
+
+Go to the documentation of this file.
1 
9 #pragma once
10 
11 #include "math.hpp"
12 
13 namespace matrix
14 {
15 
16 template <typename Type, size_t M, size_t N>
17 class Matrix;
18 
19 template<typename Type, size_t M>
20 class Vector : public Matrix<Type, M, 1>
21 {
22 public:
23  typedef Matrix<Type, M, 1> MatrixM1;
24 
25  Vector() : MatrixM1()
26  {
27  }
28 
29  Vector(const MatrixM1 & other) :
30  MatrixM1(other)
31  {
32  }
33 
34  Vector(const Type *data_) :
35  MatrixM1(data_)
36  {
37  }
38 
39  inline Type operator()(size_t i) const
40  {
41  const MatrixM1 &v = *this;
42  return v(i, 0);
43  }
44 
45  inline Type &operator()(size_t i)
46  {
47  MatrixM1 &v = *this;
48  return v(i, 0);
49  }
50 
51  Type dot(const MatrixM1 & b) const {
52  const Vector &a(*this);
53  Type r = 0;
54  for (size_t i = 0; i<M; i++) {
55  r += a(i)*b(i,0);
56  }
57  return r;
58  }
59 
60  inline Type operator*(const MatrixM1 & b) const {
61  const Vector &a(*this);
62  return a.dot(b);
63  }
64 
65  inline Vector operator*(float b) const {
66  return Vector(MatrixM1::operator*(b));
67  }
68 
69  Type norm() const {
70  const Vector &a(*this);
71  return Type(sqrt(a.dot(a)));
72  }
73 
74  inline Type length() const {
75  return norm();
76  }
77 
78  inline void normalize() {
79  (*this) /= norm();
80  }
81 
82  Vector unit() const {
83  return (*this) / norm();
84  }
85 
86  inline Vector normalized() const {
87  return unit();
88  }
89 
90  Vector pow(Type v) const {
91  const Vector &a(*this);
92  Vector r;
93  for (size_t i = 0; i<M; i++) {
94  r(i) = Type(::pow(a(i), v));
95  }
96  return r;
97  }
98 };
99 
100 } // namespace matrix
101 
102 /* vim: set et fenc=utf-8 ff=unix sts=0 sw=4 ts=4 : */
Definition: helper_functions.hpp:5
+
+ + + + diff --git a/sdk/doc/html/annotated.html b/sdk/doc/html/annotated.html index dfb417e..911015f 100644 --- a/sdk/doc/html/annotated.html +++ b/sdk/doc/html/annotated.html @@ -22,10 +22,9 @@ - @@ -66,6 +65,7 @@ @@ -91,40 +91,62 @@
Here are the classes, structs, unions and interfaces with brief descriptions:
[detail level 123]
YDLIDAR SDK -  V1.3.3 +  V1.3.6
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Nserial
 CMillisecondTimer
 CPortInfo
 CSerial
 CScopedReadLock
 CScopedWriteLock
 CSerialImpl
 Ctermios2
 CTimeout
 Nydlidar
 CYDlidarDriver
 Ccmd_packet
 CCYdLidar
 Cdevice_health
 Cdevice_info
 CEvent
 Cfunction_state
 CLaserConfigA struct for returning configuration from the YDLIDAR
 CLaserScan
 Clidar_ans_header
 CLocker
 Cnode_info
 Cnode_package
 Cnode_packages
 CPackageNode
 Csampling_rate
 Cscan_exposure
 Cscan_frequency
 Cscan_heart_beat
 Cscan_points
 Cscan_rotation
 CscanDot
 CScopedLocker
 CThread
 Nline_feature
 C_generate_line
 C_least
 C_line
 C_point
 C_POINTT
 CCachedData
 CLineFeature
 CParams
 CPointParams
 CRangeData
 Nmatrix
 CDcm
 CMatrix
 CSquareMatrix
 CVector
 CVector2
 CVector3
 Nserial
 CMillisecondTimer
 CPortInfo
 CSerial
 CScopedReadLock
 CScopedWriteLock
 CSerialImpl
 Ctermios2
 CTimeout
 Nydlidar
 CYDlidarDriver
 Ccmd_packet
 CCYdLidar
 Cdevice_health
 Cdevice_info
 CEvent
 Cfunction_state
 CLaserConfigA struct for returning configuration from the YDLIDAR
 CLaserScan
 Clidar_ans_header
 CLocker
 Cnode_info
 Cnode_package
 Cnode_packages
 Codom_info
 CPackageNode
 Cpoint_info
 CPointCloud
 Cpose_info
 Csampling_rate
 Cscan_exposure
 Cscan_frequency
 Cscan_heart_beat
 Cscan_points
 Cscan_rotation
 CscanDot
 CScopedLocker
 CThread
diff --git a/sdk/doc/html/class_c_yd_lidar-members.html b/sdk/doc/html/class_c_yd_lidar-members.html index cd941bd..d5b4129 100644 --- a/sdk/doc/html/class_c_yd_lidar-members.html +++ b/sdk/doc/html/class_c_yd_lidar-members.html @@ -22,10 +22,9 @@ - @@ -66,6 +65,7 @@ diff --git a/sdk/doc/html/class_c_yd_lidar.html b/sdk/doc/html/class_c_yd_lidar.html index 2b846d1..78787e1 100644 --- a/sdk/doc/html/class_c_yd_lidar.html +++ b/sdk/doc/html/class_c_yd_lidar.html @@ -22,10 +22,9 @@
YDLIDAR SDK -  V1.3.3 +  V1.3.6
- @@ -66,6 +65,7 @@ @@ -176,8 +176,8 @@

Member Function Documentation


The documentation for this class was generated from the following files:
    -
  • /home/yang/tmp/sdk/include/CYdLidar.h
  • -
  • /home/yang/tmp/sdk/src/CYdLidar.cpp
  • +
  • include/CYdLidar.h
  • +
  • src/CYdLidar.cpp
diff --git a/sdk/doc/html/class_event-members.html b/sdk/doc/html/class_event-members.html index 620d098..35cd202 100644 --- a/sdk/doc/html/class_event-members.html +++ b/sdk/doc/html/class_event-members.html @@ -22,10 +22,9 @@
YDLIDAR SDK -  V1.3.3 +  V1.3.6
- @@ -66,6 +65,7 @@ diff --git a/sdk/doc/html/class_event.html b/sdk/doc/html/class_event.html index af78b0d..b4a8be4 100644 --- a/sdk/doc/html/class_event.html +++ b/sdk/doc/html/class_event.html @@ -22,10 +22,9 @@
YDLIDAR SDK -  V1.3.3 +  V1.3.6
- @@ -66,6 +65,7 @@ @@ -138,7 +138,7 @@
YDLIDAR SDK -  V1.3.3 +  V1.3.6
 

The documentation for this class was generated from the following file: diff --git a/sdk/doc/html/class_locker-members.html b/sdk/doc/html/class_locker-members.html index 7ce88fb..9e819e6 100644 --- a/sdk/doc/html/class_locker-members.html +++ b/sdk/doc/html/class_locker-members.html @@ -22,10 +22,9 @@ - @@ -66,6 +65,7 @@ diff --git a/sdk/doc/html/class_locker.html b/sdk/doc/html/class_locker.html index 3ad8167..040aa0a 100644 --- a/sdk/doc/html/class_locker.html +++ b/sdk/doc/html/class_locker.html @@ -22,10 +22,9 @@
YDLIDAR SDK -  V1.3.3 +  V1.3.6
- @@ -66,6 +65,7 @@ @@ -132,7 +132,7 @@
YDLIDAR SDK -  V1.3.3 +  V1.3.6
 

The documentation for this class was generated from the following file: diff --git a/sdk/doc/html/class_scoped_locker-members.html b/sdk/doc/html/class_scoped_locker-members.html index d11e842..bd23b57 100644 --- a/sdk/doc/html/class_scoped_locker-members.html +++ b/sdk/doc/html/class_scoped_locker-members.html @@ -22,10 +22,9 @@ - @@ -66,6 +65,7 @@ diff --git a/sdk/doc/html/class_scoped_locker.html b/sdk/doc/html/class_scoped_locker.html index 56b301b..209720f 100644 --- a/sdk/doc/html/class_scoped_locker.html +++ b/sdk/doc/html/class_scoped_locker.html @@ -22,10 +22,9 @@
YDLIDAR SDK -  V1.3.3 +  V1.3.6
- @@ -66,6 +65,7 @@ @@ -118,7 +118,7 @@
YDLIDAR SDK -  V1.3.3 +  V1.3.6
 

The documentation for this class was generated from the following file: diff --git a/sdk/doc/html/class_thread-members.html b/sdk/doc/html/class_thread-members.html index 710aa42..235da97 100644 --- a/sdk/doc/html/class_thread-members.html +++ b/sdk/doc/html/class_thread-members.html @@ -22,10 +22,9 @@ - @@ -66,6 +65,7 @@ diff --git a/sdk/doc/html/class_thread.html b/sdk/doc/html/class_thread.html index 470fb5c..2bf7dad 100644 --- a/sdk/doc/html/class_thread.html +++ b/sdk/doc/html/class_thread.html @@ -22,10 +22,9 @@
YDLIDAR SDK -  V1.3.3 +  V1.3.6
- @@ -66,6 +65,7 @@ @@ -147,7 +147,7 @@
YDLIDAR SDK -  V1.3.3 +  V1.3.6
 

The documentation for this class was generated from the following file: diff --git a/sdk/doc/html/classes.html b/sdk/doc/html/classes.html index fea4a72..b5aa8c0 100644 --- a/sdk/doc/html/classes.html +++ b/sdk/doc/html/classes.html @@ -22,10 +22,9 @@ - @@ -66,6 +65,7 @@ @@ -89,38 +89,50 @@
Class Index
-
C | D | E | F | L | M | N | P | S | T | Y
+
C | D | E | F | L | M | N | O | P | R | S | T | V | Y | _
YDLIDAR SDK -  V1.3.3 +  V1.3.6
- - + + + + + + - - + + + + + + + - - - - - + + + + +
  C  
-
  M  
-
Serial::ScopedWriteLock (serial)   
  d  
-
node_package   
Serial (serial)   node_packages   
CYdLidar   MillisecondTimer (serial)   serial::Serial::SerialImpl (serial)   device_health   
  s  
+
MillisecondTimer (serial)   serial::Serial::SerialImpl (serial)   _least (line_feature)   
  n  
  P  
+
SquareMatrix (matrix)   _line (line_feature)   
CachedData (line_feature)   
  T  
+
_point (line_feature)   node_info   
CYdLidar   PackageNode   _POINTT (line_feature)   node_package   
  D  
+
Params (line_feature)   Thread   
  c  
+
node_packages   
PointCloud   Timeout (serial)   
  o  
+
Dcm (matrix)   PointParams (line_feature)   
  V  
+
cmd_packet   
  E  
-
  P  
-
  T  
-
device_info   
  f  
-
sampling_rate   
Event   PackageNode   Thread   scan_exposure   
PortInfo (serial)   
  d  
+
odom_info   
  R  
+
Vector (matrix)   
  p  
+
Event   Vector2 (matrix)   device_health   
  L  
-
PortInfo (serial)   Timeout (serial)   function_state   scan_frequency   
RangeData (line_feature)   Vector3 (matrix)   device_info   point_info   
  S  
  Y  
+
  f  
+
pose_info   
LaserConfig   
  s  
+
LaserScan   ScopedLocker   YDlidarDriver (ydlidar)   function_state   
LineFeature (line_feature)   Serial::ScopedReadLock (serial)   
  _  
  l  
-
scan_heart_beat   
LaserConfig   scan_points   
LaserScan   ScopedLocker   YDlidarDriver (ydlidar)   lidar_ans_header   scan_rotation   
Locker   Serial::ScopedReadLock (serial)   
  c  
-
  n  
-
scanDot   
cmd_packet   node_info   
sampling_rate   
Locker   Serial::ScopedWriteLock (serial)   scan_exposure   
  M  
+
Serial (serial)   _generate_line (line_feature)   lidar_ans_header   scan_frequency   
Matrix (matrix)   
-
C | D | E | F | L | M | N | P | S | T | Y
+
C | D | E | F | L | M | N | O | P | R | S | T | V | Y | _