diff --git a/.VSCodeCounter/2024-06-17_19-36-50/details.md b/.VSCodeCounter/2024-06-17_19-36-50/details.md new file mode 100644 index 0000000..3e52b53 --- /dev/null +++ b/.VSCodeCounter/2024-06-17_19-36-50/details.md @@ -0,0 +1,227 @@ +# Details + +Date : 2024-06-17 19:36:50 + +Directory d:\\Administrator\\Desktop\\空地协同头歌\\src\\Robot\\unitree_legged_go1-walk + +Total : 212 files, 34127 codes, 5084 comments, 8663 blanks, all 47874 lines + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | +| [src/Robot/unitree_legged_go1-walk/README.md](/src/Robot/unitree_legged_go1-walk/README.md) | Markdown | 42 | 0 | 12 | 54 | +| [src/Robot/unitree_legged_go1-walk/example/example_joystick.cpp](/src/Robot/unitree_legged_go1-walk/example/example_joystick.cpp) | C++ | 64 | 3 | 16 | 83 | +| [src/Robot/unitree_legged_go1-walk/example/example_position.cpp](/src/Robot/unitree_legged_go1-walk/example/example_position.cpp) | C++ | 134 | 14 | 22 | 170 | +| [src/Robot/unitree_legged_go1-walk/example/example_torque.cpp](/src/Robot/unitree_legged_go1-walk/example/example_torque.cpp) | C++ | 77 | 4 | 16 | 97 | +| [src/Robot/unitree_legged_go1-walk/example/example_velocity.cpp](/src/Robot/unitree_legged_go1-walk/example/example_velocity.cpp) | C++ | 77 | 6 | 18 | 101 | +| [src/Robot/unitree_legged_go1-walk/example/example_walk.cpp](/src/Robot/unitree_legged_go1-walk/example/example_walk.cpp) | C++ | 169 | 42 | 15 | 226 | +| [src/Robot/unitree_legged_go1-walk/example_py/example_position.py](/src/Robot/unitree_legged_go1-walk/example_py/example_position.py) | Python | 81 | 12 | 26 | 119 | +| [src/Robot/unitree_legged_go1-walk/example_py/example_torque.py](/src/Robot/unitree_legged_go1-walk/example_py/example_torque.py) | Python | 44 | 9 | 18 | 71 | +| [src/Robot/unitree_legged_go1-walk/example_py/example_velocity.py](/src/Robot/unitree_legged_go1-walk/example_py/example_velocity.py) | Python | 38 | 4 | 17 | 59 | +| [src/Robot/unitree_legged_go1-walk/example_py/example_walk.py](/src/Robot/unitree_legged_go1-walk/example_py/example_walk.py) | Python | 76 | 14 | 30 | 120 | +| [src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/a1_const.h](/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/a1_const.h) | C++ | 11 | 3 | 4 | 18 | +| [src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/aliengo_const.h](/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/aliengo_const.h) | C++ | 11 | 3 | 4 | 18 | +| [src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/b1_const.h](/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/b1_const.h) | C++ | 11 | 3 | 2 | 16 | +| [src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/comm.h](/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/comm.h) | C++ | 172 | 27 | 30 | 229 | +| [src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/go1_const.h](/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/go1_const.h) | C++ | 11 | 3 | 4 | 18 | +| [src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/joystick.h](/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/joystick.h) | C++ | 35 | 5 | 4 | 44 | +| [src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/loop.h](/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/loop.h) | C++ | 42 | 7 | 13 | 62 | +| [src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/quadruped.h](/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/quadruped.h) | C++ | 31 | 4 | 14 | 49 | +| [src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/safety.h](/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/safety.h) | C++ | 18 | 5 | 7 | 30 | +| [src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/udp.h](/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/udp.h) | C++ | 63 | 17 | 19 | 99 | +| [src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/unitree_legged_sdk.h](/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/unitree_legged_sdk.h) | C++ | 11 | 3 | 5 | 19 | +| [src/Robot/unitree_legged_go1-walk/package.xml](/src/Robot/unitree_legged_go1-walk/package.xml) | XML | 9 | 0 | 2 | 11 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/python_interface.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/python_interface.cpp) | C++ | 190 | 9 | 22 | 221 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.appveyor.yml](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.appveyor.yml) | YAML | 37 | 0 | 1 | 38 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.cmake-format.yaml](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.cmake-format.yaml) | YAML | 31 | 28 | 15 | 74 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/CONTRIBUTING.md](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/CONTRIBUTING.md) | Markdown | 248 | 0 | 72 | 320 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/ISSUE_TEMPLATE/bug-report.md](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/ISSUE_TEMPLATE/bug-report.md) | Markdown | 19 | 0 | 10 | 29 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/ISSUE_TEMPLATE/config.yml](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/ISSUE_TEMPLATE/config.yml) | YAML | 5 | 0 | 1 | 6 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/ISSUE_TEMPLATE/feature-request.md](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/ISSUE_TEMPLATE/feature-request.md) | Markdown | 11 | 0 | 6 | 17 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/ISSUE_TEMPLATE/question.md](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/ISSUE_TEMPLATE/question.md) | Markdown | 17 | 0 | 5 | 22 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/labeler.yml](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/labeler.yml) | YAML | 12 | 0 | 3 | 15 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/ci.yml](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/ci.yml) | YAML | 368 | 43 | 112 | 523 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/configure.yml](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/configure.yml) | YAML | 63 | 6 | 16 | 85 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/format.yml](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/format.yml) | YAML | 31 | 3 | 8 | 42 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/labeler.yml](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/labeler.yml) | YAML | 12 | 0 | 2 | 14 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/pip.yml](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/pip.yml) | YAML | 73 | 7 | 24 | 104 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.pre-commit-config.yaml](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.pre-commit-config.yaml) | YAML | 58 | 22 | 9 | 89 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.readthedocs.yml](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.readthedocs.yml) | YAML | 3 | 0 | 1 | 4 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/README.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/README.rst) | reStructuredText | 122 | 6 | 31 | 159 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/_static/theme_overrides.css](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/_static/theme_overrides.css) | CSS | 11 | 0 | 1 | 12 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/chrono.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/chrono.rst) | reStructuredText | 62 | 2 | 18 | 82 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/custom.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/custom.rst) | reStructuredText | 68 | 5 | 19 | 92 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/eigen.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/eigen.rst) | reStructuredText | 229 | 13 | 69 | 311 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/functional.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/functional.rst) | reStructuredText | 74 | 9 | 27 | 110 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/index.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/index.rst) | reStructuredText | 31 | 2 | 11 | 44 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/overview.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/overview.rst) | reStructuredText | 136 | 8 | 22 | 166 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/stl.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/stl.rst) | reStructuredText | 158 | 18 | 65 | 241 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/strings.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/strings.rst) | reStructuredText | 195 | 20 | 91 | 306 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/classes.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/classes.rst) | reStructuredText | 856 | 96 | 310 | 1,262 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/embedding.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/embedding.rst) | reStructuredText | 168 | 14 | 80 | 262 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/exceptions.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/exceptions.rst) | reStructuredText | 224 | 14 | 61 | 299 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/functions.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/functions.rst) | reStructuredText | 367 | 47 | 148 | 562 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/misc.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/misc.rst) | reStructuredText | 214 | 27 | 97 | 338 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/pycpp/index.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/pycpp/index.rst) | reStructuredText | 9 | 1 | 4 | 14 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/pycpp/numpy.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/pycpp/numpy.rst) | reStructuredText | 299 | 26 | 112 | 437 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/pycpp/object.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/pycpp/object.rst) | reStructuredText | 143 | 27 | 82 | 252 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/pycpp/utilities.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/pycpp/utilities.rst) | reStructuredText | 91 | 13 | 41 | 145 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/smart_ptrs.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/smart_ptrs.rst) | reStructuredText | 107 | 14 | 53 | 174 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/basics.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/basics.rst) | reStructuredText | 171 | 32 | 99 | 302 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/benchmark.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/benchmark.py) | Python | 75 | 1 | 14 | 90 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/benchmark.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/benchmark.rst) | reStructuredText | 53 | 16 | 27 | 96 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/changelog.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/changelog.rst) | reStructuredText | 1,118 | 15 | 365 | 1,498 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/classes.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/classes.rst) | reStructuredText | 333 | 49 | 151 | 533 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/cmake/index.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/cmake/index.rst) | reStructuredText | 5 | 1 | 3 | 9 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/compiling.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/compiling.rst) | reStructuredText | 373 | 47 | 174 | 594 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/conf.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/conf.py) | Python | 78 | 177 | 85 | 340 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/faq.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/faq.rst) | reStructuredText | 227 | 20 | 97 | 344 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/index.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/index.rst) | reStructuredText | 27 | 6 | 11 | 44 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/installing.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/installing.rst) | reStructuredText | 62 | 9 | 33 | 104 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/limitations.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/limitations.rst) | reStructuredText | 42 | 0 | 15 | 57 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/pybind11_vs_boost_python1.svg](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/pybind11_vs_boost_python1.svg) | XML | 427 | 0 | 1 | 428 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/pybind11_vs_boost_python2.svg](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/pybind11_vs_boost_python2.svg) | XML | 427 | 0 | 1 | 428 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/reference.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/reference.rst) | reStructuredText | 41 | 30 | 47 | 118 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/release.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/release.rst) | reStructuredText | 57 | 2 | 17 | 76 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/requirements.txt](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/requirements.txt) | pip requirements | 7 | 0 | 1 | 8 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/upgrade.rst](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/upgrade.rst) | reStructuredText | 359 | 19 | 136 | 514 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/attr.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/attr.h) | C++ | 306 | 126 | 120 | 552 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/buffer_info.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/buffer_info.h) | C++ | 106 | 14 | 27 | 147 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/cast.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/cast.h) | C++ | 1,615 | 305 | 307 | 2,227 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/chrono.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/chrono.h) | C++ | 128 | 32 | 32 | 192 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/common.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/common.h) | C++ | 2 | 0 | 1 | 3 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/complex.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/complex.h) | C++ | 43 | 9 | 14 | 66 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/class.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/class.h) | C++ | 460 | 111 | 100 | 671 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/common.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/common.h) | C++ | 527 | 213 | 114 | 854 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/descr.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/descr.h) | C++ | 68 | 10 | 23 | 101 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/init.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/init.h) | C++ | 228 | 66 | 43 | 337 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/internals.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/internals.h) | C++ | 257 | 61 | 35 | 353 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/typeid.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/typeid.h) | C++ | 37 | 10 | 9 | 56 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/eigen.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/eigen.h) | C++ | 417 | 106 | 85 | 608 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/embed.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/embed.h) | C++ | 95 | 90 | 23 | 208 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/eval.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/eval.h) | C++ | 96 | 17 | 20 | 133 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/functional.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/functional.h) | C++ | 68 | 20 | 17 | 105 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/iostream.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/iostream.h) | C++ | 107 | 77 | 33 | 217 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/numpy.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/numpy.h) | C++ | 1,229 | 197 | 254 | 1,680 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/operators.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/operators.h) | C++ | 136 | 18 | 20 | 174 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/options.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/options.h) | C++ | 30 | 14 | 22 | 66 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/pybind11.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/pybind11.h) | C++ | 1,719 | 356 | 281 | 2,356 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/pytypes.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/pytypes.h) | C++ | 1,133 | 302 | 221 | 1,656 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/stl.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/stl.h) | C++ | 303 | 26 | 60 | 389 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/stl_bind.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/stl_bind.h) | C++ | 495 | 53 | 114 | 662 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/__init__.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/__init__.py) | Python | 8 | 1 | 4 | 13 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/__main__.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/__main__.py) | Python | 37 | 2 | 11 | 50 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/_version.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/_version.py) | Python | 7 | 1 | 5 | 13 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/commands.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/commands.py) | Python | 13 | 1 | 7 | 21 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/setup_helpers.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/setup_helpers.py) | Python | 264 | 35 | 89 | 388 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/setup.cfg](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/setup.cfg) | Properties | 56 | 3 | 8 | 67 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/setup.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/setup.py) | Python | 77 | 14 | 25 | 116 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/conftest.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/conftest.py) | Python | 143 | 5 | 53 | 201 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/constructor_stats.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/constructor_stats.h) | C++ | 180 | 77 | 19 | 276 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/cross_module_gil_utils.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/cross_module_gil_utils.cpp) | C++ | 48 | 15 | 11 | 74 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/env.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/env.py) | Python | 9 | 1 | 5 | 15 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/extra_python_package/pytest.ini](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/extra_python_package/pytest.ini) | Ini | 0 | 0 | 1 | 1 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/extra_python_package/test_files.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/extra_python_package/test_files.py) | Python | 208 | 3 | 49 | 260 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/extra_setuptools/pytest.ini](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/extra_setuptools/pytest.ini) | Ini | 0 | 0 | 1 | 1 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/extra_setuptools/test_setuphelper.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/extra_setuptools/test_setuphelper.py) | Python | 79 | 3 | 20 | 102 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/local_bindings.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/local_bindings.h) | C++ | 44 | 11 | 10 | 65 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/object.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/object.h) | C++ | 92 | 47 | 37 | 176 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/pybind11_cross_module_tests.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/pybind11_cross_module_tests.cpp) | C++ | 60 | 43 | 21 | 124 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/pybind11_tests.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/pybind11_tests.cpp) | C++ | 55 | 23 | 14 | 92 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/pybind11_tests.h](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/pybind11_tests.h) | C++ | 51 | 7 | 14 | 72 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/pytest.ini](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/pytest.ini) | Ini | 19 | 0 | 1 | 20 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/requirements.txt](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/requirements.txt) | pip requirements | 8 | 0 | 1 | 9 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_async.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_async.cpp) | C++ | 16 | 8 | 3 | 27 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_async.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_async.py) | Python | 15 | 1 | 10 | 26 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_buffers.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_buffers.cpp) | C++ | 165 | 18 | 32 | 215 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_buffers.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_buffers.py) | Python | 122 | 4 | 37 | 163 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_builtin_casters.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_builtin_casters.cpp) | C++ | 138 | 29 | 26 | 193 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_builtin_casters.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_builtin_casters.py) | Python | 307 | 10 | 76 | 393 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_call_policies.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_call_policies.cpp) | C++ | 70 | 15 | 17 | 102 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_call_policies.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_call_policies.py) | Python | 163 | 3 | 27 | 193 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_callbacks.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_callbacks.cpp) | C++ | 124 | 21 | 24 | 169 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_callbacks.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_callbacks.py) | Python | 94 | 6 | 38 | 138 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_chrono.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_chrono.cpp) | C++ | 46 | 25 | 14 | 85 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_chrono.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_chrono.py) | Python | 130 | 23 | 60 | 213 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_class.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_class.cpp) | C++ | 377 | 76 | 73 | 526 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_class.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_class.py) | Python | 295 | 25 | 101 | 421 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_cmake_build/embed.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_cmake_build/embed.cpp) | C++ | 16 | 0 | 6 | 22 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_cmake_build/main.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_cmake_build/main.cpp) | C++ | 5 | 0 | 2 | 7 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_cmake_build/test.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_cmake_build/test.py) | Python | 4 | 1 | 2 | 7 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_constants_and_functions.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_constants_and_functions.cpp) | C++ | 97 | 14 | 17 | 128 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_constants_and_functions.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_constants_and_functions.py) | Python | 30 | 1 | 12 | 43 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_copy_move.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_copy_move.cpp) | C++ | 177 | 22 | 21 | 220 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_copy_move.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_copy_move.py) | Python | 77 | 11 | 26 | 114 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_custom_type_casters.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_custom_type_casters.cpp) | C++ | 91 | 19 | 18 | 128 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_custom_type_casters.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_custom_type_casters.py) | Python | 71 | 5 | 15 | 91 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_docstring_options.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_docstring_options.cpp) | C++ | 38 | 9 | 15 | 62 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_docstring_options.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_docstring_options.py) | Python | 16 | 11 | 13 | 40 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eigen.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eigen.cpp) | C++ | 218 | 69 | 41 | 328 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eigen.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eigen.py) | Python | 544 | 28 | 126 | 698 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_embed/catch.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_embed/catch.cpp) | C++ | 12 | 4 | 7 | 23 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_embed/external_module.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_embed/external_module.cpp) | C++ | 15 | 3 | 6 | 24 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_embed/test_interpreter.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_embed/test_interpreter.cpp) | C++ | 200 | 31 | 54 | 285 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_embed/test_interpreter.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_embed/test_interpreter.py) | Python | 6 | 1 | 4 | 11 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_enum.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_enum.cpp) | C++ | 63 | 14 | 11 | 88 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_enum.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_enum.py) | Python | 151 | 20 | 42 | 213 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eval.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eval.cpp) | C++ | 64 | 11 | 17 | 92 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eval.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eval.py) | Python | 16 | 1 | 11 | 28 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eval_call.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eval_call.py) | Python | 2 | 2 | 2 | 6 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_exceptions.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_exceptions.cpp) | C++ | 165 | 32 | 28 | 225 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_exceptions.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_exceptions.py) | Python | 123 | 18 | 51 | 192 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_factory_constructors.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_factory_constructors.cpp) | C++ | 250 | 60 | 34 | 344 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_factory_constructors.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_factory_constructors.py) | Python | 375 | 9 | 95 | 479 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_gil_scoped.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_gil_scoped.cpp) | C++ | 40 | 8 | 7 | 55 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_gil_scoped.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_gil_scoped.py) | Python | 62 | 6 | 24 | 92 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_iostream.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_iostream.cpp) | C++ | 46 | 9 | 19 | 74 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_iostream.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_iostream.py) | Python | 168 | 6 | 42 | 216 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_kwargs_and_defaults.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_kwargs_and_defaults.cpp) | C++ | 90 | 35 | 18 | 143 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_kwargs_and_defaults.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_kwargs_and_defaults.py) | Python | 176 | 8 | 57 | 241 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_local_bindings.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_local_bindings.cpp) | C++ | 54 | 32 | 16 | 102 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_local_bindings.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_local_bindings.py) | Python | 165 | 11 | 55 | 231 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_methods_and_attributes.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_methods_and_attributes.cpp) | C++ | 297 | 40 | 42 | 379 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_methods_and_attributes.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_methods_and_attributes.py) | Python | 347 | 14 | 102 | 463 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_modules.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_modules.cpp) | C++ | 74 | 16 | 12 | 102 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_modules.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_modules.py) | Python | 54 | 3 | 17 | 74 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_multiple_inheritance.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_multiple_inheritance.cpp) | C++ | 145 | 43 | 31 | 219 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_multiple_inheritance.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_multiple_inheritance.py) | Python | 258 | 13 | 86 | 357 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_array.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_array.cpp) | C++ | 340 | 48 | 51 | 439 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_array.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_array.py) | Python | 379 | 21 | 96 | 496 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_dtypes.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_dtypes.cpp) | C++ | 408 | 34 | 58 | 500 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_dtypes.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_dtypes.py) | Python | 281 | 10 | 76 | 367 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_vectorize.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_vectorize.cpp) | C++ | 58 | 22 | 14 | 94 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_vectorize.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_vectorize.py) | Python | 181 | 2 | 23 | 206 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_opaque_types.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_opaque_types.cpp) | C++ | 47 | 17 | 10 | 74 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_opaque_types.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_opaque_types.py) | Python | 41 | 1 | 14 | 56 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_operator_overloading.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_operator_overloading.cpp) | C++ | 167 | 31 | 29 | 227 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_operator_overloading.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_operator_overloading.py) | Python | 118 | 3 | 25 | 146 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_pickling.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_pickling.cpp) | C++ | 94 | 19 | 18 | 131 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_pickling.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_pickling.py) | Python | 34 | 1 | 12 | 47 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_pytypes.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_pytypes.cpp) | C++ | 328 | 27 | 56 | 411 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_pytypes.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_pytypes.py) | Python | 326 | 13 | 88 | 427 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_sequences_and_iterators.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_sequences_and_iterators.cpp) | C++ | 284 | 30 | 45 | 359 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_sequences_and_iterators.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_sequences_and_iterators.py) | Python | 141 | 2 | 49 | 192 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_smart_ptr.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_smart_ptr.cpp) | C++ | 284 | 50 | 37 | 371 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_smart_ptr.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_smart_ptr.py) | Python | 224 | 12 | 56 | 292 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_stl.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_stl.cpp) | C++ | 241 | 37 | 47 | 325 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_stl.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_stl.py) | Python | 185 | 3 | 65 | 253 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_stl_binders.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_stl_binders.cpp) | C++ | 91 | 19 | 20 | 130 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_stl_binders.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_stl_binders.py) | Python | 202 | 16 | 68 | 286 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_tagbased_polymorphic.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_tagbased_polymorphic.cpp) | C++ | 107 | 15 | 21 | 143 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_tagbased_polymorphic.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_tagbased_polymorphic.py) | Python | 18 | 1 | 3 | 22 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_union.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_union.cpp) | C++ | 11 | 8 | 4 | 23 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_union.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_union.py) | Python | 5 | 1 | 4 | 10 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_virtual_functions.cpp](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_virtual_functions.cpp) | C++ | 352 | 86 | 61 | 499 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_virtual_functions.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_virtual_functions.py) | Python | 290 | 16 | 75 | 381 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/FindCatch.cmake](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/FindCatch.cmake) | CMake | 63 | 0 | 8 | 71 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/FindEigen3.cmake](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/FindEigen3.cmake) | CMake | 67 | 0 | 17 | 84 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/FindPythonLibsNew.cmake](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/FindPythonLibsNew.cmake) | CMake | 229 | 0 | 27 | 256 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/check-style.sh](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/check-style.sh) | Shell Script | 26 | 13 | 6 | 45 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/libsize.py](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/libsize.py) | Python | 24 | 5 | 10 | 39 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/pybind11Common.cmake](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/pybind11Common.cmake) | CMake | 329 | 0 | 57 | 386 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/pybind11NewTools.cmake](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/pybind11NewTools.cmake) | CMake | 205 | 0 | 38 | 243 | +| [src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/pybind11Tools.cmake](/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/pybind11Tools.cmake) | CMake | 169 | 0 | 28 | 197 | + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2024-06-17_19-36-50/diff-details.md b/.VSCodeCounter/2024-06-17_19-36-50/diff-details.md new file mode 100644 index 0000000..f661bc7 --- /dev/null +++ b/.VSCodeCounter/2024-06-17_19-36-50/diff-details.md @@ -0,0 +1,15 @@ +# Diff Details + +Date : 2024-06-17 19:36:50 + +Directory d:\\Administrator\\Desktop\\空地协同头歌\\src\\Robot\\unitree_legged_go1-walk + +Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details \ No newline at end of file diff --git a/.VSCodeCounter/2024-06-17_19-36-50/diff.csv b/.VSCodeCounter/2024-06-17_19-36-50/diff.csv new file mode 100644 index 0000000..b7d8d75 --- /dev/null +++ b/.VSCodeCounter/2024-06-17_19-36-50/diff.csv @@ -0,0 +1,2 @@ +"filename", "language", "", "comment", "blank", "total" +"Total", "-", , 0, 0, 0 \ No newline at end of file diff --git a/.VSCodeCounter/2024-06-17_19-36-50/diff.md b/.VSCodeCounter/2024-06-17_19-36-50/diff.md new file mode 100644 index 0000000..53ce0d6 --- /dev/null +++ b/.VSCodeCounter/2024-06-17_19-36-50/diff.md @@ -0,0 +1,19 @@ +# Diff Summary + +Date : 2024-06-17 19:36:50 + +Directory d:\\Administrator\\Desktop\\空地协同头歌\\src\\Robot\\unitree_legged_go1-walk + +Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2024-06-17_19-36-50/diff.txt b/.VSCodeCounter/2024-06-17_19-36-50/diff.txt new file mode 100644 index 0000000..b04cc61 --- /dev/null +++ b/.VSCodeCounter/2024-06-17_19-36-50/diff.txt @@ -0,0 +1,22 @@ +Date : 2024-06-17 19:36:50 +Directory : d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk +Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ ++----------+------------+------------+------------+------------+------------+ + +Directories ++------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++------+------------+------------+------------+------------+------------+ ++------+------------+------------+------------+------------+------------+ + +Files ++----------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++----------+----------+------------+------------+------------+------------+ +| Total | | 0 | 0 | 0 | 0 | ++----------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/.VSCodeCounter/2024-06-17_19-36-50/results.csv b/.VSCodeCounter/2024-06-17_19-36-50/results.csv new file mode 100644 index 0000000..0d8ae86 --- /dev/null +++ b/.VSCodeCounter/2024-06-17_19-36-50/results.csv @@ -0,0 +1,214 @@ +"filename", "language", "XML", "Python", "C++", "Markdown", "YAML", "reStructuredText", "Properties", "CMake", "Shell Script", "CSS", "pip requirements", "Ini", "comment", "blank", "total" +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\README.md", "Markdown", 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 54 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example\example_joystick.cpp", "C++", 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 16, 83 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example\example_position.cpp", "C++", 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 22, 170 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example\example_torque.cpp", "C++", 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 16, 97 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example\example_velocity.cpp", "C++", 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 18, 101 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example\example_walk.cpp", "C++", 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 15, 226 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example_py\example_position.py", "Python", 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 26, 119 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example_py\example_torque.py", "Python", 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 18, 71 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example_py\example_velocity.py", "Python", 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 59 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example_py\example_walk.py", "Python", 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 30, 120 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\a1_const.h", "C++", 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 18 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\aliengo_const.h", "C++", 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 18 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\b1_const.h", "C++", 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 16 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\comm.h", "C++", 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 30, 229 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\go1_const.h", "C++", 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 18 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\joystick.h", "C++", 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 44 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\loop.h", "C++", 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 13, 62 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\quadruped.h", "C++", 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 14, 49 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\safety.h", "C++", 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 30 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\udp.h", "C++", 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 19, 99 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\unitree_legged_sdk.h", "C++", 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 19 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\package.xml", "XML", 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 11 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\python_interface.cpp", "C++", 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 22, 221 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.appveyor.yml", "YAML", 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 38 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.cmake-format.yaml", "YAML", 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 28, 15, 74 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\CONTRIBUTING.md", "Markdown", 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 320 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\ISSUE_TEMPLATE\bug-report.md", "Markdown", 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 29 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\ISSUE_TEMPLATE\config.yml", "YAML", 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\ISSUE_TEMPLATE\feature-request.md", "Markdown", 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 17 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\ISSUE_TEMPLATE\question.md", "Markdown", 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 22 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\labeler.yml", "YAML", 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\workflows\ci.yml", "YAML", 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 43, 112, 523 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\workflows\configure.yml", "YAML", 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 6, 16, 85 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\workflows\format.yml", "YAML", 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 3, 8, 42 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\workflows\labeler.yml", "YAML", 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\workflows\pip.yml", "YAML", 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 7, 24, 104 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.pre-commit-config.yaml", "YAML", 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 22, 9, 89 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.readthedocs.yml", "YAML", 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\README.rst", "reStructuredText", 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 6, 31, 159 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\_static\theme_overrides.css", "CSS", 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 1, 12 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\chrono.rst", "reStructuredText", 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 2, 18, 82 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\custom.rst", "reStructuredText", 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 5, 19, 92 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\eigen.rst", "reStructuredText", 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 13, 69, 311 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\functional.rst", "reStructuredText", 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 9, 27, 110 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\index.rst", "reStructuredText", 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 2, 11, 44 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\overview.rst", "reStructuredText", 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 8, 22, 166 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\stl.rst", "reStructuredText", 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 18, 65, 241 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\strings.rst", "reStructuredText", 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 20, 91, 306 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\classes.rst", "reStructuredText", 0, 0, 0, 0, 0, 856, 0, 0, 0, 0, 0, 0, 96, 310, 1262 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\embedding.rst", "reStructuredText", 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 14, 80, 262 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\exceptions.rst", "reStructuredText", 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 14, 61, 299 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\functions.rst", "reStructuredText", 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 47, 148, 562 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\misc.rst", "reStructuredText", 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 27, 97, 338 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\pycpp\index.rst", "reStructuredText", 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 1, 4, 14 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\pycpp\numpy.rst", "reStructuredText", 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 26, 112, 437 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\pycpp\object.rst", "reStructuredText", 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 27, 82, 252 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\pycpp\utilities.rst", "reStructuredText", 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 13, 41, 145 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\smart_ptrs.rst", "reStructuredText", 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 14, 53, 174 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\basics.rst", "reStructuredText", 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 32, 99, 302 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\benchmark.py", "Python", 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 14, 90 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\benchmark.rst", "reStructuredText", 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 16, 27, 96 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\changelog.rst", "reStructuredText", 0, 0, 0, 0, 0, 1118, 0, 0, 0, 0, 0, 0, 15, 365, 1498 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\classes.rst", "reStructuredText", 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 49, 151, 533 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\cmake\index.rst", "reStructuredText", 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 1, 3, 9 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\compiling.rst", "reStructuredText", 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 47, 174, 594 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\conf.py", "Python", 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 85, 340 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\faq.rst", "reStructuredText", 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 20, 97, 344 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\index.rst", "reStructuredText", 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 6, 11, 44 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\installing.rst", "reStructuredText", 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 9, 33, 104 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\limitations.rst", "reStructuredText", 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 15, 57 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\pybind11_vs_boost_python1.svg", "XML", 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 428 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\pybind11_vs_boost_python2.svg", "XML", 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 428 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\reference.rst", "reStructuredText", 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 30, 47, 118 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\release.rst", "reStructuredText", 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 2, 17, 76 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\requirements.txt", "pip requirements", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 1, 8 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\upgrade.rst", "reStructuredText", 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 19, 136, 514 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\attr.h", "C++", 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 120, 552 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\buffer_info.h", "C++", 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 27, 147 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\cast.h", "C++", 0, 0, 1615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 307, 2227 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\chrono.h", "C++", 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 192 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\common.h", "C++", 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\complex.h", "C++", 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 14, 66 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\detail\class.h", "C++", 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 100, 671 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\detail\common.h", "C++", 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 114, 854 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\detail\descr.h", "C++", 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 23, 101 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\detail\init.h", "C++", 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 43, 337 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\detail\internals.h", "C++", 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 35, 353 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\detail\typeid.h", "C++", 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 9, 56 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\eigen.h", "C++", 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 85, 608 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\embed.h", "C++", 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 23, 208 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\eval.h", "C++", 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 20, 133 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\functional.h", "C++", 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 17, 105 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\iostream.h", "C++", 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 33, 217 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\numpy.h", "C++", 0, 0, 1229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 254, 1680 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\operators.h", "C++", 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 20, 174 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\options.h", "C++", 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 22, 66 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\pybind11.h", "C++", 0, 0, 1719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 281, 2356 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\pytypes.h", "C++", 0, 0, 1133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 221, 1656 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\stl.h", "C++", 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 60, 389 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\stl_bind.h", "C++", 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 114, 662 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\pybind11\__init__.py", "Python", 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 13 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\pybind11\__main__.py", "Python", 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 11, 50 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\pybind11\_version.py", "Python", 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 13 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\pybind11\commands.py", "Python", 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 21 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\pybind11\setup_helpers.py", "Python", 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 89, 388 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\setup.cfg", "Properties", 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 3, 8, 67 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\setup.py", "Python", 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 25, 116 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\conftest.py", "Python", 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 53, 201 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\constructor_stats.h", "C++", 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 19, 276 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\cross_module_gil_utils.cpp", "C++", 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 11, 74 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\env.py", "Python", 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 15 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\extra_python_package\pytest.ini", "Ini", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\extra_python_package\test_files.py", "Python", 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 49, 260 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\extra_setuptools\pytest.ini", "Ini", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\extra_setuptools\test_setuphelper.py", "Python", 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 20, 102 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\local_bindings.h", "C++", 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 10, 65 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\object.h", "C++", 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 37, 176 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\pybind11_cross_module_tests.cpp", "C++", 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 21, 124 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\pybind11_tests.cpp", "C++", 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 14, 92 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\pybind11_tests.h", "C++", 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 14, 72 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\pytest.ini", "Ini", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 1, 20 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\requirements.txt", "pip requirements", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 1, 9 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_async.cpp", "C++", 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 3, 27 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_async.py", "Python", 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 26 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_buffers.cpp", "C++", 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 32, 215 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_buffers.py", "Python", 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 37, 163 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_builtin_casters.cpp", "C++", 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 26, 193 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_builtin_casters.py", "Python", 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 76, 393 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_call_policies.cpp", "C++", 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 17, 102 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_call_policies.py", "Python", 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 27, 193 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_callbacks.cpp", "C++", 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 24, 169 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_callbacks.py", "Python", 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 38, 138 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_chrono.cpp", "C++", 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 14, 85 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_chrono.py", "Python", 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 60, 213 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_class.cpp", "C++", 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 73, 526 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_class.py", "Python", 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 101, 421 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_cmake_build\embed.cpp", "C++", 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 22 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_cmake_build\main.cpp", "C++", 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_cmake_build\test.py", "Python", 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 7 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_constants_and_functions.cpp", "C++", 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 17, 128 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_constants_and_functions.py", "Python", 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 43 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_copy_move.cpp", "C++", 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 21, 220 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_copy_move.py", "Python", 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 26, 114 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_custom_type_casters.cpp", "C++", 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 18, 128 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_custom_type_casters.py", "Python", 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 15, 91 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_docstring_options.cpp", "C++", 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 15, 62 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_docstring_options.py", "Python", 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 13, 40 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_eigen.cpp", "C++", 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 41, 328 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_eigen.py", "Python", 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 126, 698 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_embed\catch.cpp", "C++", 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 23 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_embed\external_module.cpp", "C++", 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 24 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_embed\test_interpreter.cpp", "C++", 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 54, 285 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_embed\test_interpreter.py", "Python", 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 11 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_enum.cpp", "C++", 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 11, 88 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_enum.py", "Python", 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 42, 213 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_eval.cpp", "C++", 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 17, 92 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_eval.py", "Python", 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 11, 28 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_eval_call.py", "Python", 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 6 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_exceptions.cpp", "C++", 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 28, 225 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_exceptions.py", "Python", 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 51, 192 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_factory_constructors.cpp", "C++", 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 34, 344 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_factory_constructors.py", "Python", 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 95, 479 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_gil_scoped.cpp", "C++", 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 55 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_gil_scoped.py", "Python", 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 24, 92 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_iostream.cpp", "C++", 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 19, 74 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_iostream.py", "Python", 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 42, 216 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_kwargs_and_defaults.cpp", "C++", 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 18, 143 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_kwargs_and_defaults.py", "Python", 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 57, 241 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_local_bindings.cpp", "C++", 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 16, 102 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_local_bindings.py", "Python", 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 55, 231 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_methods_and_attributes.cpp", "C++", 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 42, 379 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_methods_and_attributes.py", "Python", 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 102, 463 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_modules.cpp", "C++", 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 12, 102 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_modules.py", "Python", 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 17, 74 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_multiple_inheritance.cpp", "C++", 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 31, 219 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_multiple_inheritance.py", "Python", 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 86, 357 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_numpy_array.cpp", "C++", 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 51, 439 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_numpy_array.py", "Python", 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 96, 496 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_numpy_dtypes.cpp", "C++", 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 58, 500 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_numpy_dtypes.py", "Python", 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 76, 367 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_numpy_vectorize.cpp", "C++", 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 14, 94 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_numpy_vectorize.py", "Python", 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 23, 206 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_opaque_types.cpp", "C++", 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 10, 74 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_opaque_types.py", "Python", 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 14, 56 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_operator_overloading.cpp", "C++", 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 29, 227 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_operator_overloading.py", "Python", 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 146 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_pickling.cpp", "C++", 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 18, 131 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_pickling.py", "Python", 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 47 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_pytypes.cpp", "C++", 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 56, 411 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_pytypes.py", "Python", 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 88, 427 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_sequences_and_iterators.cpp", "C++", 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 45, 359 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_sequences_and_iterators.py", "Python", 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 49, 192 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_smart_ptr.cpp", "C++", 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 37, 371 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_smart_ptr.py", "Python", 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 56, 292 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_stl.cpp", "C++", 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 47, 325 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_stl.py", "Python", 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 65, 253 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_stl_binders.cpp", "C++", 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 130 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_stl_binders.py", "Python", 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 68, 286 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_tagbased_polymorphic.cpp", "C++", 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 21, 143 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_tagbased_polymorphic.py", "Python", 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 22 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_union.cpp", "C++", 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 23 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_union.py", "Python", 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 10 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_virtual_functions.cpp", "C++", 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 61, 499 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_virtual_functions.py", "Python", 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 75, 381 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\FindCatch.cmake", "CMake", 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 8, 71 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\FindEigen3.cmake", "CMake", 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 17, 84 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\FindPythonLibsNew.cmake", "CMake", 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 27, 256 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\check-style.sh", "Shell Script", 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 13, 6, 45 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\libsize.py", "Python", 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 10, 39 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\pybind11Common.cmake", "CMake", 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 57, 386 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\pybind11NewTools.cmake", "CMake", 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 38, 243 +"d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\pybind11Tools.cmake", "CMake", 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 28, 197 +"Total", "-", 863, 7457, 17167, 337, 693, 6421, 56, 1062, 26, 11, 15, 19, 5084, 8663, 47874 \ No newline at end of file diff --git a/.VSCodeCounter/2024-06-17_19-36-50/results.json b/.VSCodeCounter/2024-06-17_19-36-50/results.json new file mode 100644 index 0000000..48171b6 --- /dev/null +++ b/.VSCodeCounter/2024-06-17_19-36-50/results.json @@ -0,0 +1 @@ +{"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/package.xml":{"language":"XML","code":9,"comment":0,"blank":2},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/example_py/example_walk.py":{"language":"Python","code":76,"comment":14,"blank":30},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/example_py/example_position.py":{"language":"Python","code":81,"comment":12,"blank":26},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/example_py/example_velocity.py":{"language":"Python","code":38,"comment":4,"blank":17},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/example_py/example_torque.py":{"language":"Python","code":44,"comment":9,"blank":18},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/a1_const.h":{"language":"C++","code":11,"comment":3,"blank":4},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/python_interface.cpp":{"language":"C++","code":190,"comment":9,"blank":22},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/example/example_velocity.cpp":{"language":"C++","code":77,"comment":6,"blank":18},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/joystick.h":{"language":"C++","code":35,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/safety.h":{"language":"C++","code":18,"comment":5,"blank":7},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/README.md":{"language":"Markdown","code":42,"comment":0,"blank":12},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.appveyor.yml":{"language":"YAML","code":37,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/labeler.yml":{"language":"YAML","code":12,"comment":0,"blank":3},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/setup.py":{"language":"Python","code":77,"comment":14,"blank":25},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.cmake-format.yaml":{"language":"YAML","code":31,"comment":28,"blank":15},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/README.rst":{"language":"reStructuredText","code":122,"comment":6,"blank":31},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/udp.h":{"language":"C++","code":63,"comment":17,"blank":19},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/unitree_legged_sdk.h":{"language":"C++","code":11,"comment":3,"blank":5},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/quadruped.h":{"language":"C++","code":31,"comment":4,"blank":14},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/loop.h":{"language":"C++","code":42,"comment":7,"blank":13},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/example/example_walk.cpp":{"language":"C++","code":169,"comment":42,"blank":15},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/example/example_torque.cpp":{"language":"C++","code":77,"comment":4,"blank":16},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/go1_const.h":{"language":"C++","code":11,"comment":3,"blank":4},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/comm.h":{"language":"C++","code":172,"comment":27,"blank":30},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/example/example_joystick.cpp":{"language":"C++","code":64,"comment":3,"blank":16},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/example/example_position.cpp":{"language":"C++","code":134,"comment":14,"blank":22},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.pre-commit-config.yaml":{"language":"YAML","code":58,"comment":22,"blank":9},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/ISSUE_TEMPLATE/feature-request.md":{"language":"Markdown","code":11,"comment":0,"blank":6},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/setup.cfg":{"language":"Properties","code":56,"comment":3,"blank":8},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/ISSUE_TEMPLATE/config.yml":{"language":"YAML","code":5,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/CONTRIBUTING.md":{"language":"Markdown","code":248,"comment":0,"blank":72},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/__main__.py":{"language":"Python","code":37,"comment":2,"blank":11},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/__init__.py":{"language":"Python","code":8,"comment":1,"blank":4},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/configure.yml":{"language":"YAML","code":63,"comment":6,"blank":16},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/_version.py":{"language":"Python","code":7,"comment":1,"blank":5},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/setup_helpers.py":{"language":"Python","code":264,"comment":35,"blank":89},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/pybind11/commands.py":{"language":"Python","code":13,"comment":1,"blank":7},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/b1_const.h":{"language":"C++","code":11,"comment":3,"blank":2},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/include/unitree_legged_sdk/aliengo_const.h":{"language":"C++","code":11,"comment":3,"blank":4},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/conftest.py":{"language":"Python","code":143,"comment":5,"blank":53},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/ISSUE_TEMPLATE/bug-report.md":{"language":"Markdown","code":19,"comment":0,"blank":10},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/FindEigen3.cmake":{"language":"CMake","code":67,"comment":0,"blank":17},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/format.yml":{"language":"YAML","code":31,"comment":3,"blank":8},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/basics.rst":{"language":"reStructuredText","code":171,"comment":32,"blank":99},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/FindPythonLibsNew.cmake":{"language":"CMake","code":229,"comment":0,"blank":27},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.readthedocs.yml":{"language":"YAML","code":3,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/constructor_stats.h":{"language":"C++","code":180,"comment":77,"blank":19},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/cross_module_gil_utils.cpp":{"language":"C++","code":48,"comment":15,"blank":11},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/FindCatch.cmake":{"language":"CMake","code":63,"comment":0,"blank":8},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/check-style.sh":{"language":"Shell Script","code":26,"comment":13,"blank":6},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/conf.py":{"language":"Python","code":78,"comment":177,"blank":85},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/pybind11_tests.cpp":{"language":"C++","code":55,"comment":23,"blank":14},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/compiling.rst":{"language":"reStructuredText","code":373,"comment":47,"blank":174},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/labeler.yml":{"language":"YAML","code":12,"comment":0,"blank":2},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/pybind11_cross_module_tests.cpp":{"language":"C++","code":60,"comment":43,"blank":21},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/object.h":{"language":"C++","code":92,"comment":47,"blank":37},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/embedding.rst":{"language":"reStructuredText","code":168,"comment":14,"blank":80},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/cast.h":{"language":"C++","code":1615,"comment":305,"blank":307},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_call_policies.cpp":{"language":"C++","code":70,"comment":15,"blank":17},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/ci.yml":{"language":"YAML","code":368,"comment":43,"blank":112},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_async.cpp":{"language":"C++","code":16,"comment":8,"blank":3},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/eigen.h":{"language":"C++","code":417,"comment":106,"blank":85},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_call_policies.py":{"language":"Python","code":163,"comment":3,"blank":27},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_chrono.cpp":{"language":"C++","code":46,"comment":25,"blank":14},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_class.py":{"language":"Python","code":295,"comment":25,"blank":101},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_chrono.py":{"language":"Python","code":130,"comment":23,"blank":60},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/workflows/pip.yml":{"language":"YAML","code":73,"comment":7,"blank":24},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_constants_and_functions.cpp":{"language":"C++","code":97,"comment":14,"blank":17},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/.github/ISSUE_TEMPLATE/question.md":{"language":"Markdown","code":17,"comment":0,"blank":5},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_copy_move.py":{"language":"Python","code":77,"comment":11,"blank":26},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_copy_move.cpp":{"language":"C++","code":177,"comment":22,"blank":21},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_custom_type_casters.cpp":{"language":"C++","code":91,"comment":19,"blank":18},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/_static/theme_overrides.css":{"language":"CSS","code":11,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_constants_and_functions.py":{"language":"Python","code":30,"comment":1,"blank":12},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_custom_type_casters.py":{"language":"Python","code":71,"comment":5,"blank":15},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_docstring_options.cpp":{"language":"C++","code":38,"comment":9,"blank":15},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/upgrade.rst":{"language":"reStructuredText","code":359,"comment":19,"blank":136},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_class.cpp":{"language":"C++","code":377,"comment":76,"blank":73},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/embed.h":{"language":"C++","code":95,"comment":90,"blank":23},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_cmake_build/embed.cpp":{"language":"C++","code":16,"comment":0,"blank":6},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/release.rst":{"language":"reStructuredText","code":57,"comment":2,"blank":17},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/reference.rst":{"language":"reStructuredText","code":41,"comment":30,"blank":47},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_callbacks.py":{"language":"Python","code":94,"comment":6,"blank":38},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_exceptions.cpp":{"language":"C++","code":165,"comment":32,"blank":28},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/cmake/index.rst":{"language":"reStructuredText","code":5,"comment":1,"blank":3},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/requirements.txt":{"language":"pip requirements","code":7,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_factory_constructors.py":{"language":"Python","code":375,"comment":9,"blank":95},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/class.h":{"language":"C++","code":460,"comment":111,"blank":100},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_factory_constructors.cpp":{"language":"C++","code":250,"comment":60,"blank":34},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_exceptions.py":{"language":"Python","code":123,"comment":18,"blank":51},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eval_call.py":{"language":"Python","code":2,"comment":2,"blank":2},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_gil_scoped.cpp":{"language":"C++","code":40,"comment":8,"blank":7},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eval.py":{"language":"Python","code":16,"comment":1,"blank":11},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eval.cpp":{"language":"C++","code":64,"comment":11,"blank":17},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_cmake_build/test.py":{"language":"Python","code":4,"comment":1,"blank":2},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_gil_scoped.py":{"language":"Python","code":62,"comment":6,"blank":24},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_iostream.cpp":{"language":"C++","code":46,"comment":9,"blank":19},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/common.h":{"language":"C++","code":527,"comment":213,"blank":114},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_local_bindings.py":{"language":"Python","code":165,"comment":11,"blank":55},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/descr.h":{"language":"C++","code":68,"comment":10,"blank":23},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/init.h":{"language":"C++","code":228,"comment":66,"blank":43},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_enum.py":{"language":"Python","code":151,"comment":20,"blank":42},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_methods_and_attributes.py":{"language":"Python","code":347,"comment":14,"blank":102},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_local_bindings.cpp":{"language":"C++","code":54,"comment":32,"blank":16},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_kwargs_and_defaults.cpp":{"language":"C++","code":90,"comment":35,"blank":18},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_kwargs_and_defaults.py":{"language":"Python","code":176,"comment":8,"blank":57},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_methods_and_attributes.cpp":{"language":"C++","code":297,"comment":40,"blank":42},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_iostream.py":{"language":"Python","code":168,"comment":6,"blank":42},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/typeid.h":{"language":"C++","code":37,"comment":10,"blank":9},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_enum.cpp":{"language":"C++","code":63,"comment":14,"blank":11},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/detail/internals.h":{"language":"C++","code":257,"comment":61,"blank":35},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_cmake_build/main.cpp":{"language":"C++","code":5,"comment":0,"blank":2},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_modules.py":{"language":"Python","code":54,"comment":3,"blank":17},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_modules.cpp":{"language":"C++","code":74,"comment":16,"blank":12},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_multiple_inheritance.py":{"language":"Python","code":258,"comment":13,"blank":86},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_multiple_inheritance.cpp":{"language":"C++","code":145,"comment":43,"blank":31},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_array.cpp":{"language":"C++","code":340,"comment":48,"blank":51},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_embed/external_module.cpp":{"language":"C++","code":15,"comment":3,"blank":6},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_opaque_types.cpp":{"language":"C++","code":47,"comment":17,"blank":10},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_opaque_types.py":{"language":"Python","code":41,"comment":1,"blank":14},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_vectorize.py":{"language":"Python","code":181,"comment":2,"blank":23},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_dtypes.py":{"language":"Python","code":281,"comment":10,"blank":76},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_vectorize.cpp":{"language":"C++","code":58,"comment":22,"blank":14},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_embed/catch.cpp":{"language":"C++","code":12,"comment":4,"blank":7},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_dtypes.cpp":{"language":"C++","code":408,"comment":34,"blank":58},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_pickling.py":{"language":"Python","code":34,"comment":1,"blank":12},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_embed/test_interpreter.cpp":{"language":"C++","code":200,"comment":31,"blank":54},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_numpy_array.py":{"language":"Python","code":379,"comment":21,"blank":96},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_pytypes.cpp":{"language":"C++","code":328,"comment":27,"blank":56},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_smart_ptr.cpp":{"language":"C++","code":284,"comment":50,"blank":37},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_sequences_and_iterators.py":{"language":"Python","code":141,"comment":2,"blank":49},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_stl.cpp":{"language":"C++","code":241,"comment":37,"blank":47},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_sequences_and_iterators.cpp":{"language":"C++","code":284,"comment":30,"blank":45},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/pybind11_vs_boost_python2.svg":{"language":"XML","code":427,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_pytypes.py":{"language":"Python","code":326,"comment":13,"blank":88},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_smart_ptr.py":{"language":"Python","code":224,"comment":12,"blank":56},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_pickling.cpp":{"language":"C++","code":94,"comment":19,"blank":18},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_operator_overloading.py":{"language":"Python","code":118,"comment":3,"blank":25},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_embed/test_interpreter.py":{"language":"Python","code":6,"comment":1,"blank":4},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_operator_overloading.cpp":{"language":"C++","code":167,"comment":31,"blank":29},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_virtual_functions.cpp":{"language":"C++","code":352,"comment":86,"blank":61},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_stl.py":{"language":"Python","code":185,"comment":3,"blank":65},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_union.cpp":{"language":"C++","code":11,"comment":8,"blank":4},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_union.py":{"language":"Python","code":5,"comment":1,"blank":4},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eigen.py":{"language":"Python","code":544,"comment":28,"blank":126},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_tagbased_polymorphic.py":{"language":"Python","code":18,"comment":1,"blank":3},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_stl_binders.cpp":{"language":"C++","code":91,"comment":19,"blank":20},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_stl_binders.py":{"language":"Python","code":202,"comment":16,"blank":68},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_tagbased_polymorphic.cpp":{"language":"C++","code":107,"comment":15,"blank":21},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_virtual_functions.py":{"language":"Python","code":290,"comment":16,"blank":75},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_eigen.cpp":{"language":"C++","code":218,"comment":69,"blank":41},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_docstring_options.py":{"language":"Python","code":16,"comment":11,"blank":13},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/complex.h":{"language":"C++","code":43,"comment":9,"blank":14},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_builtin_casters.py":{"language":"Python","code":307,"comment":10,"blank":76},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_callbacks.cpp":{"language":"C++","code":124,"comment":21,"blank":24},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/common.h":{"language":"C++","code":2,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/smart_ptrs.rst":{"language":"reStructuredText","code":107,"comment":14,"blank":53},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/pycpp/numpy.rst":{"language":"reStructuredText","code":299,"comment":26,"blank":112},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_builtin_casters.cpp":{"language":"C++","code":138,"comment":29,"blank":26},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/pycpp/utilities.rst":{"language":"reStructuredText","code":91,"comment":13,"blank":41},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/pycpp/object.rst":{"language":"reStructuredText","code":143,"comment":27,"blank":82},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/pycpp/index.rst":{"language":"reStructuredText","code":9,"comment":1,"blank":4},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_buffers.py":{"language":"Python","code":122,"comment":4,"blank":37},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_buffers.cpp":{"language":"C++","code":165,"comment":18,"blank":32},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/misc.rst":{"language":"reStructuredText","code":214,"comment":27,"blank":97},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/chrono.h":{"language":"C++","code":128,"comment":32,"blank":32},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/test_async.py":{"language":"Python","code":15,"comment":1,"blank":10},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/exceptions.rst":{"language":"reStructuredText","code":224,"comment":14,"blank":61},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/limitations.rst":{"language":"reStructuredText","code":42,"comment":0,"blank":15},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/functions.rst":{"language":"reStructuredText","code":367,"comment":47,"blank":148},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/installing.rst":{"language":"reStructuredText","code":62,"comment":9,"blank":33},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/buffer_info.h":{"language":"C++","code":106,"comment":14,"blank":27},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/index.rst":{"language":"reStructuredText","code":27,"comment":6,"blank":11},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/faq.rst":{"language":"reStructuredText","code":227,"comment":20,"blank":97},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/classes.rst":{"language":"reStructuredText","code":856,"comment":96,"blank":310},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/attr.h":{"language":"C++","code":306,"comment":126,"blank":120},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/requirements.txt":{"language":"pip requirements","code":8,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/pybind11_tests.h":{"language":"C++","code":51,"comment":7,"blank":14},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/local_bindings.h":{"language":"C++","code":44,"comment":11,"blank":10},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/pybind11Tools.cmake":{"language":"CMake","code":169,"comment":0,"blank":28},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/pybind11NewTools.cmake":{"language":"CMake","code":205,"comment":0,"blank":38},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/classes.rst":{"language":"reStructuredText","code":333,"comment":49,"blank":151},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/pytest.ini":{"language":"Ini","code":19,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/strings.rst":{"language":"reStructuredText","code":195,"comment":20,"blank":91},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/index.rst":{"language":"reStructuredText","code":31,"comment":2,"blank":11},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/stl.rst":{"language":"reStructuredText","code":158,"comment":18,"blank":65},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/overview.rst":{"language":"reStructuredText","code":136,"comment":8,"blank":22},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/functional.rst":{"language":"reStructuredText","code":74,"comment":9,"blank":27},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/extra_setuptools/test_setuphelper.py":{"language":"Python","code":79,"comment":3,"blank":20},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/iostream.h":{"language":"C++","code":107,"comment":77,"blank":33},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/functional.h":{"language":"C++","code":68,"comment":20,"blank":17},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/eigen.rst":{"language":"reStructuredText","code":229,"comment":13,"blank":69},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/eval.h":{"language":"C++","code":96,"comment":17,"blank":20},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/operators.h":{"language":"C++","code":136,"comment":18,"blank":20},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/numpy.h":{"language":"C++","code":1229,"comment":197,"blank":254},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/extra_setuptools/pytest.ini":{"language":"Ini","code":0,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/options.h":{"language":"C++","code":30,"comment":14,"blank":22},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/stl.h":{"language":"C++","code":303,"comment":26,"blank":60},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/custom.rst":{"language":"reStructuredText","code":68,"comment":5,"blank":19},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/pytypes.h":{"language":"C++","code":1133,"comment":302,"blank":221},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/advanced/cast/chrono.rst":{"language":"reStructuredText","code":62,"comment":2,"blank":18},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/pybind11.h":{"language":"C++","code":1719,"comment":356,"blank":281},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/include/pybind11/stl_bind.h":{"language":"C++","code":495,"comment":53,"blank":114},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/changelog.rst":{"language":"reStructuredText","code":1118,"comment":15,"blank":365},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/benchmark.rst":{"language":"reStructuredText","code":53,"comment":16,"blank":27},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/env.py":{"language":"Python","code":9,"comment":1,"blank":5},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/benchmark.py":{"language":"Python","code":75,"comment":1,"blank":14},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/pybind11Common.cmake":{"language":"CMake","code":329,"comment":0,"blank":57},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tools/libsize.py":{"language":"Python","code":24,"comment":5,"blank":10},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/extra_python_package/test_files.py":{"language":"Python","code":208,"comment":3,"blank":49},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/tests/extra_python_package/pytest.ini":{"language":"Ini","code":0,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/%E7%A9%BA%E5%9C%B0%E5%8D%8F%E5%90%8C%E5%A4%B4%E6%AD%8C/src/Robot/unitree_legged_go1-walk/python_wrapper/third-party/pybind11/docs/pybind11_vs_boost_python1.svg":{"language":"XML","code":427,"comment":0,"blank":1}} \ No newline at end of file diff --git a/.VSCodeCounter/2024-06-17_19-36-50/results.md b/.VSCodeCounter/2024-06-17_19-36-50/results.md new file mode 100644 index 0000000..bb69f88 --- /dev/null +++ b/.VSCodeCounter/2024-06-17_19-36-50/results.md @@ -0,0 +1,66 @@ +# Summary + +Date : 2024-06-17 19:36:50 + +Directory d:\\Administrator\\Desktop\\空地协同头歌\\src\\Robot\\unitree_legged_go1-walk + +Total : 212 files, 34127 codes, 5084 comments, 8663 blanks, all 47874 lines + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| C++ | 90 | 17,167 | 3,720 | 3,398 | 24,285 | +| Python | 57 | 7,457 | 631 | 2,253 | 10,341 | +| reStructuredText | 32 | 6,421 | 608 | 2,516 | 9,545 | +| CMake | 6 | 1,062 | 0 | 175 | 1,237 | +| XML | 3 | 863 | 0 | 4 | 867 | +| YAML | 11 | 693 | 109 | 192 | 994 | +| Markdown | 5 | 337 | 0 | 105 | 442 | +| Properties | 1 | 56 | 3 | 8 | 67 | +| Shell Script | 1 | 26 | 13 | 6 | 45 | +| Ini | 3 | 19 | 0 | 3 | 22 | +| pip requirements | 2 | 15 | 0 | 2 | 17 | +| CSS | 1 | 11 | 0 | 1 | 12 | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| . | 212 | 34,127 | 5,084 | 8,663 | 47,874 | +| . (Files) | 2 | 51 | 0 | 14 | 65 | +| example | 5 | 521 | 69 | 87 | 677 | +| example_py | 4 | 239 | 39 | 91 | 369 | +| include | 11 | 416 | 80 | 106 | 602 | +| include\\unitree_legged_sdk | 11 | 416 | 80 | 106 | 602 | +| python_wrapper | 190 | 32,900 | 4,896 | 8,365 | 46,161 | +| python_wrapper (Files) | 1 | 190 | 9 | 22 | 221 | +| python_wrapper\\third-party | 189 | 32,710 | 4,887 | 8,343 | 45,940 | +| python_wrapper\\third-party\\pybind11 | 189 | 32,710 | 4,887 | 8,343 | 45,940 | +| python_wrapper\\third-party\\pybind11 (Files) | 7 | 384 | 73 | 90 | 547 | +| python_wrapper\\third-party\\pybind11\\.github | 11 | 859 | 59 | 259 | 1,177 | +| python_wrapper\\third-party\\pybind11\\.github (Files) | 2 | 260 | 0 | 75 | 335 | +| python_wrapper\\third-party\\pybind11\\.github\\ISSUE_TEMPLATE | 4 | 52 | 0 | 22 | 74 | +| python_wrapper\\third-party\\pybind11\\.github\\workflows | 5 | 547 | 59 | 162 | 768 | +| python_wrapper\\third-party\\pybind11\\docs | 37 | 7,324 | 780 | 2,588 | 10,692 | +| python_wrapper\\third-party\\pybind11\\docs (Files) | 17 | 3,877 | 423 | 1,274 | 5,574 | +| python_wrapper\\third-party\\pybind11\\docs\\_static | 1 | 11 | 0 | 1 | 12 | +| python_wrapper\\third-party\\pybind11\\docs\\advanced | 18 | 3,431 | 356 | 1,310 | 5,097 | +| python_wrapper\\third-party\\pybind11\\docs\\advanced (Files) | 6 | 1,936 | 212 | 749 | 2,897 | +| python_wrapper\\third-party\\pybind11\\docs\\advanced\\cast | 8 | 953 | 77 | 322 | 1,352 | +| python_wrapper\\third-party\\pybind11\\docs\\advanced\\pycpp | 4 | 542 | 67 | 239 | 848 | +| python_wrapper\\third-party\\pybind11\\docs\\cmake | 1 | 5 | 1 | 3 | 9 | +| python_wrapper\\third-party\\pybind11\\include | 24 | 9,605 | 2,233 | 1,975 | 13,813 | +| python_wrapper\\third-party\\pybind11\\include\\pybind11 | 24 | 9,605 | 2,233 | 1,975 | 13,813 | +| python_wrapper\\third-party\\pybind11\\include\\pybind11 (Files) | 18 | 8,028 | 1,762 | 1,651 | 11,441 | +| python_wrapper\\third-party\\pybind11\\include\\pybind11\\detail | 6 | 1,577 | 471 | 324 | 2,372 | +| python_wrapper\\third-party\\pybind11\\pybind11 | 5 | 329 | 40 | 116 | 485 | +| python_wrapper\\third-party\\pybind11\\tests | 97 | 13,097 | 1,684 | 3,124 | 17,905 | +| python_wrapper\\third-party\\pybind11\\tests (Files) | 86 | 12,552 | 1,638 | 2,972 | 17,162 | +| python_wrapper\\third-party\\pybind11\\tests\\extra_python_package | 2 | 208 | 3 | 50 | 261 | +| python_wrapper\\third-party\\pybind11\\tests\\extra_setuptools | 2 | 79 | 3 | 21 | 103 | +| python_wrapper\\third-party\\pybind11\\tests\\test_cmake_build | 3 | 25 | 1 | 10 | 36 | +| python_wrapper\\third-party\\pybind11\\tests\\test_embed | 4 | 233 | 39 | 71 | 343 | +| python_wrapper\\third-party\\pybind11\\tools | 8 | 1,112 | 18 | 191 | 1,321 | + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2024-06-17_19-36-50/results.txt b/.VSCodeCounter/2024-06-17_19-36-50/results.txt new file mode 100644 index 0000000..6ee3789 --- /dev/null +++ b/.VSCodeCounter/2024-06-17_19-36-50/results.txt @@ -0,0 +1,281 @@ +Date : 2024-06-17 19:36:50 +Directory : d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk +Total : 212 files, 34127 codes, 5084 comments, 8663 blanks, all 47874 lines + +Languages ++------------------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++------------------+------------+------------+------------+------------+------------+ +| C++ | 90 | 17,167 | 3,720 | 3,398 | 24,285 | +| Python | 57 | 7,457 | 631 | 2,253 | 10,341 | +| reStructuredText | 32 | 6,421 | 608 | 2,516 | 9,545 | +| CMake | 6 | 1,062 | 0 | 175 | 1,237 | +| XML | 3 | 863 | 0 | 4 | 867 | +| YAML | 11 | 693 | 109 | 192 | 994 | +| Markdown | 5 | 337 | 0 | 105 | 442 | +| Properties | 1 | 56 | 3 | 8 | 67 | +| Shell Script | 1 | 26 | 13 | 6 | 45 | +| Ini | 3 | 19 | 0 | 3 | 22 | +| pip requirements | 2 | 15 | 0 | 2 | 17 | +| CSS | 1 | 11 | 0 | 1 | 12 | ++------------------+------------+------------+------------+------------+------------+ + +Directories ++--------------------------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++--------------------------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| . | 212 | 34,127 | 5,084 | 8,663 | 47,874 | +| . (Files) | 2 | 51 | 0 | 14 | 65 | +| example | 5 | 521 | 69 | 87 | 677 | +| example_py | 4 | 239 | 39 | 91 | 369 | +| include | 11 | 416 | 80 | 106 | 602 | +| include\unitree_legged_sdk | 11 | 416 | 80 | 106 | 602 | +| python_wrapper | 190 | 32,900 | 4,896 | 8,365 | 46,161 | +| python_wrapper (Files) | 1 | 190 | 9 | 22 | 221 | +| python_wrapper\third-party | 189 | 32,710 | 4,887 | 8,343 | 45,940 | +| python_wrapper\third-party\pybind11 | 189 | 32,710 | 4,887 | 8,343 | 45,940 | +| python_wrapper\third-party\pybind11 (Files) | 7 | 384 | 73 | 90 | 547 | +| python_wrapper\third-party\pybind11\.github | 11 | 859 | 59 | 259 | 1,177 | +| python_wrapper\third-party\pybind11\.github (Files) | 2 | 260 | 0 | 75 | 335 | +| python_wrapper\third-party\pybind11\.github\ISSUE_TEMPLATE | 4 | 52 | 0 | 22 | 74 | +| python_wrapper\third-party\pybind11\.github\workflows | 5 | 547 | 59 | 162 | 768 | +| python_wrapper\third-party\pybind11\docs | 37 | 7,324 | 780 | 2,588 | 10,692 | +| python_wrapper\third-party\pybind11\docs (Files) | 17 | 3,877 | 423 | 1,274 | 5,574 | +| python_wrapper\third-party\pybind11\docs\_static | 1 | 11 | 0 | 1 | 12 | +| python_wrapper\third-party\pybind11\docs\advanced | 18 | 3,431 | 356 | 1,310 | 5,097 | +| python_wrapper\third-party\pybind11\docs\advanced (Files) | 6 | 1,936 | 212 | 749 | 2,897 | +| python_wrapper\third-party\pybind11\docs\advanced\cast | 8 | 953 | 77 | 322 | 1,352 | +| python_wrapper\third-party\pybind11\docs\advanced\pycpp | 4 | 542 | 67 | 239 | 848 | +| python_wrapper\third-party\pybind11\docs\cmake | 1 | 5 | 1 | 3 | 9 | +| python_wrapper\third-party\pybind11\include | 24 | 9,605 | 2,233 | 1,975 | 13,813 | +| python_wrapper\third-party\pybind11\include\pybind11 | 24 | 9,605 | 2,233 | 1,975 | 13,813 | +| python_wrapper\third-party\pybind11\include\pybind11 (Files) | 18 | 8,028 | 1,762 | 1,651 | 11,441 | +| python_wrapper\third-party\pybind11\include\pybind11\detail | 6 | 1,577 | 471 | 324 | 2,372 | +| python_wrapper\third-party\pybind11\pybind11 | 5 | 329 | 40 | 116 | 485 | +| python_wrapper\third-party\pybind11\tests | 97 | 13,097 | 1,684 | 3,124 | 17,905 | +| python_wrapper\third-party\pybind11\tests (Files) | 86 | 12,552 | 1,638 | 2,972 | 17,162 | +| python_wrapper\third-party\pybind11\tests\extra_python_package | 2 | 208 | 3 | 50 | 261 | +| python_wrapper\third-party\pybind11\tests\extra_setuptools | 2 | 79 | 3 | 21 | 103 | +| python_wrapper\third-party\pybind11\tests\test_cmake_build | 3 | 25 | 1 | 10 | 36 | +| python_wrapper\third-party\pybind11\tests\test_embed | 4 | 233 | 39 | 71 | 343 | +| python_wrapper\third-party\pybind11\tools | 8 | 1,112 | 18 | 191 | 1,321 | ++--------------------------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ + +Files ++--------------------------------------------------------------------------------------------------------------------------------------------------+------------------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++--------------------------------------------------------------------------------------------------------------------------------------------------+------------------+------------+------------+------------+------------+ +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\README.md | Markdown | 42 | 0 | 12 | 54 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example\example_joystick.cpp | C++ | 64 | 3 | 16 | 83 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example\example_position.cpp | C++ | 134 | 14 | 22 | 170 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example\example_torque.cpp | C++ | 77 | 4 | 16 | 97 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example\example_velocity.cpp | C++ | 77 | 6 | 18 | 101 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example\example_walk.cpp | C++ | 169 | 42 | 15 | 226 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example_py\example_position.py | Python | 81 | 12 | 26 | 119 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example_py\example_torque.py | Python | 44 | 9 | 18 | 71 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example_py\example_velocity.py | Python | 38 | 4 | 17 | 59 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\example_py\example_walk.py | Python | 76 | 14 | 30 | 120 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\a1_const.h | C++ | 11 | 3 | 4 | 18 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\aliengo_const.h | C++ | 11 | 3 | 4 | 18 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\b1_const.h | C++ | 11 | 3 | 2 | 16 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\comm.h | C++ | 172 | 27 | 30 | 229 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\go1_const.h | C++ | 11 | 3 | 4 | 18 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\joystick.h | C++ | 35 | 5 | 4 | 44 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\loop.h | C++ | 42 | 7 | 13 | 62 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\quadruped.h | C++ | 31 | 4 | 14 | 49 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\safety.h | C++ | 18 | 5 | 7 | 30 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\udp.h | C++ | 63 | 17 | 19 | 99 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\include\unitree_legged_sdk\unitree_legged_sdk.h | C++ | 11 | 3 | 5 | 19 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\package.xml | XML | 9 | 0 | 2 | 11 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\python_interface.cpp | C++ | 190 | 9 | 22 | 221 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.appveyor.yml | YAML | 37 | 0 | 1 | 38 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.cmake-format.yaml | YAML | 31 | 28 | 15 | 74 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\CONTRIBUTING.md | Markdown | 248 | 0 | 72 | 320 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\ISSUE_TEMPLATE\bug-report.md | Markdown | 19 | 0 | 10 | 29 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\ISSUE_TEMPLATE\config.yml | YAML | 5 | 0 | 1 | 6 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\ISSUE_TEMPLATE\feature-request.md | Markdown | 11 | 0 | 6 | 17 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\ISSUE_TEMPLATE\question.md | Markdown | 17 | 0 | 5 | 22 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\labeler.yml | YAML | 12 | 0 | 3 | 15 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\workflows\ci.yml | YAML | 368 | 43 | 112 | 523 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\workflows\configure.yml | YAML | 63 | 6 | 16 | 85 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\workflows\format.yml | YAML | 31 | 3 | 8 | 42 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\workflows\labeler.yml | YAML | 12 | 0 | 2 | 14 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.github\workflows\pip.yml | YAML | 73 | 7 | 24 | 104 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.pre-commit-config.yaml | YAML | 58 | 22 | 9 | 89 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\.readthedocs.yml | YAML | 3 | 0 | 1 | 4 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\README.rst | reStructuredText | 122 | 6 | 31 | 159 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\_static\theme_overrides.css | CSS | 11 | 0 | 1 | 12 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\chrono.rst | reStructuredText | 62 | 2 | 18 | 82 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\custom.rst | reStructuredText | 68 | 5 | 19 | 92 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\eigen.rst | reStructuredText | 229 | 13 | 69 | 311 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\functional.rst | reStructuredText | 74 | 9 | 27 | 110 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\index.rst | reStructuredText | 31 | 2 | 11 | 44 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\overview.rst | reStructuredText | 136 | 8 | 22 | 166 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\stl.rst | reStructuredText | 158 | 18 | 65 | 241 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\cast\strings.rst | reStructuredText | 195 | 20 | 91 | 306 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\classes.rst | reStructuredText | 856 | 96 | 310 | 1,262 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\embedding.rst | reStructuredText | 168 | 14 | 80 | 262 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\exceptions.rst | reStructuredText | 224 | 14 | 61 | 299 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\functions.rst | reStructuredText | 367 | 47 | 148 | 562 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\misc.rst | reStructuredText | 214 | 27 | 97 | 338 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\pycpp\index.rst | reStructuredText | 9 | 1 | 4 | 14 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\pycpp\numpy.rst | reStructuredText | 299 | 26 | 112 | 437 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\pycpp\object.rst | reStructuredText | 143 | 27 | 82 | 252 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\pycpp\utilities.rst | reStructuredText | 91 | 13 | 41 | 145 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\advanced\smart_ptrs.rst | reStructuredText | 107 | 14 | 53 | 174 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\basics.rst | reStructuredText | 171 | 32 | 99 | 302 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\benchmark.py | Python | 75 | 1 | 14 | 90 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\benchmark.rst | reStructuredText | 53 | 16 | 27 | 96 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\changelog.rst | reStructuredText | 1,118 | 15 | 365 | 1,498 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\classes.rst | reStructuredText | 333 | 49 | 151 | 533 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\cmake\index.rst | reStructuredText | 5 | 1 | 3 | 9 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\compiling.rst | reStructuredText | 373 | 47 | 174 | 594 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\conf.py | Python | 78 | 177 | 85 | 340 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\faq.rst | reStructuredText | 227 | 20 | 97 | 344 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\index.rst | reStructuredText | 27 | 6 | 11 | 44 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\installing.rst | reStructuredText | 62 | 9 | 33 | 104 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\limitations.rst | reStructuredText | 42 | 0 | 15 | 57 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\pybind11_vs_boost_python1.svg | XML | 427 | 0 | 1 | 428 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\pybind11_vs_boost_python2.svg | XML | 427 | 0 | 1 | 428 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\reference.rst | reStructuredText | 41 | 30 | 47 | 118 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\release.rst | reStructuredText | 57 | 2 | 17 | 76 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\requirements.txt | pip requirements | 7 | 0 | 1 | 8 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\docs\upgrade.rst | reStructuredText | 359 | 19 | 136 | 514 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\attr.h | C++ | 306 | 126 | 120 | 552 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\buffer_info.h | C++ | 106 | 14 | 27 | 147 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\cast.h | C++ | 1,615 | 305 | 307 | 2,227 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\chrono.h | C++ | 128 | 32 | 32 | 192 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\common.h | C++ | 2 | 0 | 1 | 3 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\complex.h | C++ | 43 | 9 | 14 | 66 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\detail\class.h | C++ | 460 | 111 | 100 | 671 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\detail\common.h | C++ | 527 | 213 | 114 | 854 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\detail\descr.h | C++ | 68 | 10 | 23 | 101 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\detail\init.h | C++ | 228 | 66 | 43 | 337 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\detail\internals.h | C++ | 257 | 61 | 35 | 353 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\detail\typeid.h | C++ | 37 | 10 | 9 | 56 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\eigen.h | C++ | 417 | 106 | 85 | 608 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\embed.h | C++ | 95 | 90 | 23 | 208 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\eval.h | C++ | 96 | 17 | 20 | 133 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\functional.h | C++ | 68 | 20 | 17 | 105 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\iostream.h | C++ | 107 | 77 | 33 | 217 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\numpy.h | C++ | 1,229 | 197 | 254 | 1,680 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\operators.h | C++ | 136 | 18 | 20 | 174 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\options.h | C++ | 30 | 14 | 22 | 66 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\pybind11.h | C++ | 1,719 | 356 | 281 | 2,356 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\pytypes.h | C++ | 1,133 | 302 | 221 | 1,656 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\stl.h | C++ | 303 | 26 | 60 | 389 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\include\pybind11\stl_bind.h | C++ | 495 | 53 | 114 | 662 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\pybind11\__init__.py | Python | 8 | 1 | 4 | 13 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\pybind11\__main__.py | Python | 37 | 2 | 11 | 50 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\pybind11\_version.py | Python | 7 | 1 | 5 | 13 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\pybind11\commands.py | Python | 13 | 1 | 7 | 21 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\pybind11\setup_helpers.py | Python | 264 | 35 | 89 | 388 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\setup.cfg | Properties | 56 | 3 | 8 | 67 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\setup.py | Python | 77 | 14 | 25 | 116 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\conftest.py | Python | 143 | 5 | 53 | 201 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\constructor_stats.h | C++ | 180 | 77 | 19 | 276 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\cross_module_gil_utils.cpp | C++ | 48 | 15 | 11 | 74 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\env.py | Python | 9 | 1 | 5 | 15 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\extra_python_package\pytest.ini | Ini | 0 | 0 | 1 | 1 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\extra_python_package\test_files.py | Python | 208 | 3 | 49 | 260 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\extra_setuptools\pytest.ini | Ini | 0 | 0 | 1 | 1 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\extra_setuptools\test_setuphelper.py | Python | 79 | 3 | 20 | 102 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\local_bindings.h | C++ | 44 | 11 | 10 | 65 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\object.h | C++ | 92 | 47 | 37 | 176 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\pybind11_cross_module_tests.cpp | C++ | 60 | 43 | 21 | 124 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\pybind11_tests.cpp | C++ | 55 | 23 | 14 | 92 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\pybind11_tests.h | C++ | 51 | 7 | 14 | 72 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\pytest.ini | Ini | 19 | 0 | 1 | 20 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\requirements.txt | pip requirements | 8 | 0 | 1 | 9 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_async.cpp | C++ | 16 | 8 | 3 | 27 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_async.py | Python | 15 | 1 | 10 | 26 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_buffers.cpp | C++ | 165 | 18 | 32 | 215 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_buffers.py | Python | 122 | 4 | 37 | 163 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_builtin_casters.cpp | C++ | 138 | 29 | 26 | 193 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_builtin_casters.py | Python | 307 | 10 | 76 | 393 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_call_policies.cpp | C++ | 70 | 15 | 17 | 102 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_call_policies.py | Python | 163 | 3 | 27 | 193 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_callbacks.cpp | C++ | 124 | 21 | 24 | 169 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_callbacks.py | Python | 94 | 6 | 38 | 138 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_chrono.cpp | C++ | 46 | 25 | 14 | 85 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_chrono.py | Python | 130 | 23 | 60 | 213 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_class.cpp | C++ | 377 | 76 | 73 | 526 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_class.py | Python | 295 | 25 | 101 | 421 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_cmake_build\embed.cpp | C++ | 16 | 0 | 6 | 22 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_cmake_build\main.cpp | C++ | 5 | 0 | 2 | 7 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_cmake_build\test.py | Python | 4 | 1 | 2 | 7 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_constants_and_functions.cpp | C++ | 97 | 14 | 17 | 128 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_constants_and_functions.py | Python | 30 | 1 | 12 | 43 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_copy_move.cpp | C++ | 177 | 22 | 21 | 220 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_copy_move.py | Python | 77 | 11 | 26 | 114 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_custom_type_casters.cpp | C++ | 91 | 19 | 18 | 128 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_custom_type_casters.py | Python | 71 | 5 | 15 | 91 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_docstring_options.cpp | C++ | 38 | 9 | 15 | 62 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_docstring_options.py | Python | 16 | 11 | 13 | 40 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_eigen.cpp | C++ | 218 | 69 | 41 | 328 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_eigen.py | Python | 544 | 28 | 126 | 698 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_embed\catch.cpp | C++ | 12 | 4 | 7 | 23 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_embed\external_module.cpp | C++ | 15 | 3 | 6 | 24 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_embed\test_interpreter.cpp | C++ | 200 | 31 | 54 | 285 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_embed\test_interpreter.py | Python | 6 | 1 | 4 | 11 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_enum.cpp | C++ | 63 | 14 | 11 | 88 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_enum.py | Python | 151 | 20 | 42 | 213 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_eval.cpp | C++ | 64 | 11 | 17 | 92 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_eval.py | Python | 16 | 1 | 11 | 28 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_eval_call.py | Python | 2 | 2 | 2 | 6 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_exceptions.cpp | C++ | 165 | 32 | 28 | 225 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_exceptions.py | Python | 123 | 18 | 51 | 192 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_factory_constructors.cpp | C++ | 250 | 60 | 34 | 344 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_factory_constructors.py | Python | 375 | 9 | 95 | 479 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_gil_scoped.cpp | C++ | 40 | 8 | 7 | 55 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_gil_scoped.py | Python | 62 | 6 | 24 | 92 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_iostream.cpp | C++ | 46 | 9 | 19 | 74 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_iostream.py | Python | 168 | 6 | 42 | 216 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_kwargs_and_defaults.cpp | C++ | 90 | 35 | 18 | 143 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_kwargs_and_defaults.py | Python | 176 | 8 | 57 | 241 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_local_bindings.cpp | C++ | 54 | 32 | 16 | 102 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_local_bindings.py | Python | 165 | 11 | 55 | 231 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_methods_and_attributes.cpp | C++ | 297 | 40 | 42 | 379 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_methods_and_attributes.py | Python | 347 | 14 | 102 | 463 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_modules.cpp | C++ | 74 | 16 | 12 | 102 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_modules.py | Python | 54 | 3 | 17 | 74 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_multiple_inheritance.cpp | C++ | 145 | 43 | 31 | 219 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_multiple_inheritance.py | Python | 258 | 13 | 86 | 357 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_numpy_array.cpp | C++ | 340 | 48 | 51 | 439 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_numpy_array.py | Python | 379 | 21 | 96 | 496 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_numpy_dtypes.cpp | C++ | 408 | 34 | 58 | 500 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_numpy_dtypes.py | Python | 281 | 10 | 76 | 367 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_numpy_vectorize.cpp | C++ | 58 | 22 | 14 | 94 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_numpy_vectorize.py | Python | 181 | 2 | 23 | 206 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_opaque_types.cpp | C++ | 47 | 17 | 10 | 74 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_opaque_types.py | Python | 41 | 1 | 14 | 56 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_operator_overloading.cpp | C++ | 167 | 31 | 29 | 227 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_operator_overloading.py | Python | 118 | 3 | 25 | 146 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_pickling.cpp | C++ | 94 | 19 | 18 | 131 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_pickling.py | Python | 34 | 1 | 12 | 47 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_pytypes.cpp | C++ | 328 | 27 | 56 | 411 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_pytypes.py | Python | 326 | 13 | 88 | 427 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_sequences_and_iterators.cpp | C++ | 284 | 30 | 45 | 359 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_sequences_and_iterators.py | Python | 141 | 2 | 49 | 192 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_smart_ptr.cpp | C++ | 284 | 50 | 37 | 371 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_smart_ptr.py | Python | 224 | 12 | 56 | 292 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_stl.cpp | C++ | 241 | 37 | 47 | 325 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_stl.py | Python | 185 | 3 | 65 | 253 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_stl_binders.cpp | C++ | 91 | 19 | 20 | 130 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_stl_binders.py | Python | 202 | 16 | 68 | 286 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_tagbased_polymorphic.cpp | C++ | 107 | 15 | 21 | 143 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_tagbased_polymorphic.py | Python | 18 | 1 | 3 | 22 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_union.cpp | C++ | 11 | 8 | 4 | 23 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_union.py | Python | 5 | 1 | 4 | 10 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_virtual_functions.cpp | C++ | 352 | 86 | 61 | 499 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tests\test_virtual_functions.py | Python | 290 | 16 | 75 | 381 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\FindCatch.cmake | CMake | 63 | 0 | 8 | 71 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\FindEigen3.cmake | CMake | 67 | 0 | 17 | 84 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\FindPythonLibsNew.cmake | CMake | 229 | 0 | 27 | 256 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\check-style.sh | Shell Script | 26 | 13 | 6 | 45 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\libsize.py | Python | 24 | 5 | 10 | 39 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\pybind11Common.cmake | CMake | 329 | 0 | 57 | 386 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\pybind11NewTools.cmake | CMake | 205 | 0 | 38 | 243 | +| d:\Administrator\Desktop\空地协同头歌\src\Robot\unitree_legged_go1-walk\python_wrapper\third-party\pybind11\tools\pybind11Tools.cmake | CMake | 169 | 0 | 28 | 197 | +| Total | | 34,127 | 5,084 | 8,663 | 47,874 | ++--------------------------------------------------------------------------------------------------------------------------------------------------+------------------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/details.md b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/details.md new file mode 100644 index 0000000..1486640 --- /dev/null +++ b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/details.md @@ -0,0 +1,284 @@ +# Details + +Date : 2024-06-17 19:31:57 + +Directory d:\\Administrator\\Desktop\\go1_guide-master + +Total : 269 files, 18894 codes, 2357 comments, 2385 blanks, all 23636 lines + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | +| [core/Camera.py](/core/Camera.py) | Python | 42 | 43 | 27 | 112 | +| [core/PID.py](/core/PID.py) | Python | 38 | 1 | 8 | 47 | +| [core/capture.py](/core/capture.py) | Python | 49 | 1 | 15 | 65 | +| [core/color_detection.py](/core/color_detection.py) | Python | 27 | 2 | 11 | 40 | +| [core/getcolor.py](/core/getcolor.py) | Python | 12 | 0 | 2 | 14 | +| [core/picture_processing.py](/core/picture_processing.py) | Python | 24 | 83 | 21 | 128 | +| [core/robot_connector.py](/core/robot_connector.py) | Python | 13 | 0 | 5 | 18 | +| [core/shot.py](/core/shot.py) | Python | 12 | 8 | 6 | 26 | +| [main.py](/main.py) | Python | 161 | 26 | 43 | 230 | +| [model/picodet_l_416_coco_lcnet/infer_cfg.yml](/model/picodet_l_416_coco_lcnet/infer_cfg.yml) | YAML | 31 | 0 | 1 | 32 | +| [nano/UnitreecameraSDK/README.md](/nano/UnitreecameraSDK/README.md) | Markdown | 61 | 0 | 24 | 85 | +| [nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc.html](/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc.html) | HTML | 151 | 5 | 7 | 163 | +| [nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp.html](/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp.html) | HTML | 130 | 5 | 4 | 139 | +| [nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp_source.html](/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp_source.html) | HTML | 78 | 5 | 3 | 86 | +| [nano/UnitreecameraSDK/doc/html/_system_log_8hpp.html](/nano/UnitreecameraSDK/doc/html/_system_log_8hpp.html) | HTML | 115 | 5 | 4 | 124 | +| [nano/UnitreecameraSDK/doc/html/_system_log_8hpp_source.html](/nano/UnitreecameraSDK/doc/html/_system_log_8hpp_source.html) | HTML | 83 | 5 | 3 | 91 | +| [nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp.html](/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp.html) | HTML | 122 | 5 | 4 | 131 | +| [nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp_source.html](/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp_source.html) | HTML | 81 | 5 | 3 | 89 | +| [nano/UnitreecameraSDK/doc/html/annotated.html](/nano/UnitreecameraSDK/doc/html/annotated.html) | HTML | 87 | 5 | 3 | 95 | +| [nano/UnitreecameraSDK/doc/html/camera__api_8h_source.html](/nano/UnitreecameraSDK/doc/html/camera__api_8h_source.html) | HTML | 75 | 5 | 3 | 83 | +| [nano/UnitreecameraSDK/doc/html/class_stereo_camera-members.html](/nano/UnitreecameraSDK/doc/html/class_stereo_camera-members.html) | HTML | 104 | 5 | 4 | 113 | +| [nano/UnitreecameraSDK/doc/html/class_stereo_camera.html](/nano/UnitreecameraSDK/doc/html/class_stereo_camera.html) | HTML | 1,247 | 5 | 89 | 1,341 | +| [nano/UnitreecameraSDK/doc/html/class_system_log-members.html](/nano/UnitreecameraSDK/doc/html/class_system_log-members.html) | HTML | 80 | 5 | 4 | 89 | +| [nano/UnitreecameraSDK/doc/html/class_system_log.html](/nano/UnitreecameraSDK/doc/html/class_system_log.html) | HTML | 446 | 5 | 33 | 484 | +| [nano/UnitreecameraSDK/doc/html/class_unitree_camera-members.html](/nano/UnitreecameraSDK/doc/html/class_unitree_camera-members.html) | HTML | 111 | 5 | 4 | 120 | +| [nano/UnitreecameraSDK/doc/html/class_unitree_camera.html](/nano/UnitreecameraSDK/doc/html/class_unitree_camera.html) | HTML | 372 | 5 | 18 | 395 | +| [nano/UnitreecameraSDK/doc/html/classes.html](/nano/UnitreecameraSDK/doc/html/classes.html) | HTML | 88 | 5 | 3 | 96 | +| [nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher-members.html](/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher-members.html) | HTML | 86 | 5 | 4 | 95 | +| [nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher.html](/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher.html) | HTML | 136 | 5 | 3 | 144 | +| [nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window-members.html](/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window-members.html) | HTML | 100 | 5 | 4 | 109 | +| [nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window.html](/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window.html) | HTML | 190 | 5 | 3 | 198 | +| [nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window-members.html](/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window-members.html) | HTML | 99 | 5 | 4 | 108 | +| [nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window.html](/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window.html) | HTML | 190 | 5 | 3 | 198 | +| [nano/UnitreecameraSDK/doc/html/classinfo__camera___string-members.html](/nano/UnitreecameraSDK/doc/html/classinfo__camera___string-members.html) | HTML | 73 | 5 | 4 | 82 | +| [nano/UnitreecameraSDK/doc/html/classinfo__camera___string.html](/nano/UnitreecameraSDK/doc/html/classinfo__camera___string.html) | HTML | 87 | 5 | 3 | 95 | +| [nano/UnitreecameraSDK/doc/html/classinfo__camera__os-members.html](/nano/UnitreecameraSDK/doc/html/classinfo__camera__os-members.html) | HTML | 79 | 5 | 4 | 88 | +| [nano/UnitreecameraSDK/doc/html/classinfo__camera__os.html](/nano/UnitreecameraSDK/doc/html/classinfo__camera__os.html) | HTML | 105 | 5 | 3 | 113 | +| [nano/UnitreecameraSDK/doc/html/dir_000005_000007.html](/nano/UnitreecameraSDK/doc/html/dir_000005_000007.html) | HTML | 68 | 5 | 3 | 76 | +| [nano/UnitreecameraSDK/doc/html/dir_000008_000007.html](/nano/UnitreecameraSDK/doc/html/dir_000008_000007.html) | HTML | 68 | 5 | 3 | 76 | +| [nano/UnitreecameraSDK/doc/html/dir_000009_000007.html](/nano/UnitreecameraSDK/doc/html/dir_000009_000007.html) | HTML | 68 | 5 | 3 | 76 | +| [nano/UnitreecameraSDK/doc/html/dir_209c714a154efd8d40a59e92e6a74502.html](/nano/UnitreecameraSDK/doc/html/dir_209c714a154efd8d40a59e92e6a74502.html) | HTML | 72 | 5 | 3 | 80 | +| [nano/UnitreecameraSDK/doc/html/dir_3a56b08581502e42e7c33d229017cb82.html](/nano/UnitreecameraSDK/doc/html/dir_3a56b08581502e42e7c33d229017cb82.html) | HTML | 76 | 5 | 3 | 84 | +| [nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html](/nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html) | HTML | 82 | 5 | 3 | 90 | +| [nano/UnitreecameraSDK/doc/html/dir_4fef79e7177ba769987a8da36c892c5f.html](/nano/UnitreecameraSDK/doc/html/dir_4fef79e7177ba769987a8da36c892c5f.html) | HTML | 76 | 5 | 3 | 84 | +| [nano/UnitreecameraSDK/doc/html/dir_63772b626f2709090f0bdca0f40827b4.html](/nano/UnitreecameraSDK/doc/html/dir_63772b626f2709090f0bdca0f40827b4.html) | HTML | 72 | 5 | 3 | 80 | +| [nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html](/nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html) | HTML | 89 | 5 | 3 | 97 | +| [nano/UnitreecameraSDK/doc/html/dir_8a35f475ed9d8a5443c1993b236eb8f6.html](/nano/UnitreecameraSDK/doc/html/dir_8a35f475ed9d8a5443c1993b236eb8f6.html) | HTML | 72 | 5 | 3 | 80 | +| [nano/UnitreecameraSDK/doc/html/dir_8d5e63337d9bc0375b6fa20fd80d83ec.html](/nano/UnitreecameraSDK/doc/html/dir_8d5e63337d9bc0375b6fa20fd80d83ec.html) | HTML | 72 | 5 | 3 | 80 | +| [nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4.html](/nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4.html) | HTML | 105 | 5 | 3 | 113 | +| [nano/UnitreecameraSDK/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html](/nano/UnitreecameraSDK/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html) | HTML | 85 | 5 | 3 | 93 | +| [nano/UnitreecameraSDK/doc/html/doxygen.css](/nano/UnitreecameraSDK/doc/html/doxygen.css) | CSS | 1,260 | 84 | 253 | 1,597 | +| [nano/UnitreecameraSDK/doc/html/dynsections.js](/nano/UnitreecameraSDK/doc/html/dynsections.js) | JavaScript | 80 | 7 | 11 | 98 | +| [nano/UnitreecameraSDK/doc/html/example__get_calib_params_file_8cc.html](/nano/UnitreecameraSDK/doc/html/example__get_calib_params_file_8cc.html) | HTML | 133 | 5 | 6 | 144 | +| [nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc.html](/nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc.html) | HTML | 134 | 5 | 6 | 145 | +| [nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc.html](/nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc.html) | HTML | 132 | 5 | 4 | 141 | +| [nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc.html](/nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc.html) | HTML | 133 | 5 | 6 | 144 | +| [nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc.html](/nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc.html) | HTML | 138 | 5 | 6 | 149 | +| [nano/UnitreecameraSDK/doc/html/files.html](/nano/UnitreecameraSDK/doc/html/files.html) | HTML | 88 | 5 | 3 | 96 | +| [nano/UnitreecameraSDK/doc/html/functions.html](/nano/UnitreecameraSDK/doc/html/functions.html) | HTML | 218 | 5 | 22 | 245 | +| [nano/UnitreecameraSDK/doc/html/functions_func.html](/nano/UnitreecameraSDK/doc/html/functions_func.html) | HTML | 210 | 5 | 20 | 235 | +| [nano/UnitreecameraSDK/doc/html/functions_vars.html](/nano/UnitreecameraSDK/doc/html/functions_vars.html) | HTML | 72 | 5 | 3 | 80 | +| [nano/UnitreecameraSDK/doc/html/globals.html](/nano/UnitreecameraSDK/doc/html/globals.html) | HTML | 78 | 5 | 3 | 86 | +| [nano/UnitreecameraSDK/doc/html/globals_defs.html](/nano/UnitreecameraSDK/doc/html/globals_defs.html) | HTML | 69 | 5 | 3 | 77 | +| [nano/UnitreecameraSDK/doc/html/globals_enum.html](/nano/UnitreecameraSDK/doc/html/globals_enum.html) | HTML | 69 | 5 | 3 | 77 | +| [nano/UnitreecameraSDK/doc/html/globals_func.html](/nano/UnitreecameraSDK/doc/html/globals_func.html) | HTML | 72 | 5 | 3 | 80 | +| [nano/UnitreecameraSDK/doc/html/glwindow_8hpp_source.html](/nano/UnitreecameraSDK/doc/html/glwindow_8hpp_source.html) | HTML | 78 | 5 | 3 | 86 | +| [nano/UnitreecameraSDK/doc/html/graph_legend.html](/nano/UnitreecameraSDK/doc/html/graph_legend.html) | HTML | 97 | 5 | 3 | 105 | +| [nano/UnitreecameraSDK/doc/html/hierarchy.html](/nano/UnitreecameraSDK/doc/html/hierarchy.html) | HTML | 88 | 5 | 3 | 96 | +| [nano/UnitreecameraSDK/doc/html/index.html](/nano/UnitreecameraSDK/doc/html/index.html) | HTML | 78 | 5 | 3 | 86 | +| [nano/UnitreecameraSDK/doc/html/inherits.html](/nano/UnitreecameraSDK/doc/html/inherits.html) | HTML | 130 | 5 | 3 | 138 | +| [nano/UnitreecameraSDK/doc/html/jquery.js](/nano/UnitreecameraSDK/doc/html/jquery.js) | JavaScript | 9 | 78 | 0 | 87 | +| [nano/UnitreecameraSDK/doc/html/menu.js](/nano/UnitreecameraSDK/doc/html/menu.js) | JavaScript | 25 | 0 | 2 | 27 | +| [nano/UnitreecameraSDK/doc/html/menudata.js](/nano/UnitreecameraSDK/doc/html/menudata.js) | JavaScript | 2 | 0 | 1 | 3 | +| [nano/UnitreecameraSDK/doc/html/scenewindow_8hpp_source.html](/nano/UnitreecameraSDK/doc/html/scenewindow_8hpp_source.html) | HTML | 77 | 5 | 3 | 85 | +| [nano/UnitreecameraSDK/doc/html/search/all_0.html](/nano/UnitreecameraSDK/doc/html/search/all_0.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_0.js](/nano/UnitreecameraSDK/doc/html/search/all_0.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/all_1.html](/nano/UnitreecameraSDK/doc/html/search/all_1.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_1.js](/nano/UnitreecameraSDK/doc/html/search/all_1.js) | JavaScript | 5 | 0 | 1 | 6 | +| [nano/UnitreecameraSDK/doc/html/search/all_2.html](/nano/UnitreecameraSDK/doc/html/search/all_2.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_2.js](/nano/UnitreecameraSDK/doc/html/search/all_2.js) | JavaScript | 6 | 0 | 1 | 7 | +| [nano/UnitreecameraSDK/doc/html/search/all_3.html](/nano/UnitreecameraSDK/doc/html/search/all_3.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_3.js](/nano/UnitreecameraSDK/doc/html/search/all_3.js) | JavaScript | 10 | 0 | 1 | 11 | +| [nano/UnitreecameraSDK/doc/html/search/all_4.html](/nano/UnitreecameraSDK/doc/html/search/all_4.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_4.js](/nano/UnitreecameraSDK/doc/html/search/all_4.js) | JavaScript | 14 | 0 | 1 | 15 | +| [nano/UnitreecameraSDK/doc/html/search/all_5.html](/nano/UnitreecameraSDK/doc/html/search/all_5.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_5.js](/nano/UnitreecameraSDK/doc/html/search/all_5.js) | JavaScript | 8 | 0 | 1 | 9 | +| [nano/UnitreecameraSDK/doc/html/search/all_6.html](/nano/UnitreecameraSDK/doc/html/search/all_6.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_6.js](/nano/UnitreecameraSDK/doc/html/search/all_6.js) | JavaScript | 5 | 0 | 1 | 6 | +| [nano/UnitreecameraSDK/doc/html/search/all_7.html](/nano/UnitreecameraSDK/doc/html/search/all_7.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_7.js](/nano/UnitreecameraSDK/doc/html/search/all_7.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/all_8.html](/nano/UnitreecameraSDK/doc/html/search/all_8.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_8.js](/nano/UnitreecameraSDK/doc/html/search/all_8.js) | JavaScript | 5 | 0 | 1 | 6 | +| [nano/UnitreecameraSDK/doc/html/search/all_9.html](/nano/UnitreecameraSDK/doc/html/search/all_9.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_9.js](/nano/UnitreecameraSDK/doc/html/search/all_9.js) | JavaScript | 7 | 0 | 1 | 8 | +| [nano/UnitreecameraSDK/doc/html/search/all_a.html](/nano/UnitreecameraSDK/doc/html/search/all_a.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_a.js](/nano/UnitreecameraSDK/doc/html/search/all_a.js) | JavaScript | 26 | 0 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_b.html](/nano/UnitreecameraSDK/doc/html/search/all_b.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_b.js](/nano/UnitreecameraSDK/doc/html/search/all_b.js) | JavaScript | 7 | 0 | 1 | 8 | +| [nano/UnitreecameraSDK/doc/html/search/all_c.html](/nano/UnitreecameraSDK/doc/html/search/all_c.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_c.js](/nano/UnitreecameraSDK/doc/html/search/all_c.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/all_d.html](/nano/UnitreecameraSDK/doc/html/search/all_d.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/all_d.js](/nano/UnitreecameraSDK/doc/html/search/all_d.js) | JavaScript | 5 | 0 | 1 | 6 | +| [nano/UnitreecameraSDK/doc/html/search/classes_0.html](/nano/UnitreecameraSDK/doc/html/search/classes_0.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/classes_0.js](/nano/UnitreecameraSDK/doc/html/search/classes_0.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/classes_1.html](/nano/UnitreecameraSDK/doc/html/search/classes_1.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/classes_1.js](/nano/UnitreecameraSDK/doc/html/search/classes_1.js) | JavaScript | 5 | 0 | 1 | 6 | +| [nano/UnitreecameraSDK/doc/html/search/classes_2.html](/nano/UnitreecameraSDK/doc/html/search/classes_2.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/classes_2.js](/nano/UnitreecameraSDK/doc/html/search/classes_2.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/classes_3.html](/nano/UnitreecameraSDK/doc/html/search/classes_3.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/classes_3.js](/nano/UnitreecameraSDK/doc/html/search/classes_3.js) | JavaScript | 5 | 0 | 1 | 6 | +| [nano/UnitreecameraSDK/doc/html/search/classes_4.html](/nano/UnitreecameraSDK/doc/html/search/classes_4.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/classes_4.js](/nano/UnitreecameraSDK/doc/html/search/classes_4.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/classes_5.html](/nano/UnitreecameraSDK/doc/html/search/classes_5.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/classes_5.js](/nano/UnitreecameraSDK/doc/html/search/classes_5.js) | JavaScript | 8 | 0 | 1 | 9 | +| [nano/UnitreecameraSDK/doc/html/search/classes_6.html](/nano/UnitreecameraSDK/doc/html/search/classes_6.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/classes_6.js](/nano/UnitreecameraSDK/doc/html/search/classes_6.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/classes_7.html](/nano/UnitreecameraSDK/doc/html/search/classes_7.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/classes_7.js](/nano/UnitreecameraSDK/doc/html/search/classes_7.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/defines_0.html](/nano/UnitreecameraSDK/doc/html/search/defines_0.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/defines_0.js](/nano/UnitreecameraSDK/doc/html/search/defines_0.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/enums_0.html](/nano/UnitreecameraSDK/doc/html/search/enums_0.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/enums_0.js](/nano/UnitreecameraSDK/doc/html/search/enums_0.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/files_0.html](/nano/UnitreecameraSDK/doc/html/search/files_0.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/files_0.js](/nano/UnitreecameraSDK/doc/html/search/files_0.js) | JavaScript | 8 | 0 | 1 | 9 | +| [nano/UnitreecameraSDK/doc/html/search/files_1.html](/nano/UnitreecameraSDK/doc/html/search/files_1.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/files_1.js](/nano/UnitreecameraSDK/doc/html/search/files_1.js) | JavaScript | 6 | 0 | 1 | 7 | +| [nano/UnitreecameraSDK/doc/html/search/files_2.html](/nano/UnitreecameraSDK/doc/html/search/files_2.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/files_2.js](/nano/UnitreecameraSDK/doc/html/search/files_2.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/functions_0.html](/nano/UnitreecameraSDK/doc/html/search/functions_0.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/functions_0.js](/nano/UnitreecameraSDK/doc/html/search/functions_0.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/functions_1.html](/nano/UnitreecameraSDK/doc/html/search/functions_1.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/functions_1.js](/nano/UnitreecameraSDK/doc/html/search/functions_1.js) | JavaScript | 6 | 0 | 1 | 7 | +| [nano/UnitreecameraSDK/doc/html/search/functions_2.html](/nano/UnitreecameraSDK/doc/html/search/functions_2.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/functions_2.js](/nano/UnitreecameraSDK/doc/html/search/functions_2.js) | JavaScript | 13 | 0 | 1 | 14 | +| [nano/UnitreecameraSDK/doc/html/search/functions_3.html](/nano/UnitreecameraSDK/doc/html/search/functions_3.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/functions_3.js](/nano/UnitreecameraSDK/doc/html/search/functions_3.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/functions_4.html](/nano/UnitreecameraSDK/doc/html/search/functions_4.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/functions_4.js](/nano/UnitreecameraSDK/doc/html/search/functions_4.js) | JavaScript | 5 | 0 | 1 | 6 | +| [nano/UnitreecameraSDK/doc/html/search/functions_5.html](/nano/UnitreecameraSDK/doc/html/search/functions_5.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/functions_5.js](/nano/UnitreecameraSDK/doc/html/search/functions_5.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/functions_6.html](/nano/UnitreecameraSDK/doc/html/search/functions_6.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/functions_6.js](/nano/UnitreecameraSDK/doc/html/search/functions_6.js) | JavaScript | 6 | 0 | 1 | 7 | +| [nano/UnitreecameraSDK/doc/html/search/functions_7.html](/nano/UnitreecameraSDK/doc/html/search/functions_7.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/functions_7.js](/nano/UnitreecameraSDK/doc/html/search/functions_7.js) | JavaScript | 20 | 0 | 1 | 21 | +| [nano/UnitreecameraSDK/doc/html/search/functions_8.html](/nano/UnitreecameraSDK/doc/html/search/functions_8.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/functions_8.js](/nano/UnitreecameraSDK/doc/html/search/functions_8.js) | JavaScript | 6 | 0 | 1 | 7 | +| [nano/UnitreecameraSDK/doc/html/search/functions_9.html](/nano/UnitreecameraSDK/doc/html/search/functions_9.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/functions_9.js](/nano/UnitreecameraSDK/doc/html/search/functions_9.js) | JavaScript | 5 | 0 | 1 | 6 | +| [nano/UnitreecameraSDK/doc/html/search/nomatches.html](/nano/UnitreecameraSDK/doc/html/search/nomatches.html) | HTML | 12 | 0 | 1 | 13 | +| [nano/UnitreecameraSDK/doc/html/search/pages_0.html](/nano/UnitreecameraSDK/doc/html/search/pages_0.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/pages_0.js](/nano/UnitreecameraSDK/doc/html/search/pages_0.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/search.css](/nano/UnitreecameraSDK/doc/html/search/search.css) | CSS | 220 | 5 | 47 | 272 | +| [nano/UnitreecameraSDK/doc/html/search/search.js](/nano/UnitreecameraSDK/doc/html/search/search.js) | JavaScript | 688 | 36 | 68 | 792 | +| [nano/UnitreecameraSDK/doc/html/search/searchdata.js](/nano/UnitreecameraSDK/doc/html/search/searchdata.js) | JavaScript | 15 | 0 | 4 | 19 | +| [nano/UnitreecameraSDK/doc/html/search/variables_0.html](/nano/UnitreecameraSDK/doc/html/search/variables_0.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/variables_0.js](/nano/UnitreecameraSDK/doc/html/search/variables_0.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/search/variables_1.html](/nano/UnitreecameraSDK/doc/html/search/variables_1.html) | HTML | 21 | 5 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/html/search/variables_1.js](/nano/UnitreecameraSDK/doc/html/search/variables_1.js) | JavaScript | 4 | 0 | 1 | 5 | +| [nano/UnitreecameraSDK/doc/html/struct___device___point__-members.html](/nano/UnitreecameraSDK/doc/html/struct___device___point__-members.html) | HTML | 92 | 5 | 4 | 101 | +| [nano/UnitreecameraSDK/doc/html/struct___device___point__.html](/nano/UnitreecameraSDK/doc/html/struct___device___point__.html) | HTML | 151 | 5 | 3 | 159 | +| [nano/UnitreecameraSDK/doc/html/struct_g_l_window_1_1_system_state-members.html](/nano/UnitreecameraSDK/doc/html/struct_g_l_window_1_1_system_state-members.html) | HTML | 89 | 5 | 4 | 98 | +| [nano/UnitreecameraSDK/doc/html/struct_g_l_window_1_1_system_state.html](/nano/UnitreecameraSDK/doc/html/struct_g_l_window_1_1_system_state.html) | HTML | 125 | 5 | 3 | 133 | +| [nano/UnitreecameraSDK/doc/html/struct_p_c_l-members.html](/nano/UnitreecameraSDK/doc/html/struct_p_c_l-members.html) | HTML | 72 | 5 | 4 | 81 | +| [nano/UnitreecameraSDK/doc/html/struct_p_c_l.html](/nano/UnitreecameraSDK/doc/html/struct_p_c_l.html) | HTML | 93 | 5 | 5 | 103 | +| [nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler-members.html](/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler-members.html) | HTML | 84 | 5 | 4 | 93 | +| [nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler.html](/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler.html) | HTML | 118 | 5 | 3 | 126 | +| [nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context-members.html](/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context-members.html) | HTML | 77 | 5 | 4 | 86 | +| [nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context.html](/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context.html) | HTML | 101 | 5 | 3 | 109 | +| [nano/UnitreecameraSDK/doc/html/structglwindow_1_1_scene_window_1_1_viewpoint-members.html](/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_scene_window_1_1_viewpoint-members.html) | HTML | 79 | 5 | 4 | 88 | +| [nano/UnitreecameraSDK/doc/html/structglwindow_1_1_scene_window_1_1_viewpoint.html](/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_scene_window_1_1_viewpoint.html) | HTML | 95 | 5 | 3 | 103 | +| [nano/UnitreecameraSDK/doc/html/tabs.css](/nano/UnitreecameraSDK/doc/html/tabs.css) | CSS | 1 | 0 | 1 | 2 | +| [nano/UnitreecameraSDK/doc/latex/Makefile](/nano/UnitreecameraSDK/doc/latex/Makefile) | Makefile | 17 | 0 | 5 | 22 | +| [nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8cc.tex](/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8cc.tex) | LaTeX | 76 | 0 | 14 | 90 | +| [nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp.tex](/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp.tex) | LaTeX | 53 | 0 | 8 | 61 | +| [nano/UnitreecameraSDK/doc/latex/_system_log_8hpp.tex](/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp.tex) | LaTeX | 41 | 0 | 8 | 49 | +| [nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp.tex](/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp.tex) | LaTeX | 48 | 0 | 8 | 56 | +| [nano/UnitreecameraSDK/doc/latex/annotated.tex](/nano/UnitreecameraSDK/doc/latex/annotated.tex) | LaTeX | 17 | 0 | 1 | 18 | +| [nano/UnitreecameraSDK/doc/latex/class_stereo_camera.tex](/nano/UnitreecameraSDK/doc/latex/class_stereo_camera.tex) | LaTeX | 778 | 0 | 191 | 969 | +| [nano/UnitreecameraSDK/doc/latex/class_system_log.tex](/nano/UnitreecameraSDK/doc/latex/class_system_log.tex) | LaTeX | 268 | 0 | 71 | 339 | +| [nano/UnitreecameraSDK/doc/latex/class_unitree_camera.tex](/nano/UnitreecameraSDK/doc/latex/class_unitree_camera.tex) | LaTeX | 173 | 0 | 49 | 222 | +| [nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher.tex](/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher.tex) | LaTeX | 61 | 0 | 7 | 68 | +| [nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_g_l_window.tex](/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_g_l_window.tex) | LaTeX | 111 | 0 | 5 | 116 | +| [nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window.tex](/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window.tex) | LaTeX | 99 | 0 | 7 | 106 | +| [nano/UnitreecameraSDK/doc/latex/classinfo__camera___string.tex](/nano/UnitreecameraSDK/doc/latex/classinfo__camera___string.tex) | LaTeX | 17 | 0 | 3 | 20 | +| [nano/UnitreecameraSDK/doc/latex/classinfo__camera__os.tex](/nano/UnitreecameraSDK/doc/latex/classinfo__camera__os.tex) | LaTeX | 35 | 0 | 3 | 38 | +| [nano/UnitreecameraSDK/doc/latex/dir_209c714a154efd8d40a59e92e6a74502.tex](/nano/UnitreecameraSDK/doc/latex/dir_209c714a154efd8d40a59e92e6a74502.tex) | LaTeX | 2 | 0 | 1 | 3 | +| [nano/UnitreecameraSDK/doc/latex/dir_3a56b08581502e42e7c33d229017cb82.tex](/nano/UnitreecameraSDK/doc/latex/dir_3a56b08581502e42e7c33d229017cb82.tex) | LaTeX | 5 | 0 | 1 | 6 | +| [nano/UnitreecameraSDK/doc/latex/dir_4eeb864c4eec08c7d6b9d3b0352cfdde.tex](/nano/UnitreecameraSDK/doc/latex/dir_4eeb864c4eec08c7d6b9d3b0352cfdde.tex) | LaTeX | 10 | 0 | 1 | 11 | +| [nano/UnitreecameraSDK/doc/latex/dir_4fef79e7177ba769987a8da36c892c5f.tex](/nano/UnitreecameraSDK/doc/latex/dir_4fef79e7177ba769987a8da36c892c5f.tex) | LaTeX | 5 | 0 | 1 | 6 | +| [nano/UnitreecameraSDK/doc/latex/dir_63772b626f2709090f0bdca0f40827b4.tex](/nano/UnitreecameraSDK/doc/latex/dir_63772b626f2709090f0bdca0f40827b4.tex) | LaTeX | 2 | 0 | 1 | 3 | +| [nano/UnitreecameraSDK/doc/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex](/nano/UnitreecameraSDK/doc/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex) | LaTeX | 15 | 0 | 1 | 16 | +| [nano/UnitreecameraSDK/doc/latex/dir_8a35f475ed9d8a5443c1993b236eb8f6.tex](/nano/UnitreecameraSDK/doc/latex/dir_8a35f475ed9d8a5443c1993b236eb8f6.tex) | LaTeX | 2 | 0 | 1 | 3 | +| [nano/UnitreecameraSDK/doc/latex/dir_8d5e63337d9bc0375b6fa20fd80d83ec.tex](/nano/UnitreecameraSDK/doc/latex/dir_8d5e63337d9bc0375b6fa20fd80d83ec.tex) | LaTeX | 2 | 0 | 1 | 3 | +| [nano/UnitreecameraSDK/doc/latex/dir_d28a4824dc47e487b107a5db32ef43c4.tex](/nano/UnitreecameraSDK/doc/latex/dir_d28a4824dc47e487b107a5db32ef43c4.tex) | LaTeX | 26 | 0 | 1 | 27 | +| [nano/UnitreecameraSDK/doc/latex/dir_d44c64559bbebec7f509842c48db8b23.tex](/nano/UnitreecameraSDK/doc/latex/dir_d44c64559bbebec7f509842c48db8b23.tex) | LaTeX | 11 | 0 | 1 | 12 | +| [nano/UnitreecameraSDK/doc/latex/doxygen.sty](/nano/UnitreecameraSDK/doc/latex/doxygen.sty) | TeX | 394 | 53 | 57 | 504 | +| [nano/UnitreecameraSDK/doc/latex/example__get_calib_params_file_8cc.tex](/nano/UnitreecameraSDK/doc/latex/example__get_calib_params_file_8cc.tex) | LaTeX | 44 | 0 | 15 | 59 | +| [nano/UnitreecameraSDK/doc/latex/example__get_depth_frame_8cc.tex](/nano/UnitreecameraSDK/doc/latex/example__get_depth_frame_8cc.tex) | LaTeX | 45 | 0 | 16 | 61 | +| [nano/UnitreecameraSDK/doc/latex/example__get_point_cloud_8cc.tex](/nano/UnitreecameraSDK/doc/latex/example__get_point_cloud_8cc.tex) | LaTeX | 59 | 0 | 8 | 67 | +| [nano/UnitreecameraSDK/doc/latex/example__get_raw_frame_8cc.tex](/nano/UnitreecameraSDK/doc/latex/example__get_raw_frame_8cc.tex) | LaTeX | 44 | 0 | 15 | 59 | +| [nano/UnitreecameraSDK/doc/latex/example__get_rect_frame_8cc.tex](/nano/UnitreecameraSDK/doc/latex/example__get_rect_frame_8cc.tex) | LaTeX | 49 | 0 | 20 | 69 | +| [nano/UnitreecameraSDK/doc/latex/files.tex](/nano/UnitreecameraSDK/doc/latex/files.tex) | LaTeX | 15 | 0 | 1 | 16 | +| [nano/UnitreecameraSDK/doc/latex/hierarchy.tex](/nano/UnitreecameraSDK/doc/latex/hierarchy.tex) | LaTeX | 21 | 0 | 1 | 22 | +| [nano/UnitreecameraSDK/doc/latex/index.tex](/nano/UnitreecameraSDK/doc/latex/index.tex) | LaTeX | 40 | 0 | 22 | 62 | +| [nano/UnitreecameraSDK/doc/latex/refman.tex](/nano/UnitreecameraSDK/doc/latex/refman.tex) | LaTeX | 127 | 12 | 15 | 154 | +| [nano/UnitreecameraSDK/doc/latex/struct___device___point__.tex](/nano/UnitreecameraSDK/doc/latex/struct___device___point__.tex) | LaTeX | 82 | 0 | 5 | 87 | +| [nano/UnitreecameraSDK/doc/latex/struct_g_l_window_1_1_system_state.tex](/nano/UnitreecameraSDK/doc/latex/struct_g_l_window_1_1_system_state.tex) | LaTeX | 50 | 0 | 3 | 53 | +| [nano/UnitreecameraSDK/doc/latex/struct_p_c_l.tex](/nano/UnitreecameraSDK/doc/latex/struct_p_c_l.tex) | LaTeX | 24 | 0 | 13 | 37 | +| [nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_event_handler.tex](/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_event_handler.tex) | LaTeX | 43 | 0 | 5 | 48 | +| [nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_g_l_window_1_1_scoped_context.tex](/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_g_l_window_1_1_scoped_context.tex) | LaTeX | 25 | 0 | 5 | 30 | +| [nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_scene_window_1_1_viewpoint.tex](/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_scene_window_1_1_viewpoint.tex) | LaTeX | 21 | 0 | 3 | 24 | +| [nano/UnitreecameraSDK/examples/example_getCalibParamsFile.cc](/nano/UnitreecameraSDK/examples/example_getCalibParamsFile.cc) | C++ | 14 | 9 | 5 | 28 | +| [nano/UnitreecameraSDK/examples/example_getDepthFrame.cc](/nano/UnitreecameraSDK/examples/example_getDepthFrame.cc) | C++ | 26 | 9 | 8 | 43 | +| [nano/UnitreecameraSDK/examples/example_getPointCloud.cc](/nano/UnitreecameraSDK/examples/example_getPointCloud.cc) | C++ | 73 | 9 | 16 | 98 | +| [nano/UnitreecameraSDK/examples/example_getRawFrame.cc](/nano/UnitreecameraSDK/examples/example_getRawFrame.cc) | C++ | 41 | 9 | 14 | 64 | +| [nano/UnitreecameraSDK/examples/example_getRectFrame.cc](/nano/UnitreecameraSDK/examples/example_getRectFrame.cc) | C++ | 39 | 11 | 11 | 61 | +| [nano/UnitreecameraSDK/examples/example_getimagetrans.cc](/nano/UnitreecameraSDK/examples/example_getimagetrans.cc) | C++ | 28 | 28 | 7 | 63 | +| [nano/UnitreecameraSDK/examples/example_putImagetrans.cc](/nano/UnitreecameraSDK/examples/example_putImagetrans.cc) | C++ | 24 | 85 | 10 | 119 | +| [nano/UnitreecameraSDK/examples/example_share.cc](/nano/UnitreecameraSDK/examples/example_share.cc) | C++ | 24 | 0 | 5 | 29 | +| [nano/UnitreecameraSDK/examples/glViewer/glwindow.hpp](/nano/UnitreecameraSDK/examples/glViewer/glwindow.hpp) | C++ | 100 | 2 | 23 | 125 | +| [nano/UnitreecameraSDK/examples/glViewer/glwindow_x11.cpp](/nano/UnitreecameraSDK/examples/glViewer/glwindow_x11.cpp) | C++ | 436 | 7 | 76 | 519 | +| [nano/UnitreecameraSDK/examples/glViewer/scenewindow.cpp](/nano/UnitreecameraSDK/examples/glViewer/scenewindow.cpp) | C++ | 139 | 4 | 39 | 182 | +| [nano/UnitreecameraSDK/examples/glViewer/scenewindow.hpp](/nano/UnitreecameraSDK/examples/glViewer/scenewindow.hpp) | C++ | 35 | 1 | 14 | 50 | +| [nano/UnitreecameraSDK/include/StereoCameraCommon.hpp](/nano/UnitreecameraSDK/include/StereoCameraCommon.hpp) | C++ | 99 | 534 | 27 | 660 | +| [nano/UnitreecameraSDK/include/SystemLog.hpp](/nano/UnitreecameraSDK/include/SystemLog.hpp) | C++ | 26 | 135 | 8 | 169 | +| [nano/UnitreecameraSDK/include/UnitreeCameraSDK.hpp](/nano/UnitreecameraSDK/include/UnitreeCameraSDK.hpp) | C++ | 23 | 126 | 10 | 159 | +| [nano/UnitreecameraSDK/src/getimagetrans.cc](/nano/UnitreecameraSDK/src/getimagetrans.cc) | C++ | 28 | 16 | 4 | 48 | +| [nano/UnitreecameraSDK/src/putimagetrans.cc](/nano/UnitreecameraSDK/src/putimagetrans.cc) | C++ | 58 | 37 | 14 | 109 | +| [nano/UnitreecameraSDK/stereo_camera_config.yaml](/nano/UnitreecameraSDK/stereo_camera_config.yaml) | YAML | 66 | 12 | 0 | 78 | +| [nano/UnitreecameraSDK/trans_rect_config.yaml](/nano/UnitreecameraSDK/trans_rect_config.yaml) | YAML | 66 | 13 | 1 | 80 | +| [nano/UnitreecameraSDK/trans_rect_config_0.yaml](/nano/UnitreecameraSDK/trans_rect_config_0.yaml) | YAML | 66 | 12 | 0 | 78 | +| [nano/UnitreecameraSDK/trans_rect_config_1.yaml](/nano/UnitreecameraSDK/trans_rect_config_1.yaml) | YAML | 66 | 12 | 0 | 78 | +| [nano/kill.sh](/nano/kill.sh) | Shell Script | 4 | 1 | 2 | 7 | +| [nano/picture_processing.py](/nano/picture_processing.py) | Python | 24 | 83 | 21 | 128 | +| [nano/start.sh](/nano/start.sh) | Shell Script | 5 | 2 | 3 | 10 | +| [nano/templates/index.html](/nano/templates/index.html) | HTML | 12 | 0 | 2 | 14 | +| [nano/trans_rect_config_0.yaml](/nano/trans_rect_config_0.yaml) | YAML | 66 | 12 | 1 | 79 | +| [nano/trans_rect_config_1.yaml](/nano/trans_rect_config_1.yaml) | YAML | 66 | 12 | 1 | 79 | +| [nano/webcamera.py](/nano/webcamera.py) | Python | 49 | 2 | 15 | 66 | +| [predict.py](/predict.py) | Python | 208 | 15 | 55 | 278 | +| [raspberrypi/server_robotcontrol.py](/raspberrypi/server_robotcontrol.py) | Python | 67 | 1 | 14 | 82 | +| [raspberrypi/start.sh](/raspberrypi/start.sh) | Shell Script | 1 | 0 | 1 | 2 | +| [raspberrypi/unitree.py](/raspberrypi/unitree.py) | Python | 21 | 0 | 6 | 27 | +| [raspberrypi/unitree_legged_sdk/README.md](/raspberrypi/unitree_legged_sdk/README.md) | Markdown | 29 | 0 | 9 | 38 | +| [raspberrypi/unitree_legged_sdk/example/example_joystick.cpp](/raspberrypi/unitree_legged_sdk/example/example_joystick.cpp) | C++ | 62 | 5 | 16 | 83 | +| [raspberrypi/unitree_legged_sdk/example/example_position.cpp](/raspberrypi/unitree_legged_sdk/example/example_position.cpp) | C++ | 122 | 17 | 25 | 164 | +| [raspberrypi/unitree_legged_sdk/example/example_torque.cpp](/raspberrypi/unitree_legged_sdk/example/example_torque.cpp) | C++ | 71 | 8 | 16 | 95 | +| [raspberrypi/unitree_legged_sdk/example/example_velocity.cpp](/raspberrypi/unitree_legged_sdk/example/example_velocity.cpp) | C++ | 72 | 8 | 18 | 98 | +| [raspberrypi/unitree_legged_sdk/example/example_walk.cpp](/raspberrypi/unitree_legged_sdk/example/example_walk.cpp) | C++ | 134 | 6 | 17 | 157 | +| [raspberrypi/unitree_legged_sdk/example_py/example_position.py](/raspberrypi/unitree_legged_sdk/example_py/example_position.py) | Python | 81 | 12 | 26 | 119 | +| [raspberrypi/unitree_legged_sdk/example_py/example_torque.py](/raspberrypi/unitree_legged_sdk/example_py/example_torque.py) | Python | 44 | 9 | 18 | 71 | +| [raspberrypi/unitree_legged_sdk/example_py/example_velocity.py](/raspberrypi/unitree_legged_sdk/example_py/example_velocity.py) | Python | 38 | 4 | 17 | 59 | +| [raspberrypi/unitree_legged_sdk/example_py/example_walk.py](/raspberrypi/unitree_legged_sdk/example_py/example_walk.py) | Python | 76 | 14 | 30 | 120 | +| [raspberrypi/unitree_legged_sdk/example_py/test.py](/raspberrypi/unitree_legged_sdk/example_py/test.py) | Python | 5 | 1 | 2 | 8 | +| [raspberrypi/unitree_legged_sdk/example_py/unitree.py](/raspberrypi/unitree_legged_sdk/example_py/unitree.py) | Python | 21 | 0 | 6 | 27 | +| [raspberrypi/unitree_legged_sdk/example_py/unitree_python_sdk.py](/raspberrypi/unitree_legged_sdk/example_py/unitree_python_sdk.py) | Python | 42 | 9 | 10 | 61 | +| [raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/a1_const.h](/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/a1_const.h) | C++ | 12 | 3 | 4 | 19 | +| [raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/aliengo_const.h](/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/aliengo_const.h) | C++ | 12 | 3 | 4 | 19 | +| [raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/comm.h](/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/comm.h) | C++ | 172 | 15 | 30 | 217 | +| [raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/go1_const.h](/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/go1_const.h) | C++ | 12 | 3 | 4 | 19 | +| [raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/joystick.h](/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/joystick.h) | C++ | 35 | 5 | 4 | 44 | +| [raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/loop.h](/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/loop.h) | C++ | 42 | 7 | 13 | 62 | +| [raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/quadruped.h](/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/quadruped.h) | C++ | 32 | 4 | 15 | 51 | +| [raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/safety.h](/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/safety.h) | C++ | 19 | 5 | 8 | 32 | +| [raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/udp.h](/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/udp.h) | C++ | 64 | 17 | 21 | 102 | +| [raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/unitree_legged_sdk.h](/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/unitree_legged_sdk.h) | C++ | 11 | 3 | 5 | 19 | +| [raspberrypi/unitree_python_sdk.py](/raspberrypi/unitree_python_sdk.py) | Python | 42 | 9 | 10 | 61 | +| [setup.sh](/setup.sh) | Shell Script | 4 | 1 | 1 | 6 | +| [test.py](/test.py) | Python | 12 | 1 | 5 | 18 | + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/diff-details.md b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/diff-details.md new file mode 100644 index 0000000..b6a1039 --- /dev/null +++ b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/diff-details.md @@ -0,0 +1,15 @@ +# Diff Details + +Date : 2024-06-17 19:31:57 + +Directory d:\\Administrator\\Desktop\\go1_guide-master + +Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details \ No newline at end of file diff --git a/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/diff.csv b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/diff.csv new file mode 100644 index 0000000..b7d8d75 --- /dev/null +++ b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/diff.csv @@ -0,0 +1,2 @@ +"filename", "language", "", "comment", "blank", "total" +"Total", "-", , 0, 0, 0 \ No newline at end of file diff --git a/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/diff.md b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/diff.md new file mode 100644 index 0000000..5d2c8f3 --- /dev/null +++ b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/diff.md @@ -0,0 +1,19 @@ +# Diff Summary + +Date : 2024-06-17 19:31:57 + +Directory d:\\Administrator\\Desktop\\go1_guide-master + +Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/diff.txt b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/diff.txt new file mode 100644 index 0000000..dad4572 --- /dev/null +++ b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/diff.txt @@ -0,0 +1,22 @@ +Date : 2024-06-17 19:31:57 +Directory : d:\Administrator\Desktop\go1_guide-master +Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ ++----------+------------+------------+------------+------------+------------+ + +Directories ++------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++------+------------+------------+------------+------------+------------+ ++------+------------+------------+------------+------------+------------+ + +Files ++----------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++----------+----------+------------+------------+------------+------------+ +| Total | | 0 | 0 | 0 | 0 | ++----------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/results.csv b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/results.csv new file mode 100644 index 0000000..b9c2798 --- /dev/null +++ b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/results.csv @@ -0,0 +1,271 @@ +"filename", "language", "Shell Script", "Python", "YAML", "C++", "Markdown", "HTML", "LaTeX", "JavaScript", "CSS", "Makefile", "TeX", "comment", "blank", "total" +"d:\Administrator\Desktop\go1_guide-master\core\Camera.py", "Python", 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 27, 112 +"d:\Administrator\Desktop\go1_guide-master\core\PID.py", "Python", 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 8, 47 +"d:\Administrator\Desktop\go1_guide-master\core\capture.py", "Python", 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 15, 65 +"d:\Administrator\Desktop\go1_guide-master\core\color_detection.py", "Python", 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 11, 40 +"d:\Administrator\Desktop\go1_guide-master\core\getcolor.py", "Python", 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14 +"d:\Administrator\Desktop\go1_guide-master\core\picture_processing.py", "Python", 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 21, 128 +"d:\Administrator\Desktop\go1_guide-master\core\robot_connector.py", "Python", 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 18 +"d:\Administrator\Desktop\go1_guide-master\core\shot.py", "Python", 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 26 +"d:\Administrator\Desktop\go1_guide-master\main.py", "Python", 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 43, 230 +"d:\Administrator\Desktop\go1_guide-master\model\picodet_l_416_coco_lcnet\infer_cfg.yml", "YAML", 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\README.md", "Markdown", 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 24, 85 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\_stereo_camera_common_8cc.html", "HTML", 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 5, 7, 163 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\_stereo_camera_common_8hpp.html", "HTML", 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 5, 4, 139 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\_stereo_camera_common_8hpp_source.html", "HTML", 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 5, 3, 86 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\_system_log_8hpp.html", "HTML", 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 5, 4, 124 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\_system_log_8hpp_source.html", "HTML", 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 5, 3, 91 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\_unitree_camera_s_d_k_8hpp.html", "HTML", 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 5, 4, 131 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\_unitree_camera_s_d_k_8hpp_source.html", "HTML", 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 5, 3, 89 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\annotated.html", "HTML", 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 5, 3, 95 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\camera__api_8h_source.html", "HTML", 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 5, 3, 83 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\class_stereo_camera-members.html", "HTML", 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 5, 4, 113 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\class_stereo_camera.html", "HTML", 0, 0, 0, 0, 0, 1247, 0, 0, 0, 0, 0, 5, 89, 1341 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\class_system_log-members.html", "HTML", 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 5, 4, 89 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\class_system_log.html", "HTML", 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 5, 33, 484 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\class_unitree_camera-members.html", "HTML", 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 5, 4, 120 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\class_unitree_camera.html", "HTML", 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 5, 18, 395 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classes.html", "HTML", 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 5, 3, 96 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classglwindow_1_1_event_dispatcher-members.html", "HTML", 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 5, 4, 95 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classglwindow_1_1_event_dispatcher.html", "HTML", 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 5, 3, 144 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classglwindow_1_1_g_l_window-members.html", "HTML", 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 5, 4, 109 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classglwindow_1_1_g_l_window.html", "HTML", 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 5, 3, 198 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classglwindow_1_1_scene_window-members.html", "HTML", 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 5, 4, 108 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classglwindow_1_1_scene_window.html", "HTML", 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 5, 3, 198 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classinfo__camera___string-members.html", "HTML", 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 5, 4, 82 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classinfo__camera___string.html", "HTML", 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 5, 3, 95 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classinfo__camera__os-members.html", "HTML", 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 5, 4, 88 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classinfo__camera__os.html", "HTML", 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 5, 3, 113 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_000005_000007.html", "HTML", 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 5, 3, 76 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_000008_000007.html", "HTML", 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 5, 3, 76 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_000009_000007.html", "HTML", 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 5, 3, 76 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_209c714a154efd8d40a59e92e6a74502.html", "HTML", 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 5, 3, 80 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_3a56b08581502e42e7c33d229017cb82.html", "HTML", 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 5, 3, 84 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html", "HTML", 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 5, 3, 90 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_4fef79e7177ba769987a8da36c892c5f.html", "HTML", 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 5, 3, 84 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_63772b626f2709090f0bdca0f40827b4.html", "HTML", 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 5, 3, 80 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_68267d1309a1af8e8297ef4c3efbcdba.html", "HTML", 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 5, 3, 97 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_8a35f475ed9d8a5443c1993b236eb8f6.html", "HTML", 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 5, 3, 80 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_8d5e63337d9bc0375b6fa20fd80d83ec.html", "HTML", 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 5, 3, 80 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_d28a4824dc47e487b107a5db32ef43c4.html", "HTML", 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 5, 3, 113 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_d44c64559bbebec7f509842c48db8b23.html", "HTML", 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 5, 3, 93 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\doxygen.css", "CSS", 0, 0, 0, 0, 0, 0, 0, 0, 1260, 0, 0, 84, 253, 1597 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dynsections.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 7, 11, 98 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\example__get_calib_params_file_8cc.html", "HTML", 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 5, 6, 144 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\example__get_depth_frame_8cc.html", "HTML", 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 5, 6, 145 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\example__get_point_cloud_8cc.html", "HTML", 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 5, 4, 141 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\example__get_raw_frame_8cc.html", "HTML", 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 5, 6, 144 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\example__get_rect_frame_8cc.html", "HTML", 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 5, 6, 149 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\files.html", "HTML", 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 5, 3, 96 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\functions.html", "HTML", 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 5, 22, 245 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\functions_func.html", "HTML", 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 5, 20, 235 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\functions_vars.html", "HTML", 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 5, 3, 80 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\globals.html", "HTML", 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 5, 3, 86 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\globals_defs.html", "HTML", 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 5, 3, 77 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\globals_enum.html", "HTML", 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 5, 3, 77 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\globals_func.html", "HTML", 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 5, 3, 80 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\glwindow_8hpp_source.html", "HTML", 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 5, 3, 86 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\graph_legend.html", "HTML", 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 5, 3, 105 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\hierarchy.html", "HTML", 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 5, 3, 96 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\index.html", "HTML", 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 5, 3, 86 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\inherits.html", "HTML", 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 5, 3, 138 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\jquery.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 78, 0, 87 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\menu.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 2, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\menudata.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 3 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\scenewindow_8hpp_source.html", "HTML", 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 5, 3, 85 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_0.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_0.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_1.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_1.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 6 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_2.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_2.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 1, 7 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_3.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_3.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 1, 11 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_4.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_4.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 1, 15 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_5.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_5.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1, 9 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_6.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_6.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 6 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_7.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_7.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_8.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_8.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 6 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_9.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_9.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 8 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_a.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_a.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_b.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_b.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 8 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_c.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_c.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_d.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_d.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 6 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_0.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_0.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_1.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_1.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 6 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_2.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_2.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_3.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_3.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 6 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_4.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_4.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_5.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_5.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1, 9 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_6.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_6.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_7.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_7.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\defines_0.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\defines_0.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\enums_0.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\enums_0.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\files_0.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\files_0.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1, 9 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\files_1.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\files_1.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 1, 7 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\files_2.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\files_2.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_0.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_0.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_1.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_1.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 1, 7 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_2.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_2.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 1, 14 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_3.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_3.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_4.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_4.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 6 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_5.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_5.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_6.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_6.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 1, 7 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_7.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_7.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1, 21 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_8.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_8.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 1, 7 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_9.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_9.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 6 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\nomatches.html", "HTML", 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 1, 13 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\pages_0.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\pages_0.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\search.css", "CSS", 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 5, 47, 272 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\search.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 36, 68, 792 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\searchdata.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 4, 19 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\variables_0.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\variables_0.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\variables_1.html", "HTML", 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 5, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\variables_1.js", "JavaScript", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\struct___device___point__-members.html", "HTML", 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 5, 4, 101 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\struct___device___point__.html", "HTML", 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 5, 3, 159 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\struct_g_l_window_1_1_system_state-members.html", "HTML", 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 5, 4, 98 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\struct_g_l_window_1_1_system_state.html", "HTML", 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 5, 3, 133 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\struct_p_c_l-members.html", "HTML", 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 5, 4, 81 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\struct_p_c_l.html", "HTML", 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 5, 5, 103 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\structglwindow_1_1_event_handler-members.html", "HTML", 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 5, 4, 93 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\structglwindow_1_1_event_handler.html", "HTML", 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 5, 3, 126 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\structglwindow_1_1_g_l_window_1_1_scoped_context-members.html", "HTML", 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 5, 4, 86 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\structglwindow_1_1_g_l_window_1_1_scoped_context.html", "HTML", 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 5, 3, 109 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\structglwindow_1_1_scene_window_1_1_viewpoint-members.html", "HTML", 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 5, 4, 88 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\structglwindow_1_1_scene_window_1_1_viewpoint.html", "HTML", 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 5, 3, 103 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\tabs.css", "CSS", 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\Makefile", "Makefile", 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 5, 22 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\_stereo_camera_common_8cc.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 14, 90 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\_stereo_camera_common_8hpp.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 8, 61 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\_system_log_8hpp.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 8, 49 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\_unitree_camera_s_d_k_8hpp.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 8, 56 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\annotated.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 1, 18 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\class_stereo_camera.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 191, 969 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\class_system_log.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 71, 339 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\class_unitree_camera.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 49, 222 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\classglwindow_1_1_event_dispatcher.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 7, 68 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\classglwindow_1_1_g_l_window.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 5, 116 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\classglwindow_1_1_scene_window.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 7, 106 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\classinfo__camera___string.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 20 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\classinfo__camera__os.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 3, 38 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_209c714a154efd8d40a59e92e6a74502.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 3 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_3a56b08581502e42e7c33d229017cb82.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 1, 6 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_4eeb864c4eec08c7d6b9d3b0352cfdde.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 11 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_4fef79e7177ba769987a8da36c892c5f.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 1, 6 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_63772b626f2709090f0bdca0f40827b4.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 3 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_68267d1309a1af8e8297ef4c3efbcdba.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 1, 16 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_8a35f475ed9d8a5443c1993b236eb8f6.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 3 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_8d5e63337d9bc0375b6fa20fd80d83ec.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 3 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_d28a4824dc47e487b107a5db32ef43c4.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 1, 27 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_d44c64559bbebec7f509842c48db8b23.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 1, 12 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\doxygen.sty", "TeX", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 53, 57, 504 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\example__get_calib_params_file_8cc.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 15, 59 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\example__get_depth_frame_8cc.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 16, 61 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\example__get_point_cloud_8cc.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 8, 67 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\example__get_raw_frame_8cc.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 15, 59 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\example__get_rect_frame_8cc.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 20, 69 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\files.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 1, 16 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\hierarchy.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 1, 22 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\index.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 22, 62 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\refman.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 12, 15, 154 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\struct___device___point__.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 5, 87 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\struct_g_l_window_1_1_system_state.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 3, 53 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\struct_p_c_l.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 13, 37 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\structglwindow_1_1_event_handler.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 5, 48 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\structglwindow_1_1_g_l_window_1_1_scoped_context.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 5, 30 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\structglwindow_1_1_scene_window_1_1_viewpoint.tex", "LaTeX", 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 3, 24 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_getCalibParamsFile.cc", "C++", 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 9, 5, 28 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_getDepthFrame.cc", "C++", 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 9, 8, 43 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_getPointCloud.cc", "C++", 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 9, 16, 98 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_getRawFrame.cc", "C++", 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 9, 14, 64 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_getRectFrame.cc", "C++", 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 11, 11, 61 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_getimagetrans.cc", "C++", 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 28, 7, 63 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_putImagetrans.cc", "C++", 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 85, 10, 119 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_share.cc", "C++", 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 5, 29 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\glViewer\glwindow.hpp", "C++", 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 2, 23, 125 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\glViewer\glwindow_x11.cpp", "C++", 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 7, 76, 519 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\glViewer\scenewindow.cpp", "C++", 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 4, 39, 182 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\glViewer\scenewindow.hpp", "C++", 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 1, 14, 50 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\include\StereoCameraCommon.hpp", "C++", 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 534, 27, 660 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\include\SystemLog.hpp", "C++", 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 135, 8, 169 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\include\UnitreeCameraSDK.hpp", "C++", 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 126, 10, 159 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\src\getimagetrans.cc", "C++", 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 16, 4, 48 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\src\putimagetrans.cc", "C++", 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 37, 14, 109 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\stereo_camera_config.yaml", "YAML", 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 78 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\trans_rect_config.yaml", "YAML", 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 13, 1, 80 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\trans_rect_config_0.yaml", "YAML", 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 78 +"d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\trans_rect_config_1.yaml", "YAML", 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 78 +"d:\Administrator\Desktop\go1_guide-master\nano\kill.sh", "Shell Script", 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 7 +"d:\Administrator\Desktop\go1_guide-master\nano\picture_processing.py", "Python", 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 21, 128 +"d:\Administrator\Desktop\go1_guide-master\nano\start.sh", "Shell Script", 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 10 +"d:\Administrator\Desktop\go1_guide-master\nano\templates\index.html", "HTML", 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 2, 14 +"d:\Administrator\Desktop\go1_guide-master\nano\trans_rect_config_0.yaml", "YAML", 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 12, 1, 79 +"d:\Administrator\Desktop\go1_guide-master\nano\trans_rect_config_1.yaml", "YAML", 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 12, 1, 79 +"d:\Administrator\Desktop\go1_guide-master\nano\webcamera.py", "Python", 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 15, 66 +"d:\Administrator\Desktop\go1_guide-master\predict.py", "Python", 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 55, 278 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\server_robotcontrol.py", "Python", 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 14, 82 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\start.sh", "Shell Script", 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree.py", "Python", 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 27 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\README.md", "Markdown", 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 9, 38 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example\example_joystick.cpp", "C++", 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 5, 16, 83 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example\example_position.cpp", "C++", 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 17, 25, 164 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example\example_torque.cpp", "C++", 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 8, 16, 95 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example\example_velocity.cpp", "C++", 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 8, 18, 98 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example\example_walk.cpp", "C++", 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 6, 17, 157 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example_py\example_position.py", "Python", 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 26, 119 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example_py\example_torque.py", "Python", 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 18, 71 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example_py\example_velocity.py", "Python", 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 59 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example_py\example_walk.py", "Python", 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 30, 120 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example_py\test.py", "Python", 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 8 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example_py\unitree.py", "Python", 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 27 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example_py\unitree_python_sdk.py", "Python", 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 61 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\a1_const.h", "C++", 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 3, 4, 19 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\aliengo_const.h", "C++", 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 3, 4, 19 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\comm.h", "C++", 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 15, 30, 217 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\go1_const.h", "C++", 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 3, 4, 19 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\joystick.h", "C++", 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 5, 4, 44 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\loop.h", "C++", 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 7, 13, 62 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\quadruped.h", "C++", 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 4, 15, 51 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\safety.h", "C++", 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 5, 8, 32 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\udp.h", "C++", 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 17, 21, 102 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\unitree_legged_sdk.h", "C++", 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 3, 5, 19 +"d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_python_sdk.py", "Python", 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 61 +"d:\Administrator\Desktop\go1_guide-master\setup.sh", "Shell Script", 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 6 +"d:\Administrator\Desktop\go1_guide-master\test.py", "Python", 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 18 +"Total", "-", 14, 1108, 427, 2085, 90, 9654, 2546, 1078, 1481, 17, 394, 2357, 2385, 23636 \ No newline at end of file diff --git a/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/results.json b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/results.json new file mode 100644 index 0000000..a9cfcf7 --- /dev/null +++ b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/results.json @@ -0,0 +1 @@ +{"file:///d%3A/Administrator/Desktop/go1_guide-master/setup.sh":{"language":"Shell Script","code":4,"comment":1,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/test.py":{"language":"Python","code":12,"comment":1,"blank":5},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/trans_rect_config_1.yaml":{"language":"YAML","code":66,"comment":12,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/trans_rect_config_0.yaml":{"language":"YAML","code":66,"comment":12,"blank":0},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_python_sdk.py":{"language":"Python","code":42,"comment":9,"blank":10},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/example_py/example_position.py":{"language":"Python","code":81,"comment":12,"blank":26},"file:///d%3A/Administrator/Desktop/go1_guide-master/predict.py":{"language":"Python","code":208,"comment":15,"blank":55},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/trans_rect_config.yaml":{"language":"YAML","code":66,"comment":13,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/trans_rect_config_1.yaml":{"language":"YAML","code":66,"comment":12,"blank":0},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/stereo_camera_config.yaml":{"language":"YAML","code":66,"comment":12,"blank":0},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/example_py/unitree_python_sdk.py":{"language":"Python","code":42,"comment":9,"blank":10},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/example_py/unitree.py":{"language":"Python","code":21,"comment":0,"blank":6},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/example_py/test.py":{"language":"Python","code":5,"comment":1,"blank":2},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/example_py/example_walk.py":{"language":"Python","code":76,"comment":14,"blank":30},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/example_py/example_torque.py":{"language":"Python","code":44,"comment":9,"blank":18},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/example_py/example_velocity.py":{"language":"Python","code":38,"comment":4,"blank":17},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/src/getimagetrans.cc":{"language":"C++","code":28,"comment":16,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/README.md":{"language":"Markdown","code":61,"comment":0,"blank":24},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/src/putimagetrans.cc":{"language":"C++","code":58,"comment":37,"blank":14},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/include/StereoCameraCommon.hpp":{"language":"C++","code":99,"comment":534,"blank":27},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/include/SystemLog.hpp":{"language":"C++","code":26,"comment":135,"blank":8},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/examples/example_getRawFrame.cc":{"language":"C++","code":41,"comment":9,"blank":14},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/examples/example_getRectFrame.cc":{"language":"C++","code":39,"comment":11,"blank":11},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/examples/example_getDepthFrame.cc":{"language":"C++","code":26,"comment":9,"blank":8},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/include/UnitreeCameraSDK.hpp":{"language":"C++","code":23,"comment":126,"blank":10},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/examples/example_putImagetrans.cc":{"language":"C++","code":24,"comment":85,"blank":10},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/examples/example_getPointCloud.cc":{"language":"C++","code":73,"comment":9,"blank":16},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/examples/example_share.cc":{"language":"C++","code":24,"comment":0,"blank":5},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/examples/example_getimagetrans.cc":{"language":"C++","code":28,"comment":28,"blank":7},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/README.md":{"language":"Markdown","code":29,"comment":0,"blank":9},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/examples/example_getCalibParamsFile.cc":{"language":"C++","code":14,"comment":9,"blank":5},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/trans_rect_config_0.yaml":{"language":"YAML","code":66,"comment":12,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/templates/index.html":{"language":"HTML","code":12,"comment":0,"blank":2},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/start.sh":{"language":"Shell Script","code":5,"comment":2,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/annotated.html":{"language":"HTML","code":87,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/picture_processing.py":{"language":"Python","code":24,"comment":83,"blank":21},"file:///d%3A/Administrator/Desktop/go1_guide-master/core/shot.py":{"language":"Python","code":12,"comment":8,"blank":6},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/webcamera.py":{"language":"Python","code":49,"comment":2,"blank":15},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree.py":{"language":"Python","code":21,"comment":0,"blank":6},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/start.sh":{"language":"Shell Script","code":1,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/kill.sh":{"language":"Shell Script","code":4,"comment":1,"blank":2},"file:///d%3A/Administrator/Desktop/go1_guide-master/core/robot_connector.py":{"language":"Python","code":13,"comment":0,"blank":5},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher-members.html":{"language":"HTML","code":86,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/classes.html":{"language":"HTML","code":88,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher.tex":{"language":"LaTeX","code":61,"comment":0,"blank":7},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/examples/glViewer/scenewindow.cpp":{"language":"C++","code":139,"comment":4,"blank":39},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/examples/glViewer/glwindow_x11.cpp":{"language":"C++","code":436,"comment":7,"blank":76},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/examples/glViewer/scenewindow.hpp":{"language":"C++","code":35,"comment":1,"blank":14},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher.html":{"language":"HTML","code":136,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/annotated.tex":{"language":"LaTeX","code":17,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/examples/glViewer/glwindow.hpp":{"language":"C++","code":100,"comment":2,"blank":23},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/server_robotcontrol.py":{"language":"Python","code":67,"comment":1,"blank":14},"file:///d%3A/Administrator/Desktop/go1_guide-master/core/PID.py":{"language":"Python","code":38,"comment":1,"blank":8},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/camera__api_8h_source.html":{"language":"HTML","code":75,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/core/picture_processing.py":{"language":"Python","code":24,"comment":83,"blank":21},"file:///d%3A/Administrator/Desktop/go1_guide-master/core/Camera.py":{"language":"Python","code":42,"comment":43,"blank":27},"file:///d%3A/Administrator/Desktop/go1_guide-master/core/capture.py":{"language":"Python","code":49,"comment":1,"blank":15},"file:///d%3A/Administrator/Desktop/go1_guide-master/main.py":{"language":"Python","code":161,"comment":26,"blank":43},"file:///d%3A/Administrator/Desktop/go1_guide-master/core/getcolor.py":{"language":"Python","code":12,"comment":0,"blank":2},"file:///d%3A/Administrator/Desktop/go1_guide-master/core/color_detection.py":{"language":"Python","code":27,"comment":2,"blank":11},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/example/example_velocity.cpp":{"language":"C++","code":72,"comment":8,"blank":18},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/example/example_torque.cpp":{"language":"C++","code":71,"comment":8,"blank":16},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/example/example_position.cpp":{"language":"C++","code":122,"comment":17,"blank":25},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window.tex":{"language":"LaTeX","code":99,"comment":0,"blank":7},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/example/example_joystick.cpp":{"language":"C++","code":62,"comment":5,"blank":16},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window-members.html":{"language":"HTML","code":100,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_g_l_window.tex":{"language":"LaTeX","code":111,"comment":0,"blank":5},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/example/example_walk.cpp":{"language":"C++","code":134,"comment":6,"blank":17},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window.html":{"language":"HTML","code":190,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/comm.h":{"language":"C++","code":172,"comment":15,"blank":30},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/aliengo_const.h":{"language":"C++","code":12,"comment":3,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window.html":{"language":"HTML","code":190,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/a1_const.h":{"language":"C++","code":12,"comment":3,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/class_system_log.html":{"language":"HTML","code":446,"comment":5,"blank":33},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/class_system_log-members.html":{"language":"HTML","code":80,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/model/picodet_l_416_coco_lcnet/infer_cfg.yml":{"language":"YAML","code":31,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/class_stereo_camera-members.html":{"language":"HTML","code":104,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/unitree_legged_sdk.h":{"language":"C++","code":11,"comment":3,"blank":5},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/class_unitree_camera-members.html":{"language":"HTML","code":111,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/classinfo__camera___string.html":{"language":"HTML","code":87,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/udp.h":{"language":"C++","code":64,"comment":17,"blank":21},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/class_stereo_camera.html":{"language":"HTML","code":1247,"comment":5,"blank":89},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/class_unitree_camera.html":{"language":"HTML","code":372,"comment":5,"blank":18},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/class_unitree_camera.tex":{"language":"LaTeX","code":173,"comment":0,"blank":49},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/classinfo__camera___string-members.html":{"language":"HTML","code":73,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/classinfo__camera__os.html":{"language":"HTML","code":105,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/safety.h":{"language":"C++","code":19,"comment":5,"blank":8},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/classinfo__camera__os-members.html":{"language":"HTML","code":79,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/class_system_log.tex":{"language":"LaTeX","code":268,"comment":0,"blank":71},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/joystick.h":{"language":"C++","code":35,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/class_stereo_camera.tex":{"language":"LaTeX","code":778,"comment":0,"blank":191},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/loop.h":{"language":"C++","code":42,"comment":7,"blank":13},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/classinfo__camera___string.tex":{"language":"LaTeX","code":17,"comment":0,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/quadruped.h":{"language":"C++","code":32,"comment":4,"blank":15},"file:///d%3A/Administrator/Desktop/go1_guide-master/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/go1_const.h":{"language":"C++","code":12,"comment":3,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/classinfo__camera__os.tex":{"language":"LaTeX","code":35,"comment":0,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/scenewindow_8hpp_source.html":{"language":"HTML","code":77,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window-members.html":{"language":"HTML","code":99,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_9.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_8.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_8.js":{"language":"JavaScript","code":6,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_7.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_7.js":{"language":"JavaScript","code":20,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_9.js":{"language":"JavaScript","code":5,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_6.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_5.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_6.js":{"language":"JavaScript","code":6,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_5.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_4.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_4.js":{"language":"JavaScript","code":5,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_3.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_3.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_2.js":{"language":"JavaScript","code":13,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_2.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp_source.html":{"language":"HTML","code":81,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_1.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_1.js":{"language":"JavaScript","code":6,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_0.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/files_2.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp.html":{"language":"HTML","code":122,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/functions_0.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/files_2.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/files_1.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/files_0.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/files_1.js":{"language":"JavaScript","code":6,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/files_0.js":{"language":"JavaScript","code":8,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/enums_0.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/defines_0.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/defines_0.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_7.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/enums_0.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_7.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_6.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_6.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_5.js":{"language":"JavaScript","code":8,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_5.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_4.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_4.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_3.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_3.js":{"language":"JavaScript","code":5,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_2.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_2.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/_system_log_8hpp_source.html":{"language":"HTML","code":83,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/_system_log_8hpp.html":{"language":"HTML","code":115,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_1.js":{"language":"JavaScript","code":5,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_1.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_0.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/nomatches.html":{"language":"HTML","code":12,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/classes_0.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_d.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_d.js":{"language":"JavaScript","code":5,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp_source.html":{"language":"HTML","code":78,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_c.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_c.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_b.js":{"language":"JavaScript","code":7,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/pages_0.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_b.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_a.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp.html":{"language":"HTML","code":130,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_a.js":{"language":"JavaScript","code":26,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_9.js":{"language":"JavaScript","code":7,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc.html":{"language":"HTML","code":151,"comment":5,"blank":7},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_9.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_8.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_8.js":{"language":"JavaScript","code":5,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_7.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_7.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_6.js":{"language":"JavaScript","code":5,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_5.js":{"language":"JavaScript","code":8,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_6.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/pages_0.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/tabs.css":{"language":"CSS","code":1,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_5.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_4.js":{"language":"JavaScript","code":14,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_4.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_3.js":{"language":"JavaScript","code":10,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_3.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_2.js":{"language":"JavaScript","code":6,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/struct___device___point__-members.html":{"language":"HTML","code":92,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/struct___device___point__.html":{"language":"HTML","code":151,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_2.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_1.js":{"language":"JavaScript","code":5,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/struct_p_c_l.html":{"language":"HTML","code":93,"comment":5,"blank":5},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/search.css":{"language":"CSS","code":220,"comment":5,"blank":47},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_1.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/struct_p_c_l-members.html":{"language":"HTML","code":72,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_0.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/struct_g_l_window_1_1_system_state.html":{"language":"HTML","code":125,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/struct_g_l_window_1_1_system_state-members.html":{"language":"HTML","code":89,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/all_0.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context.html":{"language":"HTML","code":101,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_scene_window_1_1_viewpoint-members.html":{"language":"HTML","code":79,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_scene_window_1_1_viewpoint.html":{"language":"HTML","code":95,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler.html":{"language":"HTML","code":118,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler-members.html":{"language":"HTML","code":84,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/search.js":{"language":"JavaScript","code":688,"comment":36,"blank":68},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context-members.html":{"language":"HTML","code":77,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/menudata.js":{"language":"JavaScript","code":2,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/menu.js":{"language":"JavaScript","code":25,"comment":0,"blank":2},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/searchdata.js":{"language":"JavaScript","code":15,"comment":0,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp.tex":{"language":"LaTeX","code":48,"comment":0,"blank":8},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp.tex":{"language":"LaTeX","code":53,"comment":0,"blank":8},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp.tex":{"language":"LaTeX","code":41,"comment":0,"blank":8},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/struct___device___point__.tex":{"language":"LaTeX","code":82,"comment":0,"blank":5},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8cc.tex":{"language":"LaTeX","code":76,"comment":0,"blank":14},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/struct_p_c_l.tex":{"language":"LaTeX","code":24,"comment":0,"blank":13},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/struct_g_l_window_1_1_system_state.tex":{"language":"LaTeX","code":50,"comment":0,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/index.html":{"language":"HTML","code":78,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/variables_0.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_g_l_window_1_1_scoped_context.tex":{"language":"LaTeX","code":25,"comment":0,"blank":5},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_scene_window_1_1_viewpoint.tex":{"language":"LaTeX","code":21,"comment":0,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/jquery.js":{"language":"JavaScript","code":9,"comment":78,"blank":0},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_event_handler.tex":{"language":"LaTeX","code":43,"comment":0,"blank":5},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/hierarchy.html":{"language":"HTML","code":88,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/inherits.html":{"language":"HTML","code":130,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/graph_legend.html":{"language":"HTML","code":97,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/variables_0.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/globals_func.html":{"language":"HTML","code":72,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/refman.tex":{"language":"LaTeX","code":127,"comment":12,"blank":15},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/glwindow_8hpp_source.html":{"language":"HTML","code":78,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/globals_enum.html":{"language":"HTML","code":69,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/Makefile":{"language":"Makefile","code":17,"comment":0,"blank":5},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/functions_vars.html":{"language":"HTML","code":72,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/globals_defs.html":{"language":"HTML","code":69,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/globals.html":{"language":"HTML","code":78,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/functions_func.html":{"language":"HTML","code":210,"comment":5,"blank":20},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/index.tex":{"language":"LaTeX","code":40,"comment":0,"blank":22},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/functions.html":{"language":"HTML","code":218,"comment":5,"blank":22},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/files.html":{"language":"HTML","code":88,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/variables_1.html":{"language":"HTML","code":21,"comment":5,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc.html":{"language":"HTML","code":138,"comment":5,"blank":6},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc.html":{"language":"HTML","code":133,"comment":5,"blank":6},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc.html":{"language":"HTML","code":132,"comment":5,"blank":4},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc.html":{"language":"HTML","code":134,"comment":5,"blank":6},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/example__get_calib_params_file_8cc.html":{"language":"HTML","code":133,"comment":5,"blank":6},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/hierarchy.tex":{"language":"LaTeX","code":21,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/example__get_rect_frame_8cc.tex":{"language":"LaTeX","code":49,"comment":0,"blank":20},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/files.tex":{"language":"LaTeX","code":15,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/search/variables_1.js":{"language":"JavaScript","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/dynsections.js":{"language":"JavaScript","code":80,"comment":7,"blank":11},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/example__get_raw_frame_8cc.tex":{"language":"LaTeX","code":44,"comment":0,"blank":15},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html":{"language":"HTML","code":85,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/doxygen.css":{"language":"CSS","code":1260,"comment":84,"blank":253},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/example__get_point_cloud_8cc.tex":{"language":"LaTeX","code":59,"comment":0,"blank":8},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4.html":{"language":"HTML","code":105,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/example__get_depth_frame_8cc.tex":{"language":"LaTeX","code":45,"comment":0,"blank":16},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/dir_8d5e63337d9bc0375b6fa20fd80d83ec.html":{"language":"HTML","code":72,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/dir_8a35f475ed9d8a5443c1993b236eb8f6.html":{"language":"HTML","code":72,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html":{"language":"HTML","code":89,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/dir_63772b626f2709090f0bdca0f40827b4.html":{"language":"HTML","code":72,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/example__get_calib_params_file_8cc.tex":{"language":"LaTeX","code":44,"comment":0,"blank":15},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/dir_4fef79e7177ba769987a8da36c892c5f.html":{"language":"HTML","code":76,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/doxygen.sty":{"language":"TeX","code":394,"comment":53,"blank":57},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/dir_d44c64559bbebec7f509842c48db8b23.tex":{"language":"LaTeX","code":11,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/dir_8d5e63337d9bc0375b6fa20fd80d83ec.tex":{"language":"LaTeX","code":2,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html":{"language":"HTML","code":82,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/dir_d28a4824dc47e487b107a5db32ef43c4.tex":{"language":"LaTeX","code":26,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/dir_209c714a154efd8d40a59e92e6a74502.html":{"language":"HTML","code":72,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/dir_3a56b08581502e42e7c33d229017cb82.html":{"language":"HTML","code":76,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/dir_8a35f475ed9d8a5443c1993b236eb8f6.tex":{"language":"LaTeX","code":2,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex":{"language":"LaTeX","code":15,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/dir_000005_000007.html":{"language":"HTML","code":68,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/dir_000008_000007.html":{"language":"HTML","code":68,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/html/dir_000009_000007.html":{"language":"HTML","code":68,"comment":5,"blank":3},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/dir_63772b626f2709090f0bdca0f40827b4.tex":{"language":"LaTeX","code":2,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/dir_4fef79e7177ba769987a8da36c892c5f.tex":{"language":"LaTeX","code":5,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/dir_209c714a154efd8d40a59e92e6a74502.tex":{"language":"LaTeX","code":2,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/dir_3a56b08581502e42e7c33d229017cb82.tex":{"language":"LaTeX","code":5,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/go1_guide-master/nano/UnitreecameraSDK/doc/latex/dir_4eeb864c4eec08c7d6b9d3b0352cfdde.tex":{"language":"LaTeX","code":10,"comment":0,"blank":1}} \ No newline at end of file diff --git a/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/results.md b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/results.md new file mode 100644 index 0000000..ee93246 --- /dev/null +++ b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/results.md @@ -0,0 +1,58 @@ +# Summary + +Date : 2024-06-17 19:31:57 + +Directory d:\\Administrator\\Desktop\\go1_guide-master + +Total : 269 files, 18894 codes, 2357 comments, 2385 blanks, all 23636 lines + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| HTML | 112 | 9,654 | 550 | 456 | 10,660 | +| LaTeX | 38 | 2,546 | 12 | 532 | 3,090 | +| C++ | 32 | 2,085 | 1,131 | 491 | 3,707 | +| CSS | 3 | 1,481 | 89 | 301 | 1,871 | +| Python | 23 | 1,108 | 324 | 373 | 1,805 | +| JavaScript | 46 | 1,078 | 121 | 126 | 1,325 | +| YAML | 7 | 427 | 73 | 4 | 504 | +| TeX | 1 | 394 | 53 | 57 | 504 | +| Markdown | 2 | 90 | 0 | 33 | 123 | +| Makefile | 1 | 17 | 0 | 5 | 22 | +| Shell Script | 4 | 14 | 4 | 7 | 25 | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| . | 269 | 18,894 | 2,357 | 2,385 | 23,636 | +| . (Files) | 4 | 385 | 43 | 104 | 532 | +| core | 8 | 217 | 138 | 95 | 450 | +| model | 1 | 31 | 0 | 1 | 32 | +| model\\picodet_l_416_coco_lcnet | 1 | 31 | 0 | 1 | 32 | +| nano | 229 | 16,922 | 2,008 | 1,836 | 20,766 | +| nano (Files) | 6 | 214 | 112 | 43 | 369 | +| nano\\UnitreecameraSDK | 222 | 16,696 | 1,896 | 1,791 | 20,383 | +| nano\\UnitreecameraSDK (Files) | 5 | 325 | 49 | 25 | 399 | +| nano\\UnitreecameraSDK\\doc | 200 | 15,158 | 825 | 1,475 | 17,458 | +| nano\\UnitreecameraSDK\\doc\\html | 160 | 12,201 | 760 | 881 | 13,842 | +| nano\\UnitreecameraSDK\\doc\\html (Files) | 76 | 10,167 | 519 | 681 | 11,367 | +| nano\\UnitreecameraSDK\\doc\\html\\search | 84 | 2,034 | 241 | 200 | 2,475 | +| nano\\UnitreecameraSDK\\doc\\latex | 40 | 2,957 | 65 | 594 | 3,616 | +| nano\\UnitreecameraSDK\\examples | 12 | 979 | 174 | 228 | 1,381 | +| nano\\UnitreecameraSDK\\examples (Files) | 8 | 269 | 160 | 76 | 505 | +| nano\\UnitreecameraSDK\\examples\\glViewer | 4 | 710 | 14 | 152 | 876 | +| nano\\UnitreecameraSDK\\include | 3 | 148 | 795 | 45 | 988 | +| nano\\UnitreecameraSDK\\src | 2 | 86 | 53 | 18 | 157 | +| nano\\templates | 1 | 12 | 0 | 2 | 14 | +| raspberrypi | 27 | 1,339 | 168 | 349 | 1,856 | +| raspberrypi (Files) | 4 | 131 | 10 | 31 | 172 | +| raspberrypi\\unitree_legged_sdk | 23 | 1,208 | 158 | 318 | 1,684 | +| raspberrypi\\unitree_legged_sdk (Files) | 1 | 29 | 0 | 9 | 38 | +| raspberrypi\\unitree_legged_sdk\\example | 5 | 461 | 44 | 92 | 597 | +| raspberrypi\\unitree_legged_sdk\\example_py | 7 | 307 | 49 | 109 | 465 | +| raspberrypi\\unitree_legged_sdk\\include | 10 | 411 | 65 | 108 | 584 | +| raspberrypi\\unitree_legged_sdk\\include\\unitree_legged_sdk | 10 | 411 | 65 | 108 | 584 | + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/results.txt b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/results.txt new file mode 100644 index 0000000..836be3b --- /dev/null +++ b/src/Robot/go1_guide/.VSCodeCounter/2024-06-17_19-31-57/results.txt @@ -0,0 +1,330 @@ +Date : 2024-06-17 19:31:57 +Directory : d:\Administrator\Desktop\go1_guide-master +Total : 269 files, 18894 codes, 2357 comments, 2385 blanks, all 23636 lines + +Languages ++--------------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++--------------+------------+------------+------------+------------+------------+ +| HTML | 112 | 9,654 | 550 | 456 | 10,660 | +| LaTeX | 38 | 2,546 | 12 | 532 | 3,090 | +| C++ | 32 | 2,085 | 1,131 | 491 | 3,707 | +| CSS | 3 | 1,481 | 89 | 301 | 1,871 | +| Python | 23 | 1,108 | 324 | 373 | 1,805 | +| JavaScript | 46 | 1,078 | 121 | 126 | 1,325 | +| YAML | 7 | 427 | 73 | 4 | 504 | +| TeX | 1 | 394 | 53 | 57 | 504 | +| Markdown | 2 | 90 | 0 | 33 | 123 | +| Makefile | 1 | 17 | 0 | 5 | 22 | +| Shell Script | 4 | 14 | 4 | 7 | 25 | ++--------------+------------+------------+------------+------------+------------+ + +Directories ++----------------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++----------------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| . | 269 | 18,894 | 2,357 | 2,385 | 23,636 | +| . (Files) | 4 | 385 | 43 | 104 | 532 | +| core | 8 | 217 | 138 | 95 | 450 | +| model | 1 | 31 | 0 | 1 | 32 | +| model\picodet_l_416_coco_lcnet | 1 | 31 | 0 | 1 | 32 | +| nano | 229 | 16,922 | 2,008 | 1,836 | 20,766 | +| nano (Files) | 6 | 214 | 112 | 43 | 369 | +| nano\UnitreecameraSDK | 222 | 16,696 | 1,896 | 1,791 | 20,383 | +| nano\UnitreecameraSDK (Files) | 5 | 325 | 49 | 25 | 399 | +| nano\UnitreecameraSDK\doc | 200 | 15,158 | 825 | 1,475 | 17,458 | +| nano\UnitreecameraSDK\doc\html | 160 | 12,201 | 760 | 881 | 13,842 | +| nano\UnitreecameraSDK\doc\html (Files) | 76 | 10,167 | 519 | 681 | 11,367 | +| nano\UnitreecameraSDK\doc\html\search | 84 | 2,034 | 241 | 200 | 2,475 | +| nano\UnitreecameraSDK\doc\latex | 40 | 2,957 | 65 | 594 | 3,616 | +| nano\UnitreecameraSDK\examples | 12 | 979 | 174 | 228 | 1,381 | +| nano\UnitreecameraSDK\examples (Files) | 8 | 269 | 160 | 76 | 505 | +| nano\UnitreecameraSDK\examples\glViewer | 4 | 710 | 14 | 152 | 876 | +| nano\UnitreecameraSDK\include | 3 | 148 | 795 | 45 | 988 | +| nano\UnitreecameraSDK\src | 2 | 86 | 53 | 18 | 157 | +| nano\templates | 1 | 12 | 0 | 2 | 14 | +| raspberrypi | 27 | 1,339 | 168 | 349 | 1,856 | +| raspberrypi (Files) | 4 | 131 | 10 | 31 | 172 | +| raspberrypi\unitree_legged_sdk | 23 | 1,208 | 158 | 318 | 1,684 | +| raspberrypi\unitree_legged_sdk (Files) | 1 | 29 | 0 | 9 | 38 | +| raspberrypi\unitree_legged_sdk\example | 5 | 461 | 44 | 92 | 597 | +| raspberrypi\unitree_legged_sdk\example_py | 7 | 307 | 49 | 109 | 465 | +| raspberrypi\unitree_legged_sdk\include | 10 | 411 | 65 | 108 | 584 | +| raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk | 10 | 411 | 65 | 108 | 584 | ++----------------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ + +Files ++----------------------------------------------------------------------------------------------------------------------------------------+--------------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++----------------------------------------------------------------------------------------------------------------------------------------+--------------+------------+------------+------------+------------+ +| d:\Administrator\Desktop\go1_guide-master\core\Camera.py | Python | 42 | 43 | 27 | 112 | +| d:\Administrator\Desktop\go1_guide-master\core\PID.py | Python | 38 | 1 | 8 | 47 | +| d:\Administrator\Desktop\go1_guide-master\core\capture.py | Python | 49 | 1 | 15 | 65 | +| d:\Administrator\Desktop\go1_guide-master\core\color_detection.py | Python | 27 | 2 | 11 | 40 | +| d:\Administrator\Desktop\go1_guide-master\core\getcolor.py | Python | 12 | 0 | 2 | 14 | +| d:\Administrator\Desktop\go1_guide-master\core\picture_processing.py | Python | 24 | 83 | 21 | 128 | +| d:\Administrator\Desktop\go1_guide-master\core\robot_connector.py | Python | 13 | 0 | 5 | 18 | +| d:\Administrator\Desktop\go1_guide-master\core\shot.py | Python | 12 | 8 | 6 | 26 | +| d:\Administrator\Desktop\go1_guide-master\main.py | Python | 161 | 26 | 43 | 230 | +| d:\Administrator\Desktop\go1_guide-master\model\picodet_l_416_coco_lcnet\infer_cfg.yml | YAML | 31 | 0 | 1 | 32 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\README.md | Markdown | 61 | 0 | 24 | 85 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\_stereo_camera_common_8cc.html | HTML | 151 | 5 | 7 | 163 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\_stereo_camera_common_8hpp.html | HTML | 130 | 5 | 4 | 139 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\_stereo_camera_common_8hpp_source.html | HTML | 78 | 5 | 3 | 86 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\_system_log_8hpp.html | HTML | 115 | 5 | 4 | 124 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\_system_log_8hpp_source.html | HTML | 83 | 5 | 3 | 91 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\_unitree_camera_s_d_k_8hpp.html | HTML | 122 | 5 | 4 | 131 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\_unitree_camera_s_d_k_8hpp_source.html | HTML | 81 | 5 | 3 | 89 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\annotated.html | HTML | 87 | 5 | 3 | 95 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\camera__api_8h_source.html | HTML | 75 | 5 | 3 | 83 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\class_stereo_camera-members.html | HTML | 104 | 5 | 4 | 113 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\class_stereo_camera.html | HTML | 1,247 | 5 | 89 | 1,341 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\class_system_log-members.html | HTML | 80 | 5 | 4 | 89 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\class_system_log.html | HTML | 446 | 5 | 33 | 484 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\class_unitree_camera-members.html | HTML | 111 | 5 | 4 | 120 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\class_unitree_camera.html | HTML | 372 | 5 | 18 | 395 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classes.html | HTML | 88 | 5 | 3 | 96 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classglwindow_1_1_event_dispatcher-members.html | HTML | 86 | 5 | 4 | 95 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classglwindow_1_1_event_dispatcher.html | HTML | 136 | 5 | 3 | 144 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classglwindow_1_1_g_l_window-members.html | HTML | 100 | 5 | 4 | 109 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classglwindow_1_1_g_l_window.html | HTML | 190 | 5 | 3 | 198 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classglwindow_1_1_scene_window-members.html | HTML | 99 | 5 | 4 | 108 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classglwindow_1_1_scene_window.html | HTML | 190 | 5 | 3 | 198 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classinfo__camera___string-members.html | HTML | 73 | 5 | 4 | 82 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classinfo__camera___string.html | HTML | 87 | 5 | 3 | 95 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classinfo__camera__os-members.html | HTML | 79 | 5 | 4 | 88 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\classinfo__camera__os.html | HTML | 105 | 5 | 3 | 113 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_000005_000007.html | HTML | 68 | 5 | 3 | 76 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_000008_000007.html | HTML | 68 | 5 | 3 | 76 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_000009_000007.html | HTML | 68 | 5 | 3 | 76 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_209c714a154efd8d40a59e92e6a74502.html | HTML | 72 | 5 | 3 | 80 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_3a56b08581502e42e7c33d229017cb82.html | HTML | 76 | 5 | 3 | 84 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html | HTML | 82 | 5 | 3 | 90 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_4fef79e7177ba769987a8da36c892c5f.html | HTML | 76 | 5 | 3 | 84 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_63772b626f2709090f0bdca0f40827b4.html | HTML | 72 | 5 | 3 | 80 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_68267d1309a1af8e8297ef4c3efbcdba.html | HTML | 89 | 5 | 3 | 97 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_8a35f475ed9d8a5443c1993b236eb8f6.html | HTML | 72 | 5 | 3 | 80 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_8d5e63337d9bc0375b6fa20fd80d83ec.html | HTML | 72 | 5 | 3 | 80 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_d28a4824dc47e487b107a5db32ef43c4.html | HTML | 105 | 5 | 3 | 113 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dir_d44c64559bbebec7f509842c48db8b23.html | HTML | 85 | 5 | 3 | 93 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\doxygen.css | CSS | 1,260 | 84 | 253 | 1,597 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\dynsections.js | JavaScript | 80 | 7 | 11 | 98 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\example__get_calib_params_file_8cc.html | HTML | 133 | 5 | 6 | 144 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\example__get_depth_frame_8cc.html | HTML | 134 | 5 | 6 | 145 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\example__get_point_cloud_8cc.html | HTML | 132 | 5 | 4 | 141 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\example__get_raw_frame_8cc.html | HTML | 133 | 5 | 6 | 144 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\example__get_rect_frame_8cc.html | HTML | 138 | 5 | 6 | 149 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\files.html | HTML | 88 | 5 | 3 | 96 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\functions.html | HTML | 218 | 5 | 22 | 245 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\functions_func.html | HTML | 210 | 5 | 20 | 235 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\functions_vars.html | HTML | 72 | 5 | 3 | 80 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\globals.html | HTML | 78 | 5 | 3 | 86 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\globals_defs.html | HTML | 69 | 5 | 3 | 77 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\globals_enum.html | HTML | 69 | 5 | 3 | 77 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\globals_func.html | HTML | 72 | 5 | 3 | 80 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\glwindow_8hpp_source.html | HTML | 78 | 5 | 3 | 86 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\graph_legend.html | HTML | 97 | 5 | 3 | 105 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\hierarchy.html | HTML | 88 | 5 | 3 | 96 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\index.html | HTML | 78 | 5 | 3 | 86 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\inherits.html | HTML | 130 | 5 | 3 | 138 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\jquery.js | JavaScript | 9 | 78 | 0 | 87 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\menu.js | JavaScript | 25 | 0 | 2 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\menudata.js | JavaScript | 2 | 0 | 1 | 3 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\scenewindow_8hpp_source.html | HTML | 77 | 5 | 3 | 85 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_0.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_0.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_1.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_1.js | JavaScript | 5 | 0 | 1 | 6 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_2.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_2.js | JavaScript | 6 | 0 | 1 | 7 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_3.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_3.js | JavaScript | 10 | 0 | 1 | 11 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_4.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_4.js | JavaScript | 14 | 0 | 1 | 15 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_5.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_5.js | JavaScript | 8 | 0 | 1 | 9 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_6.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_6.js | JavaScript | 5 | 0 | 1 | 6 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_7.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_7.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_8.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_8.js | JavaScript | 5 | 0 | 1 | 6 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_9.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_9.js | JavaScript | 7 | 0 | 1 | 8 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_a.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_a.js | JavaScript | 26 | 0 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_b.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_b.js | JavaScript | 7 | 0 | 1 | 8 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_c.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_c.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_d.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\all_d.js | JavaScript | 5 | 0 | 1 | 6 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_0.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_0.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_1.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_1.js | JavaScript | 5 | 0 | 1 | 6 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_2.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_2.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_3.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_3.js | JavaScript | 5 | 0 | 1 | 6 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_4.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_4.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_5.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_5.js | JavaScript | 8 | 0 | 1 | 9 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_6.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_6.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_7.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\classes_7.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\defines_0.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\defines_0.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\enums_0.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\enums_0.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\files_0.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\files_0.js | JavaScript | 8 | 0 | 1 | 9 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\files_1.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\files_1.js | JavaScript | 6 | 0 | 1 | 7 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\files_2.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\files_2.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_0.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_0.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_1.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_1.js | JavaScript | 6 | 0 | 1 | 7 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_2.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_2.js | JavaScript | 13 | 0 | 1 | 14 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_3.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_3.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_4.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_4.js | JavaScript | 5 | 0 | 1 | 6 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_5.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_5.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_6.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_6.js | JavaScript | 6 | 0 | 1 | 7 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_7.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_7.js | JavaScript | 20 | 0 | 1 | 21 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_8.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_8.js | JavaScript | 6 | 0 | 1 | 7 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_9.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\functions_9.js | JavaScript | 5 | 0 | 1 | 6 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\nomatches.html | HTML | 12 | 0 | 1 | 13 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\pages_0.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\pages_0.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\search.css | CSS | 220 | 5 | 47 | 272 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\search.js | JavaScript | 688 | 36 | 68 | 792 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\searchdata.js | JavaScript | 15 | 0 | 4 | 19 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\variables_0.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\variables_0.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\variables_1.html | HTML | 21 | 5 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\search\variables_1.js | JavaScript | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\struct___device___point__-members.html | HTML | 92 | 5 | 4 | 101 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\struct___device___point__.html | HTML | 151 | 5 | 3 | 159 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\struct_g_l_window_1_1_system_state-members.html | HTML | 89 | 5 | 4 | 98 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\struct_g_l_window_1_1_system_state.html | HTML | 125 | 5 | 3 | 133 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\struct_p_c_l-members.html | HTML | 72 | 5 | 4 | 81 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\struct_p_c_l.html | HTML | 93 | 5 | 5 | 103 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\structglwindow_1_1_event_handler-members.html | HTML | 84 | 5 | 4 | 93 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\structglwindow_1_1_event_handler.html | HTML | 118 | 5 | 3 | 126 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\structglwindow_1_1_g_l_window_1_1_scoped_context-members.html | HTML | 77 | 5 | 4 | 86 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\structglwindow_1_1_g_l_window_1_1_scoped_context.html | HTML | 101 | 5 | 3 | 109 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\structglwindow_1_1_scene_window_1_1_viewpoint-members.html | HTML | 79 | 5 | 4 | 88 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\structglwindow_1_1_scene_window_1_1_viewpoint.html | HTML | 95 | 5 | 3 | 103 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\html\tabs.css | CSS | 1 | 0 | 1 | 2 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\Makefile | Makefile | 17 | 0 | 5 | 22 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\_stereo_camera_common_8cc.tex | LaTeX | 76 | 0 | 14 | 90 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\_stereo_camera_common_8hpp.tex | LaTeX | 53 | 0 | 8 | 61 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\_system_log_8hpp.tex | LaTeX | 41 | 0 | 8 | 49 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\_unitree_camera_s_d_k_8hpp.tex | LaTeX | 48 | 0 | 8 | 56 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\annotated.tex | LaTeX | 17 | 0 | 1 | 18 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\class_stereo_camera.tex | LaTeX | 778 | 0 | 191 | 969 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\class_system_log.tex | LaTeX | 268 | 0 | 71 | 339 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\class_unitree_camera.tex | LaTeX | 173 | 0 | 49 | 222 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\classglwindow_1_1_event_dispatcher.tex | LaTeX | 61 | 0 | 7 | 68 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\classglwindow_1_1_g_l_window.tex | LaTeX | 111 | 0 | 5 | 116 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\classglwindow_1_1_scene_window.tex | LaTeX | 99 | 0 | 7 | 106 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\classinfo__camera___string.tex | LaTeX | 17 | 0 | 3 | 20 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\classinfo__camera__os.tex | LaTeX | 35 | 0 | 3 | 38 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_209c714a154efd8d40a59e92e6a74502.tex | LaTeX | 2 | 0 | 1 | 3 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_3a56b08581502e42e7c33d229017cb82.tex | LaTeX | 5 | 0 | 1 | 6 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_4eeb864c4eec08c7d6b9d3b0352cfdde.tex | LaTeX | 10 | 0 | 1 | 11 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_4fef79e7177ba769987a8da36c892c5f.tex | LaTeX | 5 | 0 | 1 | 6 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_63772b626f2709090f0bdca0f40827b4.tex | LaTeX | 2 | 0 | 1 | 3 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_68267d1309a1af8e8297ef4c3efbcdba.tex | LaTeX | 15 | 0 | 1 | 16 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_8a35f475ed9d8a5443c1993b236eb8f6.tex | LaTeX | 2 | 0 | 1 | 3 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_8d5e63337d9bc0375b6fa20fd80d83ec.tex | LaTeX | 2 | 0 | 1 | 3 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_d28a4824dc47e487b107a5db32ef43c4.tex | LaTeX | 26 | 0 | 1 | 27 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\dir_d44c64559bbebec7f509842c48db8b23.tex | LaTeX | 11 | 0 | 1 | 12 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\doxygen.sty | TeX | 394 | 53 | 57 | 504 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\example__get_calib_params_file_8cc.tex | LaTeX | 44 | 0 | 15 | 59 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\example__get_depth_frame_8cc.tex | LaTeX | 45 | 0 | 16 | 61 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\example__get_point_cloud_8cc.tex | LaTeX | 59 | 0 | 8 | 67 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\example__get_raw_frame_8cc.tex | LaTeX | 44 | 0 | 15 | 59 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\example__get_rect_frame_8cc.tex | LaTeX | 49 | 0 | 20 | 69 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\files.tex | LaTeX | 15 | 0 | 1 | 16 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\hierarchy.tex | LaTeX | 21 | 0 | 1 | 22 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\index.tex | LaTeX | 40 | 0 | 22 | 62 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\refman.tex | LaTeX | 127 | 12 | 15 | 154 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\struct___device___point__.tex | LaTeX | 82 | 0 | 5 | 87 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\struct_g_l_window_1_1_system_state.tex | LaTeX | 50 | 0 | 3 | 53 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\struct_p_c_l.tex | LaTeX | 24 | 0 | 13 | 37 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\structglwindow_1_1_event_handler.tex | LaTeX | 43 | 0 | 5 | 48 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\structglwindow_1_1_g_l_window_1_1_scoped_context.tex | LaTeX | 25 | 0 | 5 | 30 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\doc\latex\structglwindow_1_1_scene_window_1_1_viewpoint.tex | LaTeX | 21 | 0 | 3 | 24 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_getCalibParamsFile.cc | C++ | 14 | 9 | 5 | 28 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_getDepthFrame.cc | C++ | 26 | 9 | 8 | 43 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_getPointCloud.cc | C++ | 73 | 9 | 16 | 98 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_getRawFrame.cc | C++ | 41 | 9 | 14 | 64 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_getRectFrame.cc | C++ | 39 | 11 | 11 | 61 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_getimagetrans.cc | C++ | 28 | 28 | 7 | 63 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_putImagetrans.cc | C++ | 24 | 85 | 10 | 119 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\example_share.cc | C++ | 24 | 0 | 5 | 29 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\glViewer\glwindow.hpp | C++ | 100 | 2 | 23 | 125 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\glViewer\glwindow_x11.cpp | C++ | 436 | 7 | 76 | 519 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\glViewer\scenewindow.cpp | C++ | 139 | 4 | 39 | 182 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\examples\glViewer\scenewindow.hpp | C++ | 35 | 1 | 14 | 50 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\include\StereoCameraCommon.hpp | C++ | 99 | 534 | 27 | 660 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\include\SystemLog.hpp | C++ | 26 | 135 | 8 | 169 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\include\UnitreeCameraSDK.hpp | C++ | 23 | 126 | 10 | 159 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\src\getimagetrans.cc | C++ | 28 | 16 | 4 | 48 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\src\putimagetrans.cc | C++ | 58 | 37 | 14 | 109 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\stereo_camera_config.yaml | YAML | 66 | 12 | 0 | 78 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\trans_rect_config.yaml | YAML | 66 | 13 | 1 | 80 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\trans_rect_config_0.yaml | YAML | 66 | 12 | 0 | 78 | +| d:\Administrator\Desktop\go1_guide-master\nano\UnitreecameraSDK\trans_rect_config_1.yaml | YAML | 66 | 12 | 0 | 78 | +| d:\Administrator\Desktop\go1_guide-master\nano\kill.sh | Shell Script | 4 | 1 | 2 | 7 | +| d:\Administrator\Desktop\go1_guide-master\nano\picture_processing.py | Python | 24 | 83 | 21 | 128 | +| d:\Administrator\Desktop\go1_guide-master\nano\start.sh | Shell Script | 5 | 2 | 3 | 10 | +| d:\Administrator\Desktop\go1_guide-master\nano\templates\index.html | HTML | 12 | 0 | 2 | 14 | +| d:\Administrator\Desktop\go1_guide-master\nano\trans_rect_config_0.yaml | YAML | 66 | 12 | 1 | 79 | +| d:\Administrator\Desktop\go1_guide-master\nano\trans_rect_config_1.yaml | YAML | 66 | 12 | 1 | 79 | +| d:\Administrator\Desktop\go1_guide-master\nano\webcamera.py | Python | 49 | 2 | 15 | 66 | +| d:\Administrator\Desktop\go1_guide-master\predict.py | Python | 208 | 15 | 55 | 278 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\server_robotcontrol.py | Python | 67 | 1 | 14 | 82 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\start.sh | Shell Script | 1 | 0 | 1 | 2 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree.py | Python | 21 | 0 | 6 | 27 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\README.md | Markdown | 29 | 0 | 9 | 38 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example\example_joystick.cpp | C++ | 62 | 5 | 16 | 83 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example\example_position.cpp | C++ | 122 | 17 | 25 | 164 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example\example_torque.cpp | C++ | 71 | 8 | 16 | 95 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example\example_velocity.cpp | C++ | 72 | 8 | 18 | 98 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example\example_walk.cpp | C++ | 134 | 6 | 17 | 157 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example_py\example_position.py | Python | 81 | 12 | 26 | 119 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example_py\example_torque.py | Python | 44 | 9 | 18 | 71 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example_py\example_velocity.py | Python | 38 | 4 | 17 | 59 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example_py\example_walk.py | Python | 76 | 14 | 30 | 120 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example_py\test.py | Python | 5 | 1 | 2 | 8 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example_py\unitree.py | Python | 21 | 0 | 6 | 27 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\example_py\unitree_python_sdk.py | Python | 42 | 9 | 10 | 61 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\a1_const.h | C++ | 12 | 3 | 4 | 19 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\aliengo_const.h | C++ | 12 | 3 | 4 | 19 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\comm.h | C++ | 172 | 15 | 30 | 217 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\go1_const.h | C++ | 12 | 3 | 4 | 19 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\joystick.h | C++ | 35 | 5 | 4 | 44 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\loop.h | C++ | 42 | 7 | 13 | 62 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\quadruped.h | C++ | 32 | 4 | 15 | 51 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\safety.h | C++ | 19 | 5 | 8 | 32 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\udp.h | C++ | 64 | 17 | 21 | 102 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_legged_sdk\include\unitree_legged_sdk\unitree_legged_sdk.h | C++ | 11 | 3 | 5 | 19 | +| d:\Administrator\Desktop\go1_guide-master\raspberrypi\unitree_python_sdk.py | Python | 42 | 9 | 10 | 61 | +| d:\Administrator\Desktop\go1_guide-master\setup.sh | Shell Script | 4 | 1 | 1 | 6 | +| d:\Administrator\Desktop\go1_guide-master\test.py | Python | 12 | 1 | 5 | 18 | +| Total | | 18,894 | 2,357 | 2,385 | 23,636 | ++----------------------------------------------------------------------------------------------------------------------------------------+--------------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/src/Robot/go1_guide/.gitignore b/src/Robot/go1_guide/.gitignore new file mode 100644 index 0000000..6641f44 --- /dev/null +++ b/src/Robot/go1_guide/.gitignore @@ -0,0 +1,2 @@ +PaddleDetection +__pycache__ diff --git a/src/Robot/go1_guide/README b/src/Robot/go1_guide/README new file mode 100644 index 0000000..00ec587 --- /dev/null +++ b/src/Robot/go1_guide/README @@ -0,0 +1,26 @@ +此项目为 <2022年第15届中国大学生计算机设计大赛 南京决赛区人工智能挑战赛> 参赛使用代码, 部署到 Unitree Go1 机器狗上。 + +感知部分---识别部分---控制部分 +头部Nano---腹部Nano---RaspberryPi +IP: 13 15 161 + +部署&运行: +1. 将nano文件夹移动到头部nano, 执行start.sh, 开启网络摄像头 + (在机器狗局域网中的任何设备都可以通过192.168.123.13:5000/video1获取前向摄像头图像 + 在机器狗局域网中的任何设备都可以通过192.168.123.13:5000/video2获取下巴摄像头图像) +2. 将raspberrypi文件夹移动到RaspberryPi, 执行start.sh, 启动控制服务器 + (用以接收指令,然后通过官方控制SDK来控制机器狗) +3. 将其他文件移动到腹部nano, 执行setup.sh, 安装PaddleDetection + 执行main.py脚本, 开始进行比赛 + (获取网络摄像头的图像, 进行目标检测, 通过识别结果判断下一步的控制, 再发送控制指令给RaspberryPi进行控制机器狗) + + + +参考资料: +GitHub(Unitree Robotics): https://github.com/unitreerobotics +开发知识库 语雀: https://www.yuque.com/ironfatty/nly1un +Unitree Go1 开发指南: https://blog.csdn.net/qq_45779334/article/details/121960667?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-121960667-blog-121993402.pc_relevant_multi_platform_whitelistv1&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-121960667-blog-121993402.pc_relevant_multi_platform_whitelistv1&utm_relevant_index=1 +Go1资料包: https://pan.baidu.com/s/16OexDC4zN85LItv6Z1nXRw 提取码 kehe + + +### 使用的目标检测模型为基于PaddlePaddle的PicoDet, 模型文件在model文件夹中 diff --git a/src/Robot/go1_guide/core/Camera.py b/src/Robot/go1_guide/core/Camera.py new file mode 100644 index 0000000..efde5c9 --- /dev/null +++ b/src/Robot/go1_guide/core/Camera.py @@ -0,0 +1,112 @@ +import cv2 +import time +import os +import numpy as np + +class Camera: + def __init__(self, source=0): + # source = "http://192.168.123.12:8080/?action=stream" + self.cap = cv2.VideoCapture(source) + + def getframe(self): + ret, frame = self.cap.read() + return frame + + def getframe_rgb(self): + ret, frame = self.cap.read() + return cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + + def showframe(self, frame, window_name='result'): + cv2.imshow(window_name, frame) + + def close(self): + self.cap.release() + + def writeframe(self, frame, filename=''): + if filename=='': + filename = './result' + time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime()) + '.jpg' + cv2.imwrite(filename, frame) + + + +# path_imgs = './images' +path_imgs = r'E:/Datasets/WisdomGuide/val' + +class Camera_virtual(): + index = 0 + def __init__(self, path_imgs=path_imgs, imgs_num=-1): + self.path_imgs = path_imgs + self.files = os.listdir(path_imgs)[0:imgs_num] + self.files = list(map(lambda x: path_imgs+os.path.sep+x, self.files)) + self.imgs_num = len(self.files) + # self.frames = [] + # for file in files: + # if not os.path.isdir(file): + # frame = cv2.imread(path_imgs + os.path.sep + file) + # self.frames.append(frame) + return + + def getframe(self): + frame = cv2.imread(self.files[self.index]) + return frame + + def getframe_rgb(self): + frame = cv2.imread(self.files[self.index]) + return cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + + def nextframe(self): + self.index += 1 + if self.index>=self.imgs_num: self.index = 0 + + def get_frame_byte(self): + frame = cv2.imread(self.files[self.index]) + return cv2.imencode('.jpg', frame)[1].tobytes() + + + +# class Camera_rs: +# def __init__(self) -> None: +# import pyrealsense2 as rs + +# # Configure depth and color streams +# self.pipeline = rs.pipeline() +# config = rs.config() +# # Get device product line for setting a supporting resolution +# pipeline_wrapper = rs.pipeline_wrapper(self.pipeline) +# pipeline_profile = config.resolve(pipeline_wrapper) +# device = pipeline_profile.get_device() +# device_product_line = str(device.get_info(rs.camera_info.product_line)) + +# found_rgb = False +# for s in device.sensors: +# if s.get_info(rs.camera_info.name) == 'RGB Camera': +# found_rgb = True +# break +# if not found_rgb: +# print("The demo requires Depth camera with Color sensor") +# exit(0) + +# if device_product_line == 'L500': +# config.enable_stream(rs.stream.color, 960, 540, rs.format.bgr8, 30) +# else: +# config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30) + +# # Start streaming +# self.pipeline.start(config) + + +# def getframe(self): +# frames = self.pipeline.wait_for_frames() +# color_frame = frames.get_color_frame() +# if not color_frame: +# print('Can not get color frame.') +# return False + +# # Convert images to numpy arrays +# frame = np.asanyarray(color_frame.get_data()) # color_image +# return frame + + +# def close(self): +# pass + \ No newline at end of file diff --git a/src/Robot/go1_guide/core/PID.py b/src/Robot/go1_guide/core/PID.py new file mode 100644 index 0000000..c815b7e --- /dev/null +++ b/src/Robot/go1_guide/core/PID.py @@ -0,0 +1,47 @@ + +class PID(): + def __init__(self, dt, max, min, Kp, Kd, Ki): + self.dt = dt # 循环时长 + self.max = max # 操作变量最大值 + self.min = min # 操作变量最小值 + self.Kp = Kp # 比例增益 + self.Kd = Kd # 微分增益 + self.Ki = Ki # 积分增益 + self.integral = 0 # 直到上一次的误差值 + self.pre_error = 0 # 上一次的误差值 + + def calculate(self, setPoint, pv): + # 其中 pv:process value 即过程值, + error = setPoint - pv # 误差 + Pout = self.Kp * error # 比例项 + self.integral += error * self.dt + Iout = self.Ki * self.integral # 积分项 + derivative = (error - self.pre_error)/self.dt + Dout = self.Kd * derivative # 微分项 + + output = Pout + Iout + Dout # 新的目标值 + + if(output > self.max): + output = self.max + elif(output < self.min): + output = self.min + + self.pre_error = error # 保存本次误差,以供下次计算 + return output + + + +if __name__ == '__main__': + import matplotlib.pyplot as plt + t = range(150) + pid = PID(0.1, 100, -100, 0.1, 0.01, 0.5) + val = 20 + z = [] + for i in t: + inc = pid.calculate(0, val) + print("val:{} inc:{}".format(val,inc)) + z.append(20-val) + val += inc + plt.figure(figsize=(8,6), dpi = 80) + plt.plot(t,z,color="blue",linewidth=1.0,linestyle="-") + plt.show() \ No newline at end of file diff --git a/src/Robot/go1_guide/core/capture.py b/src/Robot/go1_guide/core/capture.py new file mode 100644 index 0000000..2992292 --- /dev/null +++ b/src/Robot/go1_guide/core/capture.py @@ -0,0 +1,64 @@ +"""capture class""" +import cv2 + + +class CaptureInterface(object): + """base class of capture""" + def start(self): + """start""" + raise NotImplementedError + + def stop(self): + """stop""" + raise NotImplementedError + + def getType(self): + """getType""" + raise NotImplementedError + + def getFrame(self): + """getFrame""" + raise NotImplementedError + + def run(self): + """run""" + raise NotImplementedError + + +class USBCamera(CaptureInterface): + """usb cam wrapper""" + def __init__(self, dev, type_='usb_camera', size=[928,800]): + """init""" + self.dev_type = type_ + self.dev_name = dev + self.size = size + # dev_ = int(dev.split("/")[-1][5:]) + dev_ = dev + self.cap = cv2.VideoCapture(dev_) + self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, self.size[0]) + self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, self.size[1]) + + def start(self): + """start""" + self.cap = cv2.VideoCapture(self.dev_name) + self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, self.size[0]) + self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, self.size[1]) + if self.cap is None: + return -1 + return 0 + + def stop(self): + """stop""" + self.cap.release() + return 0 + + def getFrame(self): + """getFrame""" + _, frame = self.cap.read() + return frame + + def getType(self): + """getType""" + return self.dev_type + + diff --git a/src/Robot/go1_guide/core/color_detection.py b/src/Robot/go1_guide/core/color_detection.py new file mode 100644 index 0000000..4ee3911 --- /dev/null +++ b/src/Robot/go1_guide/core/color_detection.py @@ -0,0 +1,39 @@ +import cv2 +import numpy as np + + +color_lower = np.array([65, 130, 60], np.uint8) +color_upper = np.array([77, 170, 150], np.uint8) + +while True: + max_x = 0 + max_center = -1 + + color_frame = None #frame + + # Convert images to numpy arrays + color_image = np.asanyarray(color_frame.get_data()) + hsvFrame = cv2.cvtColor(color_image, cv2.COLOR_BGR2HSV) + color_mask = cv2.inRange(hsvFrame, color_lower, color_upper) + + kernal = np.ones((5, 5), "uint8") + color_mask = cv2.dilate(color_mask, kernal) + res = cv2.bitwise_and(color_image, color_image, mask = color_mask) + + # Creating contour to track red color + contours, hierarchy = cv2.findContours(color_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) + area = max(contours,key = cv2.contourArea) + x, y, w, h = cv2.boundingRect(area) + color_image = cv2.rectangle(color_image, + (x, y), + (x + w, y + h), + (0, 0, 255), 2) + + x_center = x + int(w/2) + y_center = y + int(h/2) + cv2.imshow("Color Detection in Real-Time", color_image) + + waitkey = cv2.waitKey(1) + if waitkey==ord('q'): break + +cv2.destroyAllWindows() diff --git a/src/Robot/go1_guide/core/getcolor.py b/src/Robot/go1_guide/core/getcolor.py new file mode 100644 index 0000000..1443693 --- /dev/null +++ b/src/Robot/go1_guide/core/getcolor.py @@ -0,0 +1,14 @@ +import cv2 +import numpy as np + +def mouseColor(event, x, y, flags, param): + if event == cv2.EVENT_LBUTTONDOWN: + print('HSV:', hsv[y, x]) + +img = cv2.imread('shot0.jpg') +hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) +cv2.namedWindow("Color Picker") +cv2.setMouseCallback("Color Picker", mouseColor) +cv2.imshow("Color Picker", img) +if cv2.waitKey(0): + cv2.destroyAllWindows() \ No newline at end of file diff --git a/src/Robot/go1_guide/core/picture_processing.py b/src/Robot/go1_guide/core/picture_processing.py new file mode 100644 index 0000000..0cf7496 --- /dev/null +++ b/src/Robot/go1_guide/core/picture_processing.py @@ -0,0 +1,128 @@ +import cv2 +import numpy as np +# from capture import USBCamera + +# def saveFrame(): +# capture = USBCamera("/dev/video0") +# frame = capture.getFrame() +# cv2.imwrite('capture.png', frame) + + +# import numpy as np +# import glob +# size = [480,400] +# def get_K_and_D(checkerboard, imgsPath): +# CHECKERBOARD = checkerboard +# subpix_criteria = (cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER, 30, 0.1) +# calibration_flags = cv2.fisheye.CALIB_RECOMPUTE_EXTRINSIC+cv2.fisheye.CALIB_CHECK_COND+cv2.fisheye.CALIB_FIX_SKEW +# objp = np.zeros((1, CHECKERBOARD[0]*CHECKERBOARD[1], 3), np.float32) +# objp[0,:,:2] = np.mgrid[0:CHECKERBOARD[0], 0:CHECKERBOARD[1]].T.reshape(-1, 2) +# _img_shape = None +# objpoints = [] +# imgpoints = [] +# images = glob.glob(imgsPath + '/*.png') +# for fname in images: +# img = cv2.imread(fname) +# img = cv2.resize(img, size) +# if _img_shape == None: +# _img_shape = img.shape[:2] +# else: +# assert _img_shape == img.shape[:2], "All images must share the same size." + +# gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) +# ret, corners = cv2.findChessboardCorners(gray, CHECKERBOARD,cv2.CALIB_CB_ADAPTIVE_THRESH+cv2.CALIB_CB_FAST_CHECK+cv2.CALIB_CB_NORMALIZE_IMAGE) +# if ret == True: +# objpoints.append(objp) +# cv2.cornerSubPix(gray,corners,(3,3),(-1,-1),subpix_criteria) +# imgpoints.append(corners) +# N_OK = len(objpoints) +# K = np.zeros((3, 3)) +# D = np.zeros((4, 1)) +# rvecs = [np.zeros((1, 1, 3), dtype=np.float64) for i in range(N_OK)] +# tvecs = [np.zeros((1, 1, 3), dtype=np.float64) for i in range(N_OK)] +# rms, _, _, _, _ = \ +# cv2.fisheye.calibrate( +# objpoints, +# imgpoints, +# gray.shape[::-1], +# K, +# D, +# rvecs, +# tvecs, +# calibration_flags, +# (cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER, 30, 1e-6) +# ) +# DIM = _img_shape[::-1] +# print("Found " + str(N_OK) + " valid images for calibration") +# print("DIM=" + str(_img_shape[::-1])) +# print("K=np.array(" + str(K.tolist()) + ")") +# print("D=np.array(" + str(D.tolist()) + ")") +# return DIM, K, D + + +# def OpenCVFisheyeImageUndistortion(img): + # cv::Mat img, undistortImg + # cv::Matx33d K, P + # cv::Vec4d D + # cv::Mat mapX, mapY + + # K(0, 0) = 348.52; K(0, 1) = 0; K(0, 2) = 640.19 + # K(1, 0) = 0; K(1, 1) = 348.52; K(1, 2) = 358.56 + # K(2, 0) = 0; K(2, 1) = 0; K(2, 2) = 1 + + # D(0) = 0.066258 + # D(1) = 0.039769 + # D(2) = -0.026906 + # D(3) = 0.003342 + + # P = K + # P(0, 0) /= 1.5 + # P(1, 1) /= 1.5 + + # K = [[348.52, 0, 640.19], + # [0, 348.52, 358.56], + # [0, 0, 1]] + # D = [0.066258, 0.039769, -0.026906, 0.003342] + # cv2.initUndistortRectifyMap(K, D, cv::Matx33d::eye(), P, cv::Size(img.cols, img.rows), CV_16SC2, mapX, mapY) + + # cv::remap(img, undistortImg, mapX, mapY, CV_INTER_LINEAR) + # cv::imshow("src", img) + # cv::imshow("corrected", undistortImg) + + + +# DIM = (480, 400) +# K = np.array([[122.87238744667862, 0.0, 220.28343964853087], +# [0.0, 120.60935347262523, 203.74634232157828], +# [0.0, 0.0, 1.0]]) +# D = np.array([[0.06701341388742599], [0.1906721369775406], [-0.2568929474339438], [0.09063021944980182]]) +DIM = (640,480) +K = np.array([[182.2034195269173, 0.0, 248.72241643510006], + [0.0, 200.88841301751464, 195.87207910703572], + [0.0, 0.0, 1.0]]) +D = np.array([[0.12236488620142214], [-0.053849293887633265], [0.03508527000849206], [-0.011661429257952398]]) + +def undistort(img, DIM=DIM, K=K, D=D): + # img = cv2.resize(img, DIM) + map1, map2 = cv2.fisheye.initUndistortRectifyMap(K, D, np.eye(3), K, DIM,cv2.CV_16SC2) + undistorted_img = cv2.remap(img, map1, map2, interpolation=cv2.INTER_LINEAR,borderMode=cv2.BORDER_CONSTANT) + return undistorted_img + + +def get_img_middle(img, size=[640,480]): + top = int((img.shape[0] - size[1]) / 2) + bottom = top + size[1] + left = int((img.shape[1] - size[0]) / 2) + right = left + size[0] + return img[top:bottom, left:right] + + + + +if __name__ == "__main__": + capture = USBCamera("/dev/video0") + frame = capture.getFrame() + frame = cv2.resize(frame, DIM) + map1, map2 = cv2.fisheye.initUndistortRectifyMap(K, D, np.eye(3), K, DIM,cv2.CV_16SC2) + undistorted_img = cv2.remap(img, map1, map2, interpolation=cv2.INTER_LINEAR,borderMode=cv2.BORDER_CONSTANT) + cv2.imwrite('unfisheyeImage.png', undistorted_img) \ No newline at end of file diff --git a/src/Robot/go1_guide/core/robot_connector.py b/src/Robot/go1_guide/core/robot_connector.py new file mode 100644 index 0000000..85425db --- /dev/null +++ b/src/Robot/go1_guide/core/robot_connector.py @@ -0,0 +1,17 @@ +import socket +import json + + +class RobotConnector(): + def __init__(self, ip_address='192.168.123.161', port=8000): + address_server = (ip_address, port) + self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.s.connect(address_server) + + def robot_high_control(self, mode=2, gaitType=0, speedLevel=0, + footRaiseHeight=0, bodyHeight=0, + euler=[0,0,0], velocity=[0,0], yawSpeed=0.0, reverve=0): + data = [mode, gaitType, speedLevel, footRaiseHeight, bodyHeight, euler, velocity, yawSpeed, reverve] + data = json.dumps(data) + self.s.send(bytes(data.encode('utf-8'))) + diff --git a/src/Robot/go1_guide/core/shot.py b/src/Robot/go1_guide/core/shot.py new file mode 100644 index 0000000..ca50134 --- /dev/null +++ b/src/Robot/go1_guide/core/shot.py @@ -0,0 +1,25 @@ +import cv2 + +t = 1 +video = 'http://192.168.123.13:5000/video2' +capture = cv2.VideoCapture(video) + +t = 5 +while True: + # if capture.isOpened(): + # _, frame = capture.read() + # cv2.imshow("video", frame) + + _, frame = capture.read() + t -= 1 + if not t: + cv2.imwrite("shot0.jpg", frame) + break + + # waitkey = cv2.waitKey(1) + # if waitkey == ord('q'): break + # if waitkey == ord(' '): + # cv2.imwrite("shot{}.png".format(t), frame) + # t += 1 + +capture.release() diff --git a/src/Robot/go1_guide/main.py b/src/Robot/go1_guide/main.py new file mode 100644 index 0000000..5c2b7c7 --- /dev/null +++ b/src/Robot/go1_guide/main.py @@ -0,0 +1,229 @@ + +## frame.shape : [480, 640, 3] + +min_speed, max_speed = 0.05, 0.28 #0.28 + +import time +import cv2 + +from predict import predicter +predictor = predicter() + +from core.robot_connector import RobotConnector +robot = RobotConnector(ip_address='192.168.123.161', port=8000) + +from core.PID import PID +# pid_velocity0 = PID(0.1, 0.2, 0.0, 0.01, 0.00, 0.00) # dt循环时长, max操作变量最大值, min操作变量最小值, Kp比例增益, Kd积分增益, Ki微分增益 +# pid_velocity1 = PID(0.1, 0.2, -0.2, 0.10, 0.10, 0.00) +pid_yaw = PID(0.1, 1.2, -1.2, 0.018, 0.01, 0.00) + +from core.Camera import Camera +vedio1 = Camera("http://192.168.123.13:5000/video1") +vedio2 = Camera("http://192.168.123.13:5000/video2") + +# IpLastSegment = "15" +# udpstrPrevData = "udpsrc address=192.168.123."+ IpLastSegment + " port=" +# ## 端口: 前方, 下巴, 左, 右, 腹部 +# udpPORT = [9201, 9202, 9203, 9204, 9205] [1] +# udpstrBehindData = " ! application/x-rtp,media=video,encoding-name=H264 ! rtph264depay ! h264parse ! omxh264dec ! videoconvert ! appsink" +# udpSendIntegratedPipe = udpstrPrevData + udpPORT + udpstrBehindData +# print('udpSendIntegratedPipe:', udpSendIntegratedPipe) +# vedio2 = Camera(udpSendIntegratedPipe) + +def save(img, result, name): + if result: + x, y, w, h = result + img = cv2.rectangle(img, + (x, y), + (x + w, y + h), + (0, 0, 255), 2) + cv2.imwrite(name+'.jpg', img) + print('saved') + + +def get_object(bboxes, object, square=None): + for box in bboxes: + if box['type']==object: + if square and box['w']*box['h']>square: + return box['x'], box['y'], box['w'], box['h'] + return None + + +def cross(): + while True: + frame1 = vedio1.getframe() + bboxes = predictor.predict(frame1) + result = get_object(bboxes, 'green_light') + if result: + save(frame1, result, 'green') + break + for i in range(12): + time.sleep(0.2) + robot.robot_high_control(velocity=[max_speed, 0.0], yawSpeed=0.0) + while True: + frame2 = vedio2.getframe() + bboxes = predictor.predict(frame2) + result = get_object(bboxes, 'blind_path') + if result: + break + else: + robot.robot_high_control(velocity=[max_speed, 0.0], yawSpeed=0.0) + + +def obstacle(): + while True: + frame1 = vedio1.getframe() + bboxes = predictor.predict(frame1) + result = get_object(bboxes, 'block', square=250000) #300000 + if result: + break + robot.robot_high_control(velocity=[0.12, 0.00], yawSpeed=0.00) + print('adjustment...') + for i in range(15): + time.sleep(0.2) + robot.robot_high_control(velocity=[0.00, -0.20], yawSpeed=0.00) + for i in range(7): + time.sleep(0.2) + robot.robot_high_control(velocity=[0.20, 0.00], yawSpeed=0.00) + for i in range(5): + time.sleep(0.2) + robot.robot_high_control(velocity=[0.00, 0.00], yawSpeed=0.58) + for i in range(15): + time.sleep(0.2) + robot.robot_high_control(velocity=[0.2, 0.00], yawSpeed=0.00) + for i in range(5): + time.sleep(0.2) + robot.robot_high_control(velocity=[0.00, 0.00], yawSpeed=-0.55) + + +def step(): + for i in range(6): + time.sleep(0.2) + robot.robot_high_control(velocity=[0.20, 0.00], yawSpeed=0.00, footRaiseHeight=0.12) + for i in range(10): + time.sleep(0.2) + robot.robot_high_control(velocity=[max_speed, 0.00], yawSpeed=0.00) + while True: + frame2 = vedio2.getframe() + bboxes = predictor.predict(frame2) + result = get_object(bboxes, 'blind_path') + if result: + break + else: + robot.robot_high_control(velocity=[0.20, 0.00], yawSpeed=0.00) + + +def end(): + for i in range(15): + time.sleep(0.2) + robot.robot_high_control(velocity=[0.20, 0.00], yawSpeed=-0.65) + + + + +def walk_along(): + items = [0, 0, 0, 0] + h_frame, w_frame = vedio2.getframe().shape[0:2] + x_center = 0 + while True: + frame1 = vedio1.getframe() + frame2 = vedio2.getframe() + bboxes1 = predictor.predict(frame1) + bboxes2 = predictor.predict(frame2) + + if not items[0]: + # frame_ = frame2[0:int(h_frame/2), :] + result = get_object(bboxes2, 'crossing') + if result: + save(frame2, result, 'cross') + print('cross...') + cross() + print('crossed') + x_center = w_frame/2 + items[0] = 1 + continue + + if not items[1]: + result = get_object(bboxes1, 'block', square=10000) + if result: + print('obstacle...') + obstacle() + print('obstacled') + x_center = w_frame/2 + items[1] = 1 + continue + + if not items[2]: + result = get_object(bboxes2, 'step') + if result: + save(frame2, result, 'step') + print('step...') + step() + print('steped') + x_center = w_frame/2 + items[2] = 1 + continue + + if not items[3] and all(items[:-2]): + result = get_object(bboxes2, 'red') + if result: + save(frame2, result, 'red') + print('end...') + end() + print('END!!!') + break + + result = get_object(bboxes2, 'blind_path') + if result: + x, y, w, h = result + x_center = x + int(w/2) + y_center = y + int(h/2) + + # color_image = cv2.rectangle(color_image, + # (x, y), + # (x + w, y + h), + # (0, 0, 255), 2) + # color_image = cv2.circle(color_image, + # (x_center,y_center), + # 1, + # (0, 0, 255), 4) + # color_image = cv2.line(color_image, + # (int(w_frame/2), 0), + # (int(w_frame/2), h_frame), + # (0, 255, 0), 2) + + + velocity = [0.0, 0.0] + yawspeed = 0.0 + + deviation = abs(w_frame/2 - x_center) + velocity[0] = max_speed-(max_speed-min_speed)*(deviation/(w_frame/2)) + yawspeed = pid_yaw.calculate(0, x_center - w_frame/2) + # print('{}, {}'.format(x_center ,yawspeed)) + + robot.robot_high_control(velocity=velocity, yawSpeed=yawspeed) + + + waitkey = cv2.waitKey(1) + if waitkey==ord('q'): break + + # cap.release() + + +def go(n): + for i in range(n): + time.sleep(0.2) + robot.robot_high_control(velocity=[max_speed, 0.0], yawSpeed=0.0) + + + +frame1, frame2 = None, None +print('go...') +go(10) +print('walk...') +walk_along() +frame1, frame2 = None, None + +while True: + time.sleep(0.2) + robot.robot_high_control(bodyHeight=-1.8) diff --git a/src/Robot/go1_guide/model/picodet_l_416_coco_lcnet/infer_cfg.yml b/src/Robot/go1_guide/model/picodet_l_416_coco_lcnet/infer_cfg.yml new file mode 100644 index 0000000..9152a42 --- /dev/null +++ b/src/Robot/go1_guide/model/picodet_l_416_coco_lcnet/infer_cfg.yml @@ -0,0 +1,31 @@ +mode: paddle +draw_threshold: 0.5 +metric: COCO +use_dynamic_shape: false +arch: GFL +min_subgraph_size: 3 +Preprocess: +- interp: 2 + keep_ratio: false + target_size: + - 416 + - 416 + type: Resize +- type: Permute +label_list: +- blind_path +- green_light +- block +- no_light +- red_light +NMS: + keep_top_k: 100 + name: MultiClassNMS + nms_threshold: 0.5 + nms_top_k: 1000 + score_threshold: 0.3 +fpn_stride: +- 8 +- 16 +- 32 +- 64 diff --git a/src/Robot/go1_guide/model/picodet_l_416_coco_lcnet/model.pdiparams b/src/Robot/go1_guide/model/picodet_l_416_coco_lcnet/model.pdiparams new file mode 100644 index 0000000..d53c5ef Binary files /dev/null and b/src/Robot/go1_guide/model/picodet_l_416_coco_lcnet/model.pdiparams differ diff --git a/src/Robot/go1_guide/model/picodet_l_416_coco_lcnet/model.pdiparams.info b/src/Robot/go1_guide/model/picodet_l_416_coco_lcnet/model.pdiparams.info new file mode 100644 index 0000000..dbd2d91 Binary files /dev/null and b/src/Robot/go1_guide/model/picodet_l_416_coco_lcnet/model.pdiparams.info differ diff --git a/src/Robot/go1_guide/model/picodet_l_416_coco_lcnet/model.pdmodel b/src/Robot/go1_guide/model/picodet_l_416_coco_lcnet/model.pdmodel new file mode 100644 index 0000000..6ff7627 Binary files /dev/null and b/src/Robot/go1_guide/model/picodet_l_416_coco_lcnet/model.pdmodel differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/CMakeLists.txt b/src/Robot/go1_guide/nano/UnitreecameraSDK/CMakeLists.txt new file mode 100644 index 0000000..3a580ec --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/CMakeLists.txt @@ -0,0 +1,34 @@ +cmake_minimum_required( VERSION 2.8 ) +project( UnitreeCameraSDK ) + +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bins/) + +find_package(OpenCV 4 REQUIRED) +if(OpenCV_FOUND) + include_directories(${OpenCV_INCLUDE_DIR}) + message(STATUS "OpenCV ${OpenCV_VERSION} FOUND") + message(STATUS ${OpenCV_LIBS}) + if(${OpenCV_VERSION_MAJOR} EQUAL 4) + add_definitions(-DOPENCV_VERSION_4) + elseif(${OpenCV_VERSION_MAJOR} LESS 4) + add_definitions(-DOPENCV_VERSION_3) + endif() +else() + message(FATAL_ERROR "OpenCV Library Not Found") +endif() + +if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64") +set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib/amd64/) +link_directories(${PROJECT_SOURCE_DIR}/lib/amd64/) +else() +set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib/arm64/) +link_directories(${PROJECT_SOURCE_DIR}/lib/arm64/) +endif() + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread") +include_directories(${PROJECT_SOURCE_DIR}/include) + +set(SDKLIBS unitree_camera tstc_V4L2_xu_camera udev systemlog ${OpenCV_LIBS}) + +add_subdirectory(${PROJECT_SOURCE_DIR}/src) + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/LICENSE b/src/Robot/go1_guide/nano/UnitreecameraSDK/LICENSE new file mode 100644 index 0000000..a612ad9 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/README.md b/src/Robot/go1_guide/nano/UnitreecameraSDK/README.md new file mode 100644 index 0000000..2c2efab --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/README.md @@ -0,0 +1,84 @@ +Introduction +--- +Unitree Robotics is a energetic start-up company that focuses on the development, production and sales of high-performance quadruped robots. It has been interviewed by BBC and CCTV, and is one of the earliest company to publicly sell quadruped robots. + +The company has an outstanding leadership in developing robot core components, motion control, robot perception, etc. + +We attaches great importance to research and development, and thus independently developed the motors, reducers, controllers, and even some sensors of the quadruped robot. + +1.Overview +--- +UnitreeCameraSDK 1.1.0 is a cross-platform library for unitree stereo cameras + +The SDK allows depth and color streaming, and provides intrinsic calibration information. The library also offers pointcloud, depth image aligned to color image. + +2.Dependencies +--- + +OpenCV, version: equal or lager than 4 (need gstreamer) + +CMake, version: 2.8 or higher + +[OpenGL] for point cloud gui + +[GLUT] for point cloud gui + +[X11], for point cloud gui + +2.Build +--- + +``` +cd UnitreeCameraSDK; +mkdir build && cd build; +cmake ..; make +``` + +3.Run Examples +--- + +Get Camera Raw Frame: +``` +cd UnitreeCameraSDK; +./bin/example_getRawFrame +``` + +Get Calibration Parameters File +``` +cd UnitreeCameraSDK; +./bin/example_getCalibParamsFile +``` + +Get Rectify Frame +``` +cd UnitreeCameraSDK; +./bin/example_getRectFrame +``` + +Get Depth Frame +``` +cd UnitreeCameraSDK; +./bin/example_getDepthFrame +``` + +Get Point Cloud: +``` +cd UnitreeCameraSDK; +./bin/example_getPointCloud +``` + +4.send image and listen image +sender:put image to another devices +``` +cd UnitreeCameraSDK; +./bin/example_putImagetrans +``` + +listener:get image from another devices +``` +cd UnitreeCameraSDK; +./bin/example_getimagetrans +``` + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc.html new file mode 100644 index 0000000..d33521b --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc.html @@ -0,0 +1,162 @@ + + + + + + + +UnitreeCameraSDK: src/StereoCameraCommon.cc File Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Typedefs | +Enumerations | +Functions
+
+
StereoCameraCommon.cc File Reference
+
+
+ +

This file is part of UnitreeCameraSDK, which implement stereo vision algorithm. +More...

+
#include "StereoCameraCommon.hpp"
+#include <unistd.h>
+#include <sys/shm.h>
+
+Include dependency graph for StereoCameraCommon.cc:
+
+
+ + + + +
+
+ + + +

+Typedefs

+typedef enum ImageRect ImageRectType
 
+ + + + +

+Enumerations

enum  ImageRect { RECT_FISHEYE = 0, +RECT_LONGLAT, +RECT_PERSPECTIVE + }
 This enum is used for stereo images rectification. More...
 
+ + + + + + + + + + + + + + + +

+Functions

+double MatRowMul (cv::Mat m, double x, double y, double z, int r)
 
+int convertRawFisheyeImage (cv::Mat &left, cv::Mat &right, float da=0.0, float db=-32.0, float dcx=0.0, float dcy=0.0)
 
+int convertRawFisheyeImage (int radius, cv::Mat &left, cv::Mat &right)
 
+bool initRectifyMap (cv::Mat K, cv::Mat D, cv::Mat R, cv::Mat Knew, double xi0, double xi1, cv::Size size, int mode, cv::Mat &map1, cv::Mat &map2)
 
+uchar getBlueSegVal (float minv, float maxv, float curv)
 
+uchar getGreenSegVal (float minv, float maxv, float curv)
 
+uchar getRedSegVal (float minv, float maxv, float curv)
 
+

Detailed Description

+

This file is part of UnitreeCameraSDK, which implement stereo vision algorithm.

+

image capture, image rectification, disparity computation, point cloud generation

Author
ZhangChunyang create date 2021.07.31
+
Version
1.0.1
+ +

Enumeration Type Documentation

+ +

◆ ImageRect

+ +
+
+ + + + +
enum ImageRect
+
+ +

This enum is used for stereo images rectification.

+

FISHEYE and LONGLAT for fisheye camera model, PERSPECTIVE for pinhole cameras

Note
used for differen camera models
+
Attention
make sure camera model is matched.
+ +
+
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc__incl.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc__incl.map new file mode 100644 index 0000000..b3373c3 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc__incl.md5 new file mode 100644 index 0000000..c233b3d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc__incl.md5 @@ -0,0 +1 @@ +57fa0654752fd2d6c6272d1d713d3832 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc__incl.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc__incl.png new file mode 100644 index 0000000..13098f2 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8cc__incl.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp.html new file mode 100644 index 0000000..181941b --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp.html @@ -0,0 +1,138 @@ + + + + + + + +UnitreeCameraSDK: include/StereoCameraCommon.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Typedefs
+
+
StereoCameraCommon.hpp File Reference
+
+
+ +

This file is part of UnitreeCameraSDK, which declare stereo camera algorithm APIs. +More...

+
#include <string>
+#include <thread>
+#include <mutex>
+#include <condition_variable>
+#include <opencv2/opencv.hpp>
+#include <chrono>
+#include "SystemLog.hpp"
+
+Include dependency graph for StereoCameraCommon.hpp:
+
+
+ + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

struct  PCL
 this struct is used for RGB point cloud capture and display More...
 
class  StereoCamera
 this class integrate camera control and stereo vision algorithm More...
 
+ + + +

+Typedefs

+typedef struct PCL PCLType
 
+

Detailed Description

+

This file is part of UnitreeCameraSDK, which declare stereo camera algorithm APIs.

+

image capture, image rectification, disparity computation, depth image and point cloud generation

Author
ZhangChunyang
+
Date
2021.07.31
+
Version
1.0.1
+ +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__dep__incl.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__dep__incl.map new file mode 100644 index 0000000..48dc27e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__dep__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__dep__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__dep__incl.md5 new file mode 100644 index 0000000..3dd816b --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +aa4f2b92d31e72bd1c10fbe90d80df31 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__dep__incl.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__dep__incl.png new file mode 100644 index 0000000..bec8471 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__dep__incl.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__incl.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__incl.map new file mode 100644 index 0000000..f7d7977 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__incl.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__incl.md5 new file mode 100644 index 0000000..1386ee7 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__incl.md5 @@ -0,0 +1 @@ +3e051c090d4d328e3aa44db8a31d0f5b \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__incl.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__incl.png new file mode 100644 index 0000000..f0b5919 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp__incl.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp_source.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp_source.html new file mode 100644 index 0000000..1d7816b --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_stereo_camera_common_8hpp_source.html @@ -0,0 +1,85 @@ + + + + + + + +UnitreeCameraSDK: include/StereoCameraCommon.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
StereoCameraCommon.hpp
+
+
+Go to the documentation of this file.
1 
10 #ifndef __STEREO_CAMERA_COMMOM_HPP__
11 #define __STEREO_CAMERA_COMMOM_HPP__
12 
13 #include <string>
14 #include <thread>
15 #include <mutex>
16 #include <condition_variable>
17 #include <opencv2/opencv.hpp>
18 #include <chrono>
19 #include "SystemLog.hpp"
20 
28 typedef struct PCL {
29  cv::Vec3f pts;
30  cv::Vec3b clr;
31 }PCLType;
39 {
40 private:
47  typedef struct TimeFrame{
48  cv::Mat data1;
49  cv::Mat data2;
50  std::chrono::microseconds timeStamp;
51  }TimeFrameType;
52 
53 private:
54  int m_radius = 0;
55  int m_algorithm = 0;
56  int m_logLevel = 1;
57  int m_deviceNode = 0;
58  int m_posNumber = 0;
59  int m_serialNumber = 0;
60  int m_threshold = 120;
61  float m_frameRate = 30.0;
62  int m_ipLastSegment = 15;
63 
64  bool m_shareMemSupport = false;
65  bool m_udpH264Support = false;
66  bool m_isOpened = false;
67  bool m_isCompute = false;
68 
69  cv::Size m_frameSize;
70  cv::Size m_rectSize;
71 
72  TimeFrameType m_stampFrame, m_dispFrame;
73 
74  cv::Mat m_leftXi,m_leftRotation,m_leftIntrinsic,m_leftDistortion;
75  cv::Mat m_rightXi,m_rightRotation,m_rightIntrinsic,m_rightDistortion;
76  cv::Mat m_translation;
77 
78  cv::Mat m_kfe, m_fmap[2], m_lmap[2][2], m_lagerFmap[2];
79 
80  SystemLog *m_log = nullptr;
81  std::string m_logName = "StereoCamera";
82 
83  std::mutex m_capLock, m_dispLock;
84  std::condition_variable m_capTrigger, m_dispTrigger;
85 
86  cv::VideoCapture *m_videoCap = nullptr;
87 
88  std::thread *m_capWorker = nullptr;
89  std::thread *m_dispWorker = nullptr;
90 
91 public:
104  StereoCamera(void);
118  StereoCamera(std::string fileName);
132  StereoCamera(int deviceNode);
142  virtual ~StereoCamera();
143 
144 public:
159  virtual bool isOpened(void);
172  virtual bool setLogLevel(int level);
185  virtual bool setPosNumber(int posNumber);
198  virtual bool setSerialNumber(int serialNumber);
211  virtual bool setRawFrameRate(int frameRate);
225  virtual bool setRawFrameSize(cv::Size frameSize);
240  virtual bool setRectFrameSize(cv::Size frameSize);
257  virtual bool setCalibParams(std::vector<cv::Mat> paramsArray, bool flag = false);
270  virtual int getLogLevel(void) const;
283  virtual int getDeviceNode(void) const;
296  virtual int getPosNumber(void) const;
309  virtual int getSerialNumber(void) const;
321  virtual float getRawFrameRate(void) const;
333  virtual cv::Size getRawFrameSize(void) const;
349  virtual bool getRawFrame(cv::Mat &frame, std::chrono::microseconds &timeStamp);
370  virtual bool getStereoFrame(cv::Mat &left, cv::Mat &right, std::chrono::microseconds &timeStamp);
391  virtual bool getDepthFrame(cv::Mat& depth, bool color, std::chrono::microseconds &timeStamp);
412  virtual bool getPointCloud(std::vector<cv::Vec3f> &pcl, std::chrono::microseconds &timeStamp);
434  virtual bool getPointCloud(std::vector<PCLType>& pcl, std::chrono::microseconds& timeStamp);
453  virtual bool getCalibParams(std::vector<cv::Mat> &paramsArray, bool flag = false);
473  virtual bool getRectStereoFrame(cv::Mat &left, cv::Mat &right, cv::Mat &feim);
495  virtual bool getRectStereoFrame(cv::Mat &left, cv::Mat &right, cv::Mat &feim, std::chrono::microseconds &timeStamp);
511  virtual bool loadConfig(std::string fileName);
528  virtual bool loadCalibParams(std::string fileName);
541  virtual bool saveConfig(std::string fileName = "stereo_camera_config.yaml");
554  virtual bool saveCalibParams(std::string fileName = "stereo_camera_calibparams.yaml");
573  virtual bool startCapture(bool udpFlag = false, bool shmFlag = false);
588  virtual bool startStereoCompute(void);
603  virtual bool stopStereoCompute(void);
620  virtual bool stopCapture(void);
621 };
622 
623 #endif //__STEREO_CAMERA_COMMOM_HPP__
This file is part of UnitreeCameraSDK, which declare the APIs of log system.
+
this class integrate camera control and stereo vision algorithm
Definition: StereoCameraCommon.hpp:38
+
cv::Vec3f pts
points coordinates (x, y, z)
Definition: StereoCameraCommon.hpp:29
+
cv::Vec3b clr
points color (b, g, r)
Definition: StereoCameraCommon.hpp:30
+
Definition: SystemLog.hpp:18
+
this struct is used for RGB point cloud capture and display
Definition: StereoCameraCommon.hpp:28
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp.html new file mode 100644 index 0000000..9a37376 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp.html @@ -0,0 +1,123 @@ + + + + + + + +UnitreeCameraSDK: include/SystemLog.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes
+
+
SystemLog.hpp File Reference
+
+
+ +

This file is part of UnitreeCameraSDK, which declare the APIs of log system. +More...

+
#include <stdarg.h>
+#include <stdio.h>
+#include <string>
+
+Include dependency graph for SystemLog.hpp:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  SystemLog
 
+

Detailed Description

+

This file is part of UnitreeCameraSDK, which declare the APIs of log system.

+

The log system is used for unified management of the output information of the special system.

Author
ZhangChunyang
+
Date
2021.07.31
+
Version
1.0.1
+ +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__dep__incl.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__dep__incl.map new file mode 100644 index 0000000..acac00c --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__dep__incl.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__dep__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__dep__incl.md5 new file mode 100644 index 0000000..7b9de72 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +9473d02ecebf83419d031c6892e87325 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__dep__incl.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__dep__incl.png new file mode 100644 index 0000000..dfd64cf Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__dep__incl.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__incl.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__incl.map new file mode 100644 index 0000000..9593bd3 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__incl.map @@ -0,0 +1,2 @@ + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__incl.md5 new file mode 100644 index 0000000..649cd5a --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__incl.md5 @@ -0,0 +1 @@ +f149372964a39345b4a615ac7d83e1aa \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__incl.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__incl.png new file mode 100644 index 0000000..3bc2fd7 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp__incl.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp_source.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp_source.html new file mode 100644 index 0000000..6293e8d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_system_log_8hpp_source.html @@ -0,0 +1,90 @@ + + + + + + + +UnitreeCameraSDK: include/SystemLog.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
SystemLog.hpp
+
+
+Go to the documentation of this file.
1 
11 #ifndef __SYSTEMLOG_HPP__
12 #define __SYSTEMLOG_HPP__
13 
14 #include <stdarg.h>
15 #include <stdio.h>
16 #include <string>
17 
18 class SystemLog
19 {
20 private:
21  int m_logLevel;
22  bool m_isSave;
23  std::string m_logName;
24  std::string m_logFileName;
25 
26 public:
39  SystemLog(std::string logName);
40 
41 public:
54  void setLogLevel(int level);
68  void runTimeError(const char *format,...);
82  void runTimeInfo(const char *format,...);
96  void runTimeWarning(const char *format,...);
110  void debugTimeWarning(const char *format,...);
124  void debugTimeInfo(const char *format,...);
138  void debugTimeError(const char *format,...);
151  void saveLog(void);
164  void saveLogToFile(std::string fileName) ;
165 };
166 
167 
168 #endif //__SYSTEMLOG_HPP__
void saveLog(void)
save system log to a file, default file name: Running.txt
+
void setLogLevel(int level)
set system ouput log level
+
SystemLog(std::string logName)
SystemLog constructor.
+
void runTimeWarning(const char *format,...)
output running warning infomation, color: yellow
+
void runTimeInfo(const char *format,...)
output running infomation, color: green
+
void debugTimeInfo(const char *format,...)
output debug infomation, color: white
+
Definition: SystemLog.hpp:18
+
void runTimeError(const char *format,...)
output running error infomation, color: red
+
void debugTimeWarning(const char *format,...)
output debug warning infomation, color: cyan
+
void saveLogToFile(std::string fileName)
save system log to a designated file
+
void debugTimeError(const char *format,...)
output debug error infomation, color: magenta
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp.html new file mode 100644 index 0000000..71e18ff --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp.html @@ -0,0 +1,130 @@ + + + + + + + +UnitreeCameraSDK: include/UnitreeCameraSDK.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Functions
+
+
UnitreeCameraSDK.hpp File Reference
+
+
+ +

This file is part of UnitreeCameraSDK, which declare unitree camera APIs. +More...

+
#include "StereoCameraCommon.hpp"
+
+Include dependency graph for UnitreeCameraSDK.hpp:
+
+
+ + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  UnitreeCamera
 
+ + + + + +

+Functions

+cv::Mat getRotationMatrix (int axis='x', float theta=0.0)
 
+cv::Mat getTranslationMatrix (int axis='x', float theta=0.0, cv::Mat vec=cv::Mat())
 
+

Detailed Description

+

This file is part of UnitreeCameraSDK, which declare unitree camera APIs.

+

class UnitreeCamera inherits the APIs of class StereoCamera image capture, image rectification, disparity computation, depth image and point cloud generation update camera firmware, flash camera parameters to camera

Author
ZhangChunyang
+
Date
2021.07.31
+
Version
1.0.1
+ +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__dep__incl.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__dep__incl.map new file mode 100644 index 0000000..50bd748 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__dep__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__dep__incl.md5 new file mode 100644 index 0000000..bdd6285 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +bf9b57dd0d6c56de8b8aa497c92b06e5 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__dep__incl.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__dep__incl.png new file mode 100644 index 0000000..bf1c78d Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__dep__incl.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__incl.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__incl.map new file mode 100644 index 0000000..ad799b1 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__incl.md5 new file mode 100644 index 0000000..e7273d8 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__incl.md5 @@ -0,0 +1 @@ +a5b5bcb6f5fc15d30ca4d887d4317791 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__incl.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__incl.png new file mode 100644 index 0000000..f7cbd3c Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp__incl.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp_source.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp_source.html new file mode 100644 index 0000000..c74446a --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/_unitree_camera_s_d_k_8hpp_source.html @@ -0,0 +1,88 @@ + + + + + + + +UnitreeCameraSDK: include/UnitreeCameraSDK.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
UnitreeCameraSDK.hpp
+
+
+Go to the documentation of this file.
1 
14 #ifndef __UNITREE_CAMERA_SDK_HPP__
15 #define __UNITREE_CAMERA_SDK_HPP__
16 
17 #include "StereoCameraCommon.hpp"
18 
20 {
21 private:
22  std::string m_logName = "UnitreeCameraSDK";
23  SystemLog *m_log = nullptr;
24 
25 public:
38  UnitreeCamera();
52  UnitreeCamera(std::string fileName);
66  UnitreeCamera(int deviceNode);
76  ~UnitreeCamera(void);
77 
78 public:
90  bool updateCalibParams2Flash(std::string fileName);
102  bool checkFirmwareVersion(std::string &version);
114  bool updateFirmware(std::string fileName);
115 
116 private:
128  bool loadInternalCalibParams(void);
129 };
130 
143 cv::Mat getRotationMatrix(int axis = 'x', float theta = 0.0);
156 cv::Mat getTranslationMatrix(int axis = 'x', float theta = 0.0, cv::Mat vec = cv::Mat());
157 
158 #endif
bool updateCalibParams2Flash(std::string fileName)
update camera calibrate parameters
Definition: UnitreeCameraSDK.cc:314
+
Definition: UnitreeCameraSDK.hpp:19
+
this class integrate camera control and stereo vision algorithm
Definition: StereoCameraCommon.hpp:38
+
This file is part of UnitreeCameraSDK, which declare stereo camera algorithm APIs.
+
~UnitreeCamera(void)
UnitreeCamera destructor.
Definition: UnitreeCameraSDK.cc:300
+
bool checkFirmwareVersion(std::string &version)
check camera&#39;s firmware version
Definition: UnitreeCameraSDK.cc:319
+
Definition: SystemLog.hpp:18
+
UnitreeCamera()
UnitreeCamera init unitree stereo camera object for default parameters.
Definition: UnitreeCameraSDK.cc:231
+
bool updateFirmware(std::string fileName)
update camera&#39;s firmware
Definition: UnitreeCameraSDK.cc:309
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/annotated.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/annotated.html new file mode 100644 index 0000000..c9e7703 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/annotated.html @@ -0,0 +1,94 @@ + + + + + + + +UnitreeCameraSDK: Class List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + +
 Nglwindow
 CEventDispatcher
 CEventHandler
 CGLWindow
 CScopedContext
 CSystemState
 CSceneWindow
 CViewpoint
 C_Device_Point_
 Cinfo_camera_os
 Cinfo_camera_String
 CPCLThis struct is used for RGB point cloud capture and display
 CStereoCameraThis class integrate camera control and stereo vision algorithm
 CSystemLog
 CUnitreeCamera
+
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/bc_s.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/bc_s.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/bdwn.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/bdwn.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/camera__api_8h_source.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/camera__api_8h_source.html new file mode 100644 index 0000000..24e514a --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/camera__api_8h_source.html @@ -0,0 +1,82 @@ + + + + + + + +UnitreeCameraSDK: src/camera_api.h Source File + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
camera_api.h
+
+
+
1 #ifndef CAMERA_API_H
2 #define CAMERA_API_H
3 #include <stdint.h>
4 
5 #define MAX_PATH 260
6 typedef unsigned char BYTE;
7 typedef unsigned short WORD;
8 typedef unsigned long DWORD;
9 typedef unsigned long ULONG;
10 typedef void *PVOID;
11 #define VOID void
12 
13 class info_camera_os //get information from software
14 {
15 public:
16  WORD vid;
17  WORD pid;
18  WORD bcdDevice;
19  char deviceID[MAX_PATH];
20  char device[MAX_PATH];
21  BYTE icType;
22  uint64_t busnum;
23  uint64_t devnum;
24  char location[MAX_PATH];
25 
26 };
27 
28 class info_camera_String //get information from software
29 {
30 public:
31  char iManufacturer[MAX_PATH];
32  char iProduct[MAX_PATH];
33  char iSerialNumber[MAX_PATH];
34 
35 };
36 
37 extern "C" int32_t Camera_Count(int *Number);
38 
39 
40 extern "C"
41  int32_t
42 Camera_UnInit();
43 
44 
45 struct _Device_Point_;
46 
47 typedef int32_t(*H_Fun_Pb) (struct _Device_Point_ *, BYTE*);
48 
49 
50 
51 
52 typedef int32_t(*H_Fun_HPb) (struct _Device_Point_ *, int32_t, BYTE*);
53 
54 
55 
56 typedef int32_t(*H_Fun_WPb) (struct _Device_Point_ *, WORD, BYTE*);
57 
58 typedef int32_t(*H_Fun_WB) (struct _Device_Point_ *, WORD, BYTE);
59 
60 
61 
62 typedef int32_t(*H_Fun_BWPw) (struct _Device_Point_ *, BYTE, WORD, WORD*);
63 
64 typedef int32_t(*H_Fun_BWW) (struct _Device_Point_ *, BYTE, WORD, WORD);
65 
66 typedef int32_t(*H_Fun_IPb) (struct _Device_Point_ *, int, BYTE*);
67 
68 
69 typedef int32_t(*H_Fun_Cinfo) (struct _Device_Point_ *, info_camera_os*);
70 
71 
72 typedef int32_t(*H_Fun_CinfoStr) (struct _Device_Point_ *, info_camera_String*);
73 
74 
75 
76 typedef int32_t(*Input_GPIO_Get) (struct _Device_Point_ *, ULONG, BYTE*);
77 
78 typedef int32_t(*Output_GPIO_Set) (struct _Device_Point_ *, ULONG, BYTE);
79 
80 typedef int32_t(*Input_GPIO_Init) (struct _Device_Point_ *, ULONG);
81 
82 typedef int32_t(*Output_GPIO_Init) (struct _Device_Point_ *, ULONG);
83 
84 
85 
86 
87 
88 typedef int32_t(*pExID) (struct _Device_Point_ *, BYTE*);
89 
90 
91 typedef void* (*pCUSTOMERFun) (struct _Device_Point_ *, WORD, BYTE*, BYTE);
92 
93 
94 
95 
96 typedef struct _Device_Point_
97 {
98  /***************所有的信息均为只读不允许修改赋值******************/
99  //节点定位
100  uint32_t u_index;
101 
102  //Flash类型
103  BYTE FlashType;
104 
105 
106  BYTE ISP_ID;
107  //节点信息
108  PVOID p_device;
109 
110 
111 
112  //读取Flash 4K大小
113  //参数 sizeof(buff) >= 0x1000
114  //return -1 dll没有被加载 0成功
115  H_Fun_IPb Falsh_R;
116 
117 
118  //写Flash 4K大小
119  //参数 sizeof(buff) >= 0x1000
120  //return -1 dll没有被加载 0成功
121  H_Fun_IPb Falsh_W;
122 
123 
124  H_Fun_Cinfo pInfo;
125 
126 
127 
128 
129  H_Fun_WB Set_ISP_Reg;
130 
131  H_Fun_WPb Get_ISP_Reg;
132 
133 
134  H_Fun_BWW Set_Sensor_Reg;
135 
136  H_Fun_BWPw Get_Sensor_Reg;
137 
138 
139  /****************************************
140  函数功能: 获取Gpio输入状态
141  函数指针原型:
142  int32_t
143  Camera_Get_Input_GPIO_Api(pDevice_Point pMes,
144  ULONG GPIO_ID,
145  BYTE*status)
146 
147  形参说明:
148  pMes : 节点;
149  GPIO_ID : GPIO枚举类型
150  *status : 状态 0->低 1->高
151 
152  返回值:
153  S_OK == 0
154  指针为空不支持该操作
155  *****************************************/
156 
157  Input_GPIO_Get Input_Gpio_Get;
158 
159 
160  /****************************************
161  函数功能: 设置Gpio输出值
162  函数指针原型:
163  int32_t
164  int32_t
165  Camera_Set_Output_GPIO_Api(pDevice_Point pMes,
166  ULONG GPIO_ID,
167  BYTE status)
168 
169  形参说明:
170  pMes : 节点;
171  GPIO_ID : GPIO枚举类型
172  status : 状态 0->低 1->高
173 
174  返回值:
175  S_OK == 0
176  指针为空不支持该操作
177  *****************************************/
178 
179  Output_GPIO_Set Output_Gpio_set;
180 
181 
182  /****************************************
183  函数功能: Gpio输入模式初始化
184  函数指针原型:
185  int32_t
186  Input_GPIO_Init_Api (pDevice_Point pMes,
187  ULONG GPIO_ID)
188 
189  形参说明:
190  pMes : 节点;
191  GPIO_ID : GPIO枚举类型
192 
193  返回值:
194  S_OK == 0
195  指针为空不支持该操作
196  *****************************************/
197 
198  Input_GPIO_Init Input_Gpio_init;
199 
200 
201  /****************************************
202  函数功能: Gpio输出模式初始化
203  函数指针原型:
204  int32_t
205  Output_GPIO_Init_Api (pDevice_Point pMes,
206  ULONG GPIO_ID)
207 
208  形参说明:
209  pMes : 节点;
210  GPIO_ID : GPIO枚举类型
211 
212  返回值:
213  S_OK == 0
214  指针为空不支持该操作
215  *****************************************/
216 
217  Output_GPIO_Init Output_Gpio_init;
218 
219 
220 
221 
222 
223  PVOID RES_1;
224 
225 
226 
227 
228  PVOID RES_2;
229 
230 
231 
232 
233  H_Fun_CinfoStr pInfoStr;
234 
235 
236  pExID pExid_R;
237 
238 
239  pExID pExid_W;
240 
241 
242  PVOID respoint;
243 
244  pCUSTOMERFun pCustomer;
245 
246 
248 
249 
250 extern "C"
251 pDevice_Point
252 Camera_Device_Point_Init(int tar_device_index);
253 
254 extern "C"
255 VOID
256 Camera_Device_Point_UnInit(pDevice_Point *PPDevice);
257 
258 extern "C"
259 int32_t
260 Camera_Get_information_Api(pDevice_Point pMes, info_camera_os* pinfo);
261 
262 extern "C"
263  int32_t
264 Camera_Flash_R_Api(pDevice_Point pMes, int piece_Index, BYTE*buff);
265 
266 extern "C"
267  int32_t
268 Camera_Flash_W_Api(pDevice_Point pMes, int piece_Index, BYTE*buff);
269 
270 extern "C"
271  int32_t
272 Camera_Get_Info_String_Api(pDevice_Point pMes, info_camera_String* Str);
273 
274 extern "C"
275 void*
276 Camera_Customer_Api(pDevice_Point pMes, uint16_t id, uint8_t*pdata, uint8_t len);
277 
278 extern "C"
279 int32_t
280 Camera_Updata(pDevice_Point pMes, uint8_t *FW, uint32_t SIZE, float *pf_Schedule);
281 #endif // CAMERA_API_H
282 
Definition: camera_api.h:13
+
Definition: camera_api.h:96
+
Definition: camera_api.h:28
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera-members.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera-members.html new file mode 100644 index 0000000..c12fc55 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera-members.html @@ -0,0 +1,112 @@ + + + + + + + +UnitreeCameraSDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
StereoCamera Member List
+
+
+ +

This is the complete list of members for StereoCamera, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
getCalibParams(std::vector< cv::Mat > &paramsArray, bool flag=false)StereoCameravirtual
getDepthFrame(cv::Mat &depth, bool color, std::chrono::microseconds &timeStamp)StereoCameravirtual
getDeviceNode(void) constStereoCameravirtual
getLogLevel(void) constStereoCameravirtual
getPointCloud(std::vector< cv::Vec3f > &pcl, std::chrono::microseconds &timeStamp) (defined in StereoCamera)StereoCameravirtual
getPointCloud(std::vector< PCLType > &pcl, std::chrono::microseconds &timeStamp) (defined in StereoCamera)StereoCameravirtual
getPosNumber(void) constStereoCameravirtual
getRawFrame(cv::Mat &frame, std::chrono::microseconds &timeStamp)StereoCameravirtual
getRawFrameRate(void) constStereoCameravirtual
getRawFrameSize(void) constStereoCameravirtual
getRectStereoFrame(cv::Mat &left, cv::Mat &right, cv::Mat &feim) (defined in StereoCamera)StereoCameravirtual
getRectStereoFrame(cv::Mat &left, cv::Mat &right, cv::Mat &feim, std::chrono::microseconds &timeStamp) (defined in StereoCamera)StereoCameravirtual
getSerialNumber(void) constStereoCameravirtual
getStereoFrame(cv::Mat &left, cv::Mat &right, std::chrono::microseconds &timeStamp)StereoCameravirtual
isOpened(void)StereoCameravirtual
loadCalibParams(std::string fileName)StereoCameravirtual
loadConfig(std::string fileName)StereoCameravirtual
saveCalibParams(std::string fileName="stereo_camera_calibparams.yaml")StereoCameravirtual
saveConfig(std::string fileName="stereo_camera_config.yaml")StereoCameravirtual
setCalibParams(std::vector< cv::Mat > paramsArray, bool flag=false)StereoCameravirtual
setLogLevel(int level)StereoCameravirtual
setPosNumber(int posNumber)StereoCameravirtual
setRawFrameRate(int frameRate)StereoCameravirtual
setRawFrameSize(cv::Size frameSize)StereoCameravirtual
setRectFrameSize(cv::Size frameSize)StereoCameravirtual
setSerialNumber(int serialNumber)StereoCameravirtual
startCapture(bool udpFlag=false, bool shmFlag=false)StereoCameravirtual
startStereoCompute(void)StereoCameravirtual
StereoCamera(void)StereoCamera
StereoCamera(std::string fileName) (defined in StereoCamera)StereoCamera
StereoCamera(int deviceNode) (defined in StereoCamera)StereoCamera
stopCapture(void)StereoCameravirtual
stopStereoCompute(void)StereoCameravirtual
~StereoCamera()StereoCameravirtual
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera.html new file mode 100644 index 0000000..0119b0d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera.html @@ -0,0 +1,1340 @@ + + + + + + + +UnitreeCameraSDK: StereoCamera Class Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Classes | +Public Member Functions | +List of all members
+
+
StereoCamera Class Reference
+
+
+ +

this class integrate camera control and stereo vision algorithm + More...

+ +

#include <StereoCameraCommon.hpp>

+
+Inheritance diagram for StereoCamera:
+
+
Inheritance graph
+ + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 StereoCamera (void)
 StereoCamera. More...
 
StereoCamera (std::string fileName)
 
StereoCamera (int deviceNode)
 
virtual ~StereoCamera ()
 StereoCamera destructor. More...
 
virtual bool isOpened (void)
 get stereo camera running status More...
 
virtual bool setLogLevel (int level)
 set stereo camera ouput log level More...
 
virtual bool setPosNumber (int posNumber)
 set stereo camera position number More...
 
virtual bool setSerialNumber (int serialNumber)
 set stereo camera serial number More...
 
virtual bool setRawFrameRate (int frameRate)
 set stereo camera FPS (Frames Per Seconds) More...
 
virtual bool setRawFrameSize (cv::Size frameSize)
 set stereo camera frame size More...
 
virtual bool setRectFrameSize (cv::Size frameSize)
 set rectification image size More...
 
virtual bool setCalibParams (std::vector< cv::Mat > paramsArray, bool flag=false)
 set stereo camera calibration parameters More...
 
virtual int getLogLevel (void) const
 get log system output level More...
 
virtual int getDeviceNode (void) const
 get camera device node More...
 
virtual int getPosNumber (void) const
 get stereo camera device node More...
 
virtual int getSerialNumber (void) const
 get stereo camera serial number More...
 
virtual float getRawFrameRate (void) const
 get stereo camera capture frame rate More...
 
virtual cv::Size getRawFrameSize (void) const
 get stereo camera frame size More...
 
virtual bool getRawFrame (cv::Mat &frame, std::chrono::microseconds &timeStamp)
 get stereo camera raw frame More...
 
virtual bool getStereoFrame (cv::Mat &left, cv::Mat &right, std::chrono::microseconds &timeStamp)
 get stereo camera left and right image More...
 
virtual bool getDepthFrame (cv::Mat &depth, bool color, std::chrono::microseconds &timeStamp)
 get stereo camera depth image More...
 
+virtual bool getPointCloud (std::vector< cv::Vec3f > &pcl, std::chrono::microseconds &timeStamp)
 
+virtual bool getPointCloud (std::vector< PCLType > &pcl, std::chrono::microseconds &timeStamp)
 
virtual bool getCalibParams (std::vector< cv::Mat > &paramsArray, bool flag=false)
 get stereo camera calibration paramerters More...
 
+virtual bool getRectStereoFrame (cv::Mat &left, cv::Mat &right, cv::Mat &feim)
 
+virtual bool getRectStereoFrame (cv::Mat &left, cv::Mat &right, cv::Mat &feim, std::chrono::microseconds &timeStamp)
 
virtual bool loadConfig (std::string fileName)
 load stereo camera config parameters More...
 
virtual bool loadCalibParams (std::string fileName)
 load stereo camera calibration params More...
 
virtual bool saveConfig (std::string fileName="stereo_camera_config.yaml")
 save stereo camera settings to config file More...
 
virtual bool saveCalibParams (std::string fileName="stereo_camera_calibparams.yaml")
 save stereo camera calibration parameters to file More...
 
virtual bool startCapture (bool udpFlag=false, bool shmFlag=false)
 start stereo camera capture thread More...
 
virtual bool startStereoCompute (void)
 start stereo camera computing disparity thread More...
 
virtual bool stopStereoCompute (void)
 stop stereo camera computing disparity thread More...
 
virtual bool stopCapture (void)
 stop stereo camera capture thread More...
 
+

Detailed Description

+

this class integrate camera control and stereo vision algorithm

+

this class is the base of UnitreeCameraSDK, it includes many functions, such as camera frame capturing, image rectification, disparity computation, generating point cloud and etc.

+

Constructor & Destructor Documentation

+ +

◆ StereoCamera()

+ +
+
+ + + + + + + + +
StereoCamera::StereoCamera (void )
+
+ +

StereoCamera.

+

StereoCamera constructor overload.

+

default constructor

Parameters
+ + + +
[in]None
[out]None
+
+
+
Returns
None
+
Note
initialize StereoCamera object by default settings
StereoCamera *pCam = new StereoCamera(); or StereoCamera cam;
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+

use camera config file to init stereo camera

Parameters
+ + + +
[in]fileNamecamera config file, include file path, for example: ~/test/stereoConfig.yaml
[out]None
+
+
+
Returns
None
+
Note
initialize StereoCamera object by settings from configure file
StereoCamera("path_to/config.yaml");
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+

use camera device node number to init stereo camera

Parameters
+ + + +
[in]deviceNodecamera device node, for example: /dev/video0, camera device node: 0
[out]None
+
+
+
Returns
None
+
Note
initialize StereoCamera object by device node number
StereoCamera(0); // for /dev/video0
+ +
+
+ +

◆ ~StereoCamera()

+ +
+
+ + + + + +
+ + + + + + + +
StereoCamera::~StereoCamera ()
+
+virtual
+
+ +

StereoCamera destructor.

+

release all stereo camera resource

Parameters
+ + + +
[in]None
[out]None
+
+
+
Returns
None
+
Note
automatically called when StereoCamera object released
+ +
+
+

Member Function Documentation

+ +

◆ getCalibParams()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool StereoCamera::getCalibParams (std::vector< cv::Mat > & paramsArray,
bool flag = false 
)
+
+virtual
+
+ +

get stereo camera calibration paramerters

+

calibration paramerters include: camera intrinsic matrix, camera distortion coefficient, xi(mei model), rotation matrix, translation vector, rectification image intrinsic matrix

Parameters
+ + + +
[in]flagdefault false, false: get left camera parameters, true: get right camera parameters.
[out]paramsArrayarrange Array element as follows: intrinsic,distortion,xi,rotation,translation,kfe
+
+
+
Returns
true or false, if assignment successfully return true, otherwise return false
+
Attention
This funtion must be called after startCapture()
+
Note
cam.startCapture();
std::vector<cv::Mat> paramsArray;
if(cam.getCalibParams(paramsArray)){
//do something
}
+ +
+
+ +

◆ getDepthFrame()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool StereoCamera::getDepthFrame (cv::Mat & depth,
bool color,
std::chrono::microseconds & timeStamp 
)
+
+virtual
+
+ +

get stereo camera depth image

+
Parameters
+ + + + +
[in]colortrue: depth is color image, false:depth is gray image
[out]depthleft image
[out]timeStampframe time stamp
+
+
+
Returns
true or false, if depth image is not empty, return true, otherwise return false.
+
Attention
This funtion must be called after startCapture().
+
Note
cam.startCapture();
cam.startStereoCompute();
cv::Mat depth;
std::chrono::microseconds timeStamp;
if(cam.getPointCloud(depth, true, timeStamp)){
//do something
}
+ +
+
+ +

◆ getDeviceNode()

+ +
+
+ + + + + +
+ + + + + + + + +
int StereoCamera::getDeviceNode (void ) const
+
+virtual
+
+ +

get camera device node

+
Parameters
+ + + +
[in]None
[out]None
+
+
+
Returns
device node number
+
Note
for example: /dev/video2, device node number is 2, the return value of function is 2.
int nodeNumber = cam.getDeviceNode();
+ +
+
+ +

◆ getLogLevel()

+ +
+
+ + + + + +
+ + + + + + + + +
int StereoCamera::getLogLevel (void ) const
+
+virtual
+
+ +

get log system output level

+
Parameters
+ + + +
[in]None
[out]None
+
+
+
Returns
log level
+
Note
1: output runtime information, 2: output runtime infomation and debug information
int LogLevel = cam.getLogLevel();
+ +
+
+ +

◆ getPosNumber()

+ +
+
+ + + + + +
+ + + + + + + + +
int StereoCamera::getPosNumber (void ) const
+
+virtual
+
+ +

get stereo camera device node

+
Parameters
+ + + +
[in]None
[out]None
+
+
+
Returns
positon number
+
Note
face NO.1, chin NO.2, left NO.3, right NO.4, down NO.5
int posNum = cam.getPosNumber();
+ +
+
+ +

◆ getRawFrame()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool StereoCamera::getRawFrame (cv::Mat & frame,
std::chrono::microseconds & timeStamp 
)
+
+virtual
+
+ +

get stereo camera raw frame

+
Parameters
+ + + + +
[in]None
[out]frameraw frame, include left and right image
[out]timeStampraw frame time stamp
+
+
+
Returns
true or false, if frame is not empty, return true, otherwise return false.
+
Note
cv::Mat frame;
std::chrono::microseconds timeStamp
cam.getRawFrame(frame, timeStamp);
+ +
+
+ +

◆ getRawFrameRate()

+ +
+
+ + + + + +
+ + + + + + + + +
float StereoCamera::getRawFrameRate (void ) const
+
+virtual
+
+ +

get stereo camera capture frame rate

+
Parameters
+ + + +
[in]None
[out]None
+
+
+
Returns
current stereo camera fps.
float fps = getRawFrameRate();
+ +
+
+ +

◆ getRawFrameSize()

+ +
+
+ + + + + +
+ + + + + + + + +
cv::Size StereoCamera::getRawFrameSize (void ) const
+
+virtual
+
+ +

get stereo camera frame size

+
Parameters
+ + + +
[in]None
[out]None
+
+
+
Returns
frame size.
cv::Size fSize = cam.getRawFrameSize();
+ +
+
+ +

◆ getSerialNumber()

+ +
+
+ + + + + +
+ + + + + + + + +
int StereoCamera::getSerialNumber (void ) const
+
+virtual
+
+ +

get stereo camera serial number

+

this number is same as robot serial number

Parameters
+ + + +
[in]None
[out]None
+
+
+
Returns
robot serial number
+
Note
int seiralNumber = cam.getSerialNumber();
+ +
+
+ +

◆ getStereoFrame()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool StereoCamera::getStereoFrame (cv::Mat & left,
cv::Mat & right,
std::chrono::microseconds & timeStamp 
)
+
+virtual
+
+ +

get stereo camera left and right image

+
Parameters
+ + + + + +
[in]None
[out]leftleft image
[out]rightright image
[out]timeStampframe time stamp
+
+
+
Returns
true or false, if left and right images are not empty, return true, otherwise return false.
+
Attention
This funtion must be called after startCapture().
+
Note
cam.startCapture();
cv::Mat left, right;
std::chrono::microseconds timeStamp;
if(cam.getRawFrame(left,right, timeStamp)){
//do something
}
+ +
+
+ +

◆ isOpened()

+ +
+
+ + + + + +
+ + + + + + + + +
bool StereoCamera::isOpened (void )
+
+virtual
+
+ +

get stereo camera running status

+

detect camera is opened or closed

Parameters
+ + + +
[in]None
[out]None
+
+
+
Returns
true or false, if camera is opened return true, otherwise return false
+
Note
tell camera running status, it should be called after StereoCamera object initialization
if(cam.isOpened())
printf("Camera is opened!");
+ +
+
+ +

◆ loadCalibParams()

+ +
+
+ + + + + +
+ + + + + + + + +
bool StereoCamera::loadCalibParams (std::string fileName)
+
+virtual
+
+ +

load stereo camera calibration params

+

calibration paramerters include: camera intrinsic matrix, camera distortion coefficient, xi(mei model), rotation matrix, translation vector, rectification image intrinsic matrix, etc.

Parameters
+ + + +
[in]fileNamecalibration file name: include file path, for example: "path_to/calib.yaml"
[out]None
+
+
+
Returns
true or false, if load file successfully return true, otherwise return false
+
Attention
This funtion must be called before startCapture() and after loadConfig("xxx");
+
Note
cam.loadConfig("path_to/config.yaml");
cam.loadCalibParams("path_to/calib.yaml");
+ +
+
+ +

◆ loadConfig()

+ +
+
+ + + + + +
+ + + + + + + + +
bool StereoCamera::loadConfig (std::string fileName)
+
+virtual
+
+ +

load stereo camera config parameters

+

parameters include: LogLevel,Threshold,Algorithm,IpLastSegment, DeviceNode,FrameSize,RectifyFrameSize,FrameRate, etc.

Parameters
+ + + +
[in]fileNameconfig name: include config path, for example: "path_to/config.yaml"
[out]None
+
+
+
Returns
true or false, if load config file successfully return true, otherwise return false
+
Attention
This funtion must be called before startCapture() and after init the camera object.
+
Note
cam.loadConfig("path_to/config.yaml");
+ +
+
+ +

◆ saveCalibParams()

+ +
+
+ + + + + +
+ + + + + + + + +
bool StereoCamera::saveCalibParams (std::string fileName = "stereo_camera_calibparams.yaml")
+
+virtual
+
+ +

save stereo camera calibration parameters to file

+
Parameters
+ + + +
[in]fileNamedefault name: stereo_camera_calibparams.yaml, output file: include file path, for example: "path_to/calib.yaml"
[out]None
+
+
+
Returns
true or false, if save file successfully return true, otherwise return false
cam.saveConfig("stereo_camera_config.yaml");
+ +
+
+ +

◆ saveConfig()

+ +
+
+ + + + + +
+ + + + + + + + +
bool StereoCamera::saveConfig (std::string fileName = "stereo_camera_config.yaml")
+
+virtual
+
+ +

save stereo camera settings to config file

+
Parameters
+ + + +
[in]fileNamedefault name: stereo_camera_config.yaml, output config file: include file path, for example: "path_to/config.yaml"
[out]None
+
+
+
Returns
true or false, if save file successfully return true, otherwise return false
cam.saveConfig("stereo_camera_config.yaml");
+ +
+
+ +

◆ setCalibParams()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool StereoCamera::setCalibParams (std::vector< cv::Mat > paramsArray,
bool flag = false 
)
+
+virtual
+
+ +

set stereo camera calibration parameters

+

calibration paramerters include: camera intrinsic matrix, camera distortion coefficient, xi(mei model), rotation matrix, translation vector, rectification image intrinsic matrix

Parameters
+ + + + +
[in]paramsArrayarrange Array element as follows: intrinsic,distortion,xi,rotation,translation,kfe
[in]flagfalse: set left camera params, true: right camera params
[out]None
+
+
+
Returns
true or false, if assignment successfully return true, otherwise return false
+
Attention
the order of parameters should be correct
+
Note
std::vector<cv::Mat> leftParamsArray;
cam.setCalibParams(leftParamsArray);
+ +
+
+ +

◆ setLogLevel()

+ +
+
+ + + + + +
+ + + + + + + + +
bool StereoCamera::setLogLevel (int level)
+
+virtual
+
+ +

set stereo camera ouput log level

+

log level means that different kind of information will be output

Parameters
+ + + +
[in]level
[out]None
+
+
+
Returns
true or false, if assignment successfully return true, otherwise return false
+
Note
output information starts with "StereoCamera", it should be called after StereoCamera object initialization
cam.setLogLevel(2); //debug level
+ +
+
+ +

◆ setPosNumber()

+ +
+
+ + + + + +
+ + + + + + + + +
bool StereoCamera::setPosNumber (int posNumber)
+
+virtual
+
+ +

set stereo camera position number

+

position number means that the number of camera location in robot body

Parameters
+ + + +
[in]posNumber
[out]None
+
+
+
Returns
true or false, if assignment successfully return true, otherwise return false
+
Note
face NO.1, chin NO.2, left NO.3, right NO.4, down NO.5
cam.setPosNumber(2);
+ +
+
+ +

◆ setRawFrameRate()

+ +
+
+ + + + + +
+ + + + + + + + +
bool StereoCamera::setRawFrameRate (int frameRate)
+
+virtual
+
+ +

set stereo camera FPS (Frames Per Seconds)

+

for 1856X800 FPS:30, for 928x400 FPS:30 or 60

Parameters
+ + + +
[in]frameRate
[out]None
+
+
+
Returns
true or false, if assignment successfully return true, otherwise return false
+
Note
+ +
+
+ +

◆ setRawFrameSize()

+ +
+
+ + + + + +
+ + + + + + + + +
bool StereoCamera::setRawFrameSize (cv::Size frameSize)
+
+virtual
+
+ +

set stereo camera frame size

+

There are two choise: 1856X800,928x400.

Parameters
+ + + +
[in]frameSize
[out]None
+
+
+
Returns
true or false, if assignment successfully return true, otherwise return false
+
Attention
if do not assign frameSize, default size is 1856x800
+
Note
cam.setRawFrameSize(cv::Size(1856, 800));
+ +
+
+ +

◆ setRectFrameSize()

+ +
+
+ + + + + +
+ + + + + + + + +
bool StereoCamera::setRectFrameSize (cv::Size frameSize)
+
+virtual
+
+ +

set rectification image size

+

this size should keep ratio as camera raw image size, for example: raw single frame size: 928x800 rectification image size: 464x400 or 232x200

Parameters
+ + + +
[in]frameSize
[out]None
+
+
+
Returns
true or false, if assignment successfully return true, otherwise return false
+
Attention
rectification image size must be smaller than camera raw single image size
+
Note
cam.setRawFrameSize(cv::Size(464, 400));
+ +
+
+ +

◆ setSerialNumber()

+ +
+
+ + + + + +
+ + + + + + + + +
bool StereoCamera::setSerialNumber (int serialNumber)
+
+virtual
+
+ +

set stereo camera serial number

+

serial number same as robot serial number

Parameters
+ + + +
[in]serialNumber
[out]None
+
+
+
Returns
true or false, if assignment successfully return true, otherwise return false
+
Note
+ +
+
+ +

◆ startCapture()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool StereoCamera::startCapture (bool udpFlag = false,
bool shmFlag = false 
)
+
+virtual
+
+ +

start stereo camera capture thread

+
Parameters
+ + + + +
[in]udpFlagdefault false, true: enable using H264 encode camera frame and send it by gstream udp command
[in]shmFlagdefault false, true: enable using share memory to share camera frame
[out]None
+
+
+
Returns
true or false, if create capture thread successfully return true, otherwise return false
+
Note
gstreamer send command: "appsrc ! videoconvert ! omxh264enc ! video/x-h264, stream-format=byte-stream ! rtph264pay ! udpsink host=192.168.123.SEG port=hostPort". SEG is last segment of your recieve board IP, its range from 2~254,for example: 13, host=192.168.123.13. hostPort is defined by the result of adding camera position number and 9000, for example: camera positon number is 5, port=9005. share memory key number is defined by the result of adding camera position number and 9000. This function must be called after camera config or settings finished.
cam.startCapture(true, false); // support h264 encode frame and send it by udp
+ +
+
+ +

◆ startStereoCompute()

+ +
+
+ + + + + +
+ + + + + + + + +
bool StereoCamera::startStereoCompute (void )
+
+virtual
+
+ +

start stereo camera computing disparity thread

+
Parameters
+ + + +
[in]None
[out]None
+
+
+
Returns
true or false, if create thread successfully return true, otherwise return false
+
Attention
This function must be called after startCapture();
+
Note
+ +
+
+ +

◆ stopCapture()

+ +
+
+ + + + + +
+ + + + + + + + +
bool StereoCamera::stopCapture (void )
+
+virtual
+
+ +

stop stereo camera capture thread

+
Parameters
+ + + +
[in]None
[out]None
+
+
+
Returns
true or false, if stop thread successfully return true, otherwise return false
+
Attention
This function must be called after startCapture().
+
Note
+ +
+
+ +

◆ stopStereoCompute()

+ +
+
+ + + + + +
+ + + + + + + + +
bool StereoCamera::stopStereoCompute (void )
+
+virtual
+
+ +

stop stereo camera computing disparity thread

+
Parameters
+ + + +
[in]None
[out]None
+
+
+
Returns
true or false, if stop thread successfully return true, otherwise return false
+
Attention
This function must be called after startStereoCompute()
+
Note
+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera__inherit__graph.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera__inherit__graph.map new file mode 100644 index 0000000..1416261 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera__inherit__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera__inherit__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera__inherit__graph.md5 new file mode 100644 index 0000000..39733df --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera__inherit__graph.md5 @@ -0,0 +1 @@ +4ecdfe0d822fc62f64e03af6e9cfede9 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera__inherit__graph.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera__inherit__graph.png new file mode 100644 index 0000000..270403c Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_stereo_camera__inherit__graph.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_system_log-members.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_system_log-members.html new file mode 100644 index 0000000..98ae082 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_system_log-members.html @@ -0,0 +1,88 @@ + + + + + + + +UnitreeCameraSDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
SystemLog Member List
+
+
+ +

This is the complete list of members for SystemLog, including all inherited members.

+ + + + + + + + + + + +
debugTimeError(const char *format,...)SystemLog
debugTimeInfo(const char *format,...)SystemLog
debugTimeWarning(const char *format,...)SystemLog
runTimeError(const char *format,...)SystemLog
runTimeInfo(const char *format,...)SystemLog
runTimeWarning(const char *format,...)SystemLog
saveLog(void)SystemLog
saveLogToFile(std::string fileName)SystemLog
setLogLevel(int level)SystemLog
SystemLog(std::string logName)SystemLog
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_system_log.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_system_log.html new file mode 100644 index 0000000..5f7f835 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_system_log.html @@ -0,0 +1,483 @@ + + + + + + + +UnitreeCameraSDK: SystemLog Class Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Member Functions | +List of all members
+
+
SystemLog Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SystemLog (std::string logName)
 SystemLog constructor. More...
 
void setLogLevel (int level)
 set system ouput log level More...
 
void runTimeError (const char *format,...)
 output running error infomation, color: red More...
 
void runTimeInfo (const char *format,...)
 output running infomation, color: green More...
 
void runTimeWarning (const char *format,...)
 output running warning infomation, color: yellow More...
 
void debugTimeWarning (const char *format,...)
 output debug warning infomation, color: cyan More...
 
void debugTimeInfo (const char *format,...)
 output debug infomation, color: white More...
 
void debugTimeError (const char *format,...)
 output debug error infomation, color: magenta More...
 
void saveLog (void)
 save system log to a file, default file name: Running.txt More...
 
void saveLogToFile (std::string fileName)
 save system log to a designated file More...
 
+

Constructor & Destructor Documentation

+ +

◆ SystemLog()

+ +
+
+ + + + + + + + +
SystemLog::SystemLog (std::string logName)
+
+ +

SystemLog constructor.

+
Parameters
+ + + +
[in]logNamethe name of special system
[out]None
+
+
+
Returns
None
+
Note
+
Attention
output information starts with "logName"
+ +
+
+

Member Function Documentation

+ +

◆ debugTimeError()

+ +
+
+ + + + + + + + + + + + + + + + + + +
SystemLog::debugTimeError (const char * format,
 ... 
)
+
+ +

output debug error infomation, color: magenta

+

output format [logName][DEBUG_ERROR] info

Parameters
+ + + + +
[in]format
[in]...
[out]None
+
+
+
Returns
None
+
Note
+
Attention
use it like printf()
+ +
+
+ +

◆ debugTimeInfo()

+ +
+
+ + + + + + + + + + + + + + + + + + +
SystemLog::debugTimeInfo (const char * format,
 ... 
)
+
+ +

output debug infomation, color: white

+

output format [logName][DEBUG_INFO] info

Parameters
+ + + + +
[in]format
[in]...
[out]None
+
+
+
Returns
None
+
Note
+
Attention
use it like printf()
+ +
+
+ +

◆ debugTimeWarning()

+ +
+
+ + + + + + + + + + + + + + + + + + +
SystemLog::debugTimeWarning (const char * format,
 ... 
)
+
+ +

output debug warning infomation, color: cyan

+

output format [logName][DEBUG_WARNING] info

Parameters
+ + + + +
[in]format
[in]...
[out]None
+
+
+
Returns
None
+
Note
+
Attention
use it like printf()
+ +
+
+ +

◆ runTimeError()

+ +
+
+ + + + + + + + + + + + + + + + + + +
SystemLog::runTimeError (const char * format,
 ... 
)
+
+ +

output running error infomation, color: red

+

output format [logName][ERROR] info

Parameters
+ + + + +
[in]format
[in]...
[out]None
+
+
+
Returns
None
+
Note
+
Attention
use it like printf()
+ +
+
+ +

◆ runTimeInfo()

+ +
+
+ + + + + + + + + + + + + + + + + + +
SystemLog::runTimeInfo (const char * format,
 ... 
)
+
+ +

output running infomation, color: green

+

output format [logName][INFO] info

Parameters
+ + + + +
[in]format
[in]...
[out]None
+
+
+
Returns
None
+
Note
+
Attention
use it like printf()
+ +
+
+ +

◆ runTimeWarning()

+ +
+
+ + + + + + + + + + + + + + + + + + +
SystemLog::runTimeWarning (const char * format,
 ... 
)
+
+ +

output running warning infomation, color: yellow

+

output format [logName][WARNING] info

Parameters
+ + + + +
[in]format
[in]...
[out]None
+
+
+
Returns
None
+
Note
+
Attention
use it like printf()
+ +
+
+ +

◆ saveLog()

+ +
+
+ + + + + + + + +
SystemLog::saveLog (void )
+
+ +

save system log to a file, default file name: Running.txt

+
Parameters
+ + + +
[in]none
[out]None
+
+
+
Returns
None
+
Note
+
Attention
not implement at this version
+ +
+
+ +

◆ saveLogToFile()

+ +
+
+ + + + + + + + +
SystemLog::saveLogToFile (std::string fileName)
+
+ +

save system log to a designated file

+
Parameters
+ + + +
[in]fileName
[out]None
+
+
+
Returns
None
+
Note
+
Attention
not implement at this version
+ +
+
+ +

◆ setLogLevel()

+ +
+
+ + + + + + + + +
SystemLog::setLogLevel (int level)
+
+ +

set system ouput log level

+

log level means that different kind of information will be output

Parameters
+ + + +
[in]level1 running information output, 2 running and debug infomation output
[out]None
+
+
+
Returns
None
+
Note
+
Attention
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera-members.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera-members.html new file mode 100644 index 0000000..2f248a0 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera-members.html @@ -0,0 +1,119 @@ + + + + + + + +UnitreeCameraSDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
UnitreeCamera Member List
+
+
+ +

This is the complete list of members for UnitreeCamera, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
checkFirmwareVersion(std::string &version)UnitreeCamera
getCalibParams(std::vector< cv::Mat > &paramsArray, bool flag=false)StereoCameravirtual
getDepthFrame(cv::Mat &depth, bool color, std::chrono::microseconds &timeStamp)StereoCameravirtual
getDeviceNode(void) constStereoCameravirtual
getLogLevel(void) constStereoCameravirtual
getPointCloud(std::vector< cv::Vec3f > &pcl, std::chrono::microseconds &timeStamp) (defined in StereoCamera)StereoCameravirtual
getPointCloud(std::vector< PCLType > &pcl, std::chrono::microseconds &timeStamp) (defined in StereoCamera)StereoCameravirtual
getPosNumber(void) constStereoCameravirtual
getRawFrame(cv::Mat &frame, std::chrono::microseconds &timeStamp)StereoCameravirtual
getRawFrameRate(void) constStereoCameravirtual
getRawFrameSize(void) constStereoCameravirtual
getRectStereoFrame(cv::Mat &left, cv::Mat &right, cv::Mat &feim) (defined in StereoCamera)StereoCameravirtual
getRectStereoFrame(cv::Mat &left, cv::Mat &right, cv::Mat &feim, std::chrono::microseconds &timeStamp) (defined in StereoCamera)StereoCameravirtual
getSerialNumber(void) constStereoCameravirtual
getStereoFrame(cv::Mat &left, cv::Mat &right, std::chrono::microseconds &timeStamp)StereoCameravirtual
isOpened(void)StereoCameravirtual
loadCalibParams(std::string fileName)StereoCameravirtual
loadConfig(std::string fileName)StereoCameravirtual
saveCalibParams(std::string fileName="stereo_camera_calibparams.yaml")StereoCameravirtual
saveConfig(std::string fileName="stereo_camera_config.yaml")StereoCameravirtual
setCalibParams(std::vector< cv::Mat > paramsArray, bool flag=false)StereoCameravirtual
setLogLevel(int level)StereoCameravirtual
setPosNumber(int posNumber)StereoCameravirtual
setRawFrameRate(int frameRate)StereoCameravirtual
setRawFrameSize(cv::Size frameSize)StereoCameravirtual
setRectFrameSize(cv::Size frameSize)StereoCameravirtual
setSerialNumber(int serialNumber)StereoCameravirtual
startCapture(bool udpFlag=false, bool shmFlag=false)StereoCameravirtual
startStereoCompute(void)StereoCameravirtual
StereoCamera(void)StereoCamera
StereoCamera(std::string fileName) (defined in StereoCamera)StereoCamera
StereoCamera(int deviceNode) (defined in StereoCamera)StereoCamera
stopCapture(void)StereoCameravirtual
stopStereoCompute(void)StereoCameravirtual
UnitreeCamera()UnitreeCamera
UnitreeCamera(std::string fileName) (defined in UnitreeCamera)UnitreeCamera
UnitreeCamera(int deviceNode) (defined in UnitreeCamera)UnitreeCamera
updateCalibParams2Flash(std::string fileName)UnitreeCamera
updateFirmware(std::string fileName)UnitreeCamera
~StereoCamera()StereoCameravirtual
~UnitreeCamera(void)UnitreeCamera
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera.html new file mode 100644 index 0000000..3ec89c5 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera.html @@ -0,0 +1,394 @@ + + + + + + + +UnitreeCameraSDK: UnitreeCamera Class Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Member Functions | +List of all members
+
+
UnitreeCamera Class Reference
+
+
+
+Inheritance diagram for UnitreeCamera:
+
+
Inheritance graph
+ + + +
[legend]
+
+Collaboration diagram for UnitreeCamera:
+
+
Collaboration graph
+ + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 UnitreeCamera ()
 UnitreeCamera init unitree stereo camera object for default parameters. More...
 
UnitreeCamera (std::string fileName)
 
UnitreeCamera (int deviceNode)
 
 ~UnitreeCamera (void)
 UnitreeCamera destructor. More...
 
bool updateCalibParams2Flash (std::string fileName)
 update camera calibrate parameters More...
 
bool checkFirmwareVersion (std::string &version)
 check camera's firmware version More...
 
bool updateFirmware (std::string fileName)
 update camera's firmware More...
 
- Public Member Functions inherited from StereoCamera
 StereoCamera (void)
 StereoCamera. More...
 
StereoCamera (std::string fileName)
 
StereoCamera (int deviceNode)
 
virtual ~StereoCamera ()
 StereoCamera destructor. More...
 
virtual bool isOpened (void)
 get stereo camera running status More...
 
virtual bool setLogLevel (int level)
 set stereo camera ouput log level More...
 
virtual bool setPosNumber (int posNumber)
 set stereo camera position number More...
 
virtual bool setSerialNumber (int serialNumber)
 set stereo camera serial number More...
 
virtual bool setRawFrameRate (int frameRate)
 set stereo camera FPS (Frames Per Seconds) More...
 
virtual bool setRawFrameSize (cv::Size frameSize)
 set stereo camera frame size More...
 
virtual bool setRectFrameSize (cv::Size frameSize)
 set rectification image size More...
 
virtual bool setCalibParams (std::vector< cv::Mat > paramsArray, bool flag=false)
 set stereo camera calibration parameters More...
 
virtual int getLogLevel (void) const
 get log system output level More...
 
virtual int getDeviceNode (void) const
 get camera device node More...
 
virtual int getPosNumber (void) const
 get stereo camera device node More...
 
virtual int getSerialNumber (void) const
 get stereo camera serial number More...
 
virtual float getRawFrameRate (void) const
 get stereo camera capture frame rate More...
 
virtual cv::Size getRawFrameSize (void) const
 get stereo camera frame size More...
 
virtual bool getRawFrame (cv::Mat &frame, std::chrono::microseconds &timeStamp)
 get stereo camera raw frame More...
 
virtual bool getStereoFrame (cv::Mat &left, cv::Mat &right, std::chrono::microseconds &timeStamp)
 get stereo camera left and right image More...
 
virtual bool getDepthFrame (cv::Mat &depth, bool color, std::chrono::microseconds &timeStamp)
 get stereo camera depth image More...
 
+virtual bool getPointCloud (std::vector< cv::Vec3f > &pcl, std::chrono::microseconds &timeStamp)
 
+virtual bool getPointCloud (std::vector< PCLType > &pcl, std::chrono::microseconds &timeStamp)
 
virtual bool getCalibParams (std::vector< cv::Mat > &paramsArray, bool flag=false)
 get stereo camera calibration paramerters More...
 
+virtual bool getRectStereoFrame (cv::Mat &left, cv::Mat &right, cv::Mat &feim)
 
+virtual bool getRectStereoFrame (cv::Mat &left, cv::Mat &right, cv::Mat &feim, std::chrono::microseconds &timeStamp)
 
virtual bool loadConfig (std::string fileName)
 load stereo camera config parameters More...
 
virtual bool loadCalibParams (std::string fileName)
 load stereo camera calibration params More...
 
virtual bool saveConfig (std::string fileName="stereo_camera_config.yaml")
 save stereo camera settings to config file More...
 
virtual bool saveCalibParams (std::string fileName="stereo_camera_calibparams.yaml")
 save stereo camera calibration parameters to file More...
 
virtual bool startCapture (bool udpFlag=false, bool shmFlag=false)
 start stereo camera capture thread More...
 
virtual bool startStereoCompute (void)
 start stereo camera computing disparity thread More...
 
virtual bool stopStereoCompute (void)
 stop stereo camera computing disparity thread More...
 
virtual bool stopCapture (void)
 stop stereo camera capture thread More...
 
+

Constructor & Destructor Documentation

+ +

◆ UnitreeCamera()

+ +
+
+ + + + + + + + +
UnitreeCamera::UnitreeCamera (void )
+
+ +

UnitreeCamera init unitree stereo camera object for default parameters.

+

UnitreeCamera constructor overload.

+

default constructor

Parameters
+ + + +
[in]None
[out]None
+
+
+
Returns
None
+
Note
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+

use camera config file to init unitree stereo camera

Parameters
+ + + +
[in]fileNamecamera config file, include file path, for example: ~/test/stereoConfig.yaml
[out]None
+
+
+
Returns
None
+
Note
UnitreeCamera("path_to/config.yaml");
+

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

+

use camera device node number to init unitree stereo camera

Parameters
+ + + +
[in]deviceNodecamera device node, for example: /dev/video0, camera device node: 0
[out]None
+
+
+
Returns
None
+
Note
StereoCamera(0); // for /dev/video0
+ +
+
+ +

◆ ~UnitreeCamera()

+ +
+
+ + + + + + + + +
UnitreeCamera::~UnitreeCamera (void )
+
+ +

UnitreeCamera destructor.

+

release all unitree stereo camera resource

Parameters
+ + + +
[in]None
[out]None
+
+
+
Returns
None
+
Note
automatically called when UnitreeCamera object released
+ +
+
+

Member Function Documentation

+ +

◆ checkFirmwareVersion()

+ +
+
+ + + + + + + + +
bool UnitreeCamera::checkFirmwareVersion (std::string & version)
+
+ +

check camera's firmware version

+
Parameters
+ + + +
[in]versionfirmware version
[out]None
+
+
+
Returns
None
+
Note
+ +
+
+ +

◆ updateCalibParams2Flash()

+ +
+
+ + + + + + + + +
bool UnitreeCamera::updateCalibParams2Flash (std::string fileName)
+
+ +

update camera calibrate parameters

+
Parameters
+ + + +
[in]fileNamecalibration parameters file
[out]None
+
+
+
Returns
None
+
Note
+ +
+
+ +

◆ updateFirmware()

+ +
+
+ + + + + + + + +
bool UnitreeCamera::updateFirmware (std::string fileName)
+
+ +

update camera's firmware

+
Parameters
+ + + +
[in]fileNamefirmware file
[out]None
+
+
+
Returns
None
+
Note
+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__coll__graph.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__coll__graph.map new file mode 100644 index 0000000..f54cd1e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__coll__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__coll__graph.md5 new file mode 100644 index 0000000..e2ddf8e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__coll__graph.md5 @@ -0,0 +1 @@ +1e9041f437823ee1ca80b8a2e5ffa404 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__coll__graph.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__coll__graph.png new file mode 100644 index 0000000..5381334 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__coll__graph.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__inherit__graph.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__inherit__graph.map new file mode 100644 index 0000000..f54cd1e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__inherit__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__inherit__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__inherit__graph.md5 new file mode 100644 index 0000000..fc602d9 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__inherit__graph.md5 @@ -0,0 +1 @@ +020ea7f2a76a453c10d6f0f038d526af \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__inherit__graph.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__inherit__graph.png new file mode 100644 index 0000000..5381334 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/class_unitree_camera__inherit__graph.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classes.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classes.html new file mode 100644 index 0000000..4c76edb --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classes.html @@ -0,0 +1,95 @@ + + + + + + + +UnitreeCameraSDK: Class Index + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
_ | e | g | i | p | s | u | v
+ + + + + + + + + +
  _  
+
EventHandler (glwindow)   info_camera_String   GLWindow::ScopedContext (glwindow)   
  v  
+
  g  
+
  p  
+
StereoCamera   
_Device_Point_   SystemLog   SceneWindow::Viewpoint (glwindow)   
  e  
+
GLWindow (glwindow)   PCL   GLWindow::SystemState   
  i  
+
  s  
+
  u  
+
EventDispatcher (glwindow)   
info_camera_os   SceneWindow (glwindow)   UnitreeCamera   
+
_ | e | g | i | p | s | u | v
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher-members.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher-members.html new file mode 100644 index 0000000..9920c45 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher-members.html @@ -0,0 +1,94 @@ + + + + + + + +UnitreeCameraSDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
glwindow::EventDispatcher Member List
+
+
+ +

This is the complete list of members for glwindow::EventDispatcher, including all inherited members.

+ + + + + + + + + + + + + +
EventDispatcher(const std::vector< EventHandler *> &h) (defined in glwindow::EventDispatcher)glwindow::EventDispatcherinline
handlers (defined in glwindow::EventDispatcher)glwindow::EventDispatcher
on_button_down(GLWindow &win, int btn, int state, int x, int y) (defined in glwindow::EventDispatcher)glwindow::EventDispatchervirtual
on_button_up(GLWindow &win, int btn, int state, int x, int y) (defined in glwindow::EventDispatcher)glwindow::EventDispatchervirtual
on_close(GLWindow &win) (defined in glwindow::EventDispatcher)glwindow::EventDispatchervirtual
on_key_down(GLWindow &win, int key) (defined in glwindow::EventDispatcher)glwindow::EventDispatchervirtual
on_key_up(GLWindow &win, int key) (defined in glwindow::EventDispatcher)glwindow::EventDispatchervirtual
on_mouse_move(GLWindow &win, int state, int x, int y) (defined in glwindow::EventDispatcher)glwindow::EventDispatchervirtual
on_mouse_wheel(GLWindow &win, int state, int x, int y, int dx, int dy) (defined in glwindow::EventDispatcher)glwindow::EventDispatchervirtual
on_resize(GLWindow &win, int x, int y, int w, int h) (defined in glwindow::EventDispatcher)glwindow::EventDispatchervirtual
on_text(GLWindow &win, const char *text, int len) (defined in glwindow::EventDispatcher)glwindow::EventDispatchervirtual
~EventHandler() (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher.html new file mode 100644 index 0000000..9fed335 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher.html @@ -0,0 +1,143 @@ + + + + + + + +UnitreeCameraSDK: glwindow::EventDispatcher Class Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Public Attributes | +List of all members
+
+
glwindow::EventDispatcher Class Reference
+
+
+
+Inheritance diagram for glwindow::EventDispatcher:
+
+
Inheritance graph
+ + + +
[legend]
+
+Collaboration diagram for glwindow::EventDispatcher:
+
+
Collaboration graph
+ + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

EventDispatcher (const std::vector< EventHandler *> &h)
 
+bool on_key_down (GLWindow &win, int key)
 
+bool on_key_up (GLWindow &win, int key)
 
+bool on_text (GLWindow &win, const char *text, int len)
 
+bool on_button_down (GLWindow &win, int btn, int state, int x, int y)
 
+bool on_button_up (GLWindow &win, int btn, int state, int x, int y)
 
+bool on_mouse_move (GLWindow &win, int state, int x, int y)
 
+bool on_mouse_wheel (GLWindow &win, int state, int x, int y, int dx, int dy)
 
+bool on_resize (GLWindow &win, int x, int y, int w, int h)
 
+bool on_close (GLWindow &win)
 
+ + + +

+Public Attributes

+const std::vector< EventHandler * > & handlers
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__coll__graph.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__coll__graph.map new file mode 100644 index 0000000..a0fc881 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__coll__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__coll__graph.md5 new file mode 100644 index 0000000..4d141fb --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__coll__graph.md5 @@ -0,0 +1 @@ +1913ce6d1b16797d43db04ffb64ea288 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__coll__graph.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__coll__graph.png new file mode 100644 index 0000000..723deac Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__coll__graph.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__inherit__graph.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__inherit__graph.map new file mode 100644 index 0000000..a0fc881 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__inherit__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__inherit__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__inherit__graph.md5 new file mode 100644 index 0000000..68da514 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__inherit__graph.md5 @@ -0,0 +1 @@ +56e07467f201c4e49ed45aa8f3b6710c \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__inherit__graph.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__inherit__graph.png new file mode 100644 index 0000000..723deac Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_event_dispatcher__inherit__graph.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window-members.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window-members.html new file mode 100644 index 0000000..48b40c3 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window-members.html @@ -0,0 +1,108 @@ + + + + + + + +UnitreeCameraSDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
glwindow::GLWindow Member List
+
+
+ +

This is the complete list of members for glwindow::GLWindow, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
active_context (defined in glwindow::GLWindow)glwindow::GLWindowprotectedstatic
add_handler(EventHandler *handler) (defined in glwindow::GLWindow)glwindow::GLWindow
add_window(GLWindow *win) (defined in glwindow::GLWindow)glwindow::GLWindowprotectedstatic
alive() const (defined in glwindow::GLWindow)glwindow::GLWindow
all_windows (defined in glwindow::GLWindow)glwindow::GLWindowprotectedstatic
destroy() (defined in glwindow::GLWindow)glwindow::GLWindow
draw_text(double x, double y, const char *text, int xywh[4]=0) (defined in glwindow::GLWindow)glwindow::GLWindow
GLWindow(int w=-1, int h=-1, const char *title=0) (defined in glwindow::GLWindow)glwindow::GLWindow
handle_all_events() (defined in glwindow::GLWindow)glwindow::GLWindowstatic
handle_events() (defined in glwindow::GLWindow)glwindow::GLWindow
handlers (defined in glwindow::GLWindow)glwindow::GLWindowprotected
height() const (defined in glwindow::GLWindow)glwindow::GLWindow
make_current() (defined in glwindow::GLWindow)glwindow::GLWindow
pop_context() (defined in glwindow::GLWindow)glwindow::GLWindow
prev_active (defined in glwindow::GLWindow)glwindow::GLWindowprotected
push_context() (defined in glwindow::GLWindow)glwindow::GLWindow
remove_handler(EventHandler *handler) (defined in glwindow::GLWindow)glwindow::GLWindow
remove_window(GLWindow *win) (defined in glwindow::GLWindow)glwindow::GLWindowprotectedstatic
set_position(int x, int y) (defined in glwindow::GLWindow)glwindow::GLWindow
set_size(int w, int h) (defined in glwindow::GLWindow)glwindow::GLWindow
set_title(const char *title) (defined in glwindow::GLWindow)glwindow::GLWindow
swap_buffers() (defined in glwindow::GLWindow)glwindow::GLWindow
sys_state (defined in glwindow::GLWindow)glwindow::GLWindowprotected
visible() const (defined in glwindow::GLWindow)glwindow::GLWindow
width() const (defined in glwindow::GLWindow)glwindow::GLWindow
~GLWindow() (defined in glwindow::GLWindow)glwindow::GLWindowvirtual
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window.html new file mode 100644 index 0000000..b7624bc --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window.html @@ -0,0 +1,197 @@ + + + + + + + +UnitreeCameraSDK: glwindow::GLWindow Class Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Public Member Functions | +Static Public Member Functions | +Static Protected Member Functions | +Protected Attributes | +Static Protected Attributes | +List of all members
+
+
glwindow::GLWindow Class Reference
+
+
+
+Collaboration diagram for glwindow::GLWindow:
+
+
Collaboration graph
+ + + +
[legend]
+ + + + + + +

+Classes

struct  ScopedContext
 
struct  SystemState
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

GLWindow (int w=-1, int h=-1, const char *title=0)
 
+int width () const
 
+int height () const
 
+bool visible () const
 
+bool alive () const
 
+bool make_current ()
 
+bool push_context ()
 
+void pop_context ()
 
+void swap_buffers ()
 
+void set_size (int w, int h)
 
+void set_position (int x, int y)
 
+void set_title (const char *title)
 
+void add_handler (EventHandler *handler)
 
+bool remove_handler (EventHandler *handler)
 
+void handle_events ()
 
+void destroy ()
 
+void draw_text (double x, double y, const char *text, int xywh[4]=0)
 
+ + + +

+Static Public Member Functions

+static void handle_all_events ()
 
+ + + + + +

+Static Protected Member Functions

+static void add_window (GLWindow *win)
 
+static bool remove_window (GLWindow *win)
 
+ + + + + + + +

+Protected Attributes

+SystemStatesys_state
 
+std::vector< EventHandler * > handlers
 
+GLWindowprev_active
 
+ + + + + +

+Static Protected Attributes

+static GLWindowactive_context = 0
 
+static std::vector< GLWindow * > all_windows
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window__coll__graph.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window__coll__graph.map new file mode 100644 index 0000000..42c1220 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window__coll__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window__coll__graph.md5 new file mode 100644 index 0000000..ec0bc24 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window__coll__graph.md5 @@ -0,0 +1 @@ +ee4ba1d64643994ac13d99eac09cf723 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window__coll__graph.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window__coll__graph.png new file mode 100644 index 0000000..a03641e Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_g_l_window__coll__graph.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window-members.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window-members.html new file mode 100644 index 0000000..cc5e1c4 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window-members.html @@ -0,0 +1,107 @@ + + + + + + + +UnitreeCameraSDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
glwindow::SceneWindow Member List
+
+
+ +

This is the complete list of members for glwindow::SceneWindow, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
drag_btn (defined in glwindow::SceneWindow)glwindow::SceneWindowprotected
dragging (defined in glwindow::SceneWindow)glwindow::SceneWindowprotected
drawing (defined in glwindow::SceneWindow)glwindow::SceneWindowprotected
finish_draw() (defined in glwindow::SceneWindow)glwindow::SceneWindow
inv_h0 (defined in glwindow::SceneWindow)glwindow::SceneWindowprotected
inv_w0 (defined in glwindow::SceneWindow)glwindow::SceneWindowprotected
on_button_down(GLWindow &win, int btn, int state, int x, int y) (defined in glwindow::SceneWindow)glwindow::SceneWindowprotectedvirtual
on_button_up(GLWindow &win, int btn, int state, int x, int y) (defined in glwindow::SceneWindow)glwindow::SceneWindowprotectedvirtual
on_close(GLWindow &win) (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
on_key_down(GLWindow &win, int key) (defined in glwindow::SceneWindow)glwindow::SceneWindowprotectedvirtual
on_key_up(GLWindow &win, int key) (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
on_mouse_move(GLWindow &win, int state, int x, int y) (defined in glwindow::SceneWindow)glwindow::SceneWindowprotectedvirtual
on_mouse_wheel(GLWindow &win, int state, int x, int y, int dx, int dy) (defined in glwindow::SceneWindow)glwindow::SceneWindowprotectedvirtual
on_resize(GLWindow &win, int x, int y, int w, int h) (defined in glwindow::SceneWindow)glwindow::SceneWindowprotectedvirtual
on_text(GLWindow &win, const char *text, int len) (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
SceneWindow(int width, int height, const char *title) (defined in glwindow::SceneWindow)glwindow::SceneWindow
start_draw() (defined in glwindow::SceneWindow)glwindow::SceneWindow
update() (defined in glwindow::SceneWindow)glwindow::SceneWindow
viewpoint (defined in glwindow::SceneWindow)glwindow::SceneWindow
vp0 (defined in glwindow::SceneWindow)glwindow::SceneWindowprotected
win (defined in glwindow::SceneWindow)glwindow::SceneWindow
x0 (defined in glwindow::SceneWindow)glwindow::SceneWindowprotected
y0 (defined in glwindow::SceneWindow)glwindow::SceneWindowprotected
~EventHandler() (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
~SceneWindow() (defined in glwindow::SceneWindow)glwindow::SceneWindowvirtual
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window.html new file mode 100644 index 0000000..27fc883 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window.html @@ -0,0 +1,197 @@ + + + + + + + +UnitreeCameraSDK: glwindow::SceneWindow Class Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Public Member Functions | +Public Attributes | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
glwindow::SceneWindow Class Reference
+
+
+
+Inheritance diagram for glwindow::SceneWindow:
+
+
Inheritance graph
+ + + +
[legend]
+
+Collaboration diagram for glwindow::SceneWindow:
+
+
Collaboration graph
+ + + + + + +
[legend]
+ + + + +

+Classes

struct  Viewpoint
 
+ + + + + + + + + + + + + + + + +

+Public Member Functions

SceneWindow (int width, int height, const char *title)
 
+void update ()
 
+bool start_draw ()
 
+void finish_draw ()
 
- Public Member Functions inherited from glwindow::EventHandler
+virtual bool on_key_up (GLWindow &win, int key)
 
+virtual bool on_text (GLWindow &win, const char *text, int len)
 
+virtual bool on_close (GLWindow &win)
 
+ + + + + +

+Public Attributes

+GLWindow win
 
+Viewpoint viewpoint
 
+ + + + + + + + + + + + + +

+Protected Member Functions

+bool on_key_down (GLWindow &win, int key)
 
+bool on_button_down (GLWindow &win, int btn, int state, int x, int y)
 
+bool on_button_up (GLWindow &win, int btn, int state, int x, int y)
 
+bool on_mouse_move (GLWindow &win, int state, int x, int y)
 
+bool on_mouse_wheel (GLWindow &win, int state, int x, int y, int dx, int dy)
 
+bool on_resize (GLWindow &win, int x, int y, int w, int h)
 
+ + + + + + + + + + + + + + + + + +

+Protected Attributes

+bool dragging
 
+int drag_btn
 
+int x0
 
+int y0
 
+double inv_w0
 
+double inv_h0
 
+Viewpoint vp0
 
+bool drawing
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__coll__graph.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__coll__graph.map new file mode 100644 index 0000000..4f278e3 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__coll__graph.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__coll__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__coll__graph.md5 new file mode 100644 index 0000000..7b99c0d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__coll__graph.md5 @@ -0,0 +1 @@ +d59452f13aabc9dd31e2be55c07f9f27 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__coll__graph.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__coll__graph.png new file mode 100644 index 0000000..708db5a Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__coll__graph.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__inherit__graph.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__inherit__graph.map new file mode 100644 index 0000000..46aca0e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__inherit__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__inherit__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__inherit__graph.md5 new file mode 100644 index 0000000..e6ad224 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__inherit__graph.md5 @@ -0,0 +1 @@ +f200bc9171d7649faf50a70a3f42e7a5 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__inherit__graph.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__inherit__graph.png new file mode 100644 index 0000000..bc1e199 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classglwindow_1_1_scene_window__inherit__graph.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classinfo__camera___string-members.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classinfo__camera___string-members.html new file mode 100644 index 0000000..dad9ad3 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classinfo__camera___string-members.html @@ -0,0 +1,81 @@ + + + + + + + +UnitreeCameraSDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
info_camera_String Member List
+
+
+ +

This is the complete list of members for info_camera_String, including all inherited members.

+ + + + +
iManufacturer (defined in info_camera_String)info_camera_String
iProduct (defined in info_camera_String)info_camera_String
iSerialNumber (defined in info_camera_String)info_camera_String
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classinfo__camera___string.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classinfo__camera___string.html new file mode 100644 index 0000000..a33814b --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classinfo__camera___string.html @@ -0,0 +1,94 @@ + + + + + + + +UnitreeCameraSDK: info_camera_String Class Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Attributes | +List of all members
+
+
info_camera_String Class Reference
+
+
+ + + + + + + + +

+Public Attributes

+char iManufacturer [MAX_PATH]
 
+char iProduct [MAX_PATH]
 
+char iSerialNumber [MAX_PATH]
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classinfo__camera__os-members.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classinfo__camera__os-members.html new file mode 100644 index 0000000..ec62253 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classinfo__camera__os-members.html @@ -0,0 +1,87 @@ + + + + + + + +UnitreeCameraSDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
info_camera_os Member List
+
+
+ +

This is the complete list of members for info_camera_os, including all inherited members.

+ + + + + + + + + + +
bcdDevice (defined in info_camera_os)info_camera_os
busnum (defined in info_camera_os)info_camera_os
device (defined in info_camera_os)info_camera_os
deviceID (defined in info_camera_os)info_camera_os
devnum (defined in info_camera_os)info_camera_os
icType (defined in info_camera_os)info_camera_os
location (defined in info_camera_os)info_camera_os
pid (defined in info_camera_os)info_camera_os
vid (defined in info_camera_os)info_camera_os
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classinfo__camera__os.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classinfo__camera__os.html new file mode 100644 index 0000000..1fdecd6 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/classinfo__camera__os.html @@ -0,0 +1,112 @@ + + + + + + + +UnitreeCameraSDK: info_camera_os Class Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Attributes | +List of all members
+
+
info_camera_os Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+WORD vid
 
+WORD pid
 
+WORD bcdDevice
 
+char deviceID [MAX_PATH]
 
+char device [MAX_PATH]
 
+BYTE icType
 
+uint64_t busnum
 
+uint64_t devnum
 
+char location [MAX_PATH]
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/closed.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/closed.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_000005_000007.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_000005_000007.html new file mode 100644 index 0000000..02f6746 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_000005_000007.html @@ -0,0 +1,75 @@ + + + + + + + +UnitreeCameraSDK: examples -> include Relation + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+

examples → include Relation

File in examplesIncludes file in include
example_getCalibParamsFile.ccUnitreeCameraSDK.hpp
example_getDepthFrame.ccUnitreeCameraSDK.hpp
example_getPointCloud.ccUnitreeCameraSDK.hpp
example_getRawFrame.ccUnitreeCameraSDK.hpp
example_getRectFrame.ccUnitreeCameraSDK.hpp
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_000008_000007.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_000008_000007.html new file mode 100644 index 0000000..67452a4 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_000008_000007.html @@ -0,0 +1,75 @@ + + + + + + + +UnitreeCameraSDK: src -> include Relation + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+

src → include Relation

File in srcIncludes file in include
StereoCameraCommon.ccStereoCameraCommon.hpp
UnitreeCameraSDK.ccUnitreeCameraSDK.hpp
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_000009_000007.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_000009_000007.html new file mode 100644 index 0000000..bd2bfe5 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_000009_000007.html @@ -0,0 +1,75 @@ + + + + + + + +UnitreeCameraSDK: tools -> include Relation + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+

tools → include Relation

File in toolsIncludes file in include
tool_flashCalibParams.ccUnitreeCameraSDK.hpp
tool_flashFw.ccUnitreeCameraSDK.hpp
tool_rosGetPointCloud.ccUnitreeCameraSDK.hpp
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_209c714a154efd8d40a59e92e6a74502.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_209c714a154efd8d40a59e92e6a74502.html new file mode 100644 index 0000000..d1f7e05 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_209c714a154efd8d40a59e92e6a74502.html @@ -0,0 +1,79 @@ + + + + + + + +UnitreeCameraSDK: build/CMakeFiles/3.14.6/CompilerIdC Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
CompilerIdC Directory Reference
+
+
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_3a56b08581502e42e7c33d229017cb82.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_3a56b08581502e42e7c33d229017cb82.html new file mode 100644 index 0000000..3c2b6c5 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_3a56b08581502e42e7c33d229017cb82.html @@ -0,0 +1,83 @@ + + + + + + + +UnitreeCameraSDK: build/CMakeFiles/3.14.6 Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
3.14.6 Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html new file mode 100644 index 0000000..9a2fd63 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html @@ -0,0 +1,89 @@ + + + + + + + +UnitreeCameraSDK: tools Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tools Directory Reference
+
+
+
+Directory dependency graph for tools:
+
+
tools
+ + + + + +
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.map new file mode 100644 index 0000000..8d3c1b1 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.md5 new file mode 100644 index 0000000..df41d98 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.md5 @@ -0,0 +1 @@ +96d321e00c4e5ae1269226ed3cd0f67d \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.png new file mode 100644 index 0000000..1fb6f5e Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4fef79e7177ba769987a8da36c892c5f.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4fef79e7177ba769987a8da36c892c5f.html new file mode 100644 index 0000000..03894f6 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_4fef79e7177ba769987a8da36c892c5f.html @@ -0,0 +1,83 @@ + + + + + + + +UnitreeCameraSDK: build Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
build Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_63772b626f2709090f0bdca0f40827b4.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_63772b626f2709090f0bdca0f40827b4.html new file mode 100644 index 0000000..f803c60 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_63772b626f2709090f0bdca0f40827b4.html @@ -0,0 +1,79 @@ + + + + + + + +UnitreeCameraSDK: build/CMakeFiles Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
CMakeFiles Directory Reference
+
+
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 0000000..87e4041 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,96 @@ + + + + + + + +UnitreeCameraSDK: src Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
src Directory Reference
+
+
+
+Directory dependency graph for src:
+
+
src
+ + + + + +
+ + + + + +

+Files

file  StereoCameraCommon.cc
 This file is part of UnitreeCameraSDK, which implement stereo vision algorithm.
 
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map new file mode 100644 index 0000000..d5f8479 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 new file mode 100644 index 0000000..2576efc --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 @@ -0,0 +1 @@ +9c56f5576d0bd1b883527830dcc0dafd \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png new file mode 100644 index 0000000..4018e40 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_8a35f475ed9d8a5443c1993b236eb8f6.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_8a35f475ed9d8a5443c1993b236eb8f6.html new file mode 100644 index 0000000..44cb71f --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_8a35f475ed9d8a5443c1993b236eb8f6.html @@ -0,0 +1,79 @@ + + + + + + + +UnitreeCameraSDK: build/CMakeFiles/3.14.6/CompilerIdCXX Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
CompilerIdCXX Directory Reference
+
+
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_8d5e63337d9bc0375b6fa20fd80d83ec.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_8d5e63337d9bc0375b6fa20fd80d83ec.html new file mode 100644 index 0000000..3bd3853 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_8d5e63337d9bc0375b6fa20fd80d83ec.html @@ -0,0 +1,79 @@ + + + + + + + +UnitreeCameraSDK: examples/glViewer Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
glViewer Directory Reference
+
+
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4.html new file mode 100644 index 0000000..4463f26 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4.html @@ -0,0 +1,112 @@ + + + + + + + +UnitreeCameraSDK: examples Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
examples Directory Reference
+
+
+
+Directory dependency graph for examples:
+
+
examples
+ + + + + + +
+ + +

+Directories

+ + + + + + + + + + + + + + + + +

+Files

file  example_getCalibParamsFile.cc
 This file is part of UnitreeCameraSDK.
 
file  example_getDepthFrame.cc
 This file is part of UnitreeCameraSDK.
 
file  example_getPointCloud.cc
 This file is part of UnitreeCameraSDK.
 
file  example_getRawFrame.cc
 This file is part of UnitreeCameraSDK.
 
file  example_getRectFrame.cc
 This file is part of UnitreeCameraSDK.
 
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4_dep.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4_dep.map new file mode 100644 index 0000000..f228784 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4_dep.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4_dep.md5 new file mode 100644 index 0000000..60711e1 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4_dep.md5 @@ -0,0 +1 @@ +da4da957ccd48cc377870afce1819bb4 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4_dep.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4_dep.png new file mode 100644 index 0000000..84ce407 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4_dep.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..e574c73 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,92 @@ + + + + + + + +UnitreeCameraSDK: include Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
include Directory Reference
+
+
+ + + + + + + + + + + +

+Files

file  StereoCameraCommon.hpp [code]
 This file is part of UnitreeCameraSDK, which declare stereo camera algorithm APIs.
 
file  SystemLog.hpp [code]
 This file is part of UnitreeCameraSDK, which declare the APIs of log system.
 
file  UnitreeCameraSDK.hpp [code]
 This file is part of UnitreeCameraSDK, which declare unitree camera APIs.
 
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/doc.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/doc.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/doc.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/doxygen.css b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/doxygen.css new file mode 100644 index 0000000..4f1ab91 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/doxygen.css @@ -0,0 +1,1596 @@ +/* The standard CSS for doxygen 1.8.13 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + + +/* @end */ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/doxygen.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/doxygen.png new file mode 100644 index 0000000..3ff17d8 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/doxygen.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dynsections.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dynsections.js new file mode 100644 index 0000000..85e1836 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +UnitreeCameraSDK: examples/example_getCalibParamsFile.cc File Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
example_getCalibParamsFile.cc File Reference
+
+
+ +

This file is part of UnitreeCameraSDK. +More...

+
#include <UnitreeCameraSDK.hpp>
+#include <unistd.h>
+
+Include dependency graph for example_getCalibParamsFile.cc:
+
+
+ + + + + +
+
+ + + +

+Functions

int main (int argc, char *argv[])
 
+

Detailed Description

+

This file is part of UnitreeCameraSDK.

+

This example that how to get camera internal parameters

Author
ZhangChunyang
+
Date
2021.07.31
+
Version
1.0.1
+ +

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char * argv[] 
)
+
+

< init UnitreeCamera object by config file

+

< get camera open state

+

< disable image h264 encoding and share memory sharing

+

< wait parameters initialization finished

+

< save parameters to output_camCalibParams.yaml

+

< stop camera capturing

+ +
+
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_calib_params_file_8cc__incl.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_calib_params_file_8cc__incl.map new file mode 100644 index 0000000..7d43765 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_calib_params_file_8cc__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_calib_params_file_8cc__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_calib_params_file_8cc__incl.md5 new file mode 100644 index 0000000..a535110 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_calib_params_file_8cc__incl.md5 @@ -0,0 +1 @@ +8dfd6022b06a01184572814d12874ff8 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_calib_params_file_8cc__incl.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_calib_params_file_8cc__incl.png new file mode 100644 index 0000000..1db53b7 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_calib_params_file_8cc__incl.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc.html new file mode 100644 index 0000000..550540c --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc.html @@ -0,0 +1,144 @@ + + + + + + + +UnitreeCameraSDK: examples/example_getDepthFrame.cc File Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
example_getDepthFrame.cc File Reference
+
+
+ +

This file is part of UnitreeCameraSDK. +More...

+
#include <UnitreeCameraSDK.hpp>
+#include <unistd.h>
+
+Include dependency graph for example_getDepthFrame.cc:
+
+
+ + + + + +
+
+ + + +

+Functions

int main (int argc, char *argv[])
 
+

Detailed Description

+

This file is part of UnitreeCameraSDK.

+

This example that how to get depth frame

Author
ZhangChunyang
+
Date
2021.07.31
+
Version
1.0.1
+ +

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char * argv[] 
)
+
+

< init UnitreeCamera object by config file

+

< get camera open state

+

< disable image h264 encoding and share memory sharing

+

< start disparity computing

+

< get stereo camera depth image

+

< stop disparity computing

+

< stop camera capturing

+ +
+
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc__incl.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc__incl.map new file mode 100644 index 0000000..47f0f5a --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc__incl.md5 new file mode 100644 index 0000000..9b43ab7 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc__incl.md5 @@ -0,0 +1 @@ +49c60eec896c657506cfc99e97a1facd \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc__incl.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc__incl.png new file mode 100644 index 0000000..05cc59a Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_depth_frame_8cc__incl.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc.html new file mode 100644 index 0000000..1508d03 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc.html @@ -0,0 +1,140 @@ + + + + + + + +UnitreeCameraSDK: examples/example_getPointCloud.cc File Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
example_getPointCloud.cc File Reference
+
+
+ +

This file is part of UnitreeCameraSDK. +More...

+
#include <GL/gl.h>
+#include <signal.h>
+#include <cerrno>
+#include <cfenv>
+#include <unistd.h>
+#include "glViewer/scenewindow.hpp"
+#include <UnitreeCameraSDK.hpp>
+
+Include dependency graph for example_getPointCloud.cc:
+
+
+ + + + + + + +
+
+ + + + +

+Macros

+#define RGB_PCL   false
 Color Point Cloud Enable Flag.
 
+ + + + + + + + + +

+Functions

+void DrawScene (const std::vector< PCLType > &pcl_vec)
 
+void DrawScene (const std::vector< cv::Vec3f > &pcl_vec)
 
+void ctrl_c_handler (int s)
 
+int main (int argc, char *argv[])
 
+ + + +

+Variables

+bool killSignalFlag = false
 
+

Detailed Description

+

This file is part of UnitreeCameraSDK.

+

This example that how to get camera point cloud.

Author
ZhangChunyang
+
Date
2021.07.31
+
Version
1.0.1
+ +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc__incl.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc__incl.map new file mode 100644 index 0000000..4291d37 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc__incl.md5 new file mode 100644 index 0000000..4be41b2 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc__incl.md5 @@ -0,0 +1 @@ +c9ebdf0f7db31453d2b2f129e7e2c3fb \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc__incl.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc__incl.png new file mode 100644 index 0000000..481654e Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_point_cloud_8cc__incl.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc.html new file mode 100644 index 0000000..fb89634 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc.html @@ -0,0 +1,143 @@ + + + + + + + +UnitreeCameraSDK: examples/example_getRawFrame.cc File Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
example_getRawFrame.cc File Reference
+
+
+ +

This file is part of UnitreeCameraSDK. +More...

+
#include <UnitreeCameraSDK.hpp>
+#include <unistd.h>
+
+Include dependency graph for example_getRawFrame.cc:
+
+
+ + + + + +
+
+ + + +

+Functions

int main (int argc, char *argv[])
 
+

Detailed Description

+

This file is part of UnitreeCameraSDK.

+

This example that how to get camera raw frame.

Author
ZhangChunyang
+
Date
2021.07.31
+
Version
1.0.1
+ +

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char * argv[] 
)
+
+

< init camera by device node number

+

< set camera frame size

+

< set camera frame rate

+

< start camera capturing

+

< get camera raw image

+

< stop camera capturing

+ +
+
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc__incl.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc__incl.map new file mode 100644 index 0000000..4366bf5 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc__incl.md5 new file mode 100644 index 0000000..8a7f0e0 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc__incl.md5 @@ -0,0 +1 @@ +b6ef2bde5c4bc73126be8ca1bdce1d38 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc__incl.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc__incl.png new file mode 100644 index 0000000..f788cd7 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_raw_frame_8cc__incl.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc.html new file mode 100644 index 0000000..00dea59 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc.html @@ -0,0 +1,148 @@ + + + + + + + +UnitreeCameraSDK: examples/example_getRectFrame.cc File Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
example_getRectFrame.cc File Reference
+
+
+ +

This file is part of UnitreeCameraSDK. +More...

+
#include <UnitreeCameraSDK.hpp>
+#include <unistd.h>
+
+Include dependency graph for example_getRectFrame.cc:
+
+
+ + + + + +
+
+ + + +

+Functions

int main (int argc, char *argv[])
 
+

Detailed Description

+

This file is part of UnitreeCameraSDK.

+

This example that how to get depth frame

Author
ZhangChunyang
+
Date
2021.07.31
+
Version
1.0.1
+ +

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char * argv[] 
)
+
+

< default 0 -> /dev/video0

+

< default frame size 1856x800

+

< default camera fps: 30

+

< init camera by device node number

+

< get camera open state

+

< set camera frame size

+

< set camera camera fps

+

< set camera rectify frame size

+

< disable image h264 encoding and share memory sharing

+

< get longlat rectify left,right and fisheye rectify feim

+

< stop camera capturing

+ +
+
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc__incl.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc__incl.map new file mode 100644 index 0000000..5dd851f --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc__incl.md5 new file mode 100644 index 0000000..bd38a97 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc__incl.md5 @@ -0,0 +1 @@ +f8143a2d8d82000710b69e1b2c8a579d \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc__incl.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc__incl.png new file mode 100644 index 0000000..bf1a448 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/example__get_rect_frame_8cc__incl.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/files.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/files.html new file mode 100644 index 0000000..170410d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/files.html @@ -0,0 +1,95 @@ + + + + + + + +UnitreeCameraSDK: File List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + +
  examples
  glViewer
 glwindow.hpp
 scenewindow.hpp
 example_getCalibParamsFile.ccThis file is part of UnitreeCameraSDK
 example_getDepthFrame.ccThis file is part of UnitreeCameraSDK
 example_getPointCloud.ccThis file is part of UnitreeCameraSDK
 example_getRawFrame.ccThis file is part of UnitreeCameraSDK
 example_getRectFrame.ccThis file is part of UnitreeCameraSDK
  include
 StereoCameraCommon.hppThis file is part of UnitreeCameraSDK, which declare stereo camera algorithm APIs
 SystemLog.hppThis file is part of UnitreeCameraSDK, which declare the APIs of log system
 UnitreeCameraSDK.hppThis file is part of UnitreeCameraSDK, which declare unitree camera APIs
  src
 camera_api.h
 StereoCameraCommon.ccThis file is part of UnitreeCameraSDK, which implement stereo vision algorithm
+
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/folderclosed.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/folderclosed.png new file mode 100644 index 0000000..bb8ab35 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/folderclosed.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/folderopen.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/folderopen.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/functions.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/functions.html new file mode 100644 index 0000000..b731c73 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/functions.html @@ -0,0 +1,244 @@ + + + + + + + +UnitreeCameraSDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+ + +

- d -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- u -

+ + +

- ~ -

+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/functions_func.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/functions_func.html new file mode 100644 index 0000000..bcabf67 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/functions_func.html @@ -0,0 +1,234 @@ + + + + + + + +UnitreeCameraSDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- c -

+ + +

- d -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- r -

+ + +

- s -

+ + +

- u -

+ + +

- ~ -

+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/functions_vars.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/functions_vars.html new file mode 100644 index 0000000..323c93e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/functions_vars.html @@ -0,0 +1,79 @@ + + + + + + + +UnitreeCameraSDK: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/globals.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/globals.html new file mode 100644 index 0000000..5ee6ec0 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/globals.html @@ -0,0 +1,85 @@ + + + + + + + +UnitreeCameraSDK: File Members + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented file members with links to the documentation:
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/globals_defs.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/globals_defs.html new file mode 100644 index 0000000..889f298 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/globals_defs.html @@ -0,0 +1,76 @@ + + + + + + + +UnitreeCameraSDK: File Members + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/globals_enum.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/globals_enum.html new file mode 100644 index 0000000..4b759a8 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/globals_enum.html @@ -0,0 +1,76 @@ + + + + + + + +UnitreeCameraSDK: File Members + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/globals_func.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/globals_func.html new file mode 100644 index 0000000..f150ba4 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/globals_func.html @@ -0,0 +1,79 @@ + + + + + + + +UnitreeCameraSDK: File Members + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/glwindow_8hpp_source.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/glwindow_8hpp_source.html new file mode 100644 index 0000000..0c3fe86 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/glwindow_8hpp_source.html @@ -0,0 +1,85 @@ + + + + + + + +UnitreeCameraSDK: examples/glViewer/glwindow.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
glwindow.hpp
+
+
+
1 // Copyright (c) Ethan Eade, https://bitbucket.org/ethaneade/glwindow
2 
3 #pragma once
4 
5 #include <vector>
6 
7 namespace glwindow {
8 
9  namespace ButtonEvent {
10  enum Buttons {
11  LEFT=1, MIDDLE=2, RIGHT=4, WHEEL=8,
12  MODKEY_CTRL=16, MODKEY_SHIFT=32,
13  };
14  };
15 
16  namespace KeyCode {
17  enum Codes {
18  BACKSPACE=0x8,
19  TAB=0x9,
20  ENTER=0xD,
21  ESCAPE=0x1B,
22  DEL=0x7F,
23 
24  SHIFT=0xFF00,
25  CTRL,
26  ALT,
27  SUPER,
28  CAPSLOCK,
29  LEFT,
30  UP,
31  RIGHT,
32  DOWN,
33  };
34  };
35 
36 
37  class GLWindow;
38 
39  struct EventHandler
40  {
41  public:
42  virtual ~EventHandler() {}
43  virtual bool on_key_down(GLWindow& win, int key) { return false; }
44  virtual bool on_key_up(GLWindow& win, int key) { return false; }
45  virtual bool on_text(GLWindow& win, const char *text, int len) { return false; }
46  virtual bool on_button_down(GLWindow& win, int btn, int state, int x, int y) { return false; }
47  virtual bool on_button_up(GLWindow& win, int btn, int state, int x, int y) { return false; }
48  virtual bool on_mouse_move(GLWindow& win, int state, int x, int y) { return false; }
49  virtual bool on_mouse_wheel(GLWindow& win, int state, int x, int y, int dx, int dy) { return false; }
50  virtual bool on_resize(GLWindow& win, int x, int y, int w, int h) { return false; }
51  virtual bool on_close(GLWindow& win) { return false; }
52  };
53 
54  // Dispatches to each handler in reverse order until one returns true
56  {
57  public:
58  const std::vector<EventHandler*> &handlers;
59  EventDispatcher(const std::vector<EventHandler*> &h) :
60  handlers(h) {}
61  bool on_key_down(GLWindow& win, int key);
62  bool on_key_up(GLWindow& win, int key);
63  bool on_text(GLWindow& win, const char *text, int len);
64  bool on_button_down(GLWindow& win, int btn, int state, int x, int y);
65  bool on_button_up(GLWindow& win, int btn, int state, int x, int y);
66  bool on_mouse_move(GLWindow& win, int state, int x, int y);
67  bool on_mouse_wheel(GLWindow& win, int state, int x, int y, int dx, int dy);
68  bool on_resize(GLWindow& win, int x, int y, int w, int h);
69  bool on_close(GLWindow& win);
70  };
71 
72  class GLWindow
73  {
74  public:
75  GLWindow(int w=-1, int h=-1, const char *title=0);
76  virtual ~GLWindow();
77 
78  int width() const;
79  int height() const;
80  bool visible() const;
81  bool alive() const;
82 
83  bool make_current();
84  bool push_context();
85  void pop_context();
86 
87  struct ScopedContext {
88  GLWindow &win;
89  ScopedContext(GLWindow &w) : win(w) {
90  win.push_context();
91  }
92  ~ScopedContext() {
93  win.pop_context();
94  }
95  };
96 
97  void swap_buffers();
98 
99  void set_size(int w, int h);
100  void set_position(int x, int y);
101 
102  void set_title(const char* title);
103 
104  void add_handler(EventHandler* handler);
105  bool remove_handler(EventHandler *handler);
106  void handle_events();
107  static void handle_all_events();
108 
109  void destroy();
110 
111  void draw_text(double x, double y, const char *text, int xywh[4]=0);
112  protected:
113  struct SystemState;
114  SystemState *sys_state;
115 
116  std::vector<EventHandler*> handlers;
117  GLWindow *prev_active;
118 
119  static GLWindow *active_context;
120  static std::vector<GLWindow*> all_windows;
121  static void add_window(GLWindow *win);
122  static bool remove_window(GLWindow *win);
123  };
124 }
Definition: glwindow.hpp:7
+
Definition: glwindow.hpp:39
+
Definition: glwindow.hpp:55
+
Definition: glwindow.hpp:72
+
Definition: glwindow_x11.cpp:176
+
Definition: glwindow.hpp:87
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/graph_legend.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/graph_legend.html new file mode 100644 index 0000000..693557b --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/graph_legend.html @@ -0,0 +1,104 @@ + + + + + + + +UnitreeCameraSDK: Graph Legend + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree camera sdk apis
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
class Invisible { };
/*! Truncated class, inheritance relation is hidden */
class Truncated : public Invisible { };
/* Class not documented with doxygen comments */
class Undocumented { };
/*! Class that is inherited using public inheritance */
class PublicBase : public Truncated { };
/*! A template class */
template<class T> class Templ { };
/*! Class that is inherited using protected inheritance */
class ProtectedBase { };
/*! Class that is inherited using private inheritance */
class PrivateBase { };
/*! Class that is used by the Inherited class */
class Used { };
/*! Super class that inherits a number of other classes */
class Inherited : public PublicBase,
protected ProtectedBase,
private PrivateBase,
public Undocumented,
public Templ<int>
{
private:
Used *m_usedClass;
};

This will result in the following graph:

+
+ +
+

The boxes in the above graph have the following meaning:

+ +

The arrows have the following meaning:

+ +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/graph_legend.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/graph_legend.md5 new file mode 100644 index 0000000..a06ed05 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/graph_legend.md5 @@ -0,0 +1 @@ +387ff8eb65306fa251338d3c9bd7bfff \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/graph_legend.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/graph_legend.png new file mode 100644 index 0000000..81788d8 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/graph_legend.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/hierarchy.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/hierarchy.html new file mode 100644 index 0000000..0bb1af6 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/hierarchy.html @@ -0,0 +1,95 @@ + + + + + + + +UnitreeCameraSDK: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
+

Go to the graphical class hierarchy

+This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12]
+ + + + + + + + + + + + + + +
 C_Device_Point_
 Cglwindow::EventHandler
 Cglwindow::EventDispatcher
 Cglwindow::SceneWindow
 Cglwindow::GLWindow
 Cinfo_camera_os
 Cinfo_camera_String
 CPCLThis struct is used for RGB point cloud capture and display
 Cglwindow::GLWindow::ScopedContext
 CStereoCameraThis class integrate camera control and stereo vision algorithm
 CUnitreeCamera
 CSystemLog
 Cglwindow::GLWindow::SystemState
 Cglwindow::SceneWindow::Viewpoint
+
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/index.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/index.html new file mode 100644 index 0000000..227d6cf --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/index.html @@ -0,0 +1,85 @@ + + + + + + + +UnitreeCameraSDK: Introduction + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree camera sdk apis
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Introduction
+
+
+

Unitree Robotics is a energetic start-up company that focuses on the development, production and sales of high-performance quadruped robots. It has been interviewed by BBC and CCTV, and is one of the earliest company to publicly sell quadruped robots.

+

The company has an outstanding leadership in developing robot core components, motion control, robot perception, etc.

+

We attaches great importance to research and development, and thus independently developed the motors, reducers, controllers, and even some sensors of the quadruped robot.

+

1.Overview

+

UnitreeCameraSDK 1.0 is a cross-platform library for unitree depth cameras

+

The SDK allows depth and color streaming, and provides intrinsic calibration information. The library also offers pointcloud, depth aligned to color and vise-versa.

+

2.Dependencies

+

OpenCV, version: equal or lager than 4 Cmake, version: 2.8

+

2.Build

+
cd UnitreeCameraSDK;
mkdir build; cd build;
cmake ..; make

3.Run Examples

+

Get Camera Raw Frame:

cd UnitreeCameraSDK;
./bin/example_getRawFrame

Get Calibration Parameters File

cd UnitreeCameraSDK;
./bin/example_getCalibParamsFile

Get Rectify Frame

cd UnitreeCameraSDK;
./bin/example_getRectFrame

Get Depth Frame

cd UnitreeCameraSDK;
./bin/example_getDepthFrame

Get Point Cloud:

cd UnitreeCameraSDK;
./bin/example_getPointCloud
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_0.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_0.map new file mode 100644 index 0000000..774ae01 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_0.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_0.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_0.md5 new file mode 100644 index 0000000..73c0382 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_0.md5 @@ -0,0 +1 @@ +61dd634668d43833ad1b7e4b152b9c1c \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_0.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_0.png new file mode 100644 index 0000000..c40bfc5 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_0.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_1.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_1.map new file mode 100644 index 0000000..235e06c --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_1.map @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_1.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_1.md5 new file mode 100644 index 0000000..cbcc577 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_1.md5 @@ -0,0 +1 @@ +710b5fdf740fae65d041a470d0b31bd9 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_1.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_1.png new file mode 100644 index 0000000..6758e5b Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_1.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_10.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_10.map new file mode 100644 index 0000000..e60ae33 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_10.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_10.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_10.md5 new file mode 100644 index 0000000..3c829db --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_10.md5 @@ -0,0 +1 @@ +a0e3e915a94984f0717583209626075e \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_10.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_10.png new file mode 100644 index 0000000..b274f17 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_10.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_2.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_2.map new file mode 100644 index 0000000..4987089 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_2.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_2.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_2.md5 new file mode 100644 index 0000000..a0f856e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_2.md5 @@ -0,0 +1 @@ +976e5acfa425de17b8ade4a9616cba86 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_2.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_2.png new file mode 100644 index 0000000..671ff90 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_2.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_3.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_3.map new file mode 100644 index 0000000..f587196 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_3.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_3.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_3.md5 new file mode 100644 index 0000000..5b91912 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_3.md5 @@ -0,0 +1 @@ +8155cd923783d31c3e24a0fe4a8f5fd2 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_3.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_3.png new file mode 100644 index 0000000..7bae101 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_3.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_4.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_4.map new file mode 100644 index 0000000..405ecee --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_4.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_4.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_4.md5 new file mode 100644 index 0000000..934a788 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_4.md5 @@ -0,0 +1 @@ +317b71c1594dd72211cab8522a994166 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_4.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_4.png new file mode 100644 index 0000000..7bbc17e Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_4.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_5.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_5.map new file mode 100644 index 0000000..e7e9066 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_5.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_5.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_5.md5 new file mode 100644 index 0000000..a8b1b1d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_5.md5 @@ -0,0 +1 @@ +c88b8993c22736e30753fb0024d45fd0 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_5.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_5.png new file mode 100644 index 0000000..8cfed5f Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_5.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_6.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_6.map new file mode 100644 index 0000000..3ab8239 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_6.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_6.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_6.md5 new file mode 100644 index 0000000..aad523b --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_6.md5 @@ -0,0 +1 @@ +8266cffa382ccf24901c718932d88853 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_6.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_6.png new file mode 100644 index 0000000..59389ac Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_6.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_7.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_7.map new file mode 100644 index 0000000..43d0283 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_7.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_7.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_7.md5 new file mode 100644 index 0000000..9b732e4 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_7.md5 @@ -0,0 +1 @@ +cd1ee94555a24f3d256b39e86eb6d022 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_7.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_7.png new file mode 100644 index 0000000..eff4392 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_7.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_8.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_8.map new file mode 100644 index 0000000..a83666e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_8.map @@ -0,0 +1,3 @@ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_8.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_8.md5 new file mode 100644 index 0000000..18e0786 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_8.md5 @@ -0,0 +1 @@ +0172852549ba2b35d1a9e308b9333714 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_8.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_8.png new file mode 100644 index 0000000..83a07cf Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_8.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_9.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_9.map new file mode 100644 index 0000000..0772f31 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_9.map @@ -0,0 +1,4 @@ + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_9.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_9.md5 new file mode 100644 index 0000000..ea8545d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_9.md5 @@ -0,0 +1 @@ +c3bc484aaf9f99c46c4d9d18867f6d7c \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_9.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_9.png new file mode 100644 index 0000000..cfdb435 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherit_graph_9.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherits.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherits.html new file mode 100644 index 0000000..045e76d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/inherits.html @@ -0,0 +1,137 @@ + + + + + + + +UnitreeCameraSDK: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+ + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + +
+ + + +
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/jquery.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/jquery.js new file mode 100644 index 0000000..f5343ed --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/jquery.js @@ -0,0 +1,87 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + + + +
+
+
scenewindow.hpp
+
+
+
1 // Copyright (c) Ethan Eade, https://bitbucket.org/ethaneade/glwindow
2 
3 #pragma once
4 
5 #include "glwindow.hpp"
6 
7 namespace glwindow
8 {
9 
10  class SceneWindow : public EventHandler
11  {
12  public:
13 
14  struct Viewpoint
15  {
16  double target[3];
17  double azimuth, elevation, distance;
18  Viewpoint();
19  };
20 
21  SceneWindow(int width, int height, const char *title);
22  virtual ~SceneWindow();
23 
24  void update();
25 
26  bool start_draw();
27  void finish_draw();
28 
29  GLWindow win;
30  Viewpoint viewpoint;
31 
32  protected:
33  bool on_key_down(GLWindow& win, int key);
34  bool on_button_down(GLWindow& win, int btn, int state, int x, int y);
35  bool on_button_up(GLWindow& win, int btn, int state, int x, int y);
36  bool on_mouse_move(GLWindow& win, int state, int x, int y);
37  bool on_mouse_wheel(GLWindow& win, int state, int x, int y, int dx, int dy);
38  bool on_resize(GLWindow& win, int x, int y, int w, int h);
39 
40  bool dragging;
41  int drag_btn;
42  int x0, y0;
43  double inv_w0, inv_h0;
44  Viewpoint vp0;
45 
46  bool drawing;
47  };
48 
49 }
Definition: glwindow.hpp:7
+
Definition: glwindow.hpp:39
+
Definition: glwindow.hpp:72
+
Definition: scenewindow.hpp:14
+
Definition: scenewindow.hpp:10
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_0.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_0.html new file mode 100644 index 0000000..f25360b --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_0.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_0.js new file mode 100644 index 0000000..7cf7879 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['introduction',['Introduction',['../index.html',1,'']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_1.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_1.html new file mode 100644 index 0000000..b13f0f7 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_1.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_1.js new file mode 100644 index 0000000..5ed2b5d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['checkfirmwareversion',['checkFirmwareVersion',['../class_unitree_camera.html#a45e182540ab4bb59b68fb07c23bdd91f',1,'UnitreeCamera']]], + ['clr',['clr',['../struct_p_c_l.html#a6555550c790378b130273dd6ae3a2158',1,'PCL']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_2.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_2.html new file mode 100644 index 0000000..9543c57 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_2.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_2.js new file mode 100644 index 0000000..605cf07 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['debugtimeerror',['debugTimeError',['../class_system_log.html#ae1cbe2de51efe22068e2e047396a72dd',1,'SystemLog']]], + ['debugtimeinfo',['debugTimeInfo',['../class_system_log.html#ad79238fdcc9a301093d6fa32884d1ae1',1,'SystemLog']]], + ['debugtimewarning',['debugTimeWarning',['../class_system_log.html#a08dff4b478ed29a39d584d3b7f21ddfb',1,'SystemLog']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_3.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_3.html new file mode 100644 index 0000000..03405c0 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_3.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_3.js new file mode 100644 index 0000000..4d759ee --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_3.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['eventdispatcher',['EventDispatcher',['../classglwindow_1_1_event_dispatcher.html',1,'glwindow']]], + ['eventhandler',['EventHandler',['../structglwindow_1_1_event_handler.html',1,'glwindow']]], + ['example_5fgetcalibparamsfile_2ecc',['example_getCalibParamsFile.cc',['../example__get_calib_params_file_8cc.html',1,'']]], + ['example_5fgetdepthframe_2ecc',['example_getDepthFrame.cc',['../example__get_depth_frame_8cc.html',1,'']]], + ['example_5fgetpointcloud_2ecc',['example_getPointCloud.cc',['../example__get_point_cloud_8cc.html',1,'']]], + ['example_5fgetrawframe_2ecc',['example_getRawFrame.cc',['../example__get_raw_frame_8cc.html',1,'']]], + ['example_5fgetrectframe_2ecc',['example_getRectFrame.cc',['../example__get_rect_frame_8cc.html',1,'']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_4.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_4.html new file mode 100644 index 0000000..8e1f4b9 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_4.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_4.js new file mode 100644 index 0000000..945e0db --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_4.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['getcalibparams',['getCalibParams',['../class_stereo_camera.html#a61ea11e661cca31acb780edbbba1d32e',1,'StereoCamera']]], + ['getdepthframe',['getDepthFrame',['../class_stereo_camera.html#aa0bd7e3a7ab4fcf2598ac4e780a27cb3',1,'StereoCamera']]], + ['getdevicenode',['getDeviceNode',['../class_stereo_camera.html#a34d50c8166cf8f3f76fff5789f8f1eee',1,'StereoCamera']]], + ['getloglevel',['getLogLevel',['../class_stereo_camera.html#a105495e27d95f3f905ef1de0f9866c70',1,'StereoCamera']]], + ['getposnumber',['getPosNumber',['../class_stereo_camera.html#ab844029084a9a9de0996c1e7b24c258c',1,'StereoCamera']]], + ['getrawframe',['getRawFrame',['../class_stereo_camera.html#ac8fbb6e1ebd828b1640d43ad7cdc0f9c',1,'StereoCamera']]], + ['getrawframerate',['getRawFrameRate',['../class_stereo_camera.html#ac92c3a60ae0c38e203c81bb2a2738eb4',1,'StereoCamera']]], + ['getrawframesize',['getRawFrameSize',['../class_stereo_camera.html#a38c990b26167c2f7823b20f44b1a8fa7',1,'StereoCamera']]], + ['getserialnumber',['getSerialNumber',['../class_stereo_camera.html#a3cb43015d545854892dd2e4057f5b2be',1,'StereoCamera']]], + ['getstereoframe',['getStereoFrame',['../class_stereo_camera.html#aa25f48d95ba8d1c71fb0e40b53f68379',1,'StereoCamera']]], + ['glwindow',['GLWindow',['../classglwindow_1_1_g_l_window.html',1,'glwindow']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_5.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_5.html new file mode 100644 index 0000000..89a879e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_5.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_5.js new file mode 100644 index 0000000..06549df --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_5.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['imagerect',['ImageRect',['../_stereo_camera_common_8cc.html#a883d5937720f572dee2c22374bf7190b',1,'StereoCameraCommon.cc']]], + ['introduction',['Introduction',['../index.html',1,'']]], + ['info_5fcamera_5fos',['info_camera_os',['../classinfo__camera__os.html',1,'']]], + ['info_5fcamera_5fstring',['info_camera_String',['../classinfo__camera___string.html',1,'']]], + ['isopened',['isOpened',['../class_stereo_camera.html#a47c0d9ee727f13af5d348db9f217a44b',1,'StereoCamera']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_6.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_6.html new file mode 100644 index 0000000..6afac06 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_6.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_6.js new file mode 100644 index 0000000..64bf2cb --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['loadcalibparams',['loadCalibParams',['../class_stereo_camera.html#afb896942fb7fe1ea33c80ec9dcefa6a0',1,'StereoCamera']]], + ['loadconfig',['loadConfig',['../class_stereo_camera.html#afe25245d518e12c6f0a685d7da7a2979',1,'StereoCamera']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_7.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_7.html new file mode 100644 index 0000000..de19107 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_7.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_7.js new file mode 100644 index 0000000..99c7536 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['main',['main',['../example__get_calib_params_file_8cc.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): example_getCalibParamsFile.cc'],['../example__get_depth_frame_8cc.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): example_getDepthFrame.cc'],['../example__get_raw_frame_8cc.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): example_getRawFrame.cc'],['../example__get_rect_frame_8cc.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): example_getRectFrame.cc']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_8.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_8.html new file mode 100644 index 0000000..11e27cd --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_8.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_8.js new file mode 100644 index 0000000..e29c660 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['pcl',['PCL',['../struct_p_c_l.html',1,'']]], + ['pts',['pts',['../struct_p_c_l.html#a07c28b7f533724d91ec4a9e461989d8c',1,'PCL']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_9.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_9.html new file mode 100644 index 0000000..f8abbbe --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_9.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_9.js new file mode 100644 index 0000000..c9f8da8 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['rgb_5fpcl',['RGB_PCL',['../example__get_point_cloud_8cc.html#a252571170a109b31218383613dc16295',1,'example_getPointCloud.cc']]], + ['runtimeerror',['runTimeError',['../class_system_log.html#ac33b9f16ae96885ff7170d209a6af506',1,'SystemLog']]], + ['runtimeinfo',['runTimeInfo',['../class_system_log.html#ac9b085c959e3f97d547c997c2fca2613',1,'SystemLog']]], + ['runtimewarning',['runTimeWarning',['../class_system_log.html#a69d19a4affe470db2b740a1e9a78e6e5',1,'SystemLog']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_a.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_a.html new file mode 100644 index 0000000..9601fce --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_a.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_a.js new file mode 100644 index 0000000..865f018 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_a.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['savecalibparams',['saveCalibParams',['../class_stereo_camera.html#a7611e0d97d57abf36b4fa7dca2a3cfc5',1,'StereoCamera']]], + ['saveconfig',['saveConfig',['../class_stereo_camera.html#a568930e8b3668361fedad5233ab5ba47',1,'StereoCamera']]], + ['savelog',['saveLog',['../class_system_log.html#a9714a265975472433882962b7449bd45',1,'SystemLog']]], + ['savelogtofile',['saveLogToFile',['../class_system_log.html#af41d346f86242f5be187fe2be354347d',1,'SystemLog']]], + ['scenewindow',['SceneWindow',['../classglwindow_1_1_scene_window.html',1,'glwindow']]], + ['scopedcontext',['ScopedContext',['../structglwindow_1_1_g_l_window_1_1_scoped_context.html',1,'glwindow::GLWindow']]], + ['setcalibparams',['setCalibParams',['../class_stereo_camera.html#a98d7546631507bcede3c9a850e69db7a',1,'StereoCamera']]], + ['setloglevel',['setLogLevel',['../class_stereo_camera.html#adb684170c2180eb2109f9eecd1723c1c',1,'StereoCamera::setLogLevel()'],['../class_system_log.html#a21296bb67489848bad6cfa04280fec85',1,'SystemLog::setLogLevel()']]], + ['setposnumber',['setPosNumber',['../class_stereo_camera.html#ad570580bd5b16ac58831d57ffd23ce5b',1,'StereoCamera']]], + ['setrawframerate',['setRawFrameRate',['../class_stereo_camera.html#aa28635e45b1d0ade5353a69e2a7175e4',1,'StereoCamera']]], + ['setrawframesize',['setRawFrameSize',['../class_stereo_camera.html#adb1ed69d226251cd050b1deab0270af8',1,'StereoCamera']]], + ['setrectframesize',['setRectFrameSize',['../class_stereo_camera.html#ac2d8d3a96e0ac426af20a3e88df0167a',1,'StereoCamera']]], + ['setserialnumber',['setSerialNumber',['../class_stereo_camera.html#a110ad0dc21cea5bfa5607752fc858163',1,'StereoCamera']]], + ['startcapture',['startCapture',['../class_stereo_camera.html#a4e5146c1d33ab5f4f9a3995b93e3cbc5',1,'StereoCamera']]], + ['startstereocompute',['startStereoCompute',['../class_stereo_camera.html#abb6da9140cb988beb753514e7416032b',1,'StereoCamera']]], + ['stereocamera',['StereoCamera',['../class_stereo_camera.html',1,'StereoCamera'],['../class_stereo_camera.html#a6d9ac42b50dc07f5f846336ffd29e752',1,'StereoCamera::StereoCamera()']]], + ['stereocameracommon_2ecc',['StereoCameraCommon.cc',['../_stereo_camera_common_8cc.html',1,'']]], + ['stereocameracommon_2ehpp',['StereoCameraCommon.hpp',['../_stereo_camera_common_8hpp.html',1,'']]], + ['stopcapture',['stopCapture',['../class_stereo_camera.html#a8c9f54bf349fd4dc5a8ba9fd26f22c31',1,'StereoCamera']]], + ['stopstereocompute',['stopStereoCompute',['../class_stereo_camera.html#a3597295e386dfe27474ff0e9567e6d6c',1,'StereoCamera']]], + ['systemlog',['SystemLog',['../class_system_log.html',1,'SystemLog'],['../class_system_log.html#aad41c68c3a8192ddb646170349023c99',1,'SystemLog::SystemLog()']]], + ['systemlog_2ehpp',['SystemLog.hpp',['../_system_log_8hpp.html',1,'']]], + ['systemstate',['SystemState',['../struct_g_l_window_1_1_system_state.html',1,'glwindow::GLWindow']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_b.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_b.html new file mode 100644 index 0000000..0814e4e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_b.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_b.js new file mode 100644 index 0000000..4c02995 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_b.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['unitreecamera',['UnitreeCamera',['../class_unitree_camera.html',1,'UnitreeCamera'],['../class_unitree_camera.html#af8a5e0c70f99096ecd378680d2f1ec27',1,'UnitreeCamera::UnitreeCamera()']]], + ['unitreecamerasdk_2ehpp',['UnitreeCameraSDK.hpp',['../_unitree_camera_s_d_k_8hpp.html',1,'']]], + ['updatecalibparams2flash',['updateCalibParams2Flash',['../class_unitree_camera.html#ab056c2e429ec5d91b7e838c18cbd0d73',1,'UnitreeCamera']]], + ['updatefirmware',['updateFirmware',['../class_unitree_camera.html#abd0fd0e03ac98f90905ea582e4f397a7',1,'UnitreeCamera']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_c.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_c.html new file mode 100644 index 0000000..da08c38 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_c.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_c.js new file mode 100644 index 0000000..80182f0 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['viewpoint',['Viewpoint',['../structglwindow_1_1_scene_window_1_1_viewpoint.html',1,'glwindow::SceneWindow']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_d.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_d.html new file mode 100644 index 0000000..9986c9c --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_d.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_d.js new file mode 100644 index 0000000..3f78a12 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/all_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['_7estereocamera',['~StereoCamera',['../class_stereo_camera.html#a2b36ce592e0e2bf0850d37681c51ae60',1,'StereoCamera']]], + ['_7eunitreecamera',['~UnitreeCamera',['../class_unitree_camera.html#aefb112b0fa677221163ddd18ccf08d8c',1,'UnitreeCamera']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_0.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_0.html new file mode 100644 index 0000000..1c3e406 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_0.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_0.js new file mode 100644 index 0000000..4f49513 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5fdevice_5fpoint_5f',['_Device_Point_',['../struct___device___point__.html',1,'']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_1.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_1.html new file mode 100644 index 0000000..a8e7069 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_1.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_1.js new file mode 100644 index 0000000..8ba0acc --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['eventdispatcher',['EventDispatcher',['../classglwindow_1_1_event_dispatcher.html',1,'glwindow']]], + ['eventhandler',['EventHandler',['../structglwindow_1_1_event_handler.html',1,'glwindow']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_2.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_2.html new file mode 100644 index 0000000..5c09c96 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_2.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_2.js new file mode 100644 index 0000000..7dd1d64 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['glwindow',['GLWindow',['../classglwindow_1_1_g_l_window.html',1,'glwindow']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_3.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_3.html new file mode 100644 index 0000000..5faaeba --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_3.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_3.js new file mode 100644 index 0000000..b9aa6ad --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['info_5fcamera_5fos',['info_camera_os',['../classinfo__camera__os.html',1,'']]], + ['info_5fcamera_5fstring',['info_camera_String',['../classinfo__camera___string.html',1,'']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_4.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_4.html new file mode 100644 index 0000000..b3f11bc --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_4.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_4.js new file mode 100644 index 0000000..688d4f6 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['pcl',['PCL',['../struct_p_c_l.html',1,'']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_5.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_5.html new file mode 100644 index 0000000..952ace6 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_5.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_5.js new file mode 100644 index 0000000..28986ea --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_5.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['scenewindow',['SceneWindow',['../classglwindow_1_1_scene_window.html',1,'glwindow']]], + ['scopedcontext',['ScopedContext',['../structglwindow_1_1_g_l_window_1_1_scoped_context.html',1,'glwindow::GLWindow']]], + ['stereocamera',['StereoCamera',['../class_stereo_camera.html',1,'']]], + ['systemlog',['SystemLog',['../class_system_log.html',1,'']]], + ['systemstate',['SystemState',['../struct_g_l_window_1_1_system_state.html',1,'glwindow::GLWindow']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_6.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_6.html new file mode 100644 index 0000000..75eef9f --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_6.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_6.js new file mode 100644 index 0000000..69449f8 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unitreecamera',['UnitreeCamera',['../class_unitree_camera.html',1,'']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_7.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_7.html new file mode 100644 index 0000000..745f5f2 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_7.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_7.js new file mode 100644 index 0000000..80182f0 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/classes_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['viewpoint',['Viewpoint',['../structglwindow_1_1_scene_window_1_1_viewpoint.html',1,'glwindow::SceneWindow']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/close.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/close.png new file mode 100644 index 0000000..9342d3d Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/close.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/defines_0.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/defines_0.html new file mode 100644 index 0000000..5b25204 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/defines_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/defines_0.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/defines_0.js new file mode 100644 index 0000000..1b6dfe3 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/defines_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rgb_5fpcl',['RGB_PCL',['../example__get_point_cloud_8cc.html#a252571170a109b31218383613dc16295',1,'example_getPointCloud.cc']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/enums_0.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/enums_0.html new file mode 100644 index 0000000..ee343ac --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/enums_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/enums_0.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/enums_0.js new file mode 100644 index 0000000..2bca4cd --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['imagerect',['ImageRect',['../_stereo_camera_common_8cc.html#a883d5937720f572dee2c22374bf7190b',1,'StereoCameraCommon.cc']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_0.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_0.html new file mode 100644 index 0000000..4f272b8 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_0.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_0.js new file mode 100644 index 0000000..300cedb --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_0.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['example_5fgetcalibparamsfile_2ecc',['example_getCalibParamsFile.cc',['../example__get_calib_params_file_8cc.html',1,'']]], + ['example_5fgetdepthframe_2ecc',['example_getDepthFrame.cc',['../example__get_depth_frame_8cc.html',1,'']]], + ['example_5fgetpointcloud_2ecc',['example_getPointCloud.cc',['../example__get_point_cloud_8cc.html',1,'']]], + ['example_5fgetrawframe_2ecc',['example_getRawFrame.cc',['../example__get_raw_frame_8cc.html',1,'']]], + ['example_5fgetrectframe_2ecc',['example_getRectFrame.cc',['../example__get_rect_frame_8cc.html',1,'']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_1.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_1.html new file mode 100644 index 0000000..dcce422 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_1.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_1.js new file mode 100644 index 0000000..80501e5 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['stereocameracommon_2ecc',['StereoCameraCommon.cc',['../_stereo_camera_common_8cc.html',1,'']]], + ['stereocameracommon_2ehpp',['StereoCameraCommon.hpp',['../_stereo_camera_common_8hpp.html',1,'']]], + ['systemlog_2ehpp',['SystemLog.hpp',['../_system_log_8hpp.html',1,'']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_2.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_2.html new file mode 100644 index 0000000..d5c6c3b --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_2.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_2.js new file mode 100644 index 0000000..e048fcd --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unitreecamerasdk_2ehpp',['UnitreeCameraSDK.hpp',['../_unitree_camera_s_d_k_8hpp.html',1,'']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_0.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_0.html new file mode 100644 index 0000000..4e6d87d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_0.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_0.js new file mode 100644 index 0000000..71dc74d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['checkfirmwareversion',['checkFirmwareVersion',['../class_unitree_camera.html#a45e182540ab4bb59b68fb07c23bdd91f',1,'UnitreeCamera']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_1.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_1.html new file mode 100644 index 0000000..b343e2d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_1.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_1.js new file mode 100644 index 0000000..605cf07 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['debugtimeerror',['debugTimeError',['../class_system_log.html#ae1cbe2de51efe22068e2e047396a72dd',1,'SystemLog']]], + ['debugtimeinfo',['debugTimeInfo',['../class_system_log.html#ad79238fdcc9a301093d6fa32884d1ae1',1,'SystemLog']]], + ['debugtimewarning',['debugTimeWarning',['../class_system_log.html#a08dff4b478ed29a39d584d3b7f21ddfb',1,'SystemLog']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_2.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_2.html new file mode 100644 index 0000000..ecce2f3 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_2.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_2.js new file mode 100644 index 0000000..9c55938 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_2.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['getcalibparams',['getCalibParams',['../class_stereo_camera.html#a61ea11e661cca31acb780edbbba1d32e',1,'StereoCamera']]], + ['getdepthframe',['getDepthFrame',['../class_stereo_camera.html#aa0bd7e3a7ab4fcf2598ac4e780a27cb3',1,'StereoCamera']]], + ['getdevicenode',['getDeviceNode',['../class_stereo_camera.html#a34d50c8166cf8f3f76fff5789f8f1eee',1,'StereoCamera']]], + ['getloglevel',['getLogLevel',['../class_stereo_camera.html#a105495e27d95f3f905ef1de0f9866c70',1,'StereoCamera']]], + ['getposnumber',['getPosNumber',['../class_stereo_camera.html#ab844029084a9a9de0996c1e7b24c258c',1,'StereoCamera']]], + ['getrawframe',['getRawFrame',['../class_stereo_camera.html#ac8fbb6e1ebd828b1640d43ad7cdc0f9c',1,'StereoCamera']]], + ['getrawframerate',['getRawFrameRate',['../class_stereo_camera.html#ac92c3a60ae0c38e203c81bb2a2738eb4',1,'StereoCamera']]], + ['getrawframesize',['getRawFrameSize',['../class_stereo_camera.html#a38c990b26167c2f7823b20f44b1a8fa7',1,'StereoCamera']]], + ['getserialnumber',['getSerialNumber',['../class_stereo_camera.html#a3cb43015d545854892dd2e4057f5b2be',1,'StereoCamera']]], + ['getstereoframe',['getStereoFrame',['../class_stereo_camera.html#aa25f48d95ba8d1c71fb0e40b53f68379',1,'StereoCamera']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_3.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_3.html new file mode 100644 index 0000000..15f06ab --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_3.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_3.js new file mode 100644 index 0000000..9e10f93 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['isopened',['isOpened',['../class_stereo_camera.html#a47c0d9ee727f13af5d348db9f217a44b',1,'StereoCamera']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_4.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_4.html new file mode 100644 index 0000000..8985ff2 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_4.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_4.js new file mode 100644 index 0000000..64bf2cb --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['loadcalibparams',['loadCalibParams',['../class_stereo_camera.html#afb896942fb7fe1ea33c80ec9dcefa6a0',1,'StereoCamera']]], + ['loadconfig',['loadConfig',['../class_stereo_camera.html#afe25245d518e12c6f0a685d7da7a2979',1,'StereoCamera']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_5.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_5.html new file mode 100644 index 0000000..0314918 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_5.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_5.js new file mode 100644 index 0000000..99c7536 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['main',['main',['../example__get_calib_params_file_8cc.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): example_getCalibParamsFile.cc'],['../example__get_depth_frame_8cc.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): example_getDepthFrame.cc'],['../example__get_raw_frame_8cc.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): example_getRawFrame.cc'],['../example__get_rect_frame_8cc.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): example_getRectFrame.cc']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_6.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_6.html new file mode 100644 index 0000000..c506123 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_6.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_6.js new file mode 100644 index 0000000..52eb9f3 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['runtimeerror',['runTimeError',['../class_system_log.html#ac33b9f16ae96885ff7170d209a6af506',1,'SystemLog']]], + ['runtimeinfo',['runTimeInfo',['../class_system_log.html#ac9b085c959e3f97d547c997c2fca2613',1,'SystemLog']]], + ['runtimewarning',['runTimeWarning',['../class_system_log.html#a69d19a4affe470db2b740a1e9a78e6e5',1,'SystemLog']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_7.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_7.html new file mode 100644 index 0000000..83a7b84 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_7.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_7.js new file mode 100644 index 0000000..68aa3ab --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_7.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['savecalibparams',['saveCalibParams',['../class_stereo_camera.html#a7611e0d97d57abf36b4fa7dca2a3cfc5',1,'StereoCamera']]], + ['saveconfig',['saveConfig',['../class_stereo_camera.html#a568930e8b3668361fedad5233ab5ba47',1,'StereoCamera']]], + ['savelog',['saveLog',['../class_system_log.html#a9714a265975472433882962b7449bd45',1,'SystemLog']]], + ['savelogtofile',['saveLogToFile',['../class_system_log.html#af41d346f86242f5be187fe2be354347d',1,'SystemLog']]], + ['setcalibparams',['setCalibParams',['../class_stereo_camera.html#a98d7546631507bcede3c9a850e69db7a',1,'StereoCamera']]], + ['setloglevel',['setLogLevel',['../class_stereo_camera.html#adb684170c2180eb2109f9eecd1723c1c',1,'StereoCamera::setLogLevel()'],['../class_system_log.html#a21296bb67489848bad6cfa04280fec85',1,'SystemLog::setLogLevel()']]], + ['setposnumber',['setPosNumber',['../class_stereo_camera.html#ad570580bd5b16ac58831d57ffd23ce5b',1,'StereoCamera']]], + ['setrawframerate',['setRawFrameRate',['../class_stereo_camera.html#aa28635e45b1d0ade5353a69e2a7175e4',1,'StereoCamera']]], + ['setrawframesize',['setRawFrameSize',['../class_stereo_camera.html#adb1ed69d226251cd050b1deab0270af8',1,'StereoCamera']]], + ['setrectframesize',['setRectFrameSize',['../class_stereo_camera.html#ac2d8d3a96e0ac426af20a3e88df0167a',1,'StereoCamera']]], + ['setserialnumber',['setSerialNumber',['../class_stereo_camera.html#a110ad0dc21cea5bfa5607752fc858163',1,'StereoCamera']]], + ['startcapture',['startCapture',['../class_stereo_camera.html#a4e5146c1d33ab5f4f9a3995b93e3cbc5',1,'StereoCamera']]], + ['startstereocompute',['startStereoCompute',['../class_stereo_camera.html#abb6da9140cb988beb753514e7416032b',1,'StereoCamera']]], + ['stereocamera',['StereoCamera',['../class_stereo_camera.html#a6d9ac42b50dc07f5f846336ffd29e752',1,'StereoCamera']]], + ['stopcapture',['stopCapture',['../class_stereo_camera.html#a8c9f54bf349fd4dc5a8ba9fd26f22c31',1,'StereoCamera']]], + ['stopstereocompute',['stopStereoCompute',['../class_stereo_camera.html#a3597295e386dfe27474ff0e9567e6d6c',1,'StereoCamera']]], + ['systemlog',['SystemLog',['../class_system_log.html#aad41c68c3a8192ddb646170349023c99',1,'SystemLog']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_8.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_8.html new file mode 100644 index 0000000..b55f0e6 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_8.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_8.js new file mode 100644 index 0000000..8f6db03 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['unitreecamera',['UnitreeCamera',['../class_unitree_camera.html#af8a5e0c70f99096ecd378680d2f1ec27',1,'UnitreeCamera']]], + ['updatecalibparams2flash',['updateCalibParams2Flash',['../class_unitree_camera.html#ab056c2e429ec5d91b7e838c18cbd0d73',1,'UnitreeCamera']]], + ['updatefirmware',['updateFirmware',['../class_unitree_camera.html#abd0fd0e03ac98f90905ea582e4f397a7',1,'UnitreeCamera']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_9.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_9.html new file mode 100644 index 0000000..c73f07b --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_9.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_9.js new file mode 100644 index 0000000..3f78a12 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/functions_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['_7estereocamera',['~StereoCamera',['../class_stereo_camera.html#a2b36ce592e0e2bf0850d37681c51ae60',1,'StereoCamera']]], + ['_7eunitreecamera',['~UnitreeCamera',['../class_unitree_camera.html#aefb112b0fa677221163ddd18ccf08d8c',1,'UnitreeCamera']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/mag_sel.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/mag_sel.png new file mode 100644 index 0000000..81f6040 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/mag_sel.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/nomatches.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/pages_0.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/pages_0.html new file mode 100644 index 0000000..4955b9e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/pages_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/pages_0.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/pages_0.js new file mode 100644 index 0000000..7cf7879 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['introduction',['Introduction',['../index.html',1,'']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/search.css b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/search.css new file mode 100644 index 0000000..3cf9df9 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + float: none; + margin-top: 8px; + right: 0px; + width: 170px; + height: 24px; + z-index: 102; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:115px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:8px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/search.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/search.js new file mode 100644 index 0000000..dedce3b --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/search.js @@ -0,0 +1,791 @@ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/variables_0.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/variables_0.js new file mode 100644 index 0000000..52beea4 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/variables_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['clr',['clr',['../struct_p_c_l.html#a6555550c790378b130273dd6ae3a2158',1,'PCL']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/variables_1.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/variables_1.html new file mode 100644 index 0000000..84237b6 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/variables_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/variables_1.js b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/variables_1.js new file mode 100644 index 0000000..22840f4 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/search/variables_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['pts',['pts',['../struct_p_c_l.html#a07c28b7f533724d91ec4a9e461989d8c',1,'PCL']]] +]; diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/splitbar.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/splitbar.png new file mode 100644 index 0000000..fe895f2 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/splitbar.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point__-members.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point__-members.html new file mode 100644 index 0000000..e0d05be --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point__-members.html @@ -0,0 +1,100 @@ + + + + + + + +UnitreeCameraSDK: Member List + + + + + + + + + +
+
+
+ + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+ + + + + + + + + +
+
+ + +
+ +
+ + +
+
+
_Device_Point_ Member List
+
+
+ +

This is the complete list of members for _Device_Point_, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
Falsh_R (defined in _Device_Point_)_Device_Point_
Falsh_W (defined in _Device_Point_)_Device_Point_
FlashType (defined in _Device_Point_)_Device_Point_
Get_ISP_Reg (defined in _Device_Point_)_Device_Point_
Get_Sensor_Reg (defined in _Device_Point_)_Device_Point_
Input_Gpio_Get (defined in _Device_Point_)_Device_Point_
Input_Gpio_init (defined in _Device_Point_)_Device_Point_
ISP_ID (defined in _Device_Point_)_Device_Point_
Output_Gpio_init (defined in _Device_Point_)_Device_Point_
Output_Gpio_set (defined in _Device_Point_)_Device_Point_
p_device (defined in _Device_Point_)_Device_Point_
pCustomer (defined in _Device_Point_)_Device_Point_
pExid_R (defined in _Device_Point_)_Device_Point_
pExid_W (defined in _Device_Point_)_Device_Point_
pInfo (defined in _Device_Point_)_Device_Point_
pInfoStr (defined in _Device_Point_)_Device_Point_
RES_1 (defined in _Device_Point_)_Device_Point_
RES_2 (defined in _Device_Point_)_Device_Point_
respoint (defined in _Device_Point_)_Device_Point_
Set_ISP_Reg (defined in _Device_Point_)_Device_Point_
Set_Sensor_Reg (defined in _Device_Point_)_Device_Point_
u_index (defined in _Device_Point_)_Device_Point_
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point__.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point__.html new file mode 100644 index 0000000..470e5d7 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point__.html @@ -0,0 +1,158 @@ + + + + + + + +UnitreeCameraSDK: _Device_Point_ Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
_Device_Point_ Struct Reference
+
+
+
+Collaboration diagram for _Device_Point_:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+uint32_t u_index
 
+BYTE FlashType
 
+BYTE ISP_ID
 
+PVOID p_device
 
+H_Fun_IPb Falsh_R
 
+H_Fun_IPb Falsh_W
 
+H_Fun_Cinfo pInfo
 
+H_Fun_WB Set_ISP_Reg
 
+H_Fun_WPb Get_ISP_Reg
 
+H_Fun_BWW Set_Sensor_Reg
 
+H_Fun_BWPw Get_Sensor_Reg
 
+Input_GPIO_Get Input_Gpio_Get
 
+Output_GPIO_Set Output_Gpio_set
 
+Input_GPIO_Init Input_Gpio_init
 
+Output_GPIO_Init Output_Gpio_init
 
+PVOID RES_1
 
+PVOID RES_2
 
+H_Fun_CinfoStr pInfoStr
 
+pExID pExid_R
 
+pExID pExid_W
 
+PVOID respoint
 
+pCUSTOMERFun pCustomer
 
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point____coll__graph.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point____coll__graph.map new file mode 100644 index 0000000..f394c50 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point____coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point____coll__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point____coll__graph.md5 new file mode 100644 index 0000000..c7366d1 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point____coll__graph.md5 @@ -0,0 +1 @@ +b59d458dc6010826c9138b2c27598384 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point____coll__graph.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point____coll__graph.png new file mode 100644 index 0000000..2a0c7d8 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct___device___point____coll__graph.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct_g_l_window_1_1_system_state-members.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct_g_l_window_1_1_system_state-members.html new file mode 100644 index 0000000..b162105 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct_g_l_window_1_1_system_state-members.html @@ -0,0 +1,97 @@ + + + + + + + +UnitreeCameraSDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
glwindow::GLWindow::SystemState Member List
+
+
+ +

This is the complete list of members for glwindow::GLWindow::SystemState, including all inherited members.

+ + + + + + + + + + + + + + + + +
context (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemState
cursor (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemState
delete_atom (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemState
destroy() (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemStateinline
display (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemState
height (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemState
init(int w, int h, const char *title) (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemStateinline
make_current() (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemStateinline
set_title(const char *title) (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemStateinline
swap_buffers() (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemStateinline
SystemState() (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemStateinline
visible (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemState
width (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemState
window (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemState
~SystemState() (defined in glwindow::GLWindow::SystemState)glwindow::GLWindow::SystemStateinline
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct_g_l_window_1_1_system_state.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct_g_l_window_1_1_system_state.html new file mode 100644 index 0000000..09d4f24 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct_g_l_window_1_1_system_state.html @@ -0,0 +1,132 @@ + + + + + + + +UnitreeCameraSDK: glwindow::GLWindow::SystemState Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
glwindow::GLWindow::SystemState Struct Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

+bool init (int w, int h, const char *title)
 
+void destroy ()
 
+void swap_buffers ()
 
+void set_title (const char *title)
 
+bool make_current ()
 
+ + + + + + + + + + + + + + + + + +

+Public Attributes

+Display * display
 
+Window window
 
+GLXContext context
 
+Atom delete_atom
 
+Cursor cursor
 
+int width
 
+int height
 
+bool visible
 
+
The documentation for this struct was generated from the following file:
    +
  • examples/glViewer/glwindow_x11.cpp
  • +
+
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct_p_c_l-members.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct_p_c_l-members.html new file mode 100644 index 0000000..761b680 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct_p_c_l-members.html @@ -0,0 +1,80 @@ + + + + + + + +UnitreeCameraSDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
PCL Member List
+
+
+ +

This is the complete list of members for PCL, including all inherited members.

+ + + +
clrPCL
ptsPCL
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct_p_c_l.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct_p_c_l.html new file mode 100644 index 0000000..a23a4d7 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/struct_p_c_l.html @@ -0,0 +1,102 @@ + + + + + + + +UnitreeCameraSDK: PCL Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
PCL Struct Reference
+
+
+ +

this struct is used for RGB point cloud capture and display + More...

+ +

#include <StereoCameraCommon.hpp>

+ + + + + + + + +

+Public Attributes

+cv::Vec3f pts
 points coordinates (x, y, z)
 
+cv::Vec3b clr
 points color (b, g, r)
 
+

Detailed Description

+

this struct is used for RGB point cloud capture and display

+

pts for point coordinates (x, y, z), clr for point color (b, g, r)

Note
point cloud simple type
+
Attention
point data element type float, color data element type uchar
+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler-members.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler-members.html new file mode 100644 index 0000000..5374867 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler-members.html @@ -0,0 +1,92 @@ + + + + + + + +UnitreeCameraSDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
glwindow::EventHandler Member List
+
+
+ +

This is the complete list of members for glwindow::EventHandler, including all inherited members.

+ + + + + + + + + + + +
on_button_down(GLWindow &win, int btn, int state, int x, int y) (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
on_button_up(GLWindow &win, int btn, int state, int x, int y) (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
on_close(GLWindow &win) (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
on_key_down(GLWindow &win, int key) (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
on_key_up(GLWindow &win, int key) (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
on_mouse_move(GLWindow &win, int state, int x, int y) (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
on_mouse_wheel(GLWindow &win, int state, int x, int y, int dx, int dy) (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
on_resize(GLWindow &win, int x, int y, int w, int h) (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
on_text(GLWindow &win, const char *text, int len) (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
~EventHandler() (defined in glwindow::EventHandler)glwindow::EventHandlerinlinevirtual
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler.html new file mode 100644 index 0000000..24964b3 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler.html @@ -0,0 +1,125 @@ + + + + + + + +UnitreeCameraSDK: glwindow::EventHandler Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
glwindow::EventHandler Struct Reference
+
+
+
+Inheritance diagram for glwindow::EventHandler:
+
+
Inheritance graph
+ + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool on_key_down (GLWindow &win, int key)
 
+virtual bool on_key_up (GLWindow &win, int key)
 
+virtual bool on_text (GLWindow &win, const char *text, int len)
 
+virtual bool on_button_down (GLWindow &win, int btn, int state, int x, int y)
 
+virtual bool on_button_up (GLWindow &win, int btn, int state, int x, int y)
 
+virtual bool on_mouse_move (GLWindow &win, int state, int x, int y)
 
+virtual bool on_mouse_wheel (GLWindow &win, int state, int x, int y, int dx, int dy)
 
+virtual bool on_resize (GLWindow &win, int x, int y, int w, int h)
 
+virtual bool on_close (GLWindow &win)
 
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler__inherit__graph.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler__inherit__graph.map new file mode 100644 index 0000000..2314df8 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler__inherit__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler__inherit__graph.md5 new file mode 100644 index 0000000..2a0db9e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler__inherit__graph.md5 @@ -0,0 +1 @@ +0ab96645613531c9cf3dbfe057be442c \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler__inherit__graph.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler__inherit__graph.png new file mode 100644 index 0000000..2911e13 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_event_handler__inherit__graph.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context-members.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context-members.html new file mode 100644 index 0000000..f86dc11 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context-members.html @@ -0,0 +1,85 @@ + + + + + + + +UnitreeCameraSDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
glwindow::GLWindow::ScopedContext Member List
+
+
+ +

This is the complete list of members for glwindow::GLWindow::ScopedContext, including all inherited members.

+ + + + +
ScopedContext(GLWindow &w) (defined in glwindow::GLWindow::ScopedContext)glwindow::GLWindow::ScopedContextinline
win (defined in glwindow::GLWindow::ScopedContext)glwindow::GLWindow::ScopedContext
~ScopedContext() (defined in glwindow::GLWindow::ScopedContext)glwindow::GLWindow::ScopedContextinline
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context.html new file mode 100644 index 0000000..2514b61 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context.html @@ -0,0 +1,108 @@ + + + + + + + +UnitreeCameraSDK: glwindow::GLWindow::ScopedContext Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
glwindow::GLWindow::ScopedContext Struct Reference
+
+
+
+Collaboration diagram for glwindow::GLWindow::ScopedContext:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + +

+Public Member Functions

ScopedContext (GLWindow &w)
 
+ + + +

+Public Attributes

+GLWindowwin
 
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.map b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.map new file mode 100644 index 0000000..27dba31 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.md5 new file mode 100644 index 0000000..960d30d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.md5 @@ -0,0 +1 @@ +8ad66e757da7ac5070285f635808d79a \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.png new file mode 100644 index 0000000..d73d80e Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_scene_window_1_1_viewpoint-members.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_scene_window_1_1_viewpoint-members.html new file mode 100644 index 0000000..ff28d37 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_scene_window_1_1_viewpoint-members.html @@ -0,0 +1,87 @@ + + + + + + + +UnitreeCameraSDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
glwindow::SceneWindow::Viewpoint Member List
+
+ + + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_scene_window_1_1_viewpoint.html b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_scene_window_1_1_viewpoint.html new file mode 100644 index 0000000..23e1f2a --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/structglwindow_1_1_scene_window_1_1_viewpoint.html @@ -0,0 +1,102 @@ + + + + + + + +UnitreeCameraSDK: glwindow::SceneWindow::Viewpoint Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
UnitreeCameraSDK +  1.0.1 +
+
unitree stereo camra apis
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
glwindow::SceneWindow::Viewpoint Struct Reference
+
+
+ + + + + + + + + + +

+Public Attributes

+double target [3]
 
+double azimuth
 
+double elevation
 
+double distance
 
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/sync_off.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/sync_off.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/sync_on.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/sync_on.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tab_a.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tab_a.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tab_b.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tab_b.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tab_h.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tab_h.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tab_s.png b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tab_s.png differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tabs.css b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tabs.css new file mode 100644 index 0000000..bbde11e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/html/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:transparent}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/Makefile b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/Makefile new file mode 100644 index 0000000..8cc3866 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/Makefile @@ -0,0 +1,21 @@ +all: refman.pdf + +pdf: refman.pdf + +refman.pdf: clean refman.tex + pdflatex refman + makeindex refman.idx + pdflatex refman + latex_count=8 ; \ + while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + pdflatex refman ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + makeindex refman.idx + pdflatex refman + + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8cc.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8cc.tex new file mode 100644 index 0000000..2038db9 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8cc.tex @@ -0,0 +1,89 @@ +\hypertarget{_stereo_camera_common_8cc}{}\section{src/\+Stereo\+Camera\+Common.cc File Reference} +\label{_stereo_camera_common_8cc}\index{src/\+Stereo\+Camera\+Common.\+cc@{src/\+Stereo\+Camera\+Common.\+cc}} + + +This file is part of Unitree\+Camera\+S\+DK, which implement stereo vision algorithm. + + +{\ttfamily \#include \char`\"{}Stereo\+Camera\+Common.\+hpp\char`\"{}}\newline +{\ttfamily \#include $<$unistd.\+h$>$}\newline +{\ttfamily \#include $<$sys/shm.\+h$>$}\newline +Include dependency graph for Stereo\+Camera\+Common.\+cc\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{_stereo_camera_common_8cc__incl} +\end{center} +\end{figure} +\subsection*{Typedefs} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{_stereo_camera_common_8cc_a45c9c33784774d9db5196228af42ade2}\label{_stereo_camera_common_8cc_a45c9c33784774d9db5196228af42ade2}} +typedef enum \hyperlink{_stereo_camera_common_8cc_a883d5937720f572dee2c22374bf7190b}{Image\+Rect} {\bfseries Image\+Rect\+Type} +\end{DoxyCompactItemize} +\subsection*{Enumerations} +\begin{DoxyCompactItemize} +\item +enum \hyperlink{_stereo_camera_common_8cc_a883d5937720f572dee2c22374bf7190b}{Image\+Rect} \{ {\bfseries R\+E\+C\+T\+\_\+\+F\+I\+S\+H\+E\+YE} = 0, +{\bfseries R\+E\+C\+T\+\_\+\+L\+O\+N\+G\+L\+AT}, +{\bfseries R\+E\+C\+T\+\_\+\+P\+E\+R\+S\+P\+E\+C\+T\+I\+VE} + \}\begin{DoxyCompactList}\small\item\em This enum is used for stereo images rectification. \end{DoxyCompactList} +\end{DoxyCompactItemize} +\subsection*{Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{_stereo_camera_common_8cc_aa41028d84c6cc0f12740351985e25da7}\label{_stereo_camera_common_8cc_aa41028d84c6cc0f12740351985e25da7}} +double {\bfseries Mat\+Row\+Mul} (cv\+::\+Mat m, double x, double y, double z, int r) +\item +\mbox{\Hypertarget{_stereo_camera_common_8cc_a6939ed8f37b4dfd4bdca76bb95545165}\label{_stereo_camera_common_8cc_a6939ed8f37b4dfd4bdca76bb95545165}} +int {\bfseries convert\+Raw\+Fisheye\+Image} (cv\+::\+Mat \&left, cv\+::\+Mat \&right, float da=0.\+0, float db=-\/32.\+0, float dcx=0.\+0, float dcy=0.\+0) +\item +\mbox{\Hypertarget{_stereo_camera_common_8cc_a6ef6fea1313a8a9891d2f1f678a80012}\label{_stereo_camera_common_8cc_a6ef6fea1313a8a9891d2f1f678a80012}} +int {\bfseries convert\+Raw\+Fisheye\+Image} (int radius, cv\+::\+Mat \&left, cv\+::\+Mat \&right) +\item +\mbox{\Hypertarget{_stereo_camera_common_8cc_a3ac4c463fd503a9b114180cfc5f193f2}\label{_stereo_camera_common_8cc_a3ac4c463fd503a9b114180cfc5f193f2}} +bool {\bfseries init\+Rectify\+Map} (cv\+::\+Mat K, cv\+::\+Mat D, cv\+::\+Mat R, cv\+::\+Mat Knew, double xi0, double xi1, cv\+::\+Size size, int mode, cv\+::\+Mat \&map1, cv\+::\+Mat \&map2) +\item +\mbox{\Hypertarget{_stereo_camera_common_8cc_a883a659a463c067a78194c408f9d320c}\label{_stereo_camera_common_8cc_a883a659a463c067a78194c408f9d320c}} +uchar {\bfseries get\+Blue\+Seg\+Val} (float minv, float maxv, float curv) +\item +\mbox{\Hypertarget{_stereo_camera_common_8cc_a0aeb36e5e9d4ef6d0e22167ce996414d}\label{_stereo_camera_common_8cc_a0aeb36e5e9d4ef6d0e22167ce996414d}} +uchar {\bfseries get\+Green\+Seg\+Val} (float minv, float maxv, float curv) +\item +\mbox{\Hypertarget{_stereo_camera_common_8cc_aeae18b151dd0f723b04923e956416f8c}\label{_stereo_camera_common_8cc_aeae18b151dd0f723b04923e956416f8c}} +uchar {\bfseries get\+Red\+Seg\+Val} (float minv, float maxv, float curv) +\end{DoxyCompactItemize} + + +\subsection{Detailed Description} +This file is part of Unitree\+Camera\+S\+DK, which implement stereo vision algorithm. + +image capture, image rectification, disparity computation, point cloud generation \begin{DoxyAuthor}{Author} +Zhang\+Chunyang create date 2021.\+07.\+31 +\end{DoxyAuthor} +\begin{DoxyVersion}{Version} +1.\+0.\+1 +\end{DoxyVersion} +\begin{DoxyCopyright}{Copyright} +Copyright (c)2019-\/2021, Hangzhou Yushu Technology Stock C\+O.\+L\+TD. All Rights Reserved. +\end{DoxyCopyright} + + +\subsection{Enumeration Type Documentation} +\mbox{\Hypertarget{_stereo_camera_common_8cc_a883d5937720f572dee2c22374bf7190b}\label{_stereo_camera_common_8cc_a883d5937720f572dee2c22374bf7190b}} +\index{Stereo\+Camera\+Common.\+cc@{Stereo\+Camera\+Common.\+cc}!Image\+Rect@{Image\+Rect}} +\index{Image\+Rect@{Image\+Rect}!Stereo\+Camera\+Common.\+cc@{Stereo\+Camera\+Common.\+cc}} +\subsubsection{\texorpdfstring{Image\+Rect}{ImageRect}} +{\footnotesize\ttfamily enum \hyperlink{_stereo_camera_common_8cc_a883d5937720f572dee2c22374bf7190b}{Image\+Rect}} + + + +This enum is used for stereo images rectification. + +F\+I\+S\+H\+E\+YE and L\+O\+N\+G\+L\+AT for fisheye camera model, P\+E\+R\+S\+P\+E\+C\+T\+I\+VE for pinhole cameras \begin{DoxyNote}{Note} +used for differen camera models +\end{DoxyNote} +\begin{DoxyAttention}{Attention} +make sure camera model is matched. +\end{DoxyAttention} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8cc__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8cc__incl.md5 new file mode 100644 index 0000000..fea48d2 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8cc__incl.md5 @@ -0,0 +1 @@ +3688f76f6e3cc41a3ff3e8c44f2f04dc \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8cc__incl.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8cc__incl.pdf new file mode 100644 index 0000000..8f26a99 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8cc__incl.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp.tex new file mode 100644 index 0000000..d2902d0 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp.tex @@ -0,0 +1,60 @@ +\hypertarget{_stereo_camera_common_8hpp}{}\section{include/\+Stereo\+Camera\+Common.hpp File Reference} +\label{_stereo_camera_common_8hpp}\index{include/\+Stereo\+Camera\+Common.\+hpp@{include/\+Stereo\+Camera\+Common.\+hpp}} + + +This file is part of Unitree\+Camera\+S\+DK, which declare stereo camera algorithm A\+P\+Is. + + +{\ttfamily \#include $<$string$>$}\newline +{\ttfamily \#include $<$thread$>$}\newline +{\ttfamily \#include $<$mutex$>$}\newline +{\ttfamily \#include $<$condition\+\_\+variable$>$}\newline +{\ttfamily \#include $<$opencv2/opencv.\+hpp$>$}\newline +{\ttfamily \#include $<$chrono$>$}\newline +{\ttfamily \#include \char`\"{}System\+Log.\+hpp\char`\"{}}\newline +Include dependency graph for Stereo\+Camera\+Common.\+hpp\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{_stereo_camera_common_8hpp__incl} +\end{center} +\end{figure} +This graph shows which files directly or indirectly include this file\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{_stereo_camera_common_8hpp__dep__incl} +\end{center} +\end{figure} +\subsection*{Classes} +\begin{DoxyCompactItemize} +\item +struct \hyperlink{struct_p_c_l}{P\+CL} +\begin{DoxyCompactList}\small\item\em this struct is used for R\+GB point cloud capture and display \end{DoxyCompactList}\item +class \hyperlink{class_stereo_camera}{Stereo\+Camera} +\begin{DoxyCompactList}\small\item\em this class integrate camera control and stereo vision algorithm \end{DoxyCompactList}\end{DoxyCompactItemize} +\subsection*{Typedefs} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{_stereo_camera_common_8hpp_ac9f36f2ca129cb52709d9b161d119f70}\label{_stereo_camera_common_8hpp_ac9f36f2ca129cb52709d9b161d119f70}} +typedef struct \hyperlink{struct_p_c_l}{P\+CL} {\bfseries P\+C\+L\+Type} +\end{DoxyCompactItemize} + + +\subsection{Detailed Description} +This file is part of Unitree\+Camera\+S\+DK, which declare stereo camera algorithm A\+P\+Is. + +image capture, image rectification, disparity computation, depth image and point cloud generation \begin{DoxyAuthor}{Author} +Zhang\+Chunyang +\end{DoxyAuthor} +\begin{DoxyDate}{Date} +2021.\+07.\+31 +\end{DoxyDate} +\begin{DoxyVersion}{Version} +1.\+0.\+1 +\end{DoxyVersion} +\begin{DoxyCopyright}{Copyright} +Copyright (c)2020-\/2021, Hangzhou Yushu Technology Stock C\+O.\+L\+TD. All Rights Reserved. +\end{DoxyCopyright} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp__dep__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp__dep__incl.md5 new file mode 100644 index 0000000..7abb3f1 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +7f4db891f68f1d4e01f1d1594809e7ee \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp__dep__incl.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp__dep__incl.pdf new file mode 100644 index 0000000..41dad99 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp__dep__incl.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp__incl.md5 new file mode 100644 index 0000000..0fbd8a5 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp__incl.md5 @@ -0,0 +1 @@ +b776e70f5a953ff824f392fc5bfb13b1 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp__incl.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp__incl.pdf new file mode 100644 index 0000000..5ecf1f2 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_stereo_camera_common_8hpp__incl.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp.tex new file mode 100644 index 0000000..141c8ff --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp.tex @@ -0,0 +1,48 @@ +\hypertarget{_system_log_8hpp}{}\section{include/\+System\+Log.hpp File Reference} +\label{_system_log_8hpp}\index{include/\+System\+Log.\+hpp@{include/\+System\+Log.\+hpp}} + + +This file is part of Unitree\+Camera\+S\+DK, which declare the A\+P\+Is of log system. + + +{\ttfamily \#include $<$stdarg.\+h$>$}\newline +{\ttfamily \#include $<$stdio.\+h$>$}\newline +{\ttfamily \#include $<$string$>$}\newline +Include dependency graph for System\+Log.\+hpp\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=256pt]{_system_log_8hpp__incl} +\end{center} +\end{figure} +This graph shows which files directly or indirectly include this file\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{_system_log_8hpp__dep__incl} +\end{center} +\end{figure} +\subsection*{Classes} +\begin{DoxyCompactItemize} +\item +class \hyperlink{class_system_log}{System\+Log} +\end{DoxyCompactItemize} + + +\subsection{Detailed Description} +This file is part of Unitree\+Camera\+S\+DK, which declare the A\+P\+Is of log system. + +The log system is used for unified management of the output information of the special system. \begin{DoxyAuthor}{Author} +Zhang\+Chunyang +\end{DoxyAuthor} +\begin{DoxyDate}{Date} +2021.\+07.\+31 +\end{DoxyDate} +\begin{DoxyVersion}{Version} +1.\+0.\+1 +\end{DoxyVersion} +\begin{DoxyCopyright}{Copyright} +Copyright (c)2020-\/2021, Hangzhou Yushu Technology Stock C\+O.\+L\+TD. All Rights Reserved. +\end{DoxyCopyright} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp__dep__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp__dep__incl.md5 new file mode 100644 index 0000000..69ca37d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +7ba5ad435a88ad707a5fa2d1a339e212 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp__dep__incl.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp__dep__incl.pdf new file mode 100644 index 0000000..9e44c18 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp__dep__incl.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp__incl.md5 new file mode 100644 index 0000000..0bdd592 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp__incl.md5 @@ -0,0 +1 @@ +eea3b1c6140c740cb39e3585c6c6f257 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp__incl.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp__incl.pdf new file mode 100644 index 0000000..7250004 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_system_log_8hpp__incl.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp.tex new file mode 100644 index 0000000..5341f52 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp.tex @@ -0,0 +1,55 @@ +\hypertarget{_unitree_camera_s_d_k_8hpp}{}\section{include/\+Unitree\+Camera\+S\+DK.hpp File Reference} +\label{_unitree_camera_s_d_k_8hpp}\index{include/\+Unitree\+Camera\+S\+D\+K.\+hpp@{include/\+Unitree\+Camera\+S\+D\+K.\+hpp}} + + +This file is part of Unitree\+Camera\+S\+DK, which declare unitree camera A\+P\+Is. + + +{\ttfamily \#include \char`\"{}Stereo\+Camera\+Common.\+hpp\char`\"{}}\newline +Include dependency graph for Unitree\+Camera\+S\+D\+K.\+hpp\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{_unitree_camera_s_d_k_8hpp__incl} +\end{center} +\end{figure} +This graph shows which files directly or indirectly include this file\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{_unitree_camera_s_d_k_8hpp__dep__incl} +\end{center} +\end{figure} +\subsection*{Classes} +\begin{DoxyCompactItemize} +\item +class \hyperlink{class_unitree_camera}{Unitree\+Camera} +\end{DoxyCompactItemize} +\subsection*{Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{_unitree_camera_s_d_k_8hpp_a698a13c84f0a5e266fabc2722bcc33e1}\label{_unitree_camera_s_d_k_8hpp_a698a13c84f0a5e266fabc2722bcc33e1}} +cv\+::\+Mat {\bfseries get\+Rotation\+Matrix} (int axis=\textquotesingle{}x\textquotesingle{}, float theta=0.\+0) +\item +\mbox{\Hypertarget{_unitree_camera_s_d_k_8hpp_a3b00277586cab0e3a3d1ba29e3aa6d8e}\label{_unitree_camera_s_d_k_8hpp_a3b00277586cab0e3a3d1ba29e3aa6d8e}} +cv\+::\+Mat {\bfseries get\+Translation\+Matrix} (int axis=\textquotesingle{}x\textquotesingle{}, float theta=0.\+0, cv\+::\+Mat vec=cv\+::\+Mat()) +\end{DoxyCompactItemize} + + +\subsection{Detailed Description} +This file is part of Unitree\+Camera\+S\+DK, which declare unitree camera A\+P\+Is. + +class \hyperlink{class_unitree_camera}{Unitree\+Camera} inherits the A\+P\+Is of class \hyperlink{class_stereo_camera}{Stereo\+Camera} image capture, image rectification, disparity computation, depth image and point cloud generation update camera firmware, flash camera parameters to camera \begin{DoxyAuthor}{Author} +Zhang\+Chunyang +\end{DoxyAuthor} +\begin{DoxyDate}{Date} +2021.\+07.\+31 +\end{DoxyDate} +\begin{DoxyVersion}{Version} +1.\+0.\+1 +\end{DoxyVersion} +\begin{DoxyCopyright}{Copyright} +Copyright (c) 2020-\/2021, Hangzhou Yushu Technology Stock C\+O.\+L\+TD. All Rights Reserved. +\end{DoxyCopyright} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp__dep__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp__dep__incl.md5 new file mode 100644 index 0000000..13a1baf --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +a07567474bbc9135661cab5b88320738 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp__dep__incl.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp__dep__incl.pdf new file mode 100644 index 0000000..887105c Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp__dep__incl.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp__incl.md5 new file mode 100644 index 0000000..d571ede --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp__incl.md5 @@ -0,0 +1 @@ +81d016b1eecb4aa1226c28e6ac6e50b1 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp__incl.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp__incl.pdf new file mode 100644 index 0000000..17d2f23 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/_unitree_camera_s_d_k_8hpp__incl.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/annotated.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/annotated.tex new file mode 100644 index 0000000..bcab401 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/annotated.tex @@ -0,0 +1,17 @@ +\section{Class List} +Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList} +\item\contentsline{section}{\hyperlink{struct___device___point__}{\+\_\+\+Device\+\_\+\+Point\+\_\+} }{\pageref{struct___device___point__}}{} +\item\contentsline{section}{\hyperlink{classglwindow_1_1_event_dispatcher}{glwindow\+::\+Event\+Dispatcher} }{\pageref{classglwindow_1_1_event_dispatcher}}{} +\item\contentsline{section}{\hyperlink{structglwindow_1_1_event_handler}{glwindow\+::\+Event\+Handler} }{\pageref{structglwindow_1_1_event_handler}}{} +\item\contentsline{section}{\hyperlink{classglwindow_1_1_g_l_window}{glwindow\+::\+G\+L\+Window} }{\pageref{classglwindow_1_1_g_l_window}}{} +\item\contentsline{section}{\hyperlink{classinfo__camera__os}{info\+\_\+camera\+\_\+os} }{\pageref{classinfo__camera__os}}{} +\item\contentsline{section}{\hyperlink{classinfo__camera___string}{info\+\_\+camera\+\_\+\+String} }{\pageref{classinfo__camera___string}}{} +\item\contentsline{section}{\hyperlink{struct_p_c_l}{P\+CL} \\*This struct is used for R\+GB point cloud capture and display }{\pageref{struct_p_c_l}}{} +\item\contentsline{section}{\hyperlink{classglwindow_1_1_scene_window}{glwindow\+::\+Scene\+Window} }{\pageref{classglwindow_1_1_scene_window}}{} +\item\contentsline{section}{\hyperlink{structglwindow_1_1_g_l_window_1_1_scoped_context}{glwindow\+::\+G\+L\+Window\+::\+Scoped\+Context} }{\pageref{structglwindow_1_1_g_l_window_1_1_scoped_context}}{} +\item\contentsline{section}{\hyperlink{class_stereo_camera}{Stereo\+Camera} \\*This class integrate camera control and stereo vision algorithm }{\pageref{class_stereo_camera}}{} +\item\contentsline{section}{\hyperlink{class_system_log}{System\+Log} }{\pageref{class_system_log}}{} +\item\contentsline{section}{\hyperlink{struct_g_l_window_1_1_system_state}{glwindow\+::\+G\+L\+Window\+::\+System\+State} }{\pageref{struct_g_l_window_1_1_system_state}}{} +\item\contentsline{section}{\hyperlink{class_unitree_camera}{Unitree\+Camera} }{\pageref{class_unitree_camera}}{} +\item\contentsline{section}{\hyperlink{structglwindow_1_1_scene_window_1_1_viewpoint}{glwindow\+::\+Scene\+Window\+::\+Viewpoint} }{\pageref{structglwindow_1_1_scene_window_1_1_viewpoint}}{} +\end{DoxyCompactList} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_stereo_camera.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_stereo_camera.tex new file mode 100644 index 0000000..89842b8 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_stereo_camera.tex @@ -0,0 +1,968 @@ +\hypertarget{class_stereo_camera}{}\section{Stereo\+Camera Class Reference} +\label{class_stereo_camera}\index{Stereo\+Camera@{Stereo\+Camera}} + + +this class integrate camera control and stereo vision algorithm + + + + +{\ttfamily \#include $<$Stereo\+Camera\+Common.\+hpp$>$} + + + +Inheritance diagram for Stereo\+Camera\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=163pt]{class_stereo_camera__inherit__graph} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\hyperlink{class_stereo_camera_a6d9ac42b50dc07f5f846336ffd29e752}{Stereo\+Camera} (void) +\begin{DoxyCompactList}\small\item\em \hyperlink{class_stereo_camera}{Stereo\+Camera}. \end{DoxyCompactList}\item +\mbox{\Hypertarget{class_stereo_camera_ad5caa5f91c77562d8b6183ef153a943c}\label{class_stereo_camera_ad5caa5f91c77562d8b6183ef153a943c}} +{\bfseries Stereo\+Camera} (std\+::string file\+Name) +\item +\mbox{\Hypertarget{class_stereo_camera_a6e0d6591990e7f8d175d67e9609c8a4c}\label{class_stereo_camera_a6e0d6591990e7f8d175d67e9609c8a4c}} +{\bfseries Stereo\+Camera} (int device\+Node) +\item +virtual \hyperlink{class_stereo_camera_a2b36ce592e0e2bf0850d37681c51ae60}{$\sim$\+Stereo\+Camera} () +\begin{DoxyCompactList}\small\item\em \hyperlink{class_stereo_camera}{Stereo\+Camera} destructor. \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_a47c0d9ee727f13af5d348db9f217a44b}{is\+Opened} (void) +\begin{DoxyCompactList}\small\item\em get stereo camera running status \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_adb684170c2180eb2109f9eecd1723c1c}{set\+Log\+Level} (int level) +\begin{DoxyCompactList}\small\item\em set stereo camera ouput log level \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_ad570580bd5b16ac58831d57ffd23ce5b}{set\+Pos\+Number} (int pos\+Number) +\begin{DoxyCompactList}\small\item\em set stereo camera position number \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_a110ad0dc21cea5bfa5607752fc858163}{set\+Serial\+Number} (int serial\+Number) +\begin{DoxyCompactList}\small\item\em set stereo camera serial number \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_aa28635e45b1d0ade5353a69e2a7175e4}{set\+Raw\+Frame\+Rate} (int frame\+Rate) +\begin{DoxyCompactList}\small\item\em set stereo camera F\+PS (Frames Per Seconds) \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_adb1ed69d226251cd050b1deab0270af8}{set\+Raw\+Frame\+Size} (cv\+::\+Size frame\+Size) +\begin{DoxyCompactList}\small\item\em set stereo camera frame size \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_ac2d8d3a96e0ac426af20a3e88df0167a}{set\+Rect\+Frame\+Size} (cv\+::\+Size frame\+Size) +\begin{DoxyCompactList}\small\item\em set rectification image size \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_a98d7546631507bcede3c9a850e69db7a}{set\+Calib\+Params} (std\+::vector$<$ cv\+::\+Mat $>$ params\+Array, bool flag=false) +\begin{DoxyCompactList}\small\item\em set stereo camera calibration parameters \end{DoxyCompactList}\item +virtual int \hyperlink{class_stereo_camera_a105495e27d95f3f905ef1de0f9866c70}{get\+Log\+Level} (void) const +\begin{DoxyCompactList}\small\item\em get log system output level \end{DoxyCompactList}\item +virtual int \hyperlink{class_stereo_camera_a34d50c8166cf8f3f76fff5789f8f1eee}{get\+Device\+Node} (void) const +\begin{DoxyCompactList}\small\item\em get camera device node \end{DoxyCompactList}\item +virtual int \hyperlink{class_stereo_camera_ab844029084a9a9de0996c1e7b24c258c}{get\+Pos\+Number} (void) const +\begin{DoxyCompactList}\small\item\em get stereo camera device node \end{DoxyCompactList}\item +virtual int \hyperlink{class_stereo_camera_a3cb43015d545854892dd2e4057f5b2be}{get\+Serial\+Number} (void) const +\begin{DoxyCompactList}\small\item\em get stereo camera serial number \end{DoxyCompactList}\item +virtual float \hyperlink{class_stereo_camera_ac92c3a60ae0c38e203c81bb2a2738eb4}{get\+Raw\+Frame\+Rate} (void) const +\begin{DoxyCompactList}\small\item\em get stereo camera capture frame rate \end{DoxyCompactList}\item +virtual cv\+::\+Size \hyperlink{class_stereo_camera_a38c990b26167c2f7823b20f44b1a8fa7}{get\+Raw\+Frame\+Size} (void) const +\begin{DoxyCompactList}\small\item\em get stereo camera frame size \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_ac8fbb6e1ebd828b1640d43ad7cdc0f9c}{get\+Raw\+Frame} (cv\+::\+Mat \&frame, std\+::chrono\+::microseconds \&time\+Stamp) +\begin{DoxyCompactList}\small\item\em get stereo camera raw frame \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_aa25f48d95ba8d1c71fb0e40b53f68379}{get\+Stereo\+Frame} (cv\+::\+Mat \&left, cv\+::\+Mat \&right, std\+::chrono\+::microseconds \&time\+Stamp) +\begin{DoxyCompactList}\small\item\em get stereo camera left and right image \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_aa0bd7e3a7ab4fcf2598ac4e780a27cb3}{get\+Depth\+Frame} (cv\+::\+Mat \&depth, bool color, std\+::chrono\+::microseconds \&time\+Stamp) +\begin{DoxyCompactList}\small\item\em get stereo camera depth image \end{DoxyCompactList}\item +\mbox{\Hypertarget{class_stereo_camera_aed61a02ac44c99be0aa62afea2ad9ed8}\label{class_stereo_camera_aed61a02ac44c99be0aa62afea2ad9ed8}} +virtual bool {\bfseries get\+Point\+Cloud} (std\+::vector$<$ cv\+::\+Vec3f $>$ \&pcl, std\+::chrono\+::microseconds \&time\+Stamp) +\item +\mbox{\Hypertarget{class_stereo_camera_ac571ca8f4dc4783052bdab22f68a1ac1}\label{class_stereo_camera_ac571ca8f4dc4783052bdab22f68a1ac1}} +virtual bool {\bfseries get\+Point\+Cloud} (std\+::vector$<$ \hyperlink{struct_p_c_l}{P\+C\+L\+Type} $>$ \&pcl, std\+::chrono\+::microseconds \&time\+Stamp) +\item +virtual bool \hyperlink{class_stereo_camera_a61ea11e661cca31acb780edbbba1d32e}{get\+Calib\+Params} (std\+::vector$<$ cv\+::\+Mat $>$ \¶ms\+Array, bool flag=false) +\begin{DoxyCompactList}\small\item\em get stereo camera calibration paramerters \end{DoxyCompactList}\item +\mbox{\Hypertarget{class_stereo_camera_a6a2a8d258ad08a80ab02932d5248850e}\label{class_stereo_camera_a6a2a8d258ad08a80ab02932d5248850e}} +virtual bool {\bfseries get\+Rect\+Stereo\+Frame} (cv\+::\+Mat \&left, cv\+::\+Mat \&right, cv\+::\+Mat \&feim) +\item +\mbox{\Hypertarget{class_stereo_camera_a2730d460983ce6af37a4cf13025b4ed8}\label{class_stereo_camera_a2730d460983ce6af37a4cf13025b4ed8}} +virtual bool {\bfseries get\+Rect\+Stereo\+Frame} (cv\+::\+Mat \&left, cv\+::\+Mat \&right, cv\+::\+Mat \&feim, std\+::chrono\+::microseconds \&time\+Stamp) +\item +virtual bool \hyperlink{class_stereo_camera_afe25245d518e12c6f0a685d7da7a2979}{load\+Config} (std\+::string file\+Name) +\begin{DoxyCompactList}\small\item\em load stereo camera config parameters \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_afb896942fb7fe1ea33c80ec9dcefa6a0}{load\+Calib\+Params} (std\+::string file\+Name) +\begin{DoxyCompactList}\small\item\em load stereo camera calibration params \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_a568930e8b3668361fedad5233ab5ba47}{save\+Config} (std\+::string file\+Name=\char`\"{}stereo\+\_\+camera\+\_\+config.\+yaml\char`\"{}) +\begin{DoxyCompactList}\small\item\em save stereo camera settings to config file \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_a7611e0d97d57abf36b4fa7dca2a3cfc5}{save\+Calib\+Params} (std\+::string file\+Name=\char`\"{}stereo\+\_\+camera\+\_\+calibparams.\+yaml\char`\"{}) +\begin{DoxyCompactList}\small\item\em save stereo camera calibration parameters to file \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}{start\+Capture} (bool udp\+Flag=false, bool shm\+Flag=false) +\begin{DoxyCompactList}\small\item\em start stereo camera capture thread \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_abb6da9140cb988beb753514e7416032b}{start\+Stereo\+Compute} (void) +\begin{DoxyCompactList}\small\item\em start stereo camera computing disparity thread \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_a3597295e386dfe27474ff0e9567e6d6c}{stop\+Stereo\+Compute} (void) +\begin{DoxyCompactList}\small\item\em stop stereo camera computing disparity thread \end{DoxyCompactList}\item +virtual bool \hyperlink{class_stereo_camera_a8c9f54bf349fd4dc5a8ba9fd26f22c31}{stop\+Capture} (void) +\begin{DoxyCompactList}\small\item\em stop stereo camera capture thread \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\subsection{Detailed Description} +this class integrate camera control and stereo vision algorithm + +this class is the base of Unitree\+Camera\+S\+DK, it includes many functions, such as camera frame capturing, image rectification, disparity computation, generating point cloud and etc. + +\subsection{Constructor \& Destructor Documentation} +\mbox{\Hypertarget{class_stereo_camera_a6d9ac42b50dc07f5f846336ffd29e752}\label{class_stereo_camera_a6d9ac42b50dc07f5f846336ffd29e752}} +\index{Stereo\+Camera@{Stereo\+Camera}!Stereo\+Camera@{Stereo\+Camera}} +\index{Stereo\+Camera@{Stereo\+Camera}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{Stereo\+Camera()}{StereoCamera()}} +{\footnotesize\ttfamily Stereo\+Camera\+::\+Stereo\+Camera (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + + + +\hyperlink{class_stereo_camera}{Stereo\+Camera}. + +\hyperlink{class_stereo_camera}{Stereo\+Camera} constructor overload. + +default constructor +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} +initialize \hyperlink{class_stereo_camera}{Stereo\+Camera} object by default settings +\begin{DoxyCode} +\hyperlink{class_stereo_camera}{StereoCamera} *pCam = \textcolor{keyword}{new} \hyperlink{class_stereo_camera_a6d9ac42b50dc07f5f846336ffd29e752}{StereoCamera}(); or \hyperlink{class_stereo_camera}{StereoCamera} cam; +\end{DoxyCode} + +\end{DoxyNote} +This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. + +use camera config file to init stereo camera +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em file\+Name} & camera config file, include file path, for example\+: $\sim$/test/stereo\+Config.yaml \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} +initialize \hyperlink{class_stereo_camera}{Stereo\+Camera} object by settings from configure file +\begin{DoxyCode} +\hyperlink{class_stereo_camera_a6d9ac42b50dc07f5f846336ffd29e752}{StereoCamera}(\textcolor{stringliteral}{"path\_to/config.yaml"}); +\end{DoxyCode} + +\end{DoxyNote} +This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. + +use camera device node number to init stereo camera +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em device\+Node} & camera device node, for example\+: /dev/video0, camera device node\+: 0 \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} +initialize \hyperlink{class_stereo_camera}{Stereo\+Camera} object by device node number +\begin{DoxyCode} +\hyperlink{class_stereo_camera_a6d9ac42b50dc07f5f846336ffd29e752}{StereoCamera}(0); \textcolor{comment}{// for /dev/video0} +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_a2b36ce592e0e2bf0850d37681c51ae60}\label{class_stereo_camera_a2b36ce592e0e2bf0850d37681c51ae60}} +\index{Stereo\+Camera@{Stereo\+Camera}!````~Stereo\+Camera@{$\sim$\+Stereo\+Camera}} +\index{````~Stereo\+Camera@{$\sim$\+Stereo\+Camera}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{$\sim$\+Stereo\+Camera()}{~StereoCamera()}} +{\footnotesize\ttfamily Stereo\+Camera\+::$\sim$\+Stereo\+Camera (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +\hyperlink{class_stereo_camera}{Stereo\+Camera} destructor. + +release all stereo camera resource +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} +automatically called when \hyperlink{class_stereo_camera}{Stereo\+Camera} object released +\end{DoxyNote} + + +\subsection{Member Function Documentation} +\mbox{\Hypertarget{class_stereo_camera_a61ea11e661cca31acb780edbbba1d32e}\label{class_stereo_camera_a61ea11e661cca31acb780edbbba1d32e}} +\index{Stereo\+Camera@{Stereo\+Camera}!get\+Calib\+Params@{get\+Calib\+Params}} +\index{get\+Calib\+Params@{get\+Calib\+Params}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{get\+Calib\+Params()}{getCalibParams()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::get\+Calib\+Params (\begin{DoxyParamCaption}\item[{std\+::vector$<$ cv\+::\+Mat $>$ \&}]{params\+Array, }\item[{bool}]{flag = {\ttfamily false} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +get stereo camera calibration paramerters + +calibration paramerters include\+: camera intrinsic matrix, camera distortion coefficient, xi(mei model), rotation matrix, translation vector, rectification image intrinsic matrix +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em flag} & default false, false\+: get left camera parameters, true\+: get right camera parameters. \\ +\hline +\mbox{\tt out} & {\em params\+Array} & arrange Array element as follows\+: intrinsic,distortion,xi,rotation,translation,kfe \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if assignment successfully return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyAttention}{Attention} +This funtion must be called after \hyperlink{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}{start\+Capture()} +\end{DoxyAttention} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +cam.startCapture(); +std::vector paramsArray; +\textcolor{keywordflow}{if}(cam.getCalibParams(paramsArray))\{ + \textcolor{comment}{//do something} +\} +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_aa0bd7e3a7ab4fcf2598ac4e780a27cb3}\label{class_stereo_camera_aa0bd7e3a7ab4fcf2598ac4e780a27cb3}} +\index{Stereo\+Camera@{Stereo\+Camera}!get\+Depth\+Frame@{get\+Depth\+Frame}} +\index{get\+Depth\+Frame@{get\+Depth\+Frame}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{get\+Depth\+Frame()}{getDepthFrame()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::get\+Depth\+Frame (\begin{DoxyParamCaption}\item[{cv\+::\+Mat \&}]{depth, }\item[{bool}]{color, }\item[{std\+::chrono\+::microseconds \&}]{time\+Stamp }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +get stereo camera depth image + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em color} & true\+: depth is color image, false\+:depth is gray image \\ +\hline +\mbox{\tt out} & {\em depth} & left image \\ +\hline +\mbox{\tt out} & {\em time\+Stamp} & frame time stamp \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if depth image is not empty, return true, otherwise return false. +\end{DoxyReturn} +\begin{DoxyAttention}{Attention} +This funtion must be called after \hyperlink{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}{start\+Capture()}. +\end{DoxyAttention} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +cam.startCapture(); +cam.startStereoCompute(); +cv::Mat depth; +std::chrono::microseconds timeStamp; +\textcolor{keywordflow}{if}(cam.getPointCloud(depth, \textcolor{keyword}{true}, timeStamp))\{ + \textcolor{comment}{//do something} +\} +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_a34d50c8166cf8f3f76fff5789f8f1eee}\label{class_stereo_camera_a34d50c8166cf8f3f76fff5789f8f1eee}} +\index{Stereo\+Camera@{Stereo\+Camera}!get\+Device\+Node@{get\+Device\+Node}} +\index{get\+Device\+Node@{get\+Device\+Node}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{get\+Device\+Node()}{getDeviceNode()}} +{\footnotesize\ttfamily int Stereo\+Camera\+::get\+Device\+Node (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}} + + + +get camera device node + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +device node number +\end{DoxyReturn} +\begin{DoxyNote}{Note} +for example\+: /dev/video2, device node number is 2, the return value of function is 2. +\begin{DoxyCode} +\textcolor{keywordtype}{int} nodeNumber = cam.getDeviceNode(); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_a105495e27d95f3f905ef1de0f9866c70}\label{class_stereo_camera_a105495e27d95f3f905ef1de0f9866c70}} +\index{Stereo\+Camera@{Stereo\+Camera}!get\+Log\+Level@{get\+Log\+Level}} +\index{get\+Log\+Level@{get\+Log\+Level}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{get\+Log\+Level()}{getLogLevel()}} +{\footnotesize\ttfamily int Stereo\+Camera\+::get\+Log\+Level (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}} + + + +get log system output level + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +log level +\end{DoxyReturn} +\begin{DoxyNote}{Note} +1\+: output runtime information, 2\+: output runtime infomation and debug information +\begin{DoxyCode} +\textcolor{keywordtype}{int} LogLevel = cam.getLogLevel(); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_ab844029084a9a9de0996c1e7b24c258c}\label{class_stereo_camera_ab844029084a9a9de0996c1e7b24c258c}} +\index{Stereo\+Camera@{Stereo\+Camera}!get\+Pos\+Number@{get\+Pos\+Number}} +\index{get\+Pos\+Number@{get\+Pos\+Number}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{get\+Pos\+Number()}{getPosNumber()}} +{\footnotesize\ttfamily int Stereo\+Camera\+::get\+Pos\+Number (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}} + + + +get stereo camera device node + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +positon number +\end{DoxyReturn} +\begin{DoxyNote}{Note} +face N\+O.\+1, chin N\+O.\+2, left N\+O.\+3, right N\+O.\+4, down N\+O.\+5 +\begin{DoxyCode} +\textcolor{keywordtype}{int} posNum = cam.getPosNumber(); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_ac8fbb6e1ebd828b1640d43ad7cdc0f9c}\label{class_stereo_camera_ac8fbb6e1ebd828b1640d43ad7cdc0f9c}} +\index{Stereo\+Camera@{Stereo\+Camera}!get\+Raw\+Frame@{get\+Raw\+Frame}} +\index{get\+Raw\+Frame@{get\+Raw\+Frame}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{get\+Raw\+Frame()}{getRawFrame()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::get\+Raw\+Frame (\begin{DoxyParamCaption}\item[{cv\+::\+Mat \&}]{frame, }\item[{std\+::chrono\+::microseconds \&}]{time\+Stamp }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +get stereo camera raw frame + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em frame} & raw frame, include left and right image \\ +\hline +\mbox{\tt out} & {\em time\+Stamp} & raw frame time stamp \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if frame is not empty, return true, otherwise return false. +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +cv::Mat frame; +std::chrono::microseconds timeStamp +cam.getRawFrame(frame, timeStamp); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_ac92c3a60ae0c38e203c81bb2a2738eb4}\label{class_stereo_camera_ac92c3a60ae0c38e203c81bb2a2738eb4}} +\index{Stereo\+Camera@{Stereo\+Camera}!get\+Raw\+Frame\+Rate@{get\+Raw\+Frame\+Rate}} +\index{get\+Raw\+Frame\+Rate@{get\+Raw\+Frame\+Rate}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{get\+Raw\+Frame\+Rate()}{getRawFrameRate()}} +{\footnotesize\ttfamily float Stereo\+Camera\+::get\+Raw\+Frame\+Rate (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}} + + + +get stereo camera capture frame rate + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +current stereo camera fps. +\begin{DoxyCode} +\textcolor{keywordtype}{float} fps = \hyperlink{class_stereo_camera_ac92c3a60ae0c38e203c81bb2a2738eb4}{getRawFrameRate}(); +\end{DoxyCode} + +\end{DoxyReturn} +\mbox{\Hypertarget{class_stereo_camera_a38c990b26167c2f7823b20f44b1a8fa7}\label{class_stereo_camera_a38c990b26167c2f7823b20f44b1a8fa7}} +\index{Stereo\+Camera@{Stereo\+Camera}!get\+Raw\+Frame\+Size@{get\+Raw\+Frame\+Size}} +\index{get\+Raw\+Frame\+Size@{get\+Raw\+Frame\+Size}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{get\+Raw\+Frame\+Size()}{getRawFrameSize()}} +{\footnotesize\ttfamily cv\+::\+Size Stereo\+Camera\+::get\+Raw\+Frame\+Size (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}} + + + +get stereo camera frame size + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +frame size. +\begin{DoxyCode} +cv::Size fSize = cam.getRawFrameSize(); +\end{DoxyCode} + +\end{DoxyReturn} +\mbox{\Hypertarget{class_stereo_camera_a3cb43015d545854892dd2e4057f5b2be}\label{class_stereo_camera_a3cb43015d545854892dd2e4057f5b2be}} +\index{Stereo\+Camera@{Stereo\+Camera}!get\+Serial\+Number@{get\+Serial\+Number}} +\index{get\+Serial\+Number@{get\+Serial\+Number}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{get\+Serial\+Number()}{getSerialNumber()}} +{\footnotesize\ttfamily int Stereo\+Camera\+::get\+Serial\+Number (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}} + + + +get stereo camera serial number + +this number is same as robot serial number +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +robot serial number +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +\textcolor{keywordtype}{int} seiralNumber = cam.getSerialNumber(); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_aa25f48d95ba8d1c71fb0e40b53f68379}\label{class_stereo_camera_aa25f48d95ba8d1c71fb0e40b53f68379}} +\index{Stereo\+Camera@{Stereo\+Camera}!get\+Stereo\+Frame@{get\+Stereo\+Frame}} +\index{get\+Stereo\+Frame@{get\+Stereo\+Frame}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{get\+Stereo\+Frame()}{getStereoFrame()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::get\+Stereo\+Frame (\begin{DoxyParamCaption}\item[{cv\+::\+Mat \&}]{left, }\item[{cv\+::\+Mat \&}]{right, }\item[{std\+::chrono\+::microseconds \&}]{time\+Stamp }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +get stereo camera left and right image + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em left} & left image \\ +\hline +\mbox{\tt out} & {\em right} & right image \\ +\hline +\mbox{\tt out} & {\em time\+Stamp} & frame time stamp \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if left and right images are not empty, return true, otherwise return false. +\end{DoxyReturn} +\begin{DoxyAttention}{Attention} +This funtion must be called after \hyperlink{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}{start\+Capture()}. +\end{DoxyAttention} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +cam.startCapture(); +cv::Mat left, right; +std::chrono::microseconds timeStamp; +\textcolor{keywordflow}{if}(cam.getRawFrame(left,right, timeStamp))\{ + \textcolor{comment}{//do something} +\} +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_a47c0d9ee727f13af5d348db9f217a44b}\label{class_stereo_camera_a47c0d9ee727f13af5d348db9f217a44b}} +\index{Stereo\+Camera@{Stereo\+Camera}!is\+Opened@{is\+Opened}} +\index{is\+Opened@{is\+Opened}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{is\+Opened()}{isOpened()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::is\+Opened (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +get stereo camera running status + +detect camera is opened or closed +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if camera is opened return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyNote}{Note} +tell camera running status, it should be called after \hyperlink{class_stereo_camera}{Stereo\+Camera} object initialization +\begin{DoxyCode} +\hyperlink{class_stereo_camera}{StereoCamera} cam; +\textcolor{keywordflow}{if}(cam.\hyperlink{class_stereo_camera_a47c0d9ee727f13af5d348db9f217a44b}{isOpened}()) + printf(\textcolor{stringliteral}{"Camera is opened!"}); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_afb896942fb7fe1ea33c80ec9dcefa6a0}\label{class_stereo_camera_afb896942fb7fe1ea33c80ec9dcefa6a0}} +\index{Stereo\+Camera@{Stereo\+Camera}!load\+Calib\+Params@{load\+Calib\+Params}} +\index{load\+Calib\+Params@{load\+Calib\+Params}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{load\+Calib\+Params()}{loadCalibParams()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::load\+Calib\+Params (\begin{DoxyParamCaption}\item[{std\+::string}]{file\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +load stereo camera calibration params + +calibration paramerters include\+: camera intrinsic matrix, camera distortion coefficient, xi(mei model), rotation matrix, translation vector, rectification image intrinsic matrix, etc. +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em file\+Name} & calibration file name\+: include file path, for example\+: \char`\"{}path\+\_\+to/calib.\+yaml\char`\"{} \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if load file successfully return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyAttention}{Attention} +This funtion must be called before \hyperlink{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}{start\+Capture()} and after load\+Config(\char`\"{}xxx\char`\"{}); +\end{DoxyAttention} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +cam.\hyperlink{class_stereo_camera_afe25245d518e12c6f0a685d7da7a2979}{loadConfig}(\textcolor{stringliteral}{"path\_to/config.yaml"}); +cam.\hyperlink{class_stereo_camera_afb896942fb7fe1ea33c80ec9dcefa6a0}{loadCalibParams}(\textcolor{stringliteral}{"path\_to/calib.yaml"}); +cam.\hyperlink{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}{startCapture}(); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_afe25245d518e12c6f0a685d7da7a2979}\label{class_stereo_camera_afe25245d518e12c6f0a685d7da7a2979}} +\index{Stereo\+Camera@{Stereo\+Camera}!load\+Config@{load\+Config}} +\index{load\+Config@{load\+Config}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{load\+Config()}{loadConfig()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::load\+Config (\begin{DoxyParamCaption}\item[{std\+::string}]{file\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +load stereo camera config parameters + +parameters include\+: Log\+Level,Threshold,Algorithm,Ip\+Last\+Segment, Device\+Node,Frame\+Size,Rectify\+Frame\+Size,Frame\+Rate, etc. +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em file\+Name} & config name\+: include config path, for example\+: \char`\"{}path\+\_\+to/config.\+yaml\char`\"{} \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if load config file successfully return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyAttention}{Attention} +This funtion must be called before \hyperlink{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}{start\+Capture()} and after init the camera object. +\end{DoxyAttention} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +cam.\hyperlink{class_stereo_camera_afe25245d518e12c6f0a685d7da7a2979}{loadConfig}(\textcolor{stringliteral}{"path\_to/config.yaml"}); +cam.\hyperlink{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}{startCapture}(); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_a7611e0d97d57abf36b4fa7dca2a3cfc5}\label{class_stereo_camera_a7611e0d97d57abf36b4fa7dca2a3cfc5}} +\index{Stereo\+Camera@{Stereo\+Camera}!save\+Calib\+Params@{save\+Calib\+Params}} +\index{save\+Calib\+Params@{save\+Calib\+Params}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{save\+Calib\+Params()}{saveCalibParams()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::save\+Calib\+Params (\begin{DoxyParamCaption}\item[{std\+::string}]{file\+Name = {\ttfamily \char`\"{}stereo\+\_\+camera\+\_\+calibparams.yaml\char`\"{}} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +save stereo camera calibration parameters to file + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em file\+Name} & default name\+: stereo\+\_\+camera\+\_\+calibparams.\+yaml, output file\+: include file path, for example\+: \char`\"{}path\+\_\+to/calib.\+yaml\char`\"{} \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if save file successfully return true, otherwise return false +\begin{DoxyCode} +cam.\hyperlink{class_stereo_camera_a568930e8b3668361fedad5233ab5ba47}{saveConfig}(\textcolor{stringliteral}{"stereo\_camera\_config.yaml"}); +\end{DoxyCode} + +\end{DoxyReturn} +\mbox{\Hypertarget{class_stereo_camera_a568930e8b3668361fedad5233ab5ba47}\label{class_stereo_camera_a568930e8b3668361fedad5233ab5ba47}} +\index{Stereo\+Camera@{Stereo\+Camera}!save\+Config@{save\+Config}} +\index{save\+Config@{save\+Config}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{save\+Config()}{saveConfig()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::save\+Config (\begin{DoxyParamCaption}\item[{std\+::string}]{file\+Name = {\ttfamily \char`\"{}stereo\+\_\+camera\+\_\+config.yaml\char`\"{}} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +save stereo camera settings to config file + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em file\+Name} & default name\+: stereo\+\_\+camera\+\_\+config.\+yaml, output config file\+: include file path, for example\+: \char`\"{}path\+\_\+to/config.\+yaml\char`\"{} \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if save file successfully return true, otherwise return false +\begin{DoxyCode} +cam.\hyperlink{class_stereo_camera_a568930e8b3668361fedad5233ab5ba47}{saveConfig}(\textcolor{stringliteral}{"stereo\_camera\_config.yaml"}); +\end{DoxyCode} + +\end{DoxyReturn} +\mbox{\Hypertarget{class_stereo_camera_a98d7546631507bcede3c9a850e69db7a}\label{class_stereo_camera_a98d7546631507bcede3c9a850e69db7a}} +\index{Stereo\+Camera@{Stereo\+Camera}!set\+Calib\+Params@{set\+Calib\+Params}} +\index{set\+Calib\+Params@{set\+Calib\+Params}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{set\+Calib\+Params()}{setCalibParams()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::set\+Calib\+Params (\begin{DoxyParamCaption}\item[{std\+::vector$<$ cv\+::\+Mat $>$}]{params\+Array, }\item[{bool}]{flag = {\ttfamily false} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +set stereo camera calibration parameters + +calibration paramerters include\+: camera intrinsic matrix, camera distortion coefficient, xi(mei model), rotation matrix, translation vector, rectification image intrinsic matrix +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em params\+Array} & arrange Array element as follows\+: intrinsic,distortion,xi,rotation,translation,kfe \\ +\hline +\mbox{\tt in} & {\em flag} & false\+: set left camera params, true\+: right camera params \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if assignment successfully return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyAttention}{Attention} +the order of parameters should be correct +\end{DoxyAttention} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +std::vector leftParamsArray; +cam.\hyperlink{class_stereo_camera_a98d7546631507bcede3c9a850e69db7a}{setCalibParams}(leftParamsArray); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_adb684170c2180eb2109f9eecd1723c1c}\label{class_stereo_camera_adb684170c2180eb2109f9eecd1723c1c}} +\index{Stereo\+Camera@{Stereo\+Camera}!set\+Log\+Level@{set\+Log\+Level}} +\index{set\+Log\+Level@{set\+Log\+Level}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{set\+Log\+Level()}{setLogLevel()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::set\+Log\+Level (\begin{DoxyParamCaption}\item[{int}]{level }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +set stereo camera ouput log level + +log level means that different kind of information will be output +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em level} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if assignment successfully return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyNote}{Note} +output information starts with \char`\"{}\+Stereo\+Camera\char`\"{}, it should be called after \hyperlink{class_stereo_camera}{Stereo\+Camera} object initialization +\begin{DoxyCode} +cam.\hyperlink{class_stereo_camera_adb684170c2180eb2109f9eecd1723c1c}{setLogLevel}(2); \textcolor{comment}{//debug level } +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_ad570580bd5b16ac58831d57ffd23ce5b}\label{class_stereo_camera_ad570580bd5b16ac58831d57ffd23ce5b}} +\index{Stereo\+Camera@{Stereo\+Camera}!set\+Pos\+Number@{set\+Pos\+Number}} +\index{set\+Pos\+Number@{set\+Pos\+Number}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{set\+Pos\+Number()}{setPosNumber()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::set\+Pos\+Number (\begin{DoxyParamCaption}\item[{int}]{pos\+Number }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +set stereo camera position number + +position number means that the number of camera location in robot body +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em pos\+Number} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if assignment successfully return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyNote}{Note} +face N\+O.\+1, chin N\+O.\+2, left N\+O.\+3, right N\+O.\+4, down N\+O.\+5 +\begin{DoxyCode} +cam.\hyperlink{class_stereo_camera_ad570580bd5b16ac58831d57ffd23ce5b}{setPosNumber}(2); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_aa28635e45b1d0ade5353a69e2a7175e4}\label{class_stereo_camera_aa28635e45b1d0ade5353a69e2a7175e4}} +\index{Stereo\+Camera@{Stereo\+Camera}!set\+Raw\+Frame\+Rate@{set\+Raw\+Frame\+Rate}} +\index{set\+Raw\+Frame\+Rate@{set\+Raw\+Frame\+Rate}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{set\+Raw\+Frame\+Rate()}{setRawFrameRate()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::set\+Raw\+Frame\+Rate (\begin{DoxyParamCaption}\item[{int}]{frame\+Rate }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +set stereo camera F\+PS (Frames Per Seconds) + +for 1856\+X800 F\+PS\+:30, for 928x400 F\+PS\+:30 or 60 +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em frame\+Rate} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if assignment successfully return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +cam.\hyperlink{class_stereo_camera_aa28635e45b1d0ade5353a69e2a7175e4}{setRawFrameRate}(30) +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_adb1ed69d226251cd050b1deab0270af8}\label{class_stereo_camera_adb1ed69d226251cd050b1deab0270af8}} +\index{Stereo\+Camera@{Stereo\+Camera}!set\+Raw\+Frame\+Size@{set\+Raw\+Frame\+Size}} +\index{set\+Raw\+Frame\+Size@{set\+Raw\+Frame\+Size}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{set\+Raw\+Frame\+Size()}{setRawFrameSize()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::set\+Raw\+Frame\+Size (\begin{DoxyParamCaption}\item[{cv\+::\+Size}]{frame\+Size }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +set stereo camera frame size + +There are two choise\+: 1856\+X800,928x400. +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em frame\+Size} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if assignment successfully return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyAttention}{Attention} +if do not assign frame\+Size, default size is 1856x800 +\end{DoxyAttention} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +cam.\hyperlink{class_stereo_camera_adb1ed69d226251cd050b1deab0270af8}{setRawFrameSize}(cv::Size(1856, 800)); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_ac2d8d3a96e0ac426af20a3e88df0167a}\label{class_stereo_camera_ac2d8d3a96e0ac426af20a3e88df0167a}} +\index{Stereo\+Camera@{Stereo\+Camera}!set\+Rect\+Frame\+Size@{set\+Rect\+Frame\+Size}} +\index{set\+Rect\+Frame\+Size@{set\+Rect\+Frame\+Size}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{set\+Rect\+Frame\+Size()}{setRectFrameSize()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::set\+Rect\+Frame\+Size (\begin{DoxyParamCaption}\item[{cv\+::\+Size}]{frame\+Size }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +set rectification image size + +this size should keep ratio as camera raw image size, for example\+: raw single frame size\+: 928x800 rectification image size\+: 464x400 or 232x200 +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em frame\+Size} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if assignment successfully return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyAttention}{Attention} +rectification image size must be smaller than camera raw single image size +\end{DoxyAttention} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +cam.\hyperlink{class_stereo_camera_adb1ed69d226251cd050b1deab0270af8}{setRawFrameSize}(cv::Size(464, 400)); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_a110ad0dc21cea5bfa5607752fc858163}\label{class_stereo_camera_a110ad0dc21cea5bfa5607752fc858163}} +\index{Stereo\+Camera@{Stereo\+Camera}!set\+Serial\+Number@{set\+Serial\+Number}} +\index{set\+Serial\+Number@{set\+Serial\+Number}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{set\+Serial\+Number()}{setSerialNumber()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::set\+Serial\+Number (\begin{DoxyParamCaption}\item[{int}]{serial\+Number }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +set stereo camera serial number + +serial number same as robot serial number +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em serial\+Number} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if assignment successfully return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +cam.\hyperlink{class_stereo_camera_a110ad0dc21cea5bfa5607752fc858163}{setSerialNumber}(2); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}\label{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}} +\index{Stereo\+Camera@{Stereo\+Camera}!start\+Capture@{start\+Capture}} +\index{start\+Capture@{start\+Capture}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{start\+Capture()}{startCapture()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::start\+Capture (\begin{DoxyParamCaption}\item[{bool}]{udp\+Flag = {\ttfamily false}, }\item[{bool}]{shm\+Flag = {\ttfamily false} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +start stereo camera capture thread + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em udp\+Flag} & default false, true\+: enable using H264 encode camera frame and send it by gstream udp command \\ +\hline +\mbox{\tt in} & {\em shm\+Flag} & default false, true\+: enable using share memory to share camera frame \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if create capture thread successfully return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyNote}{Note} +gstreamer send command\+: \char`\"{}appsrc ! videoconvert ! omxh264enc ! video/x-\/h264, stream-\/format=byte-\/stream ! rtph264pay ! udpsink host=192.\+168.\+123.\+S\+E\+G port=host\+Port\char`\"{}. S\+EG is last segment of your recieve board IP, its range from 2$\sim$254,for example\+: 13, host=192.\+168.\+123.\+13. host\+Port is defined by the result of adding camera position number and 9000, for example\+: camera positon number is 5, port=9005. share memory key number is defined by the result of adding camera position number and 9000. This function must be called after camera config or settings finished. +\begin{DoxyCode} +cam.\hyperlink{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}{startCapture}(\textcolor{keyword}{true}, \textcolor{keyword}{false}); \textcolor{comment}{// support h264 encode frame and send it by udp} +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_abb6da9140cb988beb753514e7416032b}\label{class_stereo_camera_abb6da9140cb988beb753514e7416032b}} +\index{Stereo\+Camera@{Stereo\+Camera}!start\+Stereo\+Compute@{start\+Stereo\+Compute}} +\index{start\+Stereo\+Compute@{start\+Stereo\+Compute}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{start\+Stereo\+Compute()}{startStereoCompute()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::start\+Stereo\+Compute (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +start stereo camera computing disparity thread + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if create thread successfully return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyAttention}{Attention} +This function must be called after \hyperlink{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}{start\+Capture()}; +\end{DoxyAttention} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +cam.\hyperlink{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}{startCapture}(); +cam.\hyperlink{class_stereo_camera_abb6da9140cb988beb753514e7416032b}{startStereoCompute}(); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_a8c9f54bf349fd4dc5a8ba9fd26f22c31}\label{class_stereo_camera_a8c9f54bf349fd4dc5a8ba9fd26f22c31}} +\index{Stereo\+Camera@{Stereo\+Camera}!stop\+Capture@{stop\+Capture}} +\index{stop\+Capture@{stop\+Capture}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{stop\+Capture()}{stopCapture()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::stop\+Capture (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +stop stereo camera capture thread + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if stop thread successfully return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyAttention}{Attention} +This function must be called after \hyperlink{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}{start\+Capture()}. +\end{DoxyAttention} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +cam.\hyperlink{class_stereo_camera_a4e5146c1d33ab5f4f9a3995b93e3cbc5}{startCapture}(); +cam.\hyperlink{class_stereo_camera_abb6da9140cb988beb753514e7416032b}{startStereoCompute}(); +cam.\hyperlink{class_stereo_camera_a3597295e386dfe27474ff0e9567e6d6c}{stopStereoCompute}(); +cam.\hyperlink{class_stereo_camera_a8c9f54bf349fd4dc5a8ba9fd26f22c31}{stopCapture}(); +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_stereo_camera_a3597295e386dfe27474ff0e9567e6d6c}\label{class_stereo_camera_a3597295e386dfe27474ff0e9567e6d6c}} +\index{Stereo\+Camera@{Stereo\+Camera}!stop\+Stereo\+Compute@{stop\+Stereo\+Compute}} +\index{stop\+Stereo\+Compute@{stop\+Stereo\+Compute}!Stereo\+Camera@{Stereo\+Camera}} +\subsubsection{\texorpdfstring{stop\+Stereo\+Compute()}{stopStereoCompute()}} +{\footnotesize\ttfamily bool Stereo\+Camera\+::stop\+Stereo\+Compute (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}} + + + +stop stereo camera computing disparity thread + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true or false, if stop thread successfully return true, otherwise return false +\end{DoxyReturn} +\begin{DoxyAttention}{Attention} +This function must be called after \hyperlink{class_stereo_camera_abb6da9140cb988beb753514e7416032b}{start\+Stereo\+Compute()} +\end{DoxyAttention} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +cam.\hyperlink{class_stereo_camera_abb6da9140cb988beb753514e7416032b}{startStereoCompute}(); +cam.\hyperlink{class_stereo_camera_a3597295e386dfe27474ff0e9567e6d6c}{stopStereoCompute}(); +\end{DoxyCode} + +\end{DoxyNote} + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +include/\hyperlink{_stereo_camera_common_8hpp}{Stereo\+Camera\+Common.\+hpp}\item +src/\hyperlink{_stereo_camera_common_8cc}{Stereo\+Camera\+Common.\+cc}\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_stereo_camera__inherit__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_stereo_camera__inherit__graph.md5 new file mode 100644 index 0000000..7390a63 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_stereo_camera__inherit__graph.md5 @@ -0,0 +1 @@ +73f0bd2a0c72193d410840a870b6b357 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_stereo_camera__inherit__graph.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_stereo_camera__inherit__graph.pdf new file mode 100644 index 0000000..492d92d Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_stereo_camera__inherit__graph.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_system_log.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_system_log.tex new file mode 100644 index 0000000..96815a0 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_system_log.tex @@ -0,0 +1,338 @@ +\hypertarget{class_system_log}{}\section{System\+Log Class Reference} +\label{class_system_log}\index{System\+Log@{System\+Log}} +\subsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\hyperlink{class_system_log_aad41c68c3a8192ddb646170349023c99}{System\+Log} (std\+::string log\+Name) +\begin{DoxyCompactList}\small\item\em \hyperlink{class_system_log}{System\+Log} constructor. \end{DoxyCompactList}\item +void \hyperlink{class_system_log_a21296bb67489848bad6cfa04280fec85}{set\+Log\+Level} (int level) +\begin{DoxyCompactList}\small\item\em set system ouput log level \end{DoxyCompactList}\item +void \hyperlink{class_system_log_ac33b9f16ae96885ff7170d209a6af506}{run\+Time\+Error} (const char $\ast$format,...) +\begin{DoxyCompactList}\small\item\em output running error infomation, color\+: red \end{DoxyCompactList}\item +void \hyperlink{class_system_log_ac9b085c959e3f97d547c997c2fca2613}{run\+Time\+Info} (const char $\ast$format,...) +\begin{DoxyCompactList}\small\item\em output running infomation, color\+: green \end{DoxyCompactList}\item +void \hyperlink{class_system_log_a69d19a4affe470db2b740a1e9a78e6e5}{run\+Time\+Warning} (const char $\ast$format,...) +\begin{DoxyCompactList}\small\item\em output running warning infomation, color\+: yellow \end{DoxyCompactList}\item +void \hyperlink{class_system_log_a08dff4b478ed29a39d584d3b7f21ddfb}{debug\+Time\+Warning} (const char $\ast$format,...) +\begin{DoxyCompactList}\small\item\em output debug warning infomation, color\+: cyan \end{DoxyCompactList}\item +void \hyperlink{class_system_log_ad79238fdcc9a301093d6fa32884d1ae1}{debug\+Time\+Info} (const char $\ast$format,...) +\begin{DoxyCompactList}\small\item\em output debug infomation, color\+: white \end{DoxyCompactList}\item +void \hyperlink{class_system_log_ae1cbe2de51efe22068e2e047396a72dd}{debug\+Time\+Error} (const char $\ast$format,...) +\begin{DoxyCompactList}\small\item\em output debug error infomation, color\+: magenta \end{DoxyCompactList}\item +void \hyperlink{class_system_log_a9714a265975472433882962b7449bd45}{save\+Log} (void) +\begin{DoxyCompactList}\small\item\em save system log to a file, default file name\+: Running.\+txt \end{DoxyCompactList}\item +void \hyperlink{class_system_log_af41d346f86242f5be187fe2be354347d}{save\+Log\+To\+File} (std\+::string file\+Name) +\begin{DoxyCompactList}\small\item\em save system log to a designated file \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\subsection{Constructor \& Destructor Documentation} +\mbox{\Hypertarget{class_system_log_aad41c68c3a8192ddb646170349023c99}\label{class_system_log_aad41c68c3a8192ddb646170349023c99}} +\index{System\+Log@{System\+Log}!System\+Log@{System\+Log}} +\index{System\+Log@{System\+Log}!System\+Log@{System\+Log}} +\subsubsection{\texorpdfstring{System\+Log()}{SystemLog()}} +{\footnotesize\ttfamily System\+Log\+::\+System\+Log (\begin{DoxyParamCaption}\item[{std\+::string}]{log\+Name }\end{DoxyParamCaption})} + + + +\hyperlink{class_system_log}{System\+Log} constructor. + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em log\+Name} & the name of special system \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\end{DoxyNote} +\begin{DoxyAttention}{Attention} +output information starts with \char`\"{}log\+Name\char`\"{} +\begin{DoxyCode} +\end{DoxyCode} + +\end{DoxyAttention} + + +\subsection{Member Function Documentation} +\mbox{\Hypertarget{class_system_log_ae1cbe2de51efe22068e2e047396a72dd}\label{class_system_log_ae1cbe2de51efe22068e2e047396a72dd}} +\index{System\+Log@{System\+Log}!debug\+Time\+Error@{debug\+Time\+Error}} +\index{debug\+Time\+Error@{debug\+Time\+Error}!System\+Log@{System\+Log}} +\subsubsection{\texorpdfstring{debug\+Time\+Error()}{debugTimeError()}} +{\footnotesize\ttfamily System\+Log\+::debug\+Time\+Error (\begin{DoxyParamCaption}\item[{const char $\ast$}]{format, }\item[{}]{... }\end{DoxyParamCaption})} + + + +output debug error infomation, color\+: magenta + +output format \mbox{[}log\+Name\mbox{]}\mbox{[}D\+E\+B\+U\+G\+\_\+\+E\+R\+R\+OR\mbox{]} info +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em format} & \\ +\hline +\mbox{\tt in} & {\em ...} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\end{DoxyNote} +\begin{DoxyAttention}{Attention} +use it like printf() +\begin{DoxyCode} +\end{DoxyCode} + +\end{DoxyAttention} +\mbox{\Hypertarget{class_system_log_ad79238fdcc9a301093d6fa32884d1ae1}\label{class_system_log_ad79238fdcc9a301093d6fa32884d1ae1}} +\index{System\+Log@{System\+Log}!debug\+Time\+Info@{debug\+Time\+Info}} +\index{debug\+Time\+Info@{debug\+Time\+Info}!System\+Log@{System\+Log}} +\subsubsection{\texorpdfstring{debug\+Time\+Info()}{debugTimeInfo()}} +{\footnotesize\ttfamily System\+Log\+::debug\+Time\+Info (\begin{DoxyParamCaption}\item[{const char $\ast$}]{format, }\item[{}]{... }\end{DoxyParamCaption})} + + + +output debug infomation, color\+: white + +output format \mbox{[}log\+Name\mbox{]}\mbox{[}D\+E\+B\+U\+G\+\_\+\+I\+N\+FO\mbox{]} info +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em format} & \\ +\hline +\mbox{\tt in} & {\em ...} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\end{DoxyNote} +\begin{DoxyAttention}{Attention} +use it like printf() +\begin{DoxyCode} +\end{DoxyCode} + +\end{DoxyAttention} +\mbox{\Hypertarget{class_system_log_a08dff4b478ed29a39d584d3b7f21ddfb}\label{class_system_log_a08dff4b478ed29a39d584d3b7f21ddfb}} +\index{System\+Log@{System\+Log}!debug\+Time\+Warning@{debug\+Time\+Warning}} +\index{debug\+Time\+Warning@{debug\+Time\+Warning}!System\+Log@{System\+Log}} +\subsubsection{\texorpdfstring{debug\+Time\+Warning()}{debugTimeWarning()}} +{\footnotesize\ttfamily System\+Log\+::debug\+Time\+Warning (\begin{DoxyParamCaption}\item[{const char $\ast$}]{format, }\item[{}]{... }\end{DoxyParamCaption})} + + + +output debug warning infomation, color\+: cyan + +output format \mbox{[}log\+Name\mbox{]}\mbox{[}D\+E\+B\+U\+G\+\_\+\+W\+A\+R\+N\+I\+NG\mbox{]} info +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em format} & \\ +\hline +\mbox{\tt in} & {\em ...} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\end{DoxyNote} +\begin{DoxyAttention}{Attention} +use it like printf() +\begin{DoxyCode} +\end{DoxyCode} + +\end{DoxyAttention} +\mbox{\Hypertarget{class_system_log_ac33b9f16ae96885ff7170d209a6af506}\label{class_system_log_ac33b9f16ae96885ff7170d209a6af506}} +\index{System\+Log@{System\+Log}!run\+Time\+Error@{run\+Time\+Error}} +\index{run\+Time\+Error@{run\+Time\+Error}!System\+Log@{System\+Log}} +\subsubsection{\texorpdfstring{run\+Time\+Error()}{runTimeError()}} +{\footnotesize\ttfamily System\+Log\+::run\+Time\+Error (\begin{DoxyParamCaption}\item[{const char $\ast$}]{format, }\item[{}]{... }\end{DoxyParamCaption})} + + + +output running error infomation, color\+: red + +output format \mbox{[}log\+Name\mbox{]}\mbox{[}E\+R\+R\+OR\mbox{]} info +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em format} & \\ +\hline +\mbox{\tt in} & {\em ...} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\end{DoxyNote} +\begin{DoxyAttention}{Attention} +use it like printf() +\begin{DoxyCode} +\end{DoxyCode} + +\end{DoxyAttention} +\mbox{\Hypertarget{class_system_log_ac9b085c959e3f97d547c997c2fca2613}\label{class_system_log_ac9b085c959e3f97d547c997c2fca2613}} +\index{System\+Log@{System\+Log}!run\+Time\+Info@{run\+Time\+Info}} +\index{run\+Time\+Info@{run\+Time\+Info}!System\+Log@{System\+Log}} +\subsubsection{\texorpdfstring{run\+Time\+Info()}{runTimeInfo()}} +{\footnotesize\ttfamily System\+Log\+::run\+Time\+Info (\begin{DoxyParamCaption}\item[{const char $\ast$}]{format, }\item[{}]{... }\end{DoxyParamCaption})} + + + +output running infomation, color\+: green + +output format \mbox{[}log\+Name\mbox{]}\mbox{[}I\+N\+FO\mbox{]} info +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em format} & \\ +\hline +\mbox{\tt in} & {\em ...} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\end{DoxyNote} +\begin{DoxyAttention}{Attention} +use it like printf() +\begin{DoxyCode} +\end{DoxyCode} + +\end{DoxyAttention} +\mbox{\Hypertarget{class_system_log_a69d19a4affe470db2b740a1e9a78e6e5}\label{class_system_log_a69d19a4affe470db2b740a1e9a78e6e5}} +\index{System\+Log@{System\+Log}!run\+Time\+Warning@{run\+Time\+Warning}} +\index{run\+Time\+Warning@{run\+Time\+Warning}!System\+Log@{System\+Log}} +\subsubsection{\texorpdfstring{run\+Time\+Warning()}{runTimeWarning()}} +{\footnotesize\ttfamily System\+Log\+::run\+Time\+Warning (\begin{DoxyParamCaption}\item[{const char $\ast$}]{format, }\item[{}]{... }\end{DoxyParamCaption})} + + + +output running warning infomation, color\+: yellow + +output format \mbox{[}log\+Name\mbox{]}\mbox{[}W\+A\+R\+N\+I\+NG\mbox{]} info +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em format} & \\ +\hline +\mbox{\tt in} & {\em ...} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\end{DoxyNote} +\begin{DoxyAttention}{Attention} +use it like printf() +\begin{DoxyCode} +\end{DoxyCode} + +\end{DoxyAttention} +\mbox{\Hypertarget{class_system_log_a9714a265975472433882962b7449bd45}\label{class_system_log_a9714a265975472433882962b7449bd45}} +\index{System\+Log@{System\+Log}!save\+Log@{save\+Log}} +\index{save\+Log@{save\+Log}!System\+Log@{System\+Log}} +\subsubsection{\texorpdfstring{save\+Log()}{saveLog()}} +{\footnotesize\ttfamily System\+Log\+::save\+Log (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + + + +save system log to a file, default file name\+: Running.\+txt + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em none} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\end{DoxyNote} +\begin{DoxyAttention}{Attention} +not implement at this version +\begin{DoxyCode} +\end{DoxyCode} + +\end{DoxyAttention} +\mbox{\Hypertarget{class_system_log_af41d346f86242f5be187fe2be354347d}\label{class_system_log_af41d346f86242f5be187fe2be354347d}} +\index{System\+Log@{System\+Log}!save\+Log\+To\+File@{save\+Log\+To\+File}} +\index{save\+Log\+To\+File@{save\+Log\+To\+File}!System\+Log@{System\+Log}} +\subsubsection{\texorpdfstring{save\+Log\+To\+File()}{saveLogToFile()}} +{\footnotesize\ttfamily System\+Log\+::save\+Log\+To\+File (\begin{DoxyParamCaption}\item[{std\+::string}]{file\+Name }\end{DoxyParamCaption})} + + + +save system log to a designated file + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em file\+Name} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\end{DoxyNote} +\begin{DoxyAttention}{Attention} +not implement at this version +\begin{DoxyCode} +\end{DoxyCode} + +\end{DoxyAttention} +\mbox{\Hypertarget{class_system_log_a21296bb67489848bad6cfa04280fec85}\label{class_system_log_a21296bb67489848bad6cfa04280fec85}} +\index{System\+Log@{System\+Log}!set\+Log\+Level@{set\+Log\+Level}} +\index{set\+Log\+Level@{set\+Log\+Level}!System\+Log@{System\+Log}} +\subsubsection{\texorpdfstring{set\+Log\+Level()}{setLogLevel()}} +{\footnotesize\ttfamily System\+Log\+::set\+Log\+Level (\begin{DoxyParamCaption}\item[{int}]{level }\end{DoxyParamCaption})} + + + +set system ouput log level + +log level means that different kind of information will be output +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em level} & 1 running information output, 2 running and debug infomation output \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\end{DoxyNote} +\begin{DoxyAttention}{Attention} + +\begin{DoxyCode} +\end{DoxyCode} + +\end{DoxyAttention} + + +The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize} +\item +include/\hyperlink{_system_log_8hpp}{System\+Log.\+hpp}\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera.tex new file mode 100644 index 0000000..583b289 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera.tex @@ -0,0 +1,221 @@ +\hypertarget{class_unitree_camera}{}\section{Unitree\+Camera Class Reference} +\label{class_unitree_camera}\index{Unitree\+Camera@{Unitree\+Camera}} + + +Inheritance diagram for Unitree\+Camera\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=163pt]{class_unitree_camera__inherit__graph} +\end{center} +\end{figure} + + +Collaboration diagram for Unitree\+Camera\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=163pt]{class_unitree_camera__coll__graph} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\hyperlink{class_unitree_camera_af8a5e0c70f99096ecd378680d2f1ec27}{Unitree\+Camera} () +\begin{DoxyCompactList}\small\item\em \hyperlink{class_unitree_camera}{Unitree\+Camera} init unitree stereo camera object for default parameters. \end{DoxyCompactList}\item +\mbox{\Hypertarget{class_unitree_camera_afe458a0b083d37d8212ddfcbe62cb033}\label{class_unitree_camera_afe458a0b083d37d8212ddfcbe62cb033}} +{\bfseries Unitree\+Camera} (std\+::string file\+Name) +\item +\mbox{\Hypertarget{class_unitree_camera_a0d447525ea7fbcba9b9f892387fc91ee}\label{class_unitree_camera_a0d447525ea7fbcba9b9f892387fc91ee}} +{\bfseries Unitree\+Camera} (int device\+Node) +\item +\hyperlink{class_unitree_camera_aefb112b0fa677221163ddd18ccf08d8c}{$\sim$\+Unitree\+Camera} (void) +\begin{DoxyCompactList}\small\item\em \hyperlink{class_unitree_camera}{Unitree\+Camera} destructor. \end{DoxyCompactList}\item +bool \hyperlink{class_unitree_camera_ab056c2e429ec5d91b7e838c18cbd0d73}{update\+Calib\+Params2\+Flash} (std\+::string file\+Name) +\begin{DoxyCompactList}\small\item\em update camera calibrate parameters \end{DoxyCompactList}\item +bool \hyperlink{class_unitree_camera_a45e182540ab4bb59b68fb07c23bdd91f}{check\+Firmware\+Version} (std\+::string \&version) +\begin{DoxyCompactList}\small\item\em check camera\textquotesingle{}s firmware version \end{DoxyCompactList}\item +bool \hyperlink{class_unitree_camera_abd0fd0e03ac98f90905ea582e4f397a7}{update\+Firmware} (std\+::string file\+Name) +\begin{DoxyCompactList}\small\item\em update camera\textquotesingle{}s firmware \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\subsection{Constructor \& Destructor Documentation} +\mbox{\Hypertarget{class_unitree_camera_af8a5e0c70f99096ecd378680d2f1ec27}\label{class_unitree_camera_af8a5e0c70f99096ecd378680d2f1ec27}} +\index{Unitree\+Camera@{Unitree\+Camera}!Unitree\+Camera@{Unitree\+Camera}} +\index{Unitree\+Camera@{Unitree\+Camera}!Unitree\+Camera@{Unitree\+Camera}} +\subsubsection{\texorpdfstring{Unitree\+Camera()}{UnitreeCamera()}} +{\footnotesize\ttfamily Unitree\+Camera\+::\+Unitree\+Camera (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + + + +\hyperlink{class_unitree_camera}{Unitree\+Camera} init unitree stereo camera object for default parameters. + +\hyperlink{class_unitree_camera}{Unitree\+Camera} constructor overload. + +default constructor +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +\hyperlink{class_unitree_camera_af8a5e0c70f99096ecd378680d2f1ec27}{UnitreeCamera}(); +\end{DoxyCode} + +\end{DoxyNote} +This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. + +use camera config file to init unitree stereo camera +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em file\+Name} & camera config file, include file path, for example\+: $\sim$/test/stereo\+Config.yaml \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +\hyperlink{class_unitree_camera_af8a5e0c70f99096ecd378680d2f1ec27}{UnitreeCamera}(\textcolor{stringliteral}{"path\_to/config.yaml"}); +\end{DoxyCode} + +\end{DoxyNote} +This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. + +use camera device node number to init unitree stereo camera +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em device\+Node} & camera device node, for example\+: /dev/video0, camera device node\+: 0 \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +\hyperlink{class_stereo_camera_a6d9ac42b50dc07f5f846336ffd29e752}{StereoCamera}(0); \textcolor{comment}{// for /dev/video0} +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_unitree_camera_aefb112b0fa677221163ddd18ccf08d8c}\label{class_unitree_camera_aefb112b0fa677221163ddd18ccf08d8c}} +\index{Unitree\+Camera@{Unitree\+Camera}!````~Unitree\+Camera@{$\sim$\+Unitree\+Camera}} +\index{````~Unitree\+Camera@{$\sim$\+Unitree\+Camera}!Unitree\+Camera@{Unitree\+Camera}} +\subsubsection{\texorpdfstring{$\sim$\+Unitree\+Camera()}{~UnitreeCamera()}} +{\footnotesize\ttfamily Unitree\+Camera\+::$\sim$\+Unitree\+Camera (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + + + +\hyperlink{class_unitree_camera}{Unitree\+Camera} destructor. + +release all unitree stereo camera resource +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em None} & \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} +automatically called when \hyperlink{class_unitree_camera}{Unitree\+Camera} object released +\end{DoxyNote} + + +\subsection{Member Function Documentation} +\mbox{\Hypertarget{class_unitree_camera_a45e182540ab4bb59b68fb07c23bdd91f}\label{class_unitree_camera_a45e182540ab4bb59b68fb07c23bdd91f}} +\index{Unitree\+Camera@{Unitree\+Camera}!check\+Firmware\+Version@{check\+Firmware\+Version}} +\index{check\+Firmware\+Version@{check\+Firmware\+Version}!Unitree\+Camera@{Unitree\+Camera}} +\subsubsection{\texorpdfstring{check\+Firmware\+Version()}{checkFirmwareVersion()}} +{\footnotesize\ttfamily bool Unitree\+Camera\+::check\+Firmware\+Version (\begin{DoxyParamCaption}\item[{std\+::string \&}]{version }\end{DoxyParamCaption})} + + + +check camera\textquotesingle{}s firmware version + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em version} & firmware version \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_unitree_camera_ab056c2e429ec5d91b7e838c18cbd0d73}\label{class_unitree_camera_ab056c2e429ec5d91b7e838c18cbd0d73}} +\index{Unitree\+Camera@{Unitree\+Camera}!update\+Calib\+Params2\+Flash@{update\+Calib\+Params2\+Flash}} +\index{update\+Calib\+Params2\+Flash@{update\+Calib\+Params2\+Flash}!Unitree\+Camera@{Unitree\+Camera}} +\subsubsection{\texorpdfstring{update\+Calib\+Params2\+Flash()}{updateCalibParams2Flash()}} +{\footnotesize\ttfamily bool Unitree\+Camera\+::update\+Calib\+Params2\+Flash (\begin{DoxyParamCaption}\item[{std\+::string}]{file\+Name }\end{DoxyParamCaption})} + + + +update camera calibrate parameters + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em file\+Name} & calibration parameters file \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +\end{DoxyCode} + +\end{DoxyNote} +\mbox{\Hypertarget{class_unitree_camera_abd0fd0e03ac98f90905ea582e4f397a7}\label{class_unitree_camera_abd0fd0e03ac98f90905ea582e4f397a7}} +\index{Unitree\+Camera@{Unitree\+Camera}!update\+Firmware@{update\+Firmware}} +\index{update\+Firmware@{update\+Firmware}!Unitree\+Camera@{Unitree\+Camera}} +\subsubsection{\texorpdfstring{update\+Firmware()}{updateFirmware()}} +{\footnotesize\ttfamily bool Unitree\+Camera\+::update\+Firmware (\begin{DoxyParamCaption}\item[{std\+::string}]{file\+Name }\end{DoxyParamCaption})} + + + +update camera\textquotesingle{}s firmware + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\tt in} & {\em file\+Name} & firmware file \\ +\hline +\mbox{\tt out} & {\em None} & \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +None +\end{DoxyReturn} +\begin{DoxyNote}{Note} + +\begin{DoxyCode} +\end{DoxyCode} + +\end{DoxyNote} + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +include/\hyperlink{_unitree_camera_s_d_k_8hpp}{Unitree\+Camera\+S\+D\+K.\+hpp}\item +src/Unitree\+Camera\+S\+D\+K.\+cc\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera__coll__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera__coll__graph.md5 new file mode 100644 index 0000000..9dbefd9 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera__coll__graph.md5 @@ -0,0 +1 @@ +1d59f91fa0091eca3d93e500505cc98b \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera__coll__graph.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera__coll__graph.pdf new file mode 100644 index 0000000..f52d373 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera__coll__graph.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera__inherit__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera__inherit__graph.md5 new file mode 100644 index 0000000..4fdf7f8 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera__inherit__graph.md5 @@ -0,0 +1 @@ +0012d1ec33f212fdbdec5f18813c12ae \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera__inherit__graph.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera__inherit__graph.pdf new file mode 100644 index 0000000..f52d373 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/class_unitree_camera__inherit__graph.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher.tex new file mode 100644 index 0000000..ebb7311 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher.tex @@ -0,0 +1,67 @@ +\hypertarget{classglwindow_1_1_event_dispatcher}{}\section{glwindow\+:\+:Event\+Dispatcher Class Reference} +\label{classglwindow_1_1_event_dispatcher}\index{glwindow\+::\+Event\+Dispatcher@{glwindow\+::\+Event\+Dispatcher}} + + +Inheritance diagram for glwindow\+:\+:Event\+Dispatcher\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=216pt]{classglwindow_1_1_event_dispatcher__inherit__graph} +\end{center} +\end{figure} + + +Collaboration diagram for glwindow\+:\+:Event\+Dispatcher\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=216pt]{classglwindow_1_1_event_dispatcher__coll__graph} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classglwindow_1_1_event_dispatcher_af6bc815caa60cb9c6781db5f0756e414}\label{classglwindow_1_1_event_dispatcher_af6bc815caa60cb9c6781db5f0756e414}} +{\bfseries Event\+Dispatcher} (const std\+::vector$<$ \hyperlink{structglwindow_1_1_event_handler}{Event\+Handler} $\ast$$>$ \&h) +\item +\mbox{\Hypertarget{classglwindow_1_1_event_dispatcher_a101905128b1a416fbd9bf1adab9bcc44}\label{classglwindow_1_1_event_dispatcher_a101905128b1a416fbd9bf1adab9bcc44}} +bool {\bfseries on\+\_\+key\+\_\+down} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int key) +\item +\mbox{\Hypertarget{classglwindow_1_1_event_dispatcher_ac75bcbcdd9411c5f84b99764da2206a4}\label{classglwindow_1_1_event_dispatcher_ac75bcbcdd9411c5f84b99764da2206a4}} +bool {\bfseries on\+\_\+key\+\_\+up} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int key) +\item +\mbox{\Hypertarget{classglwindow_1_1_event_dispatcher_aeae6ae67e9384d2cec6058fc603d065c}\label{classglwindow_1_1_event_dispatcher_aeae6ae67e9384d2cec6058fc603d065c}} +bool {\bfseries on\+\_\+text} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, const char $\ast$text, int len) +\item +\mbox{\Hypertarget{classglwindow_1_1_event_dispatcher_ab3484ee0cfdc125d1d25550b3065aa90}\label{classglwindow_1_1_event_dispatcher_ab3484ee0cfdc125d1d25550b3065aa90}} +bool {\bfseries on\+\_\+button\+\_\+down} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int btn, int state, int x, int y) +\item +\mbox{\Hypertarget{classglwindow_1_1_event_dispatcher_a0ab408899d7b617c82623596a4f46e67}\label{classglwindow_1_1_event_dispatcher_a0ab408899d7b617c82623596a4f46e67}} +bool {\bfseries on\+\_\+button\+\_\+up} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int btn, int state, int x, int y) +\item +\mbox{\Hypertarget{classglwindow_1_1_event_dispatcher_a5669333f26e662e6afdb9aede5d6fd54}\label{classglwindow_1_1_event_dispatcher_a5669333f26e662e6afdb9aede5d6fd54}} +bool {\bfseries on\+\_\+mouse\+\_\+move} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int state, int x, int y) +\item +\mbox{\Hypertarget{classglwindow_1_1_event_dispatcher_abdffd623813b637a85568664ac8918f2}\label{classglwindow_1_1_event_dispatcher_abdffd623813b637a85568664ac8918f2}} +bool {\bfseries on\+\_\+mouse\+\_\+wheel} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int state, int x, int y, int dx, int dy) +\item +\mbox{\Hypertarget{classglwindow_1_1_event_dispatcher_ac9c42e34d486adaf04fa9e6bba360439}\label{classglwindow_1_1_event_dispatcher_ac9c42e34d486adaf04fa9e6bba360439}} +bool {\bfseries on\+\_\+resize} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int x, int y, int w, int h) +\item +\mbox{\Hypertarget{classglwindow_1_1_event_dispatcher_af6e45a1615779b918fd94db1d0c4be32}\label{classglwindow_1_1_event_dispatcher_af6e45a1615779b918fd94db1d0c4be32}} +bool {\bfseries on\+\_\+close} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win) +\end{DoxyCompactItemize} +\subsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classglwindow_1_1_event_dispatcher_ad110818c4668576c63d182e91070fbd7}\label{classglwindow_1_1_event_dispatcher_ad110818c4668576c63d182e91070fbd7}} +const std\+::vector$<$ \hyperlink{structglwindow_1_1_event_handler}{Event\+Handler} $\ast$ $>$ \& {\bfseries handlers} +\end{DoxyCompactItemize} + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +examples/gl\+Viewer/glwindow.\+hpp\item +examples/gl\+Viewer/glwindow\+\_\+x11.\+cpp\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher__coll__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher__coll__graph.md5 new file mode 100644 index 0000000..0fe295a --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher__coll__graph.md5 @@ -0,0 +1 @@ +1bb7c19f671d9dcd269f50236d8d1ccd \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher__coll__graph.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher__coll__graph.pdf new file mode 100644 index 0000000..7762f35 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher__coll__graph.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher__inherit__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher__inherit__graph.md5 new file mode 100644 index 0000000..0c3ae0f --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher__inherit__graph.md5 @@ -0,0 +1 @@ +28845a8b7f220f643a80a9a10fb611c2 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher__inherit__graph.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher__inherit__graph.pdf new file mode 100644 index 0000000..7762f35 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_event_dispatcher__inherit__graph.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_g_l_window.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_g_l_window.tex new file mode 100644 index 0000000..4b32bb6 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_g_l_window.tex @@ -0,0 +1,115 @@ +\hypertarget{classglwindow_1_1_g_l_window}{}\section{glwindow\+:\+:G\+L\+Window Class Reference} +\label{classglwindow_1_1_g_l_window}\index{glwindow\+::\+G\+L\+Window@{glwindow\+::\+G\+L\+Window}} + + +Collaboration diagram for glwindow\+:\+:G\+L\+Window\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=276pt]{classglwindow_1_1_g_l_window__coll__graph} +\end{center} +\end{figure} +\subsection*{Classes} +\begin{DoxyCompactItemize} +\item +struct \hyperlink{structglwindow_1_1_g_l_window_1_1_scoped_context}{Scoped\+Context} +\item +struct \hyperlink{struct_g_l_window_1_1_system_state}{System\+State} +\end{DoxyCompactItemize} +\subsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_af9e5d6539cdf2b606f7f83959cba4d91}\label{classglwindow_1_1_g_l_window_af9e5d6539cdf2b606f7f83959cba4d91}} +{\bfseries G\+L\+Window} (int w=-\/1, int h=-\/1, const char $\ast$title=0) +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_ae10e25d700ab0697b2ed42d66a8e4540}\label{classglwindow_1_1_g_l_window_ae10e25d700ab0697b2ed42d66a8e4540}} +int {\bfseries width} () const +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_aa3ca7cb6e058f1eef4dd769664f98b14}\label{classglwindow_1_1_g_l_window_aa3ca7cb6e058f1eef4dd769664f98b14}} +int {\bfseries height} () const +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a0791d0c8205ba2c2541903cf258a58f4}\label{classglwindow_1_1_g_l_window_a0791d0c8205ba2c2541903cf258a58f4}} +bool {\bfseries visible} () const +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a8a3a6133efd40d58e6b083469c286825}\label{classglwindow_1_1_g_l_window_a8a3a6133efd40d58e6b083469c286825}} +bool {\bfseries alive} () const +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_aee36cf4ab449a96fcaa0f01cd382c618}\label{classglwindow_1_1_g_l_window_aee36cf4ab449a96fcaa0f01cd382c618}} +bool {\bfseries make\+\_\+current} () +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_ad3e8ca520080b92dd961b4d6708a011a}\label{classglwindow_1_1_g_l_window_ad3e8ca520080b92dd961b4d6708a011a}} +bool {\bfseries push\+\_\+context} () +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_ac3dc676910b6a4f09616e2a3d41ef8ac}\label{classglwindow_1_1_g_l_window_ac3dc676910b6a4f09616e2a3d41ef8ac}} +void {\bfseries pop\+\_\+context} () +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a82eaf4b8f8f86ee3cf0cef21aef2a4bd}\label{classglwindow_1_1_g_l_window_a82eaf4b8f8f86ee3cf0cef21aef2a4bd}} +void {\bfseries swap\+\_\+buffers} () +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a6e13fa434eb57f3338da78362b225fde}\label{classglwindow_1_1_g_l_window_a6e13fa434eb57f3338da78362b225fde}} +void {\bfseries set\+\_\+size} (int w, int h) +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_aa60bf838a81fafa38120424a25a2adef}\label{classglwindow_1_1_g_l_window_aa60bf838a81fafa38120424a25a2adef}} +void {\bfseries set\+\_\+position} (int x, int y) +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_ae6a1274fab8ba6831681c43964f97a87}\label{classglwindow_1_1_g_l_window_ae6a1274fab8ba6831681c43964f97a87}} +void {\bfseries set\+\_\+title} (const char $\ast$title) +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a00d9e2f4d0e7d3696e32a38df005299b}\label{classglwindow_1_1_g_l_window_a00d9e2f4d0e7d3696e32a38df005299b}} +void {\bfseries add\+\_\+handler} (\hyperlink{structglwindow_1_1_event_handler}{Event\+Handler} $\ast$handler) +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a13a72e01ab5ee8926dc401f0231d32d3}\label{classglwindow_1_1_g_l_window_a13a72e01ab5ee8926dc401f0231d32d3}} +bool {\bfseries remove\+\_\+handler} (\hyperlink{structglwindow_1_1_event_handler}{Event\+Handler} $\ast$handler) +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_adc3ad89ccb14a800919947c55f4f8f81}\label{classglwindow_1_1_g_l_window_adc3ad89ccb14a800919947c55f4f8f81}} +void {\bfseries handle\+\_\+events} () +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a9a6d66c63bfc4796fd10927da3e3114f}\label{classglwindow_1_1_g_l_window_a9a6d66c63bfc4796fd10927da3e3114f}} +void {\bfseries destroy} () +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a1a8c3e1e280e4c5403a478f5229a3320}\label{classglwindow_1_1_g_l_window_a1a8c3e1e280e4c5403a478f5229a3320}} +void {\bfseries draw\+\_\+text} (double x, double y, const char $\ast$text, int xywh\mbox{[}4\mbox{]}=0) +\end{DoxyCompactItemize} +\subsection*{Static Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a00458901c7cca772aba1e37c7ae11da5}\label{classglwindow_1_1_g_l_window_a00458901c7cca772aba1e37c7ae11da5}} +static void {\bfseries handle\+\_\+all\+\_\+events} () +\end{DoxyCompactItemize} +\subsection*{Static Protected Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a6ec4437b302fad937613bbc7305b54af}\label{classglwindow_1_1_g_l_window_a6ec4437b302fad937613bbc7305b54af}} +static void {\bfseries add\+\_\+window} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} $\ast$win) +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a20ba7d81fc374904b55ec40e3fb19a52}\label{classglwindow_1_1_g_l_window_a20ba7d81fc374904b55ec40e3fb19a52}} +static bool {\bfseries remove\+\_\+window} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} $\ast$win) +\end{DoxyCompactItemize} +\subsection*{Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a362305bae97dad5418748841d7691694}\label{classglwindow_1_1_g_l_window_a362305bae97dad5418748841d7691694}} +\hyperlink{struct_g_l_window_1_1_system_state}{System\+State} $\ast$ {\bfseries sys\+\_\+state} +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a63eb370b84f35a788b4831e7e8ebb883}\label{classglwindow_1_1_g_l_window_a63eb370b84f35a788b4831e7e8ebb883}} +std\+::vector$<$ \hyperlink{structglwindow_1_1_event_handler}{Event\+Handler} $\ast$ $>$ {\bfseries handlers} +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a1b26b56139bda79015c4acd5082af29b}\label{classglwindow_1_1_g_l_window_a1b26b56139bda79015c4acd5082af29b}} +\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} $\ast$ {\bfseries prev\+\_\+active} +\end{DoxyCompactItemize} +\subsection*{Static Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_ae9a8057a689a57a27f923bc745de4bf8}\label{classglwindow_1_1_g_l_window_ae9a8057a689a57a27f923bc745de4bf8}} +static \hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} $\ast$ {\bfseries active\+\_\+context} = 0 +\item +\mbox{\Hypertarget{classglwindow_1_1_g_l_window_a53cc9ed919e7251c9a33bf5f9197375c}\label{classglwindow_1_1_g_l_window_a53cc9ed919e7251c9a33bf5f9197375c}} +static std\+::vector$<$ \hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} $\ast$ $>$ {\bfseries all\+\_\+windows} +\end{DoxyCompactItemize} + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +examples/gl\+Viewer/glwindow.\+hpp\item +examples/gl\+Viewer/glwindow\+\_\+x11.\+cpp\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_g_l_window__coll__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_g_l_window__coll__graph.md5 new file mode 100644 index 0000000..5b5aebc --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_g_l_window__coll__graph.md5 @@ -0,0 +1 @@ +8d8a2cbfaa89cd6aa1b2fcc0c3c4569d \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_g_l_window__coll__graph.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_g_l_window__coll__graph.pdf new file mode 100644 index 0000000..f231d86 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_g_l_window__coll__graph.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window.tex new file mode 100644 index 0000000..1f1867e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window.tex @@ -0,0 +1,105 @@ +\hypertarget{classglwindow_1_1_scene_window}{}\section{glwindow\+:\+:Scene\+Window Class Reference} +\label{classglwindow_1_1_scene_window}\index{glwindow\+::\+Scene\+Window@{glwindow\+::\+Scene\+Window}} + + +Inheritance diagram for glwindow\+:\+:Scene\+Window\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=206pt]{classglwindow_1_1_scene_window__inherit__graph} +\end{center} +\end{figure} + + +Collaboration diagram for glwindow\+:\+:Scene\+Window\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{classglwindow_1_1_scene_window__coll__graph} +\end{center} +\end{figure} +\subsection*{Classes} +\begin{DoxyCompactItemize} +\item +struct \hyperlink{structglwindow_1_1_scene_window_1_1_viewpoint}{Viewpoint} +\end{DoxyCompactItemize} +\subsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a41959b518db30a3ab785492f1ac010fd}\label{classglwindow_1_1_scene_window_a41959b518db30a3ab785492f1ac010fd}} +{\bfseries Scene\+Window} (int width, int height, const char $\ast$title) +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a2e960ccafe493ce9e71418a03bf88301}\label{classglwindow_1_1_scene_window_a2e960ccafe493ce9e71418a03bf88301}} +void {\bfseries update} () +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_af3c36c90d57620298fd2796ced9af848}\label{classglwindow_1_1_scene_window_af3c36c90d57620298fd2796ced9af848}} +bool {\bfseries start\+\_\+draw} () +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_ab0688f7612cdaa8b06b86a3979abcdf4}\label{classglwindow_1_1_scene_window_ab0688f7612cdaa8b06b86a3979abcdf4}} +void {\bfseries finish\+\_\+draw} () +\end{DoxyCompactItemize} +\subsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a0946d9bab275dab533fe778af5d3ec7a}\label{classglwindow_1_1_scene_window_a0946d9bab275dab533fe778af5d3ec7a}} +\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} {\bfseries win} +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_aac5dd0d07cb2dd42aa044622c6d7de6b}\label{classglwindow_1_1_scene_window_aac5dd0d07cb2dd42aa044622c6d7de6b}} +\hyperlink{structglwindow_1_1_scene_window_1_1_viewpoint}{Viewpoint} {\bfseries viewpoint} +\end{DoxyCompactItemize} +\subsection*{Protected Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a1482ec985ea436cb29e8da14cf7c55b5}\label{classglwindow_1_1_scene_window_a1482ec985ea436cb29e8da14cf7c55b5}} +bool {\bfseries on\+\_\+key\+\_\+down} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int key) +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a75cabfd481bb531d37ee5637c207311e}\label{classglwindow_1_1_scene_window_a75cabfd481bb531d37ee5637c207311e}} +bool {\bfseries on\+\_\+button\+\_\+down} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int btn, int state, int x, int y) +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a10c408229e2f6baea755a07e56a28644}\label{classglwindow_1_1_scene_window_a10c408229e2f6baea755a07e56a28644}} +bool {\bfseries on\+\_\+button\+\_\+up} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int btn, int state, int x, int y) +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a3c67279c10c4cff40aacac9571091f12}\label{classglwindow_1_1_scene_window_a3c67279c10c4cff40aacac9571091f12}} +bool {\bfseries on\+\_\+mouse\+\_\+move} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int state, int x, int y) +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a0186ad496adbcc11ada5ac24f4d7f37d}\label{classglwindow_1_1_scene_window_a0186ad496adbcc11ada5ac24f4d7f37d}} +bool {\bfseries on\+\_\+mouse\+\_\+wheel} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int state, int x, int y, int dx, int dy) +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a932e76733ea8d6197ec9453c1ef09553}\label{classglwindow_1_1_scene_window_a932e76733ea8d6197ec9453c1ef09553}} +bool {\bfseries on\+\_\+resize} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int x, int y, int w, int h) +\end{DoxyCompactItemize} +\subsection*{Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a7d77c829486011d04815eeb114919d71}\label{classglwindow_1_1_scene_window_a7d77c829486011d04815eeb114919d71}} +bool {\bfseries dragging} +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_aeb7b1933324b7e32ef1c27496e398843}\label{classglwindow_1_1_scene_window_aeb7b1933324b7e32ef1c27496e398843}} +int {\bfseries drag\+\_\+btn} +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a92ed7e285bc0c1f72bbe34830c2fa839}\label{classglwindow_1_1_scene_window_a92ed7e285bc0c1f72bbe34830c2fa839}} +int {\bfseries x0} +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a5a7ef8f289c9ef5d4546099724bfff77}\label{classglwindow_1_1_scene_window_a5a7ef8f289c9ef5d4546099724bfff77}} +int {\bfseries y0} +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a261ceaff788f0d6c2d01ca71d2b268c7}\label{classglwindow_1_1_scene_window_a261ceaff788f0d6c2d01ca71d2b268c7}} +double {\bfseries inv\+\_\+w0} +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_acb85c5bbf1a1e7152b5518c298e9e6cb}\label{classglwindow_1_1_scene_window_acb85c5bbf1a1e7152b5518c298e9e6cb}} +double {\bfseries inv\+\_\+h0} +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a331e548ff2c83c970ca9ebddcd04581c}\label{classglwindow_1_1_scene_window_a331e548ff2c83c970ca9ebddcd04581c}} +\hyperlink{structglwindow_1_1_scene_window_1_1_viewpoint}{Viewpoint} {\bfseries vp0} +\item +\mbox{\Hypertarget{classglwindow_1_1_scene_window_a93a5025d20cd92db7bf541764fe32b93}\label{classglwindow_1_1_scene_window_a93a5025d20cd92db7bf541764fe32b93}} +bool {\bfseries drawing} +\end{DoxyCompactItemize} + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +examples/gl\+Viewer/scenewindow.\+hpp\item +examples/gl\+Viewer/scenewindow.\+cpp\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window__coll__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window__coll__graph.md5 new file mode 100644 index 0000000..d640c14 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window__coll__graph.md5 @@ -0,0 +1 @@ +87cd063d63fadf3da265a8b3725f151a \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window__coll__graph.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window__coll__graph.pdf new file mode 100644 index 0000000..7def99c Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window__coll__graph.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window__inherit__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window__inherit__graph.md5 new file mode 100644 index 0000000..6911b0f --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window__inherit__graph.md5 @@ -0,0 +1 @@ +e87497ae6fdf6e2fd160bd0e5a158ab8 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window__inherit__graph.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window__inherit__graph.pdf new file mode 100644 index 0000000..64ba36c Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classglwindow_1_1_scene_window__inherit__graph.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classinfo__camera___string.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classinfo__camera___string.tex new file mode 100644 index 0000000..a3431b1 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classinfo__camera___string.tex @@ -0,0 +1,19 @@ +\hypertarget{classinfo__camera___string}{}\section{info\+\_\+camera\+\_\+\+String Class Reference} +\label{classinfo__camera___string}\index{info\+\_\+camera\+\_\+\+String@{info\+\_\+camera\+\_\+\+String}} +\subsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classinfo__camera___string_a534901ae79a44cbd9e298e237fa4fc0f}\label{classinfo__camera___string_a534901ae79a44cbd9e298e237fa4fc0f}} +char {\bfseries i\+Manufacturer} \mbox{[}M\+A\+X\+\_\+\+P\+A\+TH\mbox{]} +\item +\mbox{\Hypertarget{classinfo__camera___string_a7760c615973f721307ccc15d291b82dd}\label{classinfo__camera___string_a7760c615973f721307ccc15d291b82dd}} +char {\bfseries i\+Product} \mbox{[}M\+A\+X\+\_\+\+P\+A\+TH\mbox{]} +\item +\mbox{\Hypertarget{classinfo__camera___string_aa36e331d9d8aa31382774bdd0a22f23e}\label{classinfo__camera___string_aa36e331d9d8aa31382774bdd0a22f23e}} +char {\bfseries i\+Serial\+Number} \mbox{[}M\+A\+X\+\_\+\+P\+A\+TH\mbox{]} +\end{DoxyCompactItemize} + + +The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize} +\item +src/camera\+\_\+api.\+h\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classinfo__camera__os.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classinfo__camera__os.tex new file mode 100644 index 0000000..42f7c32 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/classinfo__camera__os.tex @@ -0,0 +1,37 @@ +\hypertarget{classinfo__camera__os}{}\section{info\+\_\+camera\+\_\+os Class Reference} +\label{classinfo__camera__os}\index{info\+\_\+camera\+\_\+os@{info\+\_\+camera\+\_\+os}} +\subsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classinfo__camera__os_a3cda29196c1943c0312f89220c635872}\label{classinfo__camera__os_a3cda29196c1943c0312f89220c635872}} +W\+O\+RD {\bfseries vid} +\item +\mbox{\Hypertarget{classinfo__camera__os_a939af1154643fade0a13b89640955244}\label{classinfo__camera__os_a939af1154643fade0a13b89640955244}} +W\+O\+RD {\bfseries pid} +\item +\mbox{\Hypertarget{classinfo__camera__os_a5634876a9841ff0a903a06e224213287}\label{classinfo__camera__os_a5634876a9841ff0a903a06e224213287}} +W\+O\+RD {\bfseries bcd\+Device} +\item +\mbox{\Hypertarget{classinfo__camera__os_a9e417bafcff3ee428bfdf2510047dd80}\label{classinfo__camera__os_a9e417bafcff3ee428bfdf2510047dd80}} +char {\bfseries device\+ID} \mbox{[}M\+A\+X\+\_\+\+P\+A\+TH\mbox{]} +\item +\mbox{\Hypertarget{classinfo__camera__os_a47c4e49f8d85be806ad67a052330483f}\label{classinfo__camera__os_a47c4e49f8d85be806ad67a052330483f}} +char {\bfseries device} \mbox{[}M\+A\+X\+\_\+\+P\+A\+TH\mbox{]} +\item +\mbox{\Hypertarget{classinfo__camera__os_a18e02e7605102fc883644a840c4d000d}\label{classinfo__camera__os_a18e02e7605102fc883644a840c4d000d}} +B\+Y\+TE {\bfseries ic\+Type} +\item +\mbox{\Hypertarget{classinfo__camera__os_a85043a073c9215c6957c2df585d8fcb2}\label{classinfo__camera__os_a85043a073c9215c6957c2df585d8fcb2}} +uint64\+\_\+t {\bfseries busnum} +\item +\mbox{\Hypertarget{classinfo__camera__os_ae82dc3a3a9af8c1b0a6c10b3ac2415bf}\label{classinfo__camera__os_ae82dc3a3a9af8c1b0a6c10b3ac2415bf}} +uint64\+\_\+t {\bfseries devnum} +\item +\mbox{\Hypertarget{classinfo__camera__os_a37e158cee8c551ed73bb67c7647dfed9}\label{classinfo__camera__os_a37e158cee8c551ed73bb67c7647dfed9}} +char {\bfseries location} \mbox{[}M\+A\+X\+\_\+\+P\+A\+TH\mbox{]} +\end{DoxyCompactItemize} + + +The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize} +\item +src/camera\+\_\+api.\+h\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_209c714a154efd8d40a59e92e6a74502.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_209c714a154efd8d40a59e92e6a74502.tex new file mode 100644 index 0000000..34c605c --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_209c714a154efd8d40a59e92e6a74502.tex @@ -0,0 +1,2 @@ +\hypertarget{dir_209c714a154efd8d40a59e92e6a74502}{}\section{build/\+C\+Make\+Files/3.14.6/\+Compiler\+IdC Directory Reference} +\label{dir_209c714a154efd8d40a59e92e6a74502}\index{build/\+C\+Make\+Files/3.\+14.\+6/\+Compiler\+Id\+C Directory Reference@{build/\+C\+Make\+Files/3.\+14.\+6/\+Compiler\+Id\+C Directory Reference}} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_3a56b08581502e42e7c33d229017cb82.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_3a56b08581502e42e7c33d229017cb82.tex new file mode 100644 index 0000000..d599cb0 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_3a56b08581502e42e7c33d229017cb82.tex @@ -0,0 +1,5 @@ +\hypertarget{dir_3a56b08581502e42e7c33d229017cb82}{}\section{build/\+C\+Make\+Files/3.14.6 Directory Reference} +\label{dir_3a56b08581502e42e7c33d229017cb82}\index{build/\+C\+Make\+Files/3.\+14.\+6 Directory Reference@{build/\+C\+Make\+Files/3.\+14.\+6 Directory Reference}} +\subsection*{Directories} +\begin{DoxyCompactItemize} +\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_4eeb864c4eec08c7d6b9d3b0352cfdde.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_4eeb864c4eec08c7d6b9d3b0352cfdde.tex new file mode 100644 index 0000000..85fbb68 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_4eeb864c4eec08c7d6b9d3b0352cfdde.tex @@ -0,0 +1,10 @@ +\hypertarget{dir_4eeb864c4eec08c7d6b9d3b0352cfdde}{}\section{tools Directory Reference} +\label{dir_4eeb864c4eec08c7d6b9d3b0352cfdde}\index{tools Directory Reference@{tools Directory Reference}} +Directory dependency graph for tools\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=134pt]{dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep} +\end{center} +\end{figure} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.md5 new file mode 100644 index 0000000..df41d98 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.md5 @@ -0,0 +1 @@ +96d321e00c4e5ae1269226ed3cd0f67d \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.pdf new file mode 100644 index 0000000..096b840 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_4eeb864c4eec08c7d6b9d3b0352cfdde_dep.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_4fef79e7177ba769987a8da36c892c5f.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_4fef79e7177ba769987a8da36c892c5f.tex new file mode 100644 index 0000000..4a061f4 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_4fef79e7177ba769987a8da36c892c5f.tex @@ -0,0 +1,5 @@ +\hypertarget{dir_4fef79e7177ba769987a8da36c892c5f}{}\section{build Directory Reference} +\label{dir_4fef79e7177ba769987a8da36c892c5f}\index{build Directory Reference@{build Directory Reference}} +\subsection*{Directories} +\begin{DoxyCompactItemize} +\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_63772b626f2709090f0bdca0f40827b4.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_63772b626f2709090f0bdca0f40827b4.tex new file mode 100644 index 0000000..26bf776 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_63772b626f2709090f0bdca0f40827b4.tex @@ -0,0 +1,2 @@ +\hypertarget{dir_63772b626f2709090f0bdca0f40827b4}{}\section{build/\+C\+Make\+Files Directory Reference} +\label{dir_63772b626f2709090f0bdca0f40827b4}\index{build/\+C\+Make\+Files Directory Reference@{build/\+C\+Make\+Files Directory Reference}} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex new file mode 100644 index 0000000..ea8cb5a --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex @@ -0,0 +1,15 @@ +\hypertarget{dir_68267d1309a1af8e8297ef4c3efbcdba}{}\section{src Directory Reference} +\label{dir_68267d1309a1af8e8297ef4c3efbcdba}\index{src Directory Reference@{src Directory Reference}} +Directory dependency graph for src\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=134pt]{dir_68267d1309a1af8e8297ef4c3efbcdba_dep} +\end{center} +\end{figure} +\subsection*{Files} +\begin{DoxyCompactItemize} +\item +file \hyperlink{_stereo_camera_common_8cc}{Stereo\+Camera\+Common.\+cc} +\begin{DoxyCompactList}\small\item\em This file is part of Unitree\+Camera\+S\+DK, which implement stereo vision algorithm. \end{DoxyCompactList}\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 new file mode 100644 index 0000000..2576efc --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 @@ -0,0 +1 @@ +9c56f5576d0bd1b883527830dcc0dafd \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.pdf new file mode 100644 index 0000000..05b8935 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_8a35f475ed9d8a5443c1993b236eb8f6.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_8a35f475ed9d8a5443c1993b236eb8f6.tex new file mode 100644 index 0000000..7d072ab --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_8a35f475ed9d8a5443c1993b236eb8f6.tex @@ -0,0 +1,2 @@ +\hypertarget{dir_8a35f475ed9d8a5443c1993b236eb8f6}{}\section{build/\+C\+Make\+Files/3.14.6/\+Compiler\+Id\+C\+XX Directory Reference} +\label{dir_8a35f475ed9d8a5443c1993b236eb8f6}\index{build/\+C\+Make\+Files/3.\+14.\+6/\+Compiler\+Id\+C\+X\+X Directory Reference@{build/\+C\+Make\+Files/3.\+14.\+6/\+Compiler\+Id\+C\+X\+X Directory Reference}} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_8d5e63337d9bc0375b6fa20fd80d83ec.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_8d5e63337d9bc0375b6fa20fd80d83ec.tex new file mode 100644 index 0000000..1f5432f --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_8d5e63337d9bc0375b6fa20fd80d83ec.tex @@ -0,0 +1,2 @@ +\hypertarget{dir_8d5e63337d9bc0375b6fa20fd80d83ec}{}\section{examples/gl\+Viewer Directory Reference} +\label{dir_8d5e63337d9bc0375b6fa20fd80d83ec}\index{examples/gl\+Viewer Directory Reference@{examples/gl\+Viewer Directory Reference}} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_d28a4824dc47e487b107a5db32ef43c4.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_d28a4824dc47e487b107a5db32ef43c4.tex new file mode 100644 index 0000000..c0e3a0a --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_d28a4824dc47e487b107a5db32ef43c4.tex @@ -0,0 +1,26 @@ +\hypertarget{dir_d28a4824dc47e487b107a5db32ef43c4}{}\section{examples Directory Reference} +\label{dir_d28a4824dc47e487b107a5db32ef43c4}\index{examples Directory Reference@{examples Directory Reference}} +Directory dependency graph for examples\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=244pt]{dir_d28a4824dc47e487b107a5db32ef43c4_dep} +\end{center} +\end{figure} +\subsection*{Directories} +\begin{DoxyCompactItemize} +\end{DoxyCompactItemize} +\subsection*{Files} +\begin{DoxyCompactItemize} +\item +file \hyperlink{example__get_calib_params_file_8cc}{example\+\_\+get\+Calib\+Params\+File.\+cc} +\begin{DoxyCompactList}\small\item\em This file is part of Unitree\+Camera\+S\+DK. \end{DoxyCompactList}\item +file \hyperlink{example__get_depth_frame_8cc}{example\+\_\+get\+Depth\+Frame.\+cc} +\begin{DoxyCompactList}\small\item\em This file is part of Unitree\+Camera\+S\+DK. \end{DoxyCompactList}\item +file \hyperlink{example__get_point_cloud_8cc}{example\+\_\+get\+Point\+Cloud.\+cc} +\begin{DoxyCompactList}\small\item\em This file is part of Unitree\+Camera\+S\+DK. \end{DoxyCompactList}\item +file \hyperlink{example__get_raw_frame_8cc}{example\+\_\+get\+Raw\+Frame.\+cc} +\begin{DoxyCompactList}\small\item\em This file is part of Unitree\+Camera\+S\+DK. \end{DoxyCompactList}\item +file \hyperlink{example__get_rect_frame_8cc}{example\+\_\+get\+Rect\+Frame.\+cc} +\begin{DoxyCompactList}\small\item\em This file is part of Unitree\+Camera\+S\+DK. \end{DoxyCompactList}\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_d28a4824dc47e487b107a5db32ef43c4_dep.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_d28a4824dc47e487b107a5db32ef43c4_dep.md5 new file mode 100644 index 0000000..60711e1 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_d28a4824dc47e487b107a5db32ef43c4_dep.md5 @@ -0,0 +1 @@ +da4da957ccd48cc377870afce1819bb4 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_d28a4824dc47e487b107a5db32ef43c4_dep.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_d28a4824dc47e487b107a5db32ef43c4_dep.pdf new file mode 100644 index 0000000..7230537 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_d28a4824dc47e487b107a5db32ef43c4_dep.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_d44c64559bbebec7f509842c48db8b23.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_d44c64559bbebec7f509842c48db8b23.tex new file mode 100644 index 0000000..d7c4a64 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/dir_d44c64559bbebec7f509842c48db8b23.tex @@ -0,0 +1,11 @@ +\hypertarget{dir_d44c64559bbebec7f509842c48db8b23}{}\section{include Directory Reference} +\label{dir_d44c64559bbebec7f509842c48db8b23}\index{include Directory Reference@{include Directory Reference}} +\subsection*{Files} +\begin{DoxyCompactItemize} +\item +file \hyperlink{_stereo_camera_common_8hpp}{Stereo\+Camera\+Common.\+hpp} +\begin{DoxyCompactList}\small\item\em This file is part of Unitree\+Camera\+S\+DK, which declare stereo camera algorithm A\+P\+Is. \end{DoxyCompactList}\item +file \hyperlink{_system_log_8hpp}{System\+Log.\+hpp} +\begin{DoxyCompactList}\small\item\em This file is part of Unitree\+Camera\+S\+DK, which declare the A\+P\+Is of log system. \end{DoxyCompactList}\item +file \hyperlink{_unitree_camera_s_d_k_8hpp}{Unitree\+Camera\+S\+D\+K.\+hpp} +\begin{DoxyCompactList}\small\item\em This file is part of Unitree\+Camera\+S\+DK, which declare unitree camera A\+P\+Is. \end{DoxyCompactList}\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/doxygen.sty b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/doxygen.sty new file mode 100644 index 0000000..e457acc --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/doxygen.sty @@ -0,0 +1,503 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} + +% Packages used by this style file +\RequirePackage{alltt} +\RequirePackage{array} +\RequirePackage{calc} +\RequirePackage{float} +\RequirePackage{ifthen} +\RequirePackage{verbatim} +\RequirePackage[table]{xcolor} +\RequirePackage{longtable} +\RequirePackage{tabu} +\RequirePackage{tabularx} +\RequirePackage{multirow} + +%---------- Internal commands used in this style file ---------------- + +\newcommand{\ensurespace}[1]{% + \begingroup% + \setlength{\dimen@}{#1}% + \vskip\z@\@plus\dimen@% + \penalty -100\vskip\z@\@plus -\dimen@% + \vskip\dimen@% + \penalty 9999% + \vskip -\dimen@% + \vskip\z@skip% hide the previous |\vskip| from |\addvspace| + \endgroup% +} + +\newcommand{\DoxyLabelFont}{} +\newcommand{\entrylabel}[1]{% + {% + \parbox[b]{\labelwidth-4pt}{% + \makebox[0pt][l]{\DoxyLabelFont#1}% + \vspace{1.5\baselineskip}% + }% + }% +} + +\newenvironment{DoxyDesc}[1]{% + \ensurespace{4\baselineskip}% + \begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +\newsavebox{\xrefbox} +\newlength{\xreflength} +\newcommand{\xreflabel}[1]{% + \sbox{\xrefbox}{#1}% + \setlength{\xreflength}{\wd\xrefbox}% + \ifthenelse{\xreflength>\labelwidth}{% + \begin{minipage}{\textwidth}% + \setlength{\parindent}{0pt}% + \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}% + \end{minipage}% + }{% + \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}% + }% +} + +%---------- Commands used by doxygen LaTeX output generator ---------- + +% Used by
 ... 
+\newenvironment{DoxyPre}{% + \small% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} + +% Used by @code ... @endcode +\newenvironment{DoxyCode}{% + \par% + \scriptsize% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} + +% Used by @example, @include, @includelineno and @dontinclude +\newenvironment{DoxyCodeInclude}{% + \DoxyCode% +}{% + \endDoxyCode% +} + +% Used by @verbatim ... @endverbatim +\newenvironment{DoxyVerb}{% + \footnotesize% + \verbatim% +}{% + \endverbatim% + \normalsize% +} + +% Used by @verbinclude +\newenvironment{DoxyVerbInclude}{% + \DoxyVerb% +}{% + \endDoxyVerb% +} + +% Used by numbered lists (using '-#' or
    ...
) +\newenvironment{DoxyEnumerate}{% + \enumerate% +}{% + \endenumerate% +} + +% Used by bullet lists (using '-', @li, @arg, or
    ...
) +\newenvironment{DoxyItemize}{% + \itemize% +}{% + \enditemize% +} + +% Used by description lists (using
...
) +\newenvironment{DoxyDescription}{% + \description% +}{% + \enddescription% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if caption is specified) +\newenvironment{DoxyImage}{% + \begin{figure}[H]% + \begin{center}% +}{% + \end{center}% + \end{figure}% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if no caption is specified) +\newenvironment{DoxyImageNoCaption}{% + \begin{center}% +}{% + \end{center}% +} + +% Used by @attention +\newenvironment{DoxyAttention}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @author and @authors +\newenvironment{DoxyAuthor}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @date +\newenvironment{DoxyDate}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @invariant +\newenvironment{DoxyInvariant}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @note +\newenvironment{DoxyNote}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @post +\newenvironment{DoxyPostcond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @pre +\newenvironment{DoxyPrecond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @copyright +\newenvironment{DoxyCopyright}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @remark +\newenvironment{DoxyRemark}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @return and @returns +\newenvironment{DoxyReturn}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @since +\newenvironment{DoxySince}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @see +\newenvironment{DoxySeeAlso}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @version +\newenvironment{DoxyVersion}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @warning +\newenvironment{DoxyWarning}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @internal +\newenvironment{DoxyInternal}[1]{% + \paragraph*{#1}% +}{% +} + +% Used by @par and @paragraph +\newenvironment{DoxyParagraph}[1]{% + \begin{list}{}{% + \settowidth{\labelwidth}{40pt}% + \setlength{\leftmargin}{\labelwidth}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{-4pt}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +% Used by parameter lists +\newenvironment{DoxyParams}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{}}% + {\begin{longtabu} spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description + {\ifthenelse{\equal{#1}{1}}% + {\begin{longtabu} spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc + {\begin{longtabu} spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc + } + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu}% + \vspace{6pt}% +} + +% Used for fields of simple structs +\newenvironment{DoxyFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu}% + \vspace{6pt}% +} + +% Used for fields simple class style enums +\newenvironment{DoxyEnumFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu}% + \vspace{6pt}% +} + +% Used for parameters within a detailed function description +\newenvironment{DoxyParamCaption}{% + \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}% +}{% +} + +% Used by return value lists +\newenvironment{DoxyRetVals}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu}% + \vspace{6pt}% +} + +% Used by exception lists +\newenvironment{DoxyExceptions}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu}% + \vspace{6pt}% +} + +% Used by template parameter lists +\newenvironment{DoxyTemplParams}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu}% + \vspace{6pt}% +} + +% Used for member lists +\newenvironment{DoxyCompactItemize}{% + \begin{itemize}% + \setlength{\itemsep}{-3pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \setlength{\partopsep}{0pt}% +}{% + \end{itemize}% +} + +% Used for member descriptions +\newenvironment{DoxyCompactList}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + \setlength{\itemsep}{0pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \renewcommand{\makelabel}{\hfill}% + }% +}{% + \end{list}% +} + +% Used for reference lists (@bug, @deprecated, @todo, etc.) +\newenvironment{DoxyRefList}{% + \begin{list}{}{% + \setlength{\labelwidth}{10pt}% + \setlength{\leftmargin}{\labelwidth}% + \addtolength{\leftmargin}{\labelsep}% + \renewcommand{\makelabel}{\xreflabel}% + }% +}{% + \end{list}% +} + +% Used by @bug, @deprecated, @todo, etc. +\newenvironment{DoxyRefDesc}[1]{% + \begin{list}{}{% + \renewcommand\makelabel[1]{\textbf{##1}}% + \settowidth\labelwidth{\makelabel{#1}}% + \setlength\leftmargin{\labelwidth+\labelsep}% + }% +}{% + \end{list}% +} + +% Used by parameter lists and simple sections +\newenvironment{Desc} +{\begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + } +}{% + \end{list}% +} + +% Used by tables +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}% +\newenvironment{TabularC}[1]% +{\tabulinesep=1mm +\begin{longtabu} spread 0pt [c]{*#1{|X[-1]}|}}% +{\end{longtabu}\par}% + +\newenvironment{TabularNC}[1]% +{\begin{tabu} spread 0pt [l]{*#1{|X[-1]}|}}% +{\end{tabu}\par}% + +% Used for member group headers +\newenvironment{Indent}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + }% + \item[]\ignorespaces% +}{% + \unskip% + \end{list}% +} + +% Used when hyperlinks are turned off +\newcommand{\doxyref}[3]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used to link to a table when hyperlinks are turned on +\newcommand{\doxytablelink}[2]{% + \ref{#1}% +} + +% Used to link to a table when hyperlinks are turned off +\newcommand{\doxytableref}[3]{% + \ref{#3}% +} + +% Used by @addindex +\newcommand{\lcurly}{\{} +\newcommand{\rcurly}{\}} + +% Colors used for syntax highlighting +\definecolor{comment}{rgb}{0.5,0.0,0.0} +\definecolor{keyword}{rgb}{0.0,0.5,0.0} +\definecolor{keywordtype}{rgb}{0.38,0.25,0.125} +\definecolor{keywordflow}{rgb}{0.88,0.5,0.0} +\definecolor{preprocessor}{rgb}{0.5,0.38,0.125} +\definecolor{stringliteral}{rgb}{0.0,0.125,0.25} +\definecolor{charliteral}{rgb}{0.0,0.5,0.5} +\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0} +\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} +\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} +\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0} + +% Color used for table heading +\newcommand{\tableheadbgcolor}{lightgray}% + +% Version of hypertarget with correct landing location +\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}} + +% Define caption that is also suitable in a table +\makeatletter +\def\doxyfigcaption{% +\refstepcounter{figure}% +\@dblarg{\@caption{figure}}} +\makeatother diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_calib_params_file_8cc.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_calib_params_file_8cc.tex new file mode 100644 index 0000000..433b30c --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_calib_params_file_8cc.tex @@ -0,0 +1,59 @@ +\hypertarget{example__get_calib_params_file_8cc}{}\section{examples/example\+\_\+get\+Calib\+Params\+File.cc File Reference} +\label{example__get_calib_params_file_8cc}\index{examples/example\+\_\+get\+Calib\+Params\+File.\+cc@{examples/example\+\_\+get\+Calib\+Params\+File.\+cc}} + + +This file is part of Unitree\+Camera\+S\+DK. + + +{\ttfamily \#include $<$Unitree\+Camera\+S\+D\+K.\+hpp$>$}\newline +{\ttfamily \#include $<$unistd.\+h$>$}\newline +Include dependency graph for example\+\_\+get\+Calib\+Params\+File.\+cc\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{example__get_calib_params_file_8cc__incl} +\end{center} +\end{figure} +\subsection*{Functions} +\begin{DoxyCompactItemize} +\item +int \hyperlink{example__get_calib_params_file_8cc_a0ddf1224851353fc92bfbff6f499fa97}{main} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]}) +\end{DoxyCompactItemize} + + +\subsection{Detailed Description} +This file is part of Unitree\+Camera\+S\+DK. + +This example that how to get camera internal parameters \begin{DoxyAuthor}{Author} +Zhang\+Chunyang +\end{DoxyAuthor} +\begin{DoxyDate}{Date} +2021.\+07.\+31 +\end{DoxyDate} +\begin{DoxyVersion}{Version} +1.\+0.\+1 +\end{DoxyVersion} +\begin{DoxyCopyright}{Copyright} +Copyright (c) 2020-\/2021, Hangzhou Yushu Technology Stock C\+O.\+L\+TD. All Rights Reserved. +\end{DoxyCopyright} + + +\subsection{Function Documentation} +\mbox{\Hypertarget{example__get_calib_params_file_8cc_a0ddf1224851353fc92bfbff6f499fa97}\label{example__get_calib_params_file_8cc_a0ddf1224851353fc92bfbff6f499fa97}} +\index{example\+\_\+get\+Calib\+Params\+File.\+cc@{example\+\_\+get\+Calib\+Params\+File.\+cc}!main@{main}} +\index{main@{main}!example\+\_\+get\+Calib\+Params\+File.\+cc@{example\+\_\+get\+Calib\+Params\+File.\+cc}} +\subsubsection{\texorpdfstring{main()}{main()}} +{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})} + +$<$ init \hyperlink{class_unitree_camera}{Unitree\+Camera} object by config file + +$<$ get camera open state + +$<$ disable image h264 encoding and share memory sharing + +$<$ wait parameters initialization finished + +$<$ save parameters to output\+\_\+cam\+Calib\+Params.\+yaml + +$<$ stop camera capturing \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_calib_params_file_8cc__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_calib_params_file_8cc__incl.md5 new file mode 100644 index 0000000..e10087d --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_calib_params_file_8cc__incl.md5 @@ -0,0 +1 @@ +67eb2f387eec12c5012cf4c981a1c034 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_calib_params_file_8cc__incl.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_calib_params_file_8cc__incl.pdf new file mode 100644 index 0000000..4283767 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_calib_params_file_8cc__incl.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_depth_frame_8cc.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_depth_frame_8cc.tex new file mode 100644 index 0000000..b62715c --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_depth_frame_8cc.tex @@ -0,0 +1,61 @@ +\hypertarget{example__get_depth_frame_8cc}{}\section{examples/example\+\_\+get\+Depth\+Frame.cc File Reference} +\label{example__get_depth_frame_8cc}\index{examples/example\+\_\+get\+Depth\+Frame.\+cc@{examples/example\+\_\+get\+Depth\+Frame.\+cc}} + + +This file is part of Unitree\+Camera\+S\+DK. + + +{\ttfamily \#include $<$Unitree\+Camera\+S\+D\+K.\+hpp$>$}\newline +{\ttfamily \#include $<$unistd.\+h$>$}\newline +Include dependency graph for example\+\_\+get\+Depth\+Frame.\+cc\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{example__get_depth_frame_8cc__incl} +\end{center} +\end{figure} +\subsection*{Functions} +\begin{DoxyCompactItemize} +\item +int \hyperlink{example__get_depth_frame_8cc_a0ddf1224851353fc92bfbff6f499fa97}{main} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]}) +\end{DoxyCompactItemize} + + +\subsection{Detailed Description} +This file is part of Unitree\+Camera\+S\+DK. + +This example that how to get depth frame \begin{DoxyAuthor}{Author} +Zhang\+Chunyang +\end{DoxyAuthor} +\begin{DoxyDate}{Date} +2021.\+07.\+31 +\end{DoxyDate} +\begin{DoxyVersion}{Version} +1.\+0.\+1 +\end{DoxyVersion} +\begin{DoxyCopyright}{Copyright} +Copyright (c) 2020-\/2021, Hangzhou Yushu Technology Stock C\+O.\+L\+TD. All Rights Reserved. +\end{DoxyCopyright} + + +\subsection{Function Documentation} +\mbox{\Hypertarget{example__get_depth_frame_8cc_a0ddf1224851353fc92bfbff6f499fa97}\label{example__get_depth_frame_8cc_a0ddf1224851353fc92bfbff6f499fa97}} +\index{example\+\_\+get\+Depth\+Frame.\+cc@{example\+\_\+get\+Depth\+Frame.\+cc}!main@{main}} +\index{main@{main}!example\+\_\+get\+Depth\+Frame.\+cc@{example\+\_\+get\+Depth\+Frame.\+cc}} +\subsubsection{\texorpdfstring{main()}{main()}} +{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})} + +$<$ init \hyperlink{class_unitree_camera}{Unitree\+Camera} object by config file + +$<$ get camera open state + +$<$ disable image h264 encoding and share memory sharing + +$<$ start disparity computing + +$<$ get stereo camera depth image + +$<$ stop disparity computing + +$<$ stop camera capturing \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_depth_frame_8cc__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_depth_frame_8cc__incl.md5 new file mode 100644 index 0000000..9f54db7 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_depth_frame_8cc__incl.md5 @@ -0,0 +1 @@ +e52a261447db464f9974ff6b507528cf \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_depth_frame_8cc__incl.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_depth_frame_8cc__incl.pdf new file mode 100644 index 0000000..e95a61c Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_depth_frame_8cc__incl.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_point_cloud_8cc.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_point_cloud_8cc.tex new file mode 100644 index 0000000..756a442 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_point_cloud_8cc.tex @@ -0,0 +1,66 @@ +\hypertarget{example__get_point_cloud_8cc}{}\section{examples/example\+\_\+get\+Point\+Cloud.cc File Reference} +\label{example__get_point_cloud_8cc}\index{examples/example\+\_\+get\+Point\+Cloud.\+cc@{examples/example\+\_\+get\+Point\+Cloud.\+cc}} + + +This file is part of Unitree\+Camera\+S\+DK. + + +{\ttfamily \#include $<$G\+L/gl.\+h$>$}\newline +{\ttfamily \#include $<$signal.\+h$>$}\newline +{\ttfamily \#include $<$cerrno$>$}\newline +{\ttfamily \#include $<$cfenv$>$}\newline +{\ttfamily \#include $<$unistd.\+h$>$}\newline +{\ttfamily \#include \char`\"{}gl\+Viewer/scenewindow.\+hpp\char`\"{}}\newline +{\ttfamily \#include $<$Unitree\+Camera\+S\+D\+K.\+hpp$>$}\newline +Include dependency graph for example\+\_\+get\+Point\+Cloud.\+cc\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{example__get_point_cloud_8cc__incl} +\end{center} +\end{figure} +\subsection*{Macros} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{example__get_point_cloud_8cc_a252571170a109b31218383613dc16295}\label{example__get_point_cloud_8cc_a252571170a109b31218383613dc16295}} +\#define \hyperlink{example__get_point_cloud_8cc_a252571170a109b31218383613dc16295}{R\+G\+B\+\_\+\+P\+CL}~false +\begin{DoxyCompactList}\small\item\em Color Point Cloud Enable Flag. \end{DoxyCompactList}\end{DoxyCompactItemize} +\subsection*{Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{example__get_point_cloud_8cc_a3ba436e743e30c5f31f98acb33bcd50b}\label{example__get_point_cloud_8cc_a3ba436e743e30c5f31f98acb33bcd50b}} +void {\bfseries Draw\+Scene} (const std\+::vector$<$ \hyperlink{struct_p_c_l}{P\+C\+L\+Type} $>$ \&pcl\+\_\+vec) +\item +\mbox{\Hypertarget{example__get_point_cloud_8cc_a27d13c3979cbbf70959fddbf5cc02bb5}\label{example__get_point_cloud_8cc_a27d13c3979cbbf70959fddbf5cc02bb5}} +void {\bfseries Draw\+Scene} (const std\+::vector$<$ cv\+::\+Vec3f $>$ \&pcl\+\_\+vec) +\item +\mbox{\Hypertarget{example__get_point_cloud_8cc_a35f9ea2056a80a6c96b5c3ef3c19dafd}\label{example__get_point_cloud_8cc_a35f9ea2056a80a6c96b5c3ef3c19dafd}} +void {\bfseries ctrl\+\_\+c\+\_\+handler} (int s) +\item +\mbox{\Hypertarget{example__get_point_cloud_8cc_a0ddf1224851353fc92bfbff6f499fa97}\label{example__get_point_cloud_8cc_a0ddf1224851353fc92bfbff6f499fa97}} +int {\bfseries main} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]}) +\end{DoxyCompactItemize} +\subsection*{Variables} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{example__get_point_cloud_8cc_ace2ab20fcac45c041999dbe39df5ee4d}\label{example__get_point_cloud_8cc_ace2ab20fcac45c041999dbe39df5ee4d}} +bool {\bfseries kill\+Signal\+Flag} = false +\end{DoxyCompactItemize} + + +\subsection{Detailed Description} +This file is part of Unitree\+Camera\+S\+DK. + +This example that how to get camera point cloud. \begin{DoxyAuthor}{Author} +Zhang\+Chunyang +\end{DoxyAuthor} +\begin{DoxyDate}{Date} +2021.\+07.\+31 +\end{DoxyDate} +\begin{DoxyVersion}{Version} +1.\+0.\+1 +\end{DoxyVersion} +\begin{DoxyCopyright}{Copyright} +Copyright (c) 2020-\/2021, Hangzhou Yushu Technology Stock C\+O.\+L\+TD. All Rights Reserved. +\end{DoxyCopyright} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_point_cloud_8cc__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_point_cloud_8cc__incl.md5 new file mode 100644 index 0000000..95e6bc9 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_point_cloud_8cc__incl.md5 @@ -0,0 +1 @@ +cbae86784f4960868726ec762da22aab \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_point_cloud_8cc__incl.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_point_cloud_8cc__incl.pdf new file mode 100644 index 0000000..50e4eb3 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_point_cloud_8cc__incl.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_raw_frame_8cc.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_raw_frame_8cc.tex new file mode 100644 index 0000000..3eaa4e8 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_raw_frame_8cc.tex @@ -0,0 +1,59 @@ +\hypertarget{example__get_raw_frame_8cc}{}\section{examples/example\+\_\+get\+Raw\+Frame.cc File Reference} +\label{example__get_raw_frame_8cc}\index{examples/example\+\_\+get\+Raw\+Frame.\+cc@{examples/example\+\_\+get\+Raw\+Frame.\+cc}} + + +This file is part of Unitree\+Camera\+S\+DK. + + +{\ttfamily \#include $<$Unitree\+Camera\+S\+D\+K.\+hpp$>$}\newline +{\ttfamily \#include $<$unistd.\+h$>$}\newline +Include dependency graph for example\+\_\+get\+Raw\+Frame.\+cc\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{example__get_raw_frame_8cc__incl} +\end{center} +\end{figure} +\subsection*{Functions} +\begin{DoxyCompactItemize} +\item +int \hyperlink{example__get_raw_frame_8cc_a0ddf1224851353fc92bfbff6f499fa97}{main} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]}) +\end{DoxyCompactItemize} + + +\subsection{Detailed Description} +This file is part of Unitree\+Camera\+S\+DK. + +This example that how to get camera raw frame. \begin{DoxyAuthor}{Author} +Zhang\+Chunyang +\end{DoxyAuthor} +\begin{DoxyDate}{Date} +2021.\+07.\+31 +\end{DoxyDate} +\begin{DoxyVersion}{Version} +1.\+0.\+1 +\end{DoxyVersion} +\begin{DoxyCopyright}{Copyright} +Copyright (c) 2020-\/2021, Hangzhou Yushu Technology Stock C\+O.\+L\+TD. All Rights Reserved. +\end{DoxyCopyright} + + +\subsection{Function Documentation} +\mbox{\Hypertarget{example__get_raw_frame_8cc_a0ddf1224851353fc92bfbff6f499fa97}\label{example__get_raw_frame_8cc_a0ddf1224851353fc92bfbff6f499fa97}} +\index{example\+\_\+get\+Raw\+Frame.\+cc@{example\+\_\+get\+Raw\+Frame.\+cc}!main@{main}} +\index{main@{main}!example\+\_\+get\+Raw\+Frame.\+cc@{example\+\_\+get\+Raw\+Frame.\+cc}} +\subsubsection{\texorpdfstring{main()}{main()}} +{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})} + +$<$ init camera by device node number + +$<$ set camera frame size + +$<$ set camera frame rate + +$<$ start camera capturing + +$<$ get camera raw image + +$<$ stop camera capturing \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_raw_frame_8cc__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_raw_frame_8cc__incl.md5 new file mode 100644 index 0000000..cbb9ed4 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_raw_frame_8cc__incl.md5 @@ -0,0 +1 @@ +2064d8bf0d893ce2aa7680ebe60a7a4c \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_raw_frame_8cc__incl.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_raw_frame_8cc__incl.pdf new file mode 100644 index 0000000..cf46a05 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_raw_frame_8cc__incl.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_rect_frame_8cc.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_rect_frame_8cc.tex new file mode 100644 index 0000000..32ee27c --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_rect_frame_8cc.tex @@ -0,0 +1,69 @@ +\hypertarget{example__get_rect_frame_8cc}{}\section{examples/example\+\_\+get\+Rect\+Frame.cc File Reference} +\label{example__get_rect_frame_8cc}\index{examples/example\+\_\+get\+Rect\+Frame.\+cc@{examples/example\+\_\+get\+Rect\+Frame.\+cc}} + + +This file is part of Unitree\+Camera\+S\+DK. + + +{\ttfamily \#include $<$Unitree\+Camera\+S\+D\+K.\+hpp$>$}\newline +{\ttfamily \#include $<$unistd.\+h$>$}\newline +Include dependency graph for example\+\_\+get\+Rect\+Frame.\+cc\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{example__get_rect_frame_8cc__incl} +\end{center} +\end{figure} +\subsection*{Functions} +\begin{DoxyCompactItemize} +\item +int \hyperlink{example__get_rect_frame_8cc_a0ddf1224851353fc92bfbff6f499fa97}{main} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]}) +\end{DoxyCompactItemize} + + +\subsection{Detailed Description} +This file is part of Unitree\+Camera\+S\+DK. + +This example that how to get depth frame \begin{DoxyAuthor}{Author} +Zhang\+Chunyang +\end{DoxyAuthor} +\begin{DoxyDate}{Date} +2021.\+07.\+31 +\end{DoxyDate} +\begin{DoxyVersion}{Version} +1.\+0.\+1 +\end{DoxyVersion} +\begin{DoxyCopyright}{Copyright} +Copyright (c) 2020-\/2021, Hangzhou Yushu Technology Stock C\+O.\+L\+TD. All Rights Reserved. +\end{DoxyCopyright} + + +\subsection{Function Documentation} +\mbox{\Hypertarget{example__get_rect_frame_8cc_a0ddf1224851353fc92bfbff6f499fa97}\label{example__get_rect_frame_8cc_a0ddf1224851353fc92bfbff6f499fa97}} +\index{example\+\_\+get\+Rect\+Frame.\+cc@{example\+\_\+get\+Rect\+Frame.\+cc}!main@{main}} +\index{main@{main}!example\+\_\+get\+Rect\+Frame.\+cc@{example\+\_\+get\+Rect\+Frame.\+cc}} +\subsubsection{\texorpdfstring{main()}{main()}} +{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})} + +$<$ default 0 -\/$>$ /dev/video0 + +$<$ default frame size 1856x800 + +$<$ default camera fps\+: 30 + +$<$ init camera by device node number + +$<$ get camera open state + +$<$ set camera frame size + +$<$ set camera camera fps + +$<$ set camera rectify frame size + +$<$ disable image h264 encoding and share memory sharing + +$<$ get longlat rectify left,right and fisheye rectify feim + +$<$ stop camera capturing \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_rect_frame_8cc__incl.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_rect_frame_8cc__incl.md5 new file mode 100644 index 0000000..c9233ea --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_rect_frame_8cc__incl.md5 @@ -0,0 +1 @@ +60ba75fcc076d436c69bebfd7b2d5c94 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_rect_frame_8cc__incl.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_rect_frame_8cc__incl.pdf new file mode 100644 index 0000000..f040d8f Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/example__get_rect_frame_8cc__incl.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/files.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/files.tex new file mode 100644 index 0000000..6f516e3 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/files.tex @@ -0,0 +1,15 @@ +\section{File List} +Here is a list of all documented files with brief descriptions\+:\begin{DoxyCompactList} +\item\contentsline{section}{examples/\hyperlink{example__get_calib_params_file_8cc}{example\+\_\+get\+Calib\+Params\+File.\+cc} \\*This file is part of Unitree\+Camera\+S\+DK }{\pageref{example__get_calib_params_file_8cc}}{} +\item\contentsline{section}{examples/\hyperlink{example__get_depth_frame_8cc}{example\+\_\+get\+Depth\+Frame.\+cc} \\*This file is part of Unitree\+Camera\+S\+DK }{\pageref{example__get_depth_frame_8cc}}{} +\item\contentsline{section}{examples/\hyperlink{example__get_point_cloud_8cc}{example\+\_\+get\+Point\+Cloud.\+cc} \\*This file is part of Unitree\+Camera\+S\+DK }{\pageref{example__get_point_cloud_8cc}}{} +\item\contentsline{section}{examples/\hyperlink{example__get_raw_frame_8cc}{example\+\_\+get\+Raw\+Frame.\+cc} \\*This file is part of Unitree\+Camera\+S\+DK }{\pageref{example__get_raw_frame_8cc}}{} +\item\contentsline{section}{examples/\hyperlink{example__get_rect_frame_8cc}{example\+\_\+get\+Rect\+Frame.\+cc} \\*This file is part of Unitree\+Camera\+S\+DK }{\pageref{example__get_rect_frame_8cc}}{} +\item\contentsline{section}{examples/gl\+Viewer/{\bfseries glwindow.\+hpp} }{\pageref{glwindow_8hpp}}{} +\item\contentsline{section}{examples/gl\+Viewer/{\bfseries scenewindow.\+hpp} }{\pageref{scenewindow_8hpp}}{} +\item\contentsline{section}{include/\hyperlink{_stereo_camera_common_8hpp}{Stereo\+Camera\+Common.\+hpp} \\*This file is part of Unitree\+Camera\+S\+DK, which declare stereo camera algorithm A\+P\+Is }{\pageref{_stereo_camera_common_8hpp}}{} +\item\contentsline{section}{include/\hyperlink{_system_log_8hpp}{System\+Log.\+hpp} \\*This file is part of Unitree\+Camera\+S\+DK, which declare the A\+P\+Is of log system }{\pageref{_system_log_8hpp}}{} +\item\contentsline{section}{include/\hyperlink{_unitree_camera_s_d_k_8hpp}{Unitree\+Camera\+S\+D\+K.\+hpp} \\*This file is part of Unitree\+Camera\+S\+DK, which declare unitree camera A\+P\+Is }{\pageref{_unitree_camera_s_d_k_8hpp}}{} +\item\contentsline{section}{src/{\bfseries camera\+\_\+api.\+h} }{\pageref{camera__api_8h}}{} +\item\contentsline{section}{src/\hyperlink{_stereo_camera_common_8cc}{Stereo\+Camera\+Common.\+cc} \\*This file is part of Unitree\+Camera\+S\+DK, which implement stereo vision algorithm }{\pageref{_stereo_camera_common_8cc}}{} +\end{DoxyCompactList} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/hierarchy.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/hierarchy.tex new file mode 100644 index 0000000..c6af19a --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/hierarchy.tex @@ -0,0 +1,21 @@ +\section{Class Hierarchy} +This inheritance list is sorted roughly, but not completely, alphabetically\+:\begin{DoxyCompactList} +\item \contentsline{section}{\+\_\+\+Device\+\_\+\+Point\+\_\+}{\pageref{struct___device___point__}}{} +\item \contentsline{section}{glwindow\+:\+:Event\+Handler}{\pageref{structglwindow_1_1_event_handler}}{} +\begin{DoxyCompactList} +\item \contentsline{section}{glwindow\+:\+:Event\+Dispatcher}{\pageref{classglwindow_1_1_event_dispatcher}}{} +\item \contentsline{section}{glwindow\+:\+:Scene\+Window}{\pageref{classglwindow_1_1_scene_window}}{} +\end{DoxyCompactList} +\item \contentsline{section}{glwindow\+:\+:G\+L\+Window}{\pageref{classglwindow_1_1_g_l_window}}{} +\item \contentsline{section}{info\+\_\+camera\+\_\+os}{\pageref{classinfo__camera__os}}{} +\item \contentsline{section}{info\+\_\+camera\+\_\+\+String}{\pageref{classinfo__camera___string}}{} +\item \contentsline{section}{P\+CL}{\pageref{struct_p_c_l}}{} +\item \contentsline{section}{glwindow\+:\+:G\+L\+Window\+:\+:Scoped\+Context}{\pageref{structglwindow_1_1_g_l_window_1_1_scoped_context}}{} +\item \contentsline{section}{Stereo\+Camera}{\pageref{class_stereo_camera}}{} +\begin{DoxyCompactList} +\item \contentsline{section}{Unitree\+Camera}{\pageref{class_unitree_camera}}{} +\end{DoxyCompactList} +\item \contentsline{section}{System\+Log}{\pageref{class_system_log}}{} +\item \contentsline{section}{glwindow\+:\+:G\+L\+Window\+:\+:System\+State}{\pageref{struct_g_l_window_1_1_system_state}}{} +\item \contentsline{section}{glwindow\+:\+:Scene\+Window\+:\+:Viewpoint}{\pageref{structglwindow_1_1_scene_window_1_1_viewpoint}}{} +\end{DoxyCompactList} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/index.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/index.tex new file mode 100644 index 0000000..cf236fa --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/index.tex @@ -0,0 +1,62 @@ +Unitree Robotics is a energetic start-\/up company that focuses on the development, production and sales of high-\/performance quadruped robots. It has been interviewed by B\+BC and C\+C\+TV, and is one of the earliest company to publicly sell quadruped robots. + +The company has an outstanding leadership in developing robot core components, motion control, robot perception, etc. + +We attaches great importance to research and development, and thus independently developed the motors, reducers, controllers, and even some sensors of the quadruped robot. + +\subsection*{1.\+Overview } + +Unitree\+Camera\+S\+DK 1.\+0 is a cross-\/platform library for unitree depth cameras + +The S\+DK allows depth and color streaming, and provides intrinsic calibration information. The library also offers pointcloud, depth aligned to color and vise-\/versa. + +\subsection*{2.\+Dependencies } + +Open\+CV, version\+: equal or lager than 4 Cmake, version\+: 2.\+8 + +\subsection*{2.\+Build } + + +\begin{DoxyCode} +cd UnitreeCameraSDK; +mkdir build; cd build; +cmake ..; make +\end{DoxyCode} + + +\subsection*{3.\+Run Examples } + +Get Camera Raw Frame\+: +\begin{DoxyCode} +cd UnitreeCameraSDK; +./bin/example\_getRawFrame +\end{DoxyCode} + + +Get Calibration Parameters File +\begin{DoxyCode} +cd UnitreeCameraSDK; +./bin/example\_getCalibParamsFile +\end{DoxyCode} + + +Get Rectify Frame +\begin{DoxyCode} +cd UnitreeCameraSDK; +./bin/example\_getRectFrame +\end{DoxyCode} + + +Get Depth Frame +\begin{DoxyCode} +cd UnitreeCameraSDK; +./bin/example\_getDepthFrame +\end{DoxyCode} + + +Get Point Cloud\+: +\begin{DoxyCode} +cd UnitreeCameraSDK; +./bin/example\_getPointCloud +\end{DoxyCode} + \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/refman.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/refman.tex new file mode 100644 index 0000000..3a3ea5f --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/refman.tex @@ -0,0 +1,153 @@ +\documentclass[twoside]{book} + +% Packages required by doxygen +\usepackage{fixltx2e} +\usepackage{calc} +\usepackage{doxygen} +\usepackage[export]{adjustbox} % also loads graphicx +\usepackage{graphicx} +\usepackage[utf8]{inputenc} +\usepackage{makeidx} +\usepackage{multicol} +\usepackage{multirow} +\PassOptionsToPackage{warn}{textcomp} +\usepackage{textcomp} +\usepackage[nointegrals]{wasysym} +\usepackage[table]{xcolor} + +% Font selection +\usepackage[T1]{fontenc} +\usepackage[scaled=.90]{helvet} +\usepackage{courier} +\usepackage{amssymb} +\usepackage{sectsty} +\renewcommand{\familydefault}{\sfdefault} +\allsectionsfont{% + \fontseries{bc}\selectfont% + \color{darkgray}% +} +\renewcommand{\DoxyLabelFont}{% + \fontseries{bc}\selectfont% + \color{darkgray}% +} +\newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} + +% Page & text layout +\usepackage{geometry} +\geometry{% + a4paper,% + top=2.5cm,% + bottom=2.5cm,% + left=2.5cm,% + right=2.5cm% +} +\tolerance=750 +\hfuzz=15pt +\hbadness=750 +\setlength{\emergencystretch}{15pt} +\setlength{\parindent}{0cm} +\setlength{\parskip}{3ex plus 2ex minus 2ex} +\makeatletter +\renewcommand{\paragraph}{% + \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@parafont% + }% +} +\renewcommand{\subparagraph}{% + \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@subparafont% + }% +} +\makeatother + +% Headers & footers +\usepackage{fancyhdr} +\pagestyle{fancyplain} +\fancyhead[LE]{\fancyplain{}{\bfseries\thepage}} +\fancyhead[CE]{\fancyplain{}{}} +\fancyhead[RE]{\fancyplain{}{\bfseries\leftmark}} +\fancyhead[LO]{\fancyplain{}{\bfseries\rightmark}} +\fancyhead[CO]{\fancyplain{}{}} +\fancyhead[RO]{\fancyplain{}{\bfseries\thepage}} +\fancyfoot[LE]{\fancyplain{}{}} +\fancyfoot[CE]{\fancyplain{}{}} +\fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }} +\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }} +\fancyfoot[CO]{\fancyplain{}{}} +\fancyfoot[RO]{\fancyplain{}{}} +\renewcommand{\footrulewidth}{0.4pt} +\renewcommand{\chaptermark}[1]{% + \markboth{#1}{}% +} +\renewcommand{\sectionmark}[1]{% + \markright{\thesection\ #1}% +} + +% Indices & bibliography +\usepackage{natbib} +\usepackage[titles]{tocloft} +\setcounter{tocdepth}{3} +\setcounter{secnumdepth}{5} +\makeindex + +% Hyperlinks (required, but should be loaded last) +\usepackage{ifpdf} +\ifpdf + \usepackage[pdftex,pagebackref=true]{hyperref} +\else + \usepackage[ps2pdf,pagebackref=true]{hyperref} +\fi +\hypersetup{% + colorlinks=true,% + linkcolor=blue,% + citecolor=blue,% + unicode% +} + +% Custom commands +\newcommand{\clearemptydoublepage}{% + \newpage{\pagestyle{empty}\cleardoublepage}% +} + +\usepackage{caption} +\captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top} + +%===== C O N T E N T S ===== + +\begin{document} + +% Titlepage & ToC +\hypersetup{pageanchor=false, + bookmarksnumbered=true, + pdfencoding=unicode + } +\pagenumbering{alph} +\begin{titlepage} +\vspace*{7cm} +\begin{center}% +{\Large Unitree\+Camera\+S\+DK \\[1ex]\large 1.\+0.\+1 }\\ +\vspace*{1cm} +{\large Generated by Doxygen 1.8.13}\\ +\end{center} +\end{titlepage} +\clearemptydoublepage +\pagenumbering{roman} +\tableofcontents +\clearemptydoublepage +\pagenumbering{arabic} +\hypersetup{pageanchor=true} + +%--- Begin generated contents --- +\chapter{Introduction} +\label{index}\hypertarget{index}{}\input{index} +%--- End generated contents --- + +% Index +\backmatter +\newpage +\phantomsection +\clearemptydoublepage +\addcontentsline{toc}{chapter}{Index} +\printindex + +\end{document} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct___device___point__.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct___device___point__.tex new file mode 100644 index 0000000..b297ac0 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct___device___point__.tex @@ -0,0 +1,86 @@ +\hypertarget{struct___device___point__}{}\section{\+\_\+\+Device\+\_\+\+Point\+\_\+ Struct Reference} +\label{struct___device___point__}\index{\+\_\+\+Device\+\_\+\+Point\+\_\+@{\+\_\+\+Device\+\_\+\+Point\+\_\+}} + + +Collaboration diagram for \+\_\+\+Device\+\_\+\+Point\+\_\+\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=258pt]{struct___device___point____coll__graph} +\end{center} +\end{figure} +\subsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{struct___device___point___a496ae1b03ae70dcf285608728f19362b}\label{struct___device___point___a496ae1b03ae70dcf285608728f19362b}} +uint32\+\_\+t {\bfseries u\+\_\+index} +\item +\mbox{\Hypertarget{struct___device___point___a2bcc2213d69bdfb85185dd5cba38fb1a}\label{struct___device___point___a2bcc2213d69bdfb85185dd5cba38fb1a}} +B\+Y\+TE {\bfseries Flash\+Type} +\item +\mbox{\Hypertarget{struct___device___point___a1d18be09086b1f8dbce31538658ac969}\label{struct___device___point___a1d18be09086b1f8dbce31538658ac969}} +B\+Y\+TE {\bfseries I\+S\+P\+\_\+\+ID} +\item +\mbox{\Hypertarget{struct___device___point___acc7c595ed1668efdbb9f08991774fde5}\label{struct___device___point___acc7c595ed1668efdbb9f08991774fde5}} +P\+V\+O\+ID {\bfseries p\+\_\+device} +\item +\mbox{\Hypertarget{struct___device___point___ac1cf796ec01fcfe2501de7fd67c1e816}\label{struct___device___point___ac1cf796ec01fcfe2501de7fd67c1e816}} +H\+\_\+\+Fun\+\_\+\+I\+Pb {\bfseries Falsh\+\_\+R} +\item +\mbox{\Hypertarget{struct___device___point___af6be85e4e3087c97bcaf6b211a536fd0}\label{struct___device___point___af6be85e4e3087c97bcaf6b211a536fd0}} +H\+\_\+\+Fun\+\_\+\+I\+Pb {\bfseries Falsh\+\_\+W} +\item +\mbox{\Hypertarget{struct___device___point___a140753f50973b7bd2093b7c5f867401b}\label{struct___device___point___a140753f50973b7bd2093b7c5f867401b}} +H\+\_\+\+Fun\+\_\+\+Cinfo {\bfseries p\+Info} +\item +\mbox{\Hypertarget{struct___device___point___aa62b57c39680137953b3a0231e03b0de}\label{struct___device___point___aa62b57c39680137953b3a0231e03b0de}} +H\+\_\+\+Fun\+\_\+\+WB {\bfseries Set\+\_\+\+I\+S\+P\+\_\+\+Reg} +\item +\mbox{\Hypertarget{struct___device___point___a99da3d517f02c8fbb1ae9dab99e270d9}\label{struct___device___point___a99da3d517f02c8fbb1ae9dab99e270d9}} +H\+\_\+\+Fun\+\_\+\+W\+Pb {\bfseries Get\+\_\+\+I\+S\+P\+\_\+\+Reg} +\item +\mbox{\Hypertarget{struct___device___point___a36efd255ea09b7358384322e7653c507}\label{struct___device___point___a36efd255ea09b7358384322e7653c507}} +H\+\_\+\+Fun\+\_\+\+B\+WW {\bfseries Set\+\_\+\+Sensor\+\_\+\+Reg} +\item +\mbox{\Hypertarget{struct___device___point___ae5c33e5dbbe75a06269a779b46f910e5}\label{struct___device___point___ae5c33e5dbbe75a06269a779b46f910e5}} +H\+\_\+\+Fun\+\_\+\+B\+W\+Pw {\bfseries Get\+\_\+\+Sensor\+\_\+\+Reg} +\item +\mbox{\Hypertarget{struct___device___point___a693ba5a68484207ca9a4dcdb3099ee20}\label{struct___device___point___a693ba5a68484207ca9a4dcdb3099ee20}} +Input\+\_\+\+G\+P\+I\+O\+\_\+\+Get {\bfseries Input\+\_\+\+Gpio\+\_\+\+Get} +\item +\mbox{\Hypertarget{struct___device___point___a2e3c1ab9e67f2f34d7f8b0201763d791}\label{struct___device___point___a2e3c1ab9e67f2f34d7f8b0201763d791}} +Output\+\_\+\+G\+P\+I\+O\+\_\+\+Set {\bfseries Output\+\_\+\+Gpio\+\_\+set} +\item +\mbox{\Hypertarget{struct___device___point___ae626785c21cf9bc3fe9a80a849eb4eb7}\label{struct___device___point___ae626785c21cf9bc3fe9a80a849eb4eb7}} +Input\+\_\+\+G\+P\+I\+O\+\_\+\+Init {\bfseries Input\+\_\+\+Gpio\+\_\+init} +\item +\mbox{\Hypertarget{struct___device___point___ac2ae81539bc4b84bf0aac9662f9f671a}\label{struct___device___point___ac2ae81539bc4b84bf0aac9662f9f671a}} +Output\+\_\+\+G\+P\+I\+O\+\_\+\+Init {\bfseries Output\+\_\+\+Gpio\+\_\+init} +\item +\mbox{\Hypertarget{struct___device___point___ab738d9836087a55b8cd6e7871459c3d0}\label{struct___device___point___ab738d9836087a55b8cd6e7871459c3d0}} +P\+V\+O\+ID {\bfseries R\+E\+S\+\_\+1} +\item +\mbox{\Hypertarget{struct___device___point___a81f92aa0d840a974b6dc6fc63374edbc}\label{struct___device___point___a81f92aa0d840a974b6dc6fc63374edbc}} +P\+V\+O\+ID {\bfseries R\+E\+S\+\_\+2} +\item +\mbox{\Hypertarget{struct___device___point___ae8d95092c51baeefa9cd34d10a18c096}\label{struct___device___point___ae8d95092c51baeefa9cd34d10a18c096}} +H\+\_\+\+Fun\+\_\+\+Cinfo\+Str {\bfseries p\+Info\+Str} +\item +\mbox{\Hypertarget{struct___device___point___ad1b9669faa70672bff64d4df2474c957}\label{struct___device___point___ad1b9669faa70672bff64d4df2474c957}} +p\+Ex\+ID {\bfseries p\+Exid\+\_\+R} +\item +\mbox{\Hypertarget{struct___device___point___aba2eb95e2d194970a759807f8c92b7f0}\label{struct___device___point___aba2eb95e2d194970a759807f8c92b7f0}} +p\+Ex\+ID {\bfseries p\+Exid\+\_\+W} +\item +\mbox{\Hypertarget{struct___device___point___a91ad63e0cee2bee000daffefb913d887}\label{struct___device___point___a91ad63e0cee2bee000daffefb913d887}} +P\+V\+O\+ID {\bfseries respoint} +\item +\mbox{\Hypertarget{struct___device___point___a7bbbb8a7da07390894a0193fd46241d8}\label{struct___device___point___a7bbbb8a7da07390894a0193fd46241d8}} +p\+C\+U\+S\+T\+O\+M\+E\+R\+Fun {\bfseries p\+Customer} +\end{DoxyCompactItemize} + + +The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} +\item +src/camera\+\_\+api.\+h\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct___device___point____coll__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct___device___point____coll__graph.md5 new file mode 100644 index 0000000..98295c8 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct___device___point____coll__graph.md5 @@ -0,0 +1 @@ +cf67120c2c743b9e9105d9de54dc121a \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct___device___point____coll__graph.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct___device___point____coll__graph.pdf new file mode 100644 index 0000000..f6fe92f Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct___device___point____coll__graph.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct_g_l_window_1_1_system_state.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct_g_l_window_1_1_system_state.tex new file mode 100644 index 0000000..33e8b05 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct_g_l_window_1_1_system_state.tex @@ -0,0 +1,52 @@ +\hypertarget{struct_g_l_window_1_1_system_state}{}\section{glwindow\+:\+:G\+L\+Window\+:\+:System\+State Struct Reference} +\label{struct_g_l_window_1_1_system_state}\index{glwindow\+::\+G\+L\+Window\+::\+System\+State@{glwindow\+::\+G\+L\+Window\+::\+System\+State}} +\subsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{struct_g_l_window_1_1_system_state_a5c10afc9873e8429448fc085230099a4}\label{struct_g_l_window_1_1_system_state_a5c10afc9873e8429448fc085230099a4}} +bool {\bfseries init} (int w, int h, const char $\ast$title) +\item +\mbox{\Hypertarget{struct_g_l_window_1_1_system_state_a0eccf6dc59ec9e8b062eb8cd56398e60}\label{struct_g_l_window_1_1_system_state_a0eccf6dc59ec9e8b062eb8cd56398e60}} +void {\bfseries destroy} () +\item +\mbox{\Hypertarget{struct_g_l_window_1_1_system_state_aecbb2620bcb643e4bad1280b5ae5c9f5}\label{struct_g_l_window_1_1_system_state_aecbb2620bcb643e4bad1280b5ae5c9f5}} +void {\bfseries swap\+\_\+buffers} () +\item +\mbox{\Hypertarget{struct_g_l_window_1_1_system_state_a760021e568f2dc7e0cc5a68fb835321e}\label{struct_g_l_window_1_1_system_state_a760021e568f2dc7e0cc5a68fb835321e}} +void {\bfseries set\+\_\+title} (const char $\ast$title) +\item +\mbox{\Hypertarget{struct_g_l_window_1_1_system_state_ad553d495b4f03b0cb666cb9916ba1180}\label{struct_g_l_window_1_1_system_state_ad553d495b4f03b0cb666cb9916ba1180}} +bool {\bfseries make\+\_\+current} () +\end{DoxyCompactItemize} +\subsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{struct_g_l_window_1_1_system_state_aeb17b154bf55aba75b2f807a2dac47f6}\label{struct_g_l_window_1_1_system_state_aeb17b154bf55aba75b2f807a2dac47f6}} +Display $\ast$ {\bfseries display} +\item +\mbox{\Hypertarget{struct_g_l_window_1_1_system_state_aa2dff48b0d656cb10a97ce6eb7fbee56}\label{struct_g_l_window_1_1_system_state_aa2dff48b0d656cb10a97ce6eb7fbee56}} +Window {\bfseries window} +\item +\mbox{\Hypertarget{struct_g_l_window_1_1_system_state_ab6ba4ef9e4aca634aad36b9e652e6c9f}\label{struct_g_l_window_1_1_system_state_ab6ba4ef9e4aca634aad36b9e652e6c9f}} +G\+L\+X\+Context {\bfseries context} +\item +\mbox{\Hypertarget{struct_g_l_window_1_1_system_state_a6901cb96188585fcf83cf46192ded4b1}\label{struct_g_l_window_1_1_system_state_a6901cb96188585fcf83cf46192ded4b1}} +Atom {\bfseries delete\+\_\+atom} +\item +\mbox{\Hypertarget{struct_g_l_window_1_1_system_state_a8477bec2ff201a8dd407becfd0c104a1}\label{struct_g_l_window_1_1_system_state_a8477bec2ff201a8dd407becfd0c104a1}} +Cursor {\bfseries cursor} +\item +\mbox{\Hypertarget{struct_g_l_window_1_1_system_state_aae54ccdc33e813e058623555d182b963}\label{struct_g_l_window_1_1_system_state_aae54ccdc33e813e058623555d182b963}} +int {\bfseries width} +\item +\mbox{\Hypertarget{struct_g_l_window_1_1_system_state_a3ca4777d7371ae47f53a8dd69690e9c6}\label{struct_g_l_window_1_1_system_state_a3ca4777d7371ae47f53a8dd69690e9c6}} +int {\bfseries height} +\item +\mbox{\Hypertarget{struct_g_l_window_1_1_system_state_a7f931ca36a980cd9ff1c00dacf410dd2}\label{struct_g_l_window_1_1_system_state_a7f931ca36a980cd9ff1c00dacf410dd2}} +bool {\bfseries visible} +\end{DoxyCompactItemize} + + +The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} +\item +examples/gl\+Viewer/glwindow\+\_\+x11.\+cpp\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct_p_c_l.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct_p_c_l.tex new file mode 100644 index 0000000..d18707a --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/struct_p_c_l.tex @@ -0,0 +1,36 @@ +\hypertarget{struct_p_c_l}{}\section{P\+CL Struct Reference} +\label{struct_p_c_l}\index{P\+CL@{P\+CL}} + + +this struct is used for R\+GB point cloud capture and display + + + + +{\ttfamily \#include $<$Stereo\+Camera\+Common.\+hpp$>$} + +\subsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{struct_p_c_l_a07c28b7f533724d91ec4a9e461989d8c}\label{struct_p_c_l_a07c28b7f533724d91ec4a9e461989d8c}} +cv\+::\+Vec3f \hyperlink{struct_p_c_l_a07c28b7f533724d91ec4a9e461989d8c}{pts} +\begin{DoxyCompactList}\small\item\em points coordinates (x, y, z) \end{DoxyCompactList}\item +\mbox{\Hypertarget{struct_p_c_l_a6555550c790378b130273dd6ae3a2158}\label{struct_p_c_l_a6555550c790378b130273dd6ae3a2158}} +cv\+::\+Vec3b \hyperlink{struct_p_c_l_a6555550c790378b130273dd6ae3a2158}{clr} +\begin{DoxyCompactList}\small\item\em points color (b, g, r) \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\subsection{Detailed Description} +this struct is used for R\+GB point cloud capture and display + +pts for point coordinates (x, y, z), clr for point color (b, g, r) \begin{DoxyNote}{Note} +point cloud simple type +\end{DoxyNote} +\begin{DoxyAttention}{Attention} +point data element type float, color data element type uchar +\end{DoxyAttention} + + +The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} +\item +include/\hyperlink{_stereo_camera_common_8hpp}{Stereo\+Camera\+Common.\+hpp}\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_event_handler.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_event_handler.tex new file mode 100644 index 0000000..544321a --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_event_handler.tex @@ -0,0 +1,47 @@ +\hypertarget{structglwindow_1_1_event_handler}{}\section{glwindow\+:\+:Event\+Handler Struct Reference} +\label{structglwindow_1_1_event_handler}\index{glwindow\+::\+Event\+Handler@{glwindow\+::\+Event\+Handler}} + + +Inheritance diagram for glwindow\+:\+:Event\+Handler\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{structglwindow_1_1_event_handler__inherit__graph} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{structglwindow_1_1_event_handler_a6f2084a1cbe2ec67360f07f7cacee5b8}\label{structglwindow_1_1_event_handler_a6f2084a1cbe2ec67360f07f7cacee5b8}} +virtual bool {\bfseries on\+\_\+key\+\_\+down} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int key) +\item +\mbox{\Hypertarget{structglwindow_1_1_event_handler_aed85ba8a37b8403ffe5d89ee5d2e765c}\label{structglwindow_1_1_event_handler_aed85ba8a37b8403ffe5d89ee5d2e765c}} +virtual bool {\bfseries on\+\_\+key\+\_\+up} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int key) +\item +\mbox{\Hypertarget{structglwindow_1_1_event_handler_a2dc8861119889a5ece73ffdb09439b18}\label{structglwindow_1_1_event_handler_a2dc8861119889a5ece73ffdb09439b18}} +virtual bool {\bfseries on\+\_\+text} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, const char $\ast$text, int len) +\item +\mbox{\Hypertarget{structglwindow_1_1_event_handler_adeb34bb7c2eb4357496bf4d8fcda53df}\label{structglwindow_1_1_event_handler_adeb34bb7c2eb4357496bf4d8fcda53df}} +virtual bool {\bfseries on\+\_\+button\+\_\+down} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int btn, int state, int x, int y) +\item +\mbox{\Hypertarget{structglwindow_1_1_event_handler_a2801b252ae6ddc96595bc262354ca789}\label{structglwindow_1_1_event_handler_a2801b252ae6ddc96595bc262354ca789}} +virtual bool {\bfseries on\+\_\+button\+\_\+up} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int btn, int state, int x, int y) +\item +\mbox{\Hypertarget{structglwindow_1_1_event_handler_a5f016ad6546c1413845a1a3b6c66bad9}\label{structglwindow_1_1_event_handler_a5f016ad6546c1413845a1a3b6c66bad9}} +virtual bool {\bfseries on\+\_\+mouse\+\_\+move} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int state, int x, int y) +\item +\mbox{\Hypertarget{structglwindow_1_1_event_handler_ad6373a3f3dd084db5f100e4da12130b8}\label{structglwindow_1_1_event_handler_ad6373a3f3dd084db5f100e4da12130b8}} +virtual bool {\bfseries on\+\_\+mouse\+\_\+wheel} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int state, int x, int y, int dx, int dy) +\item +\mbox{\Hypertarget{structglwindow_1_1_event_handler_a32a807fa383e8d0a7395fea38125ea91}\label{structglwindow_1_1_event_handler_a32a807fa383e8d0a7395fea38125ea91}} +virtual bool {\bfseries on\+\_\+resize} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win, int x, int y, int w, int h) +\item +\mbox{\Hypertarget{structglwindow_1_1_event_handler_a0bb4bf3ce84c596f781594219aad8198}\label{structglwindow_1_1_event_handler_a0bb4bf3ce84c596f781594219aad8198}} +virtual bool {\bfseries on\+\_\+close} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&win) +\end{DoxyCompactItemize} + + +The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} +\item +examples/gl\+Viewer/glwindow.\+hpp\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_event_handler__inherit__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_event_handler__inherit__graph.md5 new file mode 100644 index 0000000..2ef69ce --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_event_handler__inherit__graph.md5 @@ -0,0 +1 @@ +9925b734b3a5c4dec291fa2913a5e662 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_event_handler__inherit__graph.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_event_handler__inherit__graph.pdf new file mode 100644 index 0000000..d2492d2 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_event_handler__inherit__graph.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_g_l_window_1_1_scoped_context.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_g_l_window_1_1_scoped_context.tex new file mode 100644 index 0000000..b61cd42 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_g_l_window_1_1_scoped_context.tex @@ -0,0 +1,29 @@ +\hypertarget{structglwindow_1_1_g_l_window_1_1_scoped_context}{}\section{glwindow\+:\+:G\+L\+Window\+:\+:Scoped\+Context Struct Reference} +\label{structglwindow_1_1_g_l_window_1_1_scoped_context}\index{glwindow\+::\+G\+L\+Window\+::\+Scoped\+Context@{glwindow\+::\+G\+L\+Window\+::\+Scoped\+Context}} + + +Collaboration diagram for glwindow\+:\+:G\+L\+Window\+:\+:Scoped\+Context\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=276pt]{structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{structglwindow_1_1_g_l_window_1_1_scoped_context_a50c8bb3920c309f393427a712ef92fab}\label{structglwindow_1_1_g_l_window_1_1_scoped_context_a50c8bb3920c309f393427a712ef92fab}} +{\bfseries Scoped\+Context} (\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \&w) +\end{DoxyCompactItemize} +\subsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{structglwindow_1_1_g_l_window_1_1_scoped_context_a4d650e6dd6b405ea6f6b344b3e98a3af}\label{structglwindow_1_1_g_l_window_1_1_scoped_context_a4d650e6dd6b405ea6f6b344b3e98a3af}} +\hyperlink{classglwindow_1_1_g_l_window}{G\+L\+Window} \& {\bfseries win} +\end{DoxyCompactItemize} + + +The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} +\item +examples/gl\+Viewer/glwindow.\+hpp\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.md5 b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.md5 new file mode 100644 index 0000000..6959b03 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.md5 @@ -0,0 +1 @@ +b57dad1e1a6242c6ea719e00bd3e8c03 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.pdf b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.pdf new file mode 100644 index 0000000..ea83829 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_g_l_window_1_1_scoped_context__coll__graph.pdf differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_scene_window_1_1_viewpoint.tex b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_scene_window_1_1_viewpoint.tex new file mode 100644 index 0000000..373ed1a --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/doc/latex/structglwindow_1_1_scene_window_1_1_viewpoint.tex @@ -0,0 +1,23 @@ +\hypertarget{structglwindow_1_1_scene_window_1_1_viewpoint}{}\section{glwindow\+:\+:Scene\+Window\+:\+:Viewpoint Struct Reference} +\label{structglwindow_1_1_scene_window_1_1_viewpoint}\index{glwindow\+::\+Scene\+Window\+::\+Viewpoint@{glwindow\+::\+Scene\+Window\+::\+Viewpoint}} +\subsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{structglwindow_1_1_scene_window_1_1_viewpoint_a48d71514393c6538f2753b219ec25e1e}\label{structglwindow_1_1_scene_window_1_1_viewpoint_a48d71514393c6538f2753b219ec25e1e}} +double {\bfseries target} \mbox{[}3\mbox{]} +\item +\mbox{\Hypertarget{structglwindow_1_1_scene_window_1_1_viewpoint_a2c4761518908d5af7812a2427275b9da}\label{structglwindow_1_1_scene_window_1_1_viewpoint_a2c4761518908d5af7812a2427275b9da}} +double {\bfseries azimuth} +\item +\mbox{\Hypertarget{structglwindow_1_1_scene_window_1_1_viewpoint_a019ecd110fdfc130d30318e728198718}\label{structglwindow_1_1_scene_window_1_1_viewpoint_a019ecd110fdfc130d30318e728198718}} +double {\bfseries elevation} +\item +\mbox{\Hypertarget{structglwindow_1_1_scene_window_1_1_viewpoint_ab9bf343d65bfd4a4ef814c812ab92136}\label{structglwindow_1_1_scene_window_1_1_viewpoint_ab9bf343d65bfd4a4ef814c812ab92136}} +double {\bfseries distance} +\end{DoxyCompactItemize} + + +The documentation for this struct was generated from the following files\+:\begin{DoxyCompactItemize} +\item +examples/gl\+Viewer/scenewindow.\+hpp\item +examples/gl\+Viewer/scenewindow.\+cpp\end{DoxyCompactItemize} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/CMakeLists.txt b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/CMakeLists.txt new file mode 100644 index 0000000..4b75364 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/CMakeLists.txt @@ -0,0 +1,66 @@ + +add_executable(example_getRawFrame ./example_getRawFrame.cc) +target_link_libraries(example_getRawFrame ${SDKLIBS}) + +add_executable(example_getDepthFrame ./example_getDepthFrame.cc) +target_link_libraries(example_getDepthFrame ${SDKLIBS}) + +add_executable(example_getRectFrame ./example_getRectFrame.cc) +target_link_libraries(example_getRectFrame ${SDKLIBS}) + +add_executable(example_getCalibParamsFile ./example_getCalibParamsFile.cc) +target_link_libraries(example_getCalibParamsFile ${SDKLIBS}) + +add_executable(example_putImagetrans ./example_putImagetrans.cc) +target_link_libraries(example_putImagetrans ${SDKLIBS}) + +add_executable(example_getimagetrans ./example_getimagetrans.cc) +target_link_libraries(example_getimagetrans ${SDKLIBS}) + +# add_executable(example_share ./example_share.cc) +# target_link_libraries(example_share ${SDKLIBS}) + +find_package(OpenGL REQUIRED) +if(OpenGL_FOUND) + include_directories(${OPENGL_INCLUDE_DIR}) + message(STATUS ${OPENGL_INCLUDE_DIR}) + message(STATUS ${OPENGL_LIBRARIES}) +else() + message(WARNING "OpenGL Library Not Found") +endif() + +find_package(GLUT REQUIRED) +if(GLUT_FOUND) + include_directories(${GLUT_INCLUDE_DIR}) + message(STATUS ${GLUT_INCLUDE_DIR}) + message(STATUS ${GLUT_LIBRARY}) +else() + message(WARNING "GLUT Library Not Found") +endif() + +find_package(X11 REQUIRED) +if(X11_FOUND) + include_directories(${X11_INCLUDE_DIR}) + message(${X11_INCLUDE_DIR}) + message(${X11_LIBRARIES}) +else() + message(WARNING "X11 Library Not Found") +endif() + +if(X11_FOUND AND OpenGL_FOUND AND GLUT_FOUND) + set(ShowPointCloud true) + message(STATUS "Point Cloud Example Enabled") +else() + set(ShowPointCloud false) + message(WARNING "Point Cloud Example Disabled") +endif() + +if(${ShowPointCloud}) +add_executable(example_getPointCloud ./example_getPointCloud.cc ./glViewer/glwindow_x11.cpp ./glViewer/scenewindow.cpp) +target_link_libraries(example_getPointCloud ${SDKLIBS} ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} ${X11_LIBRARIES} ) +endif() + + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread") + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getCalibParamsFile.cc b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getCalibParamsFile.cc new file mode 100644 index 0000000..afdf0d2 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getCalibParamsFile.cc @@ -0,0 +1,27 @@ +/** + * @file example_getCalibParamsFile.cc + * @brief This file is part of UnitreeCameraSDK. + * @details This example that how to get camera internal parameters + * @author ZhangChunyang + * @date 2021.07.31 + * @version 1.0.1 + * @copyright Copyright (c) 2020-2021, Hangzhou Yushu Technology Stock CO.LTD. All Rights Reserved. + */ + +#include +#include + +int main(int argc, char *argv[]){ + + UnitreeCamera cam("stereo_camera_config.yaml"); ///< init UnitreeCamera object by config file + if(!cam.isOpened()) ///< get camera open state + exit(EXIT_FAILURE); + + cam.startCapture(); ///< disable image h264 encoding and share memory sharing + usleep(100000); ///< wait parameters initialization finished + cam.saveCalibParams("output_camCalibParams.yaml"); ///< save parameters to output_camCalibParams.yaml + std::cout << cam.getSerialNumber() << " " << cam.getPosNumber() << std::endl; + usleep(100000); + cam.stopCapture(); ///< stop camera capturing + return 0; +} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getDepthFrame.cc b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getDepthFrame.cc new file mode 100644 index 0000000..3eae096 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getDepthFrame.cc @@ -0,0 +1,42 @@ +/** + * @file example_getDepthFrame.cc + * @brief This file is part of UnitreeCameraSDK. + * @details This example that how to get depth frame + * @author SunMingzhe + * @date 2021.12.07 + * @version 1.1.0 + * @copyright Copyright (c) 2020-2021, Hangzhou Yushu Technology Stock CO.LTD. All Rights Reserved. + */ + +#include +#include + +int main(int argc, char *argv[]){ + + UnitreeCamera cam("stereo_camera_config.yaml"); ///< init UnitreeCamera object by config file + if(!cam.isOpened()) ///< get camera open state + exit(EXIT_FAILURE); + + cam.startCapture(); ///< disable image h264 encoding and share memory sharing + cam.startStereoCompute(); ///< start disparity computing + + while(cam.isOpened()){ + cv::Mat depth; + std::chrono::microseconds t; + if(!cam.getDepthFrame(depth, true, t)){ ///< get stereo camera depth image + usleep(1000); + continue; + } + if(!depth.empty()){ + cv::imshow("UnitreeCamera-Depth", depth); + } + char key = cv::waitKey(10); + if(key == 27) // press ESC key + break; + } + + cam.stopStereoCompute(); ///< stop disparity computing + cam.stopCapture(); ///< stop camera capturing + + return 0; +} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getPointCloud.cc b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getPointCloud.cc new file mode 100644 index 0000000..0dd9889 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getPointCloud.cc @@ -0,0 +1,97 @@ +/** + * @file example_getPointCloud.cc + * @brief This file is part of UnitreeCameraSDK. + * @details This example that how to get camera point cloud. + * @author ZhangChunyang + * @date 2021.07.31 + * @version 1.0.1 + * @copyright Copyright (c) 2020-2021, Hangzhou Yushu Technology Stock CO.LTD. All Rights Reserved. + */ + +#include +#include +#include +#include +#include +#include "glViewer/scenewindow.hpp" +#include + +#define RGB_PCL true ///< Color Point Cloud Enable Flag + +void DrawScene(const std::vector& pcl_vec) { + glBegin(GL_POINTS); + for (uint i = 0; i < pcl_vec.size(); ++i) { + PCLType pcl = pcl_vec[i]; + glColor3ub(pcl.clr(2), pcl.clr(1), pcl.clr(0)); + glVertex3f(-pcl.pts(0), -pcl.pts(1), pcl.pts(2)); + } + glEnd(); +} + +void DrawScene(const std::vector& pcl_vec) { + glBegin(GL_POINTS); + for (uint i = 0; i < pcl_vec.size(); ++i) { + cv::Vec3f pcl = pcl_vec[i]; + glColor3ub(255, 255, 0); + glVertex3f(-pcl(0), -pcl(1), pcl(2)); + } + glEnd(); +} + +bool killSignalFlag = false; +void ctrl_c_handler(int s){ + killSignalFlag = true; + return ; +} + +int main(int argc, char *argv[]){ + + UnitreeCamera cam("stereo_camera_config.yaml"); + if(!cam.isOpened()) + exit(EXIT_FAILURE); + + cam.startCapture(); + cam.startStereoCompute(); + + struct sigaction sigIntHandler; + sigIntHandler.sa_handler = ctrl_c_handler; + sigemptyset(&sigIntHandler.sa_mask); + sigIntHandler.sa_flags = 0; + sigaction(SIGINT, &sigIntHandler, NULL); + + std::cout << cam.getSerialNumber() << " " << cam.getPosNumber() << std::endl; + + glwindow::SceneWindow scene(960, 720, "Panorama 3D Scene"); + + while(cam.isOpened()){ + + if(killSignalFlag){ + break; + } + + std::chrono::microseconds t; +#if RGB_PCL + std::vector pcl_vec; + if(!cam.getPointCloud(pcl_vec, t)){ + usleep(1000); + continue; + } +#else + std::vector pcl_vec; + if(!cam.getPointCloud(pcl_vec, t)){ + usleep(1000); + continue; + } +#endif + if (scene.win.alive()) { + if (scene.start_draw()) { + DrawScene(pcl_vec); + scene.finish_draw(); + } + } + } + + cam.stopStereoCompute(); + cam.stopCapture(); + return 0; +} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getRawFrame.cc b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getRawFrame.cc new file mode 100644 index 0000000..987cb41 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getRawFrame.cc @@ -0,0 +1,63 @@ +/** + * @file example_getRawFrame.cc + * @brief This file is part of UnitreeCameraSDK. + * @details This example that how to get camera raw frame. + * @author ZhangChunyang + * @date 2021.07.31 + * @version 1.0.1 + * @copyright Copyright (c) 2020-2021, Hangzhou Yushu Technology Stock CO.LTD. All Rights Reserved. + */ + +#include +#include + +int main(int argc, char *argv[]){ + + int deviceNode = 0; // default 0 -> /dev/video0 + cv::Size frameSize(1856, 800); // defalut image size: 1856 X 800 + int fps = 30; + + if(argc >= 2){ + deviceNode = std::atoi(argv[1]); + if(argc >= 4){ + frameSize = cv::Size(std::atoi(argv[2]), std::atoi(argv[3])); + } + if(argc >=5) + fps = std::atoi(argv[4]); + } + + UnitreeCamera cam(deviceNode); ///< init camera by device node number + if(!cam.isOpened()) + exit(EXIT_FAILURE); + + cam.setRawFrameSize(frameSize); ///< set camera frame size + cam.setRawFrameRate(fps); ///< set camera frame rate + + std::cout << "Device Position Number:" << cam.getPosNumber() << std::endl; + + cam.startCapture(); ///< start camera capturing + + while(cam.isOpened()) + { + + cv::Mat frame; + std::chrono::microseconds t; + if(!cam.getRawFrame(frame, t)){ ///< get camera raw image + usleep(1000); + continue; + } + + cv::Mat left,right; + frame(cv::Rect(0, 0, frame.size().width/2, frame.size().height)).copyTo(right); + frame(cv::Rect(frame.size().width/2,0, frame.size().width/2, frame.size().height)).copyTo(left); + cv::hconcat(left, right, frame); + cv::imshow("UnitreeCamera_Left-Right", frame); + char key = cv::waitKey(10); + if(key == 27) // press ESC key + break; + } + + cam.stopCapture(); ///< stop camera capturing + + return 0; +} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getRectFrame.cc b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getRectFrame.cc new file mode 100644 index 0000000..b9000e4 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getRectFrame.cc @@ -0,0 +1,60 @@ +/** + * @file example_getRectFrame.cc + * @brief This file is part of UnitreeCameraSDK. + * @details This example that how to get depth frame + * @author ZhangChunyang + * @date 2021.07.31 + * @version 1.0.1 + * @copyright Copyright (c) 2020-2021, Hangzhou Yushu Technology Stock CO.LTD. All Rights Reserved. + */ + +#include +#include + +int main(int argc, char *argv[]){ + + int deviceNode = 0; ///< default 0 -> /dev/video0 + cv::Size frameSize(1856, 800); ///< default frame size 1856x800 + int fps = 30; ///< default camera fps: 30 + + if(argc >= 2){ + deviceNode = std::atoi(argv[1]); + if(argc >= 4){ + frameSize = cv::Size(std::atoi(argv[2]), std::atoi(argv[3])); + } + if(argc >=5) + fps = std::atoi(argv[4]); + } + + UnitreeCamera cam("stereo_camera_config.yaml"); ///< init camera by device node number + if(!cam.isOpened()) ///< get camera open state + exit(EXIT_FAILURE); + + cam.setRawFrameSize(frameSize); ///< set camera frame size + cam.setRawFrameRate(fps); ///< set camera camera fps + cam.setRectFrameSize(cv::Size(frameSize.width >> 2, frameSize.height >> 1)); ///< set camera rectify frame size + cam.startCapture(); ///< disable image h264 encoding and share memory sharing + + usleep(500000); + while(cam.isOpened()){ + cv::Mat left,right; + if(!cam.getRectStereoFrame(left,right)){ ///< get rectify left,right frame + usleep(1000); + continue; + } + + cv::Mat stereo; + // cv::flip(left,left, -1); + // cv::flip(right,right, -1); + cv::hconcat(left, right, stereo); + cv::flip(stereo,stereo, -1); + cv::imshow("Longlat_Rect", stereo); + char key = cv::waitKey(10); + if(key == 27) // press ESC key + break; + } + + cam.stopCapture(); ///< stop camera capturing + + return 0; +} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getimagetrans.cc b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getimagetrans.cc new file mode 100644 index 0000000..9d21905 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_getimagetrans.cc @@ -0,0 +1,62 @@ +/** + * @file example_getRectFrame.cc + * @brief This file is part of UnitreeCameraSDK. + * @details This example that how to Transmission picture + * @author SunMingzhe + * @date 2021.12.07 + * @version 1.1.0 + * @copyright Copyright (c) 2020-2021, Hangzhou Yushu Technology Stock CO.LTD. All Rights Reserved. + */ + +/* +接收端: +方法概述:采用定向udp方法接收图片,在应用其之前,需要先发送图片,例子:example_putImagetrans.cc +端口9201~9205分别对应前方,下巴,左,右,腹部 +本机ip需要是192.168.123.IpLastSegment,IpLastSegment被设置在发送端cofigure yaml- +*/ + +/* +listener +Introduction: This program uses directed UDP methods to get pictures,whitch requires sending pictures on other programs. for example:example_putImagetrans.cc +port:9201~9205 -> Front,chin,left,right,abdomen +local ip must be set to 192.168.123.IpLastSegment and IpLastSegment musb be set in cofigure yaml +*/ + +/* +local ip config +ip 192.168.123.IpLastSegment +netmask 255.255.255.0 +gateway 192.168.123.1 +*/ + + + +#include +#include +int main(int argc,char** argv) +{ + std::string IpLastSegment = "15"; + int cam = 1; + if (argc>=2) + cam = std::atoi(argv[1]); + std::string udpstrPrevData = "udpsrc address=192.168.123."+ IpLastSegment + " port="; + //端口:前方,下巴,左,右,腹部 + std::array udpPORT = std::array{9201, 9202, 9203, 9204, 9205}; + std::string udpstrBehindData = " ! application/x-rtp,media=video,encoding-name=H264 ! rtph264depay ! h264parse ! omxh264dec ! videoconvert ! appsink"; + std::string udpSendIntegratedPipe = udpstrPrevData + std::to_string(udpPORT[cam-1]) + udpstrBehindData; + std::cout<<"udpSendIntegratedPipe:"<> frame; + if(frame.empty()) + break; + imshow("video", frame); + cv::waitKey(20); + } + cap.release();//释放资源 + return 0; +} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_putImagetrans.cc b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_putImagetrans.cc new file mode 100644 index 0000000..71b5cdf --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_putImagetrans.cc @@ -0,0 +1,118 @@ +/** + * @file example_getRectFrame.cc + * @brief This file is part of UnitreeCameraSDK. + * @details This example that how to Transmission picture + * @author SunMingzhe + * @date 2021.12.07 + * @version 1.1.0 + * @copyright Copyright (c) 2020-2021, Hangzhou Yushu Technology Stock CO.LTD. All Rights Reserved. + */ + +#include +#include + + +/* +发送端: +方法概述:采用udp方法输出图片,传输方式已写入程序,由StereoCameraCommon::startCapture(true,false)中第一个参数控制定向udp传输,当其为true时打开udp264硬编码传输模式 +参数:配置文件中IpLastSegment是接收端ip,接收端地址必须是192.168.123.IpLastSegment。 + 配置文件中Transmode决定传输模式 + 配置文件中Transrate决定传输速率,限制了传输速率小于图片速率 + 端口9201~9205分别对应前方,下巴,左,右,腹部 + 启动自定义图传时需使用kill.sh文件关闭Unitree/autostart/02camerarosnode程序来解除相机占用,Unitree/autostart/04imageai来释放算力。 + (也可使用以下几条指令 + ps -A | grep point | awk '{print $1}' | xargs kill -9 + ps -aux|grep mqttControlNode|grep -v grep|head -n 1|awk '{print $2}'|xargs kill -9 + ps -aux|grep live_human_pose|grep -v grep|head -n 1|awk '{print $2}'|xargs kill -9 + ) +传输图片模式:由配置文件中Transmode决定,该值只可通过读取配置文件方式写入 +0:传输左目原始图片 +1:传输双目原始图片 +2:传输左目畸变校正后图片,视野范围角度可调60~140 +3:传输双目畸变校正后图片 +※※※注意,双目图的最后的左右目输出位置是反的。左目->右图,右目->左图 +4:不建议使用!!,Depthmode = 2时 可输出深度图和对应左目图片,不建议使用。 +*/ + +/* +sender: +Introduction: This program uses directed UDP methods to output pictures, transfer method written in programs. StereoCameraCommon::startCapture(true,false) the first parameter is a switch. +parameter:IpLastSegment is listener ip. listener ip:192.168.123.IpLastSegment + Transrate(config yaml) Transmission rate.it must lower than FrameRate + port:9201~9205 -> Front,chin,left,right,abdomen + If you start this file, you must bash "kill.sh" to turn off automatic startup program. "Unitree/autostart/02camerarosnode/kill.sh" and "Unitree/autostart/04imageai/kill.sh". + (You can also use the following instructions: + ps -A | grep point | awk '{print $1}' | xargs kill -9 + ps -aux|grep mqttControlNode|grep -v grep|head -n 1|awk '{print $2}'|xargs kill -9 + ps -aux|grep live_human_pose|grep -v grep|head -n 1|awk '{print $2}'|xargs kill -9 + ) +Transfer picture mode: Decided by Transmode in the configuration yaml, which only writes in programs by reading the configuration yaml. +0:ori left +1:ori stereo +2:rect left +3:rect stereo +※※※warning:The last left and right output position of the stereo picture is reversed left cam-> right picture right cam -> left picture +4:Not recommended for use!!,set Depthmode = 2 , rect left && depthimage +*/ + +/* +local ip config +ip 192.168.123.x +netmask 255.255.255.0 +gateway 192.168.123.1 +*/ +int main(int argc, char *argv[]) +{ + + UnitreeCamera cam("trans_rect_config.yaml"); ///< init camera by device node number + if(!cam.isOpened()) ///< get camera open state + exit(EXIT_FAILURE); + cam.startCapture(true,false); ///< disable share memory sharing and able image h264 encoding + + usleep(500000); + while(cam.isOpened()) + { + cv::Mat left,right,feim; + if(!cam.getRectStereoFrame(left,right)) + { + usleep(1000); + continue; + } + char key = cv::waitKey(10); + if(key == 27) // press ESC key + break; + } + + cam.stopCapture(); ///< stop camera capturing + + return 0; +} +/* +int main(int argc, char *argv[]) +{ + + UnitreeCamera cam("trans_rect_config.yaml"); ///< init camera by device node number + if(!cam.isOpened()) ///< get camera open state + exit(EXIT_FAILURE); + + cam.startCapture(true,false); ///< disable share memory sharing and able image h264 encoding + + usleep(500000); + while(cam.isOpened()) + { + cv::Mat frame; + std::chrono::microseconds t; + if(!cam.getRawFrame(frame, t)){ ///< get camera raw image + usleep(1000); + continue; + } + char key = cv::waitKey(10); + if(key == 27) // press ESC key + break; + } + + cam.stopCapture(); ///< stop camera capturing + + return 0; +} +*/ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_share.cc b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_share.cc new file mode 100644 index 0000000..339101c --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/example_share.cc @@ -0,0 +1,29 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + + UnitreeCamera cam("trans_rect_config.yaml"); ///< init camera by device node number + if(!cam.isOpened()) ///< get camera open state + exit(EXIT_FAILURE); + cam.startCapture(false, true); + + usleep(500000); + while(cam.isOpened()) + { + cv::Mat left,right,feim; + if(!cam.getRectStereoFrame(left,right)) + { + usleep(1000); + continue; + } + char key = cv::waitKey(10); + if(key == 27) // press ESC key + break; + } + + cam.stopCapture(); ///< stop camera capturing + + return 0; +} \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/glViewer/glwindow.hpp b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/glViewer/glwindow.hpp new file mode 100644 index 0000000..a4ee236 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/glViewer/glwindow.hpp @@ -0,0 +1,124 @@ +// Copyright (c) Ethan Eade, https://bitbucket.org/ethaneade/glwindow + +#pragma once + +#include + +namespace glwindow { + + namespace ButtonEvent { + enum Buttons { + LEFT=1, MIDDLE=2, RIGHT=4, WHEEL=8, + MODKEY_CTRL=16, MODKEY_SHIFT=32, + }; + }; + + namespace KeyCode { + enum Codes { + BACKSPACE=0x8, + TAB=0x9, + ENTER=0xD, + ESCAPE=0x1B, + DEL=0x7F, + + SHIFT=0xFF00, + CTRL, + ALT, + SUPER, + CAPSLOCK, + LEFT, + UP, + RIGHT, + DOWN, + }; + }; + + + class GLWindow; + + struct EventHandler + { + public: + virtual ~EventHandler() {} + virtual bool on_key_down(GLWindow& win, int key) { return false; } + virtual bool on_key_up(GLWindow& win, int key) { return false; } + virtual bool on_text(GLWindow& win, const char *text, int len) { return false; } + virtual bool on_button_down(GLWindow& win, int btn, int state, int x, int y) { return false; } + virtual bool on_button_up(GLWindow& win, int btn, int state, int x, int y) { return false; } + virtual bool on_mouse_move(GLWindow& win, int state, int x, int y) { return false; } + virtual bool on_mouse_wheel(GLWindow& win, int state, int x, int y, int dx, int dy) { return false; } + virtual bool on_resize(GLWindow& win, int x, int y, int w, int h) { return false; } + virtual bool on_close(GLWindow& win) { return false; } + }; + + // Dispatches to each handler in reverse order until one returns true + class EventDispatcher : public EventHandler + { + public: + const std::vector &handlers; + EventDispatcher(const std::vector &h) : + handlers(h) {} + bool on_key_down(GLWindow& win, int key); + bool on_key_up(GLWindow& win, int key); + bool on_text(GLWindow& win, const char *text, int len); + bool on_button_down(GLWindow& win, int btn, int state, int x, int y); + bool on_button_up(GLWindow& win, int btn, int state, int x, int y); + bool on_mouse_move(GLWindow& win, int state, int x, int y); + bool on_mouse_wheel(GLWindow& win, int state, int x, int y, int dx, int dy); + bool on_resize(GLWindow& win, int x, int y, int w, int h); + bool on_close(GLWindow& win); + }; + + class GLWindow + { + public: + GLWindow(int w=-1, int h=-1, const char *title=0); + virtual ~GLWindow(); + + int width() const; + int height() const; + bool visible() const; + bool alive() const; + + bool make_current(); + bool push_context(); + void pop_context(); + + struct ScopedContext { + GLWindow &win; + ScopedContext(GLWindow &w) : win(w) { + win.push_context(); + } + ~ScopedContext() { + win.pop_context(); + } + }; + + void swap_buffers(); + + void set_size(int w, int h); + void set_position(int x, int y); + + void set_title(const char* title); + + void add_handler(EventHandler* handler); + bool remove_handler(EventHandler *handler); + void handle_events(); + static void handle_all_events(); + + void destroy(); + + void draw_text(double x, double y, const char *text, int xywh[4]=0); + protected: + struct SystemState; + SystemState *sys_state; + + std::vector handlers; + GLWindow *prev_active; + + static GLWindow *active_context; + static std::vector all_windows; + static void add_window(GLWindow *win); + static bool remove_window(GLWindow *win); + }; +} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/glViewer/glwindow_x11.cpp b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/glViewer/glwindow_x11.cpp new file mode 100644 index 0000000..ec661f1 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/glViewer/glwindow_x11.cpp @@ -0,0 +1,518 @@ +// Copyright (c) Ethan Eade, https://bitbucket.org/ethaneade/glwindow + +#include "glwindow.hpp" + +#include +#include +#include +#include + +using namespace glwindow; + +std::vector GLWindow::all_windows; + +void GLWindow::add_window(GLWindow *win) +{ + all_windows.push_back(win); +} + +bool GLWindow::remove_window(GLWindow *win) +{ + for (size_t i=0; ihandle_events(); +} + +GLWindow *GLWindow::active_context = 0; + +bool GLWindow::push_context() +{ + prev_active = active_context; + return make_current(); +} + +void GLWindow::pop_context() +{ + if (active_context != this) + return; + + if (prev_active) { + prev_active->make_current(); + } else { + active_context = 0; + } +} + +void GLWindow::add_handler(EventHandler* handler) +{ + handlers.push_back(handler); +} + +bool GLWindow::remove_handler(EventHandler* handler) +{ + std::vector::reverse_iterator it; + for (it = handlers.rbegin(); it != handlers.rend(); ++it) { + if (*it == handler) { + handlers.erase(it.base()); + return true; + } + } + return false; +} + +bool EventDispatcher::on_key_down(GLWindow& win, int key) { + for (int i=handlers.size()-1; i>=0; --i) + if (handlers[i]->on_key_down(win, key)) + return true; + return false; +} +bool EventDispatcher::on_key_up(GLWindow& win, int key) { + for (int i=handlers.size()-1; i>=0; --i) + if (handlers[i]->on_key_up(win, key)) + return true; + return false; +} +bool EventDispatcher::on_text(GLWindow& win, const char *text, int len) { + for (int i=handlers.size()-1; i>=0; --i) + if (handlers[i]->on_text(win, text, len)) + return true; + return false; +} + +bool EventDispatcher::on_button_down(GLWindow& win, int btn, int state, int x, int y) { + for (int i=handlers.size()-1; i>=0; --i) + if (handlers[i]->on_button_down(win, btn, state, x, y)) + return true; + return false; +} + +bool EventDispatcher::on_button_up(GLWindow& win, int btn, int state, int x, int y) { + for (int i=handlers.size()-1; i>=0; --i) + if (handlers[i]->on_button_up(win, btn, state, x, y)) + return true; + return false; +} + +bool EventDispatcher::on_mouse_move(GLWindow& win, int state, int x, int y) { + for (int i=handlers.size()-1; i>=0; --i) + if (handlers[i]->on_mouse_move(win, state, x, y)) + return true; + return false; +} + +bool EventDispatcher::on_mouse_wheel(GLWindow& win, int state, int x, int y, int dx, int dy) { + for (int i=handlers.size()-1; i>=0; --i) + if (handlers[i]->on_mouse_wheel(win, state, x, y, dx, dy)) + return true; + return false; +} + +bool EventDispatcher::on_resize(GLWindow &win, int x, int y, int w, int h) { + for (int i=handlers.size()-1; i>=0; --i) + if (handlers[i]->on_resize(win, x, y, w, h)) + return true; + return false; +} + +bool EventDispatcher::on_close(GLWindow &win) { + for (int i=handlers.size()-1; i>=0; --i) + if (handlers[i]->on_close(win)) + return true; + return false; +} + +static XVisualInfo *makeVisualInfo(Display *display) +{ + int visualAttributes[] = { + GLX_RED_SIZE, 8, + GLX_GREEN_SIZE, 8, + GLX_BLUE_SIZE, 8, + GLX_DEPTH_SIZE, 16, + GLX_STENCIL_SIZE, 8, + GLX_RGBA, + GLX_DOUBLEBUFFER, + None + }; + XVisualInfo *vi = glXChooseVisual(display, DefaultScreen(display), visualAttributes); + return vi; +} + +static Window makeWindow(Display *display, XVisualInfo *vi, int width, int height) +{ + Window rootWindow = RootWindow(display, vi->screen); + + XSetWindowAttributes attributes; + attributes.border_pixel = 0; + attributes.colormap = XCreateColormap(display, rootWindow, vi->visual, AllocNone); + attributes.event_mask = (KeyPressMask | KeyReleaseMask | + ButtonPressMask | ButtonReleaseMask | + PointerMotionMask | + VisibilityChangeMask | + StructureNotifyMask | + ExposureMask); + + Window window = XCreateWindow(display, + rootWindow, + 0, 0, width, height, + 0, vi->depth, + InputOutput, + vi->visual, + CWBorderPixel | CWColormap | CWEventMask, + &attributes); + return window; +} + +struct GLWindow::SystemState +{ + Display* display; + Window window; + GLXContext context; + Atom delete_atom; + Cursor cursor; + + int width, height; + bool visible; + + SystemState() { + display = 0; + window = 0; + width = 0; + height = 0; + visible = false; + } + ~SystemState() { + if (!display) + return; + + if (context) { + destroy(); + + glXMakeCurrent(display, None, 0); + glXDestroyContext(display, context); + } + + XCloseDisplay(display); + } + + bool init(int w, int h, const char *title) + { + display = XOpenDisplay(0); + if (!display) + return false; + XVisualInfo *vi = makeVisualInfo(display); + if (!vi) + return false; + + context = glXCreateContext(display, vi, 0, True); + if (!context) + return false; + + width = w; + height = h; + window = makeWindow(display, vi, width, height); + if (!window) + return false; + + XStoreName(display, window, title); + + { + XClassHint classHint; + classHint.res_name = const_cast(title); + char classname[] = "glwindow"; + classHint.res_class = classname; + XSetClassHint(display, window, &classHint); + XMapWindow(display, window); + } + + XEvent ev; + do { + XNextEvent(display, &ev); + } while (ev.type != MapNotify); + + visible = true; + delete_atom = XInternAtom(display, "WM_DELETE_WINDOW", True); + XSetWMProtocols(display, window, &delete_atom, 1); + + cursor = XCreateFontCursor(display, ' '); + return true; + } + + void destroy() + { + if (window) { + XUnmapWindow(display, window); + XDestroyWindow(display, window); + window = 0; + } + } + + void swap_buffers() + { + if (window) { + glXSwapBuffers(display, window); + } + } + + void set_title(const char *title) + { + if (window) { + XStoreName(display, window, title); + } + } + + bool make_current() + { + if (!window) + return false; + glXMakeCurrent(display, window, context); + return true; + } +}; + +GLWindow::GLWindow(int w, int h, const char *title) +{ + sys_state = new SystemState(); + sys_state->init(w, h, title); + all_windows.push_back(this); +} + +GLWindow::~GLWindow() +{ + for (size_t i=0; iwidth; +} + +int GLWindow::height() const +{ + return sys_state->height; +} + +bool GLWindow::visible() const +{ + return sys_state->visible; +} + +bool GLWindow::alive() const +{ + return 0 != sys_state->window; +} + +bool GLWindow::make_current() +{ + if (!sys_state->make_current()) + return false; + + active_context = this; + return true; +} + +void GLWindow::swap_buffers() +{ + sys_state->swap_buffers(); +} + +void GLWindow::set_size(int w, int h) +{ + if (!alive()) + return; + + XWindowChanges c; + c.width = w; + c.height = h; + XConfigureWindow(sys_state->display, + sys_state->window, + CWWidth | CWHeight, + &c); +} + +void GLWindow::set_position(int x, int y) +{ + if (!alive()) + return; + + XWindowChanges c; + c.x = x; + c.y = y; + XConfigureWindow(sys_state->display, + sys_state->window, + CWX | CWY, + &c); +} + +void GLWindow::set_title(const char* title) +{ + if (!alive()) + return; + + sys_state->set_title(title); +} + +static int convert_button_state(unsigned int state) +{ + int s = 0; + if (state & Button1Mask) s |= ButtonEvent::LEFT; + if (state & Button2Mask) s |= ButtonEvent::MIDDLE; + if (state & Button3Mask) s |= ButtonEvent::RIGHT; + if (state & ControlMask) s |= ButtonEvent::MODKEY_CTRL; + if (state & ShiftMask) s |= ButtonEvent::MODKEY_SHIFT; + return s; +} + +static int convert_button(int button) +{ + switch (button) { + case Button1: return ButtonEvent::LEFT; + case Button2: return ButtonEvent::MIDDLE; + case Button3: return ButtonEvent::RIGHT; + default: return 0; + } +} + +static int convert_keycode(int key) +{ + switch (key) { + case XK_BackSpace: return KeyCode::BACKSPACE; + case XK_Tab: return KeyCode::TAB; + case XK_Return: return KeyCode::ENTER; + case XK_Shift_L: return KeyCode::SHIFT; + case XK_Shift_R: return KeyCode::SHIFT; + case XK_Control_L: return KeyCode::CTRL; + case XK_Control_R: return KeyCode::CTRL; + case XK_Alt_L: return KeyCode::ALT; + case XK_Alt_R: return KeyCode::ALT; + case XK_Super_L: return KeyCode::SUPER; + case XK_Super_R: return KeyCode::SUPER; + case XK_Caps_Lock: return KeyCode::CAPSLOCK; + case XK_Delete: return KeyCode::DEL; + case XK_Escape: return KeyCode::ESCAPE; + case XK_Left: return KeyCode::LEFT; + case XK_Up: return KeyCode::UP; + case XK_Right: return KeyCode::RIGHT; + case XK_Down: return KeyCode::DOWN; + } + return key; +} + +void GLWindow::handle_events() +{ + if (!alive()) + return; + + XEvent event; + KeySym key; + const int text_size = 64; + char text[text_size]; + int len; + EventDispatcher dispatcher(handlers); + + int btn, state; + + while (XPending(sys_state->display)) + { + XNextEvent(sys_state->display, &event); + //std::cerr << "event " << event.type << std::endl; + switch (event.type) { + case ButtonPress: + state = convert_button_state(event.xbutton.state); + if (event.xbutton.button == Button4) { + // MouseWheel down + dispatcher.on_mouse_wheel(*this, state, event.xbutton.x, event.xbutton.y, 0, 1); + } else if (event.xbutton.button == Button5) { + // MouseWheel up + dispatcher.on_mouse_wheel(*this, state, event.xbutton.x, event.xbutton.y, 0, -1); + } else { + btn = convert_button(event.xbutton.button); + dispatcher.on_button_down(*this, btn, state, event.xbutton.x, event.xbutton.y); + } + break; + + case ButtonRelease: + if (event.xbutton.button == Button4 || + event.xbutton.button == Button5) + break; + btn = convert_button(event.xbutton.button); + state = convert_button_state(event.xbutton.state); + dispatcher.on_button_up(*this, btn, state, event.xbutton.x, event.xbutton.y); + break; + + case MotionNotify: + state = convert_button_state(event.xbutton.state); + dispatcher.on_mouse_move(*this, state, event.xmotion.x, event.xmotion.y); + break; + + case KeyPress: + len = XLookupString(&event.xkey, text, text_size-1, &key, 0); + dispatcher.on_key_down(*this, convert_keycode(key)); + if (len > 0) { + text[len] = 0; + dispatcher.on_text(*this, text, len); + } + break; + + case KeyRelease: + XLookupString(&event.xkey, 0, 0, &key, 0); + dispatcher.on_key_up(*this, convert_keycode(key)); + break; + + case ConfigureNotify: + sys_state->width = event.xconfigure.width; + sys_state->height = event.xconfigure.height; + dispatcher.on_resize(*this, event.xconfigure.x, event.xconfigure.y, + sys_state->width, sys_state->height); + break; + + case VisibilityNotify: + if (event.xvisibility.state == VisibilityFullyObscured) + sys_state->visible = false; + else + sys_state->visible = true; + break; + + case DestroyNotify: + //std::cerr << "DestroyNotify" << std::endl; + //sys_state->window = 0; + break; + + case Expose: + //std::cerr << "Expose" << std::endl; + break; + + case ClientMessage: + if (event.xclient.data.l[0] == (int)sys_state->delete_atom) { + if (!dispatcher.on_close(*this)) + destroy(); + } + break; + + default: + break; + } + } +} + +void GLWindow::destroy() +{ + sys_state->destroy(); +} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/glViewer/scenewindow.cpp b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/glViewer/scenewindow.cpp new file mode 100644 index 0000000..2b6e854 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/glViewer/scenewindow.cpp @@ -0,0 +1,181 @@ +// Copyright (c) Ethan Eade, https://bitbucket.org/ethaneade/glwindow + +#include "scenewindow.hpp" +#include +#include +#include + +using namespace glwindow; + +SceneWindow::SceneWindow(int width, int height, const char *title) + : win(width, height, title) +{ + dragging = false; + drawing = false; + win.add_handler(this); +} + +SceneWindow::~SceneWindow() +{ +} + +void SceneWindow::update() +{ + win.handle_events(); +} + +SceneWindow::Viewpoint::Viewpoint() +{ + target[0] = -0.05; + target[1] = -0.75; + target[2] = 0.; + azimuth = 0.; + elevation = 0.0; + distance = 8.0; +} + +static void set_viewpoint(const SceneWindow::Viewpoint &vp) +{ + const double RAD_TO_DEG = 180.0 / 3.141592653589793; + glTranslated(0,0,vp.distance); + glRotated(vp.elevation * RAD_TO_DEG, 1, 0, 0); + glRotated(vp.azimuth * RAD_TO_DEG, 0, 1, 0); + glTranslated(-vp.target[0], -vp.target[1], -vp.target[2]); +} + +bool SceneWindow::start_draw() +{ + if (!win.alive() || drawing) + return false; + + drawing = true; + + win.push_context(); + glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT | GL_ENABLE_BIT); + + glViewport(0, 0, win.width(), win.height()); + double aspect = (double)win.width() / (double)std::max(win.height(),1); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + double znear = 0.01; + double zfar = 100.0; + double fy = 0.6 * znear; + double fx = aspect * fy; + glFrustum(-fx,fx,-fy,fy, znear, zfar); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glScaled(1, -1, -1); + + set_viewpoint(viewpoint); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LEQUAL); + glDisable(GL_LIGHTING); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + return true; +} + + +void SceneWindow::finish_draw() +{ + if (!drawing) + return; + + glPopAttrib(); + glFlush(); + win.swap_buffers(); + win.handle_events(); + + win.pop_context(); + drawing = false; +} + +bool SceneWindow::on_key_down(GLWindow& win, int key) +{ + return true; +} + +bool SceneWindow::on_button_down(GLWindow& win, int btn, int state, int x, int y) +{ + if (dragging) + return false; + + //std::cerr << "down " << btn << std::endl; + drag_btn = btn; + x0 = x; + y0 = y; + vp0 = viewpoint; + inv_w0 = 1.0 / win.width(); + inv_h0 = 1.0 / win.height(); + dragging = true; + + return true; +} + +bool SceneWindow::on_button_up(GLWindow& win, int btn, int state, int x, int y) +{ + //std::cerr << "up " << btn << std::endl; + dragging = false; + return true; +} + +bool SceneWindow::on_mouse_move(GLWindow& win, int state, int x, int y) +{ + int idx = x - x0; + int idy = y - y0; + double dx = idx * inv_w0; + double dy = idy * inv_w0; + + //std::cerr << dx << ", " << dy << std::endl; + + if (!dragging) + return false; + + if (drag_btn == ButtonEvent::LEFT) { + viewpoint.azimuth = vp0.azimuth - dx * 4.0; + viewpoint.elevation = vp0.elevation + dy * 4.0; + return true; + } else if (drag_btn == ButtonEvent::RIGHT) { + viewpoint.distance = ::exp(dy * 4.0) * vp0.distance; + return true; + } else if (drag_btn == ButtonEvent::MIDDLE) { + double sa = ::sin(-vp0.azimuth); + double ca = ::cos(-vp0.azimuth); + double se = ::sin(vp0.elevation); + double ce = ::cos(vp0.elevation); + + double tx = -idx * 0.003; + double ty = -idy * 0.003; + + double dtx = ca * tx - se*sa*ty; + double dty = ce * ty; + double dtz = -sa*tx - se*ca*ty; + double r = vp0.distance; + + viewpoint.target[0] = vp0.target[0] + r*dtx; + viewpoint.target[1] = vp0.target[1] + r*dty; + viewpoint.target[2] = vp0.target[2] + r*dtz; + return true; + } + + return false; +} + +bool SceneWindow::on_mouse_wheel(GLWindow& win, int state, int x, int y, int dx, int dy) +{ + viewpoint.distance *= ::exp(dy * -0.08); + return true; +} + +bool SceneWindow::on_resize(GLWindow& win, int x, int y, int w, int h) +{ + return false; +} + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/glViewer/scenewindow.hpp b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/glViewer/scenewindow.hpp new file mode 100644 index 0000000..6984f1c --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/examples/glViewer/scenewindow.hpp @@ -0,0 +1,49 @@ +// Copyright (c) Ethan Eade, https://bitbucket.org/ethaneade/glwindow + +#pragma once + +#include "glwindow.hpp" + +namespace glwindow +{ + + class SceneWindow : public EventHandler + { + public: + + struct Viewpoint + { + double target[3]; + double azimuth, elevation, distance; + Viewpoint(); + }; + + SceneWindow(int width, int height, const char *title); + virtual ~SceneWindow(); + + void update(); + + bool start_draw(); + void finish_draw(); + + GLWindow win; + Viewpoint viewpoint; + + protected: + bool on_key_down(GLWindow& win, int key); + bool on_button_down(GLWindow& win, int btn, int state, int x, int y); + bool on_button_up(GLWindow& win, int btn, int state, int x, int y); + bool on_mouse_move(GLWindow& win, int state, int x, int y); + bool on_mouse_wheel(GLWindow& win, int state, int x, int y, int dx, int dy); + bool on_resize(GLWindow& win, int x, int y, int w, int h); + + bool dragging; + int drag_btn; + int x0, y0; + double inv_w0, inv_h0; + Viewpoint vp0; + + bool drawing; + }; + +} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/include/StereoCameraCommon.hpp b/src/Robot/go1_guide/nano/UnitreecameraSDK/include/StereoCameraCommon.hpp new file mode 100644 index 0000000..e0efce2 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/include/StereoCameraCommon.hpp @@ -0,0 +1,659 @@ +/** + * @file StereoCameraCommon.hpp + * @brief This file is part of UnitreeCameraSDK, which declare stereo camera algorithm APIs. + * @details image capture, image rectification, disparity computation, depth image and point cloud generation + * @author SunMingzhe + * @date 2021.12.1 + * @version 1.1.0 + * @copyright Copyright (c)2020-2021, Hangzhou Yushu Technology Stock CO.LTD. All Rights Reserved. + * Use of this source code is governed by the MPL-2.0 license, see LICENSE. + * @ref ZhangChunyang v1.0.1 + */ +#ifndef __STEREO_CAMERA_COMMOM_HPP__ +#define __STEREO_CAMERA_COMMOM_HPP__ + +#include +#include +#include +#include +#include +#include +#include "SystemLog.hpp" + +/** + * @struct PCL + * @brief this struct is used for rendering point cloud by RGB color + * @details pts for point coordinates (x, y, z), clr for point color (b, g, r) + * @note point cloud simple type + * @attention point data element type float, color data element type uchar + */ +typedef struct PCL { + cv::Vec3f pts; ///< points coordinates (x, y, z) + cv::Vec3b clr; ///< points color (b, g, r) +}PCLType; +/** + * @class StereoCamera + * @brief this class provide the APIs of the algorithm and opration method of stereo cameras + * @details this class is the base of UnitreeCameraSDK, it includes many functions, such as + * camera frame capturing, image rectification, disparity computation, generating point cloud and etc. + */ +class StereoCamera +{ +private: + typedef struct TimeFrame{ + cv::Mat data1; ///< frame data + cv::Mat data2; ///< frame data + std::chrono::microseconds timeStamp; ///< time since 1970-01-01 00:00:00, unit is microseconds(10^-6 s) + }TimeFrameType; +private: + int m_radius = 0; + int m_algorithm = 0; + int m_logLevel = 1; + int m_deviceNode = 0; + int m_posNumber = 0; + int m_serialNumber = 0; + int m_threshold = 120; + float m_frameRate = 30.0; + int m_ipLastSegment = 15; + + bool m_shareMemSupport = false; + bool m_udpH264Support = false; + bool m_isOpened = false; + bool m_isCompute = false; + float maxdepth = 1; + float mindepth = 0.05; + + int m_transmode = -1; + double m_transrate = 0; + double m_hfov = 90; + double default_pfov = 90; + double default_fov = 222; + double default_llfov = 180; + int m_depthmode = 1; + + cv::VideoWriter gstWriter; + + cv::Size m_frameSize; + cv::Size m_rectSize; + + TimeFrameType m_stampFrame, m_dispFrame; + + cv::Mat m_leftXi,m_leftRotation,m_leftIntrinsic,m_leftDistortion; + cv::Mat m_rightXi,m_rightRotation,m_rightIntrinsic,m_rightDistortion; + cv::Mat m_translation; + + cv::Mat m_kfe, m_fmap[2][2], m_lmap[2][2], m_lagerFmap[2]; + + SystemLog *m_log = nullptr; + std::string m_logName = "StereoCamera"; + + std::mutex m_capLock, m_dispLock; + std::condition_variable m_capTrigger, m_dispTrigger; + + cv::VideoCapture *m_videoCap = nullptr; + + std::thread *m_capWorker = nullptr; + std::thread *m_dispWorker = nullptr; + + +public: + /** + * @fn StereoCamera + * @brief StereoCamera + * @details default constructor + * @param[in] None + * @param[out] None + * @return None + * @note initialize StereoCamera object by default settings + * @code + * StereoCamera *pCam = new StereoCamera(); // or StereoCamera cam; + * @endcode + */ + StereoCamera(void); + /** + * @fn StereoCamera + * @brief StereoCamera constructor + * @details use camera config file to init stereo camera + * @param[in] fileName camera config file, include file path, for example: ~/test/stereoConfig.yaml + * @param[out] None + * @return None + * @note initialize StereoCamera object by settings from configure file + * @code + * StereoCamera("path_to/config.yaml"); + * @endcode + */ + StereoCamera(std::string fileName); + /** + * @overload + * @fn StereoCamera + * @brief StereoCamera constructor overload + * @details use camera device node number to initialize stereo camera object + * @param[in] deviceNode camera device node, for example: /dev/video0, camera device node: 0 + * @param[out] None + * @return None + * @note initialize StereoCamera object by device node number + * @code + * StereoCamera(0); // for /dev/video0 + * @endcode + */ + StereoCamera(int deviceNode); + /** + * @fn ~StereoCamera() + * @brief StereoCamera destructor + * @details release all stereo camera resource + * @param[in] None + * @param[out] None + * @return None + * @note automatically called when StereoCamera object released + */ + virtual ~StereoCamera(); + +public: + /** + * @fn isOpened + * @brief get stereo camera running status + * @details detect camera is opened or closed + * @param[in] None + * @param[out] None + * @return true or false, if camera is opened return true, otherwise return false + * @note tell camera running status, it should be called after StereoCamera object initialization + * @code + * StereoCamera cam; + * if(cam.isOpened()) + * printf("Camera is opened!"); + * @endcode + */ + virtual bool isOpened(void); + /** + * @fn setLogLevel + * @brief set stereo camera ouput log level + * @details log level means that different kind of information will be output + * @param[in] level + * @param[out] None + * @return true or false, if assignment successfully return true, otherwise return false + * @note output information starts with "StereoCamera", it should be called after StereoCamera object initialization + * @code + * cam.setLogLevel(2); //debug level + * @endcode + */ + virtual bool setLogLevel(int level); + /** + * @fn setPosNumber + * @brief set stereo camera position number + * @details position number means that the number of camera location in robot body + * @param[in] posNumber + * @param[out] None + * @return true or false, if assignment successfully return true, otherwise return false + * @note face NO.1, chin NO.2, left NO.3, right NO.4, down NO.5 + * @code + * cam.setPosNumber(2); + * @endcode + */ + virtual bool setPosNumber(int posNumber); + /** + * @fn setSerialNumber + * @brief set stereo camera serial number + * @details serial number same as robot serial number + * @param[in] serialNumber + * @param[out] None + * @return true or false, if assignment successfully return true, otherwise return false + * @note + * @code + * cam.setSerialNumber(2); + * @endcode + */ + virtual bool setSerialNumber(int serialNumber); + /** + * @fn setRawFrameRate + * @brief set stereo camera FPS (Frames Per Seconds) + * @details for 1856X800 FPS:30, for 928x400 FPS:30 or 60 + * @param[in] frameRate + * @param[out] None + * @return true or false, if assignment successfully return true, otherwise return false + * @note + * @code + * cam.setRawFrameRate(30) + * @endcode + */ + virtual bool setRawFrameRate(int frameRate); + /** + * @fn setRawFrameSize + * @brief set stereo camera frame size + * @details There are two choise: 1856X800,928x400. + * @param[in] frameSize + * @param[out] None + * @return true or false, if assignment successfully return true, otherwise return false + * @attention if do not assign frameSize, default size is 1856x800 + * @note + * @code + * cam.setRawFrameSize(cv::Size(1856, 800)); + * @endcode + */ + virtual bool setRawFrameSize(cv::Size frameSize); + /** + * @fn setRectFrameSize + * @brief set rectification image size + * @details this size should keep ratio as camera raw image size, for example: raw single frame size: 928x800 + * rectification image size: 464x400 or 232x200 + * @param[in] frameSize + * @param[out] None + * @return true or false, if assignment successfully return true, otherwise return false + * @attention rectification image size must be smaller than camera raw single image size + * @note + * @code + * cam.setRawFrameSize(cv::Size(464, 400)); + * @endcode + */ + virtual bool setRectFrameSize(cv::Size frameSize); + /** + * @fn setCalibParams + * @brief set stereo camera calibration parameters + * @details calibration paramerters include: camera intrinsic matrix, + * camera distortion coefficient, xi(mei model), rotation matrix, translation vector, rectification image intrinsic matrix + * @param[in] paramsArray arrange Array element as follows: intrinsic,distortion,xi,rotation,translation,kfe + * @param[in] flag false: set left camera params, true: right camera params + * @param[out] None + * @return true or false, if assignment successfully return true, otherwise return false + * @attention the order of parameters should be correct + * @note + * @code + * std::vector leftParamsArray; + * cam.setCalibParams(leftParamsArray); + * @endcode + */ + virtual bool setCalibParams(std::vector paramsArray, bool flag = false); + /** + * @fn getLogLevel + * @brief get log system output level + * @details + * @param[in] None + * @param[out] None + * @return log level + * @note 1: output runtime information, 2: output runtime infomation and debug information + * @code + * int LogLevel = cam.getLogLevel(); + * @endcode + */ + virtual int getLogLevel(void) const; + /** + * @fn getDeviceNode + * @brief get camera device node + * @details + * @param[in] None + * @param[out] None + * @return device node number + * @note for example: /dev/video2, device node number is 2, the return value of function is 2. + * @code + * int nodeNumber = cam.getDeviceNode(); + * @endcode + */ + virtual int getDeviceNode(void) const; + /** + * @fn getPosNumber + * @brief get stereo camera device node + * @details + * @param[in] None + * @param[out] None + * @return positon number + * @note face NO.1, chin NO.2, left NO.3, right NO.4, down NO.5 + * @code + * int posNum = cam.getPosNumber(); + * @endcode + */ + virtual int getPosNumber(void) const; + /** + * @fn getSerialNumber + * @brief get stereo camera serial number + * @details this number is same as robot serial number + * @param[in] None + * @param[out] None + * @return robot serial number + * @note + * @code + * int seiralNumber = cam.getSerialNumber(); + * @endcode + */ + virtual int getSerialNumber(void) const; + /** + * @fn getRawFrameRate + * @brief get stereo camera capture frame rate + * @details + * @param[in] None + * @param[out] None + * @return current stereo camera fps. + * @code + * float fps = getRawFrameRate(); + * @endcode + */ + virtual float getRawFrameRate(void) const; + /** + * @fn getRawFrameSize + * @brief get stereo camera frame size + * @details + * @param[in] None + * @param[out] None + * @return frame size. + * @code + * cv::Size fSize = cam.getRawFrameSize(); + * @endcode + */ + virtual cv::Size getRawFrameSize(void) const; + /** + * @fn getRawFrame + * @brief get stereo camera raw frame + * @details + * @param[in] None + * @param[out] frame raw frame, include left and right image + * @param[out] timeStamp raw frame time stamp + * @return true or false, if frame is not empty, return true, otherwise return false. + * @note + * @code + * cv::Mat frame; + * std::chrono::microseconds timeStamp + * cam.getRawFrame(frame, timeStamp); + * @endcode + */ + virtual bool getRawFrame(cv::Mat &frame, std::chrono::microseconds &timeStamp); + /** + * @fn getStereoFrame + * @brief get stereo camera left and right image + * @details + * @param[in] None + * @param[out] left left image + * @param[out] right right image + * @param[out] timeStamp frame time stamp + * @return true or false, if left and right images are not empty, return true, otherwise return false. + * @attention This funtion must be called after startCapture(). + * @note + * @code + * cam.startCapture(); + * cv::Mat left, right; + * std::chrono::microseconds timeStamp; + * if(cam.getRawFrame(left,right, timeStamp)){ + * //do something + * } + * @endcode + */ + virtual bool getStereoFrame(cv::Mat &left, cv::Mat &right, std::chrono::microseconds &timeStamp); + /** + * @fn getDepthFrame + * @brief get stereo camera depth image + * @details + * @param[in] color true: depth is color image, false:depth is gray image + * @param[out] depth left image + * @param[out] timeStamp frame time stamp + * @return true or false, if depth image is not empty, return true, otherwise return false. + * @attention This funtion must be called after startCapture(). + * @note + * @code + * cam.startCapture(); + * cam.startStereoCompute(); + * cv::Mat depth; + * std::chrono::microseconds timeStamp; + * if(cam.getPointCloud(depth, true, timeStamp)){ + * //do something + * } + * @endcode + */ + virtual bool getDepthFrame(cv::Mat& depth, bool color, std::chrono::microseconds &timeStamp); + /** + * @fn getPointCloud + * @brief get a stereo camera point cloud frame + * @details A point cloud is a dataset of points in a coordinate frame. + * @param[in] None + * @param[out] pcl point cloud, which element has 3D coordinates information (x, y, z) + * @param[out] timeStamp poind cloud time stamp + * @return true or false, if point cloud size bigger than 0, return true, otherwise return false. + * @attention This funtion must be called after startCapture() and startStereoCompute() + * @note + * @code + * cam.startCapture(); + * cam.startStereoCompute(); + * std::vector pcl; + * std::chrono::microseconds timeStamp; + * if(cam.getPointCloud(pcl, timeStamp)){ + * //do something + * } + * @endcode + */ + + + virtual void getDepthFrame(cv::Mat& dispf, cv::Mat& depth); + + virtual bool getPointCloud(std::vector &pcl, std::chrono::microseconds &timeStamp); + /** + * @overload + * @fn getPointCloud + * @brief get a stereo camera point cloud frame + * @details A point cloud is a dataset of points in a coordinate frame. + * @param[in] None + * @param[out] pcl point cloud, which element has 3D coordinates information (x, y, z) and color information (B, G, R) + * @param[out] timeStamp poind cloud time stamp + * @return true or false, if point cloud size bigger than 0, return true, otherwise return false. + * @attention This funtion must be called after startCapture() and startStereoCompute() + * @note + * @code + * cam.startCapture(); + * cam.startStereoCompute(); + * std::vector pcl; + * std::chrono::microseconds timeStamp; + * if(cam.getPointCloud(pcl, timeStamp)){ + * //do something + * } + * @endcode + */ + virtual bool getPointCloud(std::vector& pcl, std::chrono::microseconds& timeStamp); + /** + * @fn getCalibParams + * @brief get stereo camera calibration paramerters + * @details calibration paramerters include: camera intrinsic matrix, + * camera distortion coefficient, xi(mei model), rotation matrix, translation vector, rectification image intrinsic matrix + * @param[in] flag default false, false: get left camera parameters, true: get right camera parameters. + * @param[out] paramsArray arrange Array element as follows: intrinsic,distortion,xi,rotation,translation,kfe + * @return true or false, if assignment successfully return true, otherwise return false + * @attention This funtion must be called after startCapture() + * @note + * @code + * cam.startCapture(); + * std::vector paramsArray; + * if(cam.getCalibParams(paramsArray)){ + * //do something + * } + * @endcode + */ + virtual bool getCalibParams(std::vector ¶msArray, bool flag = false); + /** + * @fn getRectStereoFrame + * @brief get stereo camera rectification image + * @details + * @param[in] None + * @param[out] left rect left image, use LONGLAT + * @param[out] right rect right image, use LONGLAT + * @param[out] feim rect left image, use PERSPECTIVE + * @return true or false, if left, right and feim are not empty return true, otherwise return false + * @attention This funtion must be called after startCapture() + * @note + * @code + * cam.startCapture(); + * left, right, feim; + * if(cam.getRectStereoFrame(left, right, feim)){ + * //do something + * } + * @endcode + */ + virtual bool getRectStereoFrame(cv::Mat &left, cv::Mat &right, cv::Mat &feim); + /** + * @fn getRectStereoFrame + * @brief get stereo camera rectification image + * @details + * @param[in] None + * @param[out] left rect left image, use PERSPECTIVE + * @param[out] right rect right image, use PERSPECTIVE + * @return true or false, if left, right are not empty return true, otherwise return false + * @attention This funtion must be called after startCapture() + * @note + * @code + * cam.startCapture(); + * left, right; + * if(cam.getRectStereoFrame(left, right)){ + * //do something + * } + * @endcode + */ + virtual bool getRectStereoFrame(cv::Mat &left, cv::Mat &right); + /** + * @overload + * @fn getRectStereoFrame + * @brief get stereo camera rectification image + * @details + * @param[in] None + * @param[out] left rect left image, use LONGLAT + * @param[out] right rect right image, use LONGLAT + * @param[out] feim rect left image, use PERSPECTIVE + * @param[out] timeStamp images timeStamp + * @return true or false, if left, right and feim are not empty return true, otherwise return false + * @attention This funtion must be called after startCapture() + * @note + * @code + * cam.startCapture(); + * cv::Mat left, right, feim; + * if(cam.getRectStereoFrame(left, right, feim)){ + * //do something + * } + * @endcode + */ + virtual bool getRectStereoFrame(cv::Mat &left, cv::Mat &right, cv::Mat &feim, std::chrono::microseconds &timeStamp); + /** + * @fn loadConfig + * @brief load stereo camera config parameters + * @details parameters include: LogLevel,Threshold,Algorithm,IpLastSegment, + * DeviceNode,FrameSize,RectifyFrameSize,FrameRate, etc. + * @param[in] fileName config name: include config path, for example: "path_to/config.yaml" + * @param[out] None + * @return true or false, if load config file successfully return true, otherwise return false + * @attention This funtion must be called before startCapture() and after init the camera object. + * @note + * @code + * cam.loadConfig("path_to/config.yaml"); + * cam.startCapture(); + * @endcode + */ + virtual bool loadConfig(std::string fileName); + /** + * @fn loadCalibParams + * @brief load stereo camera calibration params + * @details calibration paramerters include: camera intrinsic matrix, + * camera distortion coefficient, xi(mei model), rotation matrix, translation vector, rectification image intrinsic matrix, etc. + * @param[in] fileName calibration file name: include file path, for example: "path_to/calib.yaml" + * @param[out] None + * @return true or false, if load file successfully return true, otherwise return false + * @attention This funtion must be called before startCapture() and after loadConfig("xxx"); + * @note + * @code + * cam.loadConfig("path_to/config.yaml"); + * cam.loadCalibParams("path_to/calib.yaml"); + * cam.startCapture(); + * @endcode + */ + virtual bool loadCalibParams(std::string fileName); + /** + * @fn saveConfig + * @brief save stereo camera settings to config file + * @details + * @param[in] fileName default name: stereo_camera_config.yaml, + * output config file: include file path, for example: "path_to/config.yaml" + * @param[out] None + * @return true or false, if save file successfully return true, otherwise return false + * @code + * cam.saveConfig("stereo_camera_config.yaml"); + * @endcode + */ + virtual bool saveConfig(std::string fileName = "stereo_camera_config.yaml"); + /** + * @fn saveCalibParams + * @brief save stereo camera calibration parameters to file + * @details + * @param[in] fileName default name: stereo_camera_calibparams.yaml, + * output file: include file path, for example: "path_to/calib.yaml" + * @param[out] None + * @return true or false, if save file successfully return true, otherwise return false + * @code + * cam.saveConfig("stereo_camera_config.yaml"); + * @endcode + */ + virtual bool saveCalibParams(std::string fileName = "stereo_camera_calibparams.yaml"); + /** + * @fn startCapture + * @brief start stereo camera capture thread + * @details + * @param[in] udpFlag default false, true: enable using H264 encode camera frame and send it by gstream udp command + * @param[in] shmFlag default false, true: enable using share memory to share camera frame + * @param[out] None + * @return true or false, if create capture thread successfully return true, otherwise return false + * @note + * gstreamer send command: "appsrc ! videoconvert ! omxh264enc ! video/x-h264, stream-format=byte-stream ! rtph264pay ! udpsink host=192.168.123.SEG port=hostPort". + * SEG is last segment of your recieve board IP, its range from 2~254,for example: 13, host=192.168.123.13. + * hostPort is defined by the result of adding camera position number and 9000, for example: camera positon number is 5, port=9005. + * share memory key number is defined by the result of adding camera position number and 9000. + * This function must be called after camera config or settings finished. + * @code + * cam.startCapture(true, false); // support h264 encode frame and send it by udp + * @endcode + */ + virtual bool startCapture(bool udpFlag = false, bool shmFlag = false); + /** + * @fn startStereoCompute + * @brief start stereo camera computing disparity thread + * @details + * @param[in] None + * @param[out] None + * @return true or false, if create thread successfully return true, otherwise return false + * @attention This function must be called after startCapture(); + * @note + * @code + * cam.startCapture(); + * cam.startStereoCompute(); + * @endcode + */ + virtual bool startStereoCompute(void); + /** + * @fn stopStereoCompute + * @brief stop stereo camera computing disparity thread + * @details + * @param[in] None + * @param[out] None + * @return true or false, if stop thread successfully return true, otherwise return false + * @attention This function must be called after startStereoCompute() + * @note + * @code + * cam.startStereoCompute(); + * cam.stopStereoCompute(); + * @endcode + */ + virtual bool stopStereoCompute(void); + /** + * @fn stopCapture + * @brief stop stereo camera capture thread + * @details + * @param[in] None + * @param[out] None + * @return true or false, if stop thread successfully return true, otherwise return false + * @attention This function must be called after startCapture(). + * @note + * @code + * cam.startCapture(); + * cam.startStereoCompute(); + * cam.stopStereoCompute(); + * cam.stopCapture(); + * @endcode + */ + virtual bool stopCapture(void); + + + +}; + + + + +#endif //__STEREO_CAMERA_COMMOM_HPP__ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/include/SystemLog.hpp b/src/Robot/go1_guide/nano/UnitreecameraSDK/include/SystemLog.hpp new file mode 100644 index 0000000..3d3492e --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/include/SystemLog.hpp @@ -0,0 +1,168 @@ +/** + * @file SystemLog.hpp + * @brief This file is part of UnitreeCameraSDK, which declare the APIs of log system. + * @details The log system is used for unified management of the output information of the special system. + * @author ZhangChunyang + * @date 2021.07.31 + * @version 1.0.1 + * @copyright Copyright (c)2020-2021, Hangzhou Yushu Technology Stock CO.LTD. All Rights Reserved. + */ + +#ifndef __SYSTEMLOG_HPP__ +#define __SYSTEMLOG_HPP__ + +#include +#include +#include + +class SystemLog +{ +private: + int m_logLevel; + bool m_isSave; + std::string m_logName; + std::string m_logFileName; + +public: + /** + * @fn SystemLog + * @brief SystemLog constructor + * @details + * @param[in] logName the name of special system + * @param[out] None + * @return None + * @note + * @attention output information starts with "logName" + * @code + * @endcode + */ + SystemLog(std::string logName); + +public: + /** + * @fn setLogLevel + * @brief set system ouput log level + * @details log level means that different kind of information will be output + * @param[in] level 1 running information output, 2 running and debug infomation output + * @param[out] None + * @return None + * @note + * @attention + * @code + * @endcode + */ + void setLogLevel(int level); + /** + * @fn runTimeError + * @brief output running error infomation, color: red + * @details output format [logName][ERROR] info + * @param[in] format + * @param[in] ... + * @param[out] None + * @return None + * @note + * @attention use it like printf() + * @code + * @endcode + */ + void runTimeError(const char *format,...); + /** + * @fn runTimeInfo + * @brief output running infomation, color: green + * @details output format [logName][INFO] info + * @param[in] format + * @param[in] ... + * @param[out] None + * @return None + * @note + * @attention use it like printf() + * @code + * @endcode + */ + void runTimeInfo(const char *format,...); + /** + * @fn runTimeWarning + * @brief output running warning infomation, color: yellow + * @details output format [logName][WARNING] info + * @param[in] format + * @param[in] ... + * @param[out] None + * @return None + * @note + * @attention use it like printf() + * @code + * @endcode + */ + void runTimeWarning(const char *format,...); + /** + * @fn debugTimeWarning + * @brief output debug warning infomation, color: cyan + * @details output format [logName][DEBUG_WARNING] info + * @param[in] format + * @param[in] ... + * @param[out] None + * @return None + * @note + * @attention use it like printf() + * @code + * @endcode + */ + void debugTimeWarning(const char *format,...); + /** + * @fn debugTimeInfo + * @brief output debug infomation, color: white + * @details output format [logName][DEBUG_INFO] info + * @param[in] format + * @param[in] ... + * @param[out] None + * @return None + * @note + * @attention use it like printf() + * @code + * @endcode + */ + void debugTimeInfo(const char *format,...); + /** + * @fn debugTimeError + * @brief output debug error infomation, color: magenta + * @details output format [logName][DEBUG_ERROR] info + * @param[in] format + * @param[in] ... + * @param[out] None + * @return None + * @note + * @attention use it like printf() + * @code + * @endcode + */ + void debugTimeError(const char *format,...); + /** + * @fn saveLog + * @brief save system log to a file, default file name: Running.txt + * @details + * @param[in] none + * @param[out] None + * @return None + * @note + * @attention not implement at this version + * @code + * @endcode + */ + void saveLog(void); + /** + * @fn saveLogToFile + * @brief save system log to a designated file + * @details + * @param[in] fileName + * @param[out] None + * @return None + * @note + * @attention not implement at this version + * @code + * @endcode + */ + void saveLogToFile(std::string fileName) ; +}; + + +#endif //__SYSTEMLOG_HPP__ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/include/UnitreeCameraSDK.hpp b/src/Robot/go1_guide/nano/UnitreecameraSDK/include/UnitreeCameraSDK.hpp new file mode 100644 index 0000000..0d53fc7 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/include/UnitreeCameraSDK.hpp @@ -0,0 +1,158 @@ + +/** + * @file UnitreeCameraSDK.hpp + * @brief This file is part of UnitreeCameraSDK, which declare unitree camera APIs. + * @details class UnitreeCamera inherits the APIs of class StereoCamera + * image capture, image rectification, disparity computation, depth image and point cloud generation + * update camera firmware, flash camera parameters to camera + * @author ZhangChunyang + * @date 2021.07.31 + * @version 1.0.1 + * @copyright Copyright (c) 2020-2021, Hangzhou Yushu Technology Stock CO.LTD. All Rights Reserved. + */ + +#ifndef __UNITREE_CAMERA_SDK_HPP__ +#define __UNITREE_CAMERA_SDK_HPP__ + +#include "StereoCameraCommon.hpp" + +class UnitreeCamera : public StereoCamera +{ +private: + std::string m_logName = "UnitreeCameraSDK"; + SystemLog *m_log = nullptr; + +public: + /** + * @fn UnitreeCamera + * @brief UnitreeCamera init unitree stereo camera object for default parameters + * @details default constructor + * @param[in] None + * @param[out] None + * @return None + * @note + * @code + * UnitreeCamera(); + * @endcode + */ + UnitreeCamera(); + /** + * @overload + * @fn UnitreeCamera + * @brief UnitreeCamera constructor overload + * @details use camera config file to init unitree stereo camera + * @param[in] fileName camera config file, include file path, for example: ~/test/stereoConfig.yaml + * @param[out] None + * @return None + * @note + * @code + * UnitreeCamera("path_to/config.yaml"); + * @endcode + */ + UnitreeCamera(std::string fileName); + /** + * @overload + * @fn UnitreeCamera + * @brief UnitreeCamera constructor overload + * @details use camera device node number to init unitree stereo camera + * @param[in] deviceNode camera device node, for example: /dev/video0, camera device node: 0 + * @param[out] None + * @return None + * @note + * @code + * StereoCamera(0); // for /dev/video0 + * @endcode + */ + UnitreeCamera(int deviceNode); + /** + * @fn ~UnitreeCamera + * @brief UnitreeCamera destructor + * @details release all unitree stereo camera resource + * @param[in] None + * @param[out] None + * @return None + * @note automatically called when UnitreeCamera object released + */ + ~UnitreeCamera(void); + +public: + /** + * @fn updateCalibParams2Flash + * @brief update camera calibrate parameters + * @details + * @param[in] fileName calibration parameters file + * @param[out] None + * @return None + * @note + * @code + * @endcode + */ + bool updateCalibParams2Flash(std::string fileName); + /** + * @fn checkFirmwareVersion + * @brief check camera's firmware version + * @details + * @param[in] version firmware version + * @param[out] None + * @return None + * @note + * @code + * @endcode + */ + bool checkFirmwareVersion(std::string &version); + /** + * @fn updateFirmware + * @brief update camera's firmware + * @details + * @param[in] fileName firmware file + * @param[out] None + * @return None + * @note + * @code + * @endcode + */ + bool updateFirmware(std::string fileName); + +private: + /** + * @fn loadInternalCalibParams + * @brief + * @details + * @param[in] None + * @param[out] None + * @return None + * @note + * @code + * @endcode + */ + bool loadInternalCalibParams(void); +}; + +/** + * @fn getRotationMatrix + * @brief Obtain transformation matrix that can express the rotation of an Euler angle of the coordinate system around a coordinate axis + * @details + * @param[in] axis frame axis name, default 'x' + * @param[in] theta Euler angle + * @param[out] None + * @return 3x3 rotation matrix + * @note + * @code + * @endcode + */ +cv::Mat getRotationMatrix(int axis = 'x', float theta = 0.0); +/** + * @fn getTranslationMatrix + * @brief transformation matrix that can express the moving coordinate system relative to the base coordinate system + * @details + * @param[in] axis frame axis name, default 'x' + * @param[in] theta Euler angle + * @param[out] None + * @return 3x3 rotation matrix + * @note + * @code + * @endcode + */ +cv::Mat getTranslationMatrix(int axis = 'x', float theta = 0.0, cv::Mat vec = cv::Mat()); + +#endif diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/amd64/libsystemlog.a b/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/amd64/libsystemlog.a new file mode 100644 index 0000000..dce42af Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/amd64/libsystemlog.a differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/amd64/libtstc_V4L2_xu_camera.a b/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/amd64/libtstc_V4L2_xu_camera.a new file mode 100644 index 0000000..5318d4d Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/amd64/libtstc_V4L2_xu_camera.a differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/amd64/libunitree_camera.a b/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/amd64/libunitree_camera.a new file mode 100644 index 0000000..db869fb Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/amd64/libunitree_camera.a differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/arm64/libsystemlog.a b/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/arm64/libsystemlog.a new file mode 100644 index 0000000..43b6858 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/arm64/libsystemlog.a differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/arm64/libtstc_V4L2_xu_camera.a b/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/arm64/libtstc_V4L2_xu_camera.a new file mode 100644 index 0000000..49dcc74 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/arm64/libtstc_V4L2_xu_camera.a differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/arm64/libunitree_camera.a b/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/arm64/libunitree_camera.a new file mode 100644 index 0000000..2eb5c19 Binary files /dev/null and b/src/Robot/go1_guide/nano/UnitreecameraSDK/lib/arm64/libunitree_camera.a differ diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/src/CMakeLists.txt b/src/Robot/go1_guide/nano/UnitreecameraSDK/src/CMakeLists.txt new file mode 100644 index 0000000..0e54c8a --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/src/CMakeLists.txt @@ -0,0 +1,40 @@ + +add_executable(putimagetrans ./putimagetrans.cc) +target_link_libraries(putimagetrans ${SDKLIBS}) + +add_executable(getimagetrans ./getimagetrans.cc) +target_link_libraries(getimagetrans ${SDKLIBS}) + + +find_package(OpenGL REQUIRED) +if(OpenGL_FOUND) + include_directories(${OPENGL_INCLUDE_DIR}) + message(STATUS ${OPENGL_INCLUDE_DIR}) + message(STATUS ${OPENGL_LIBRARIES}) +else() + message(WARNING "OpenGL Library Not Found") +endif() + +find_package(GLUT REQUIRED) +if(GLUT_FOUND) + include_directories(${GLUT_INCLUDE_DIR}) + message(STATUS ${GLUT_INCLUDE_DIR}) + message(STATUS ${GLUT_LIBRARY}) +else() + message(WARNING "GLUT Library Not Found") +endif() + +find_package(X11 REQUIRED) +if(X11_FOUND) + include_directories(${X11_INCLUDE_DIR}) + message(${X11_INCLUDE_DIR}) + message(${X11_LIBRARIES}) +else() + message(WARNING "X11 Library Not Found") +endif() + + + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread") + + diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/src/getimagetrans.cc b/src/Robot/go1_guide/nano/UnitreecameraSDK/src/getimagetrans.cc new file mode 100644 index 0000000..9270f40 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/src/getimagetrans.cc @@ -0,0 +1,47 @@ +/** + * @file example_getRectFrame.cc + * @brief This file is part of UnitreeCameraSDK. + * @details This example that how to Transmission picture + * @author SunMingzhe + * @date 2021.12.07 + * @version 1.1.0 + * @copyright Copyright (c) 2020-2021, Hangzhou Yushu Technology Stock CO.LTD. All Rights Reserved. + */ + +/* +接收端: +方法概述:采用定向udp方法接收图片,在应用其之前,需要先发送图片,例子:example_putImagetrans.cc +端口9201~9205分别对应前方,下巴,左,右,腹部 +本机ip需要是192.168.123.IpLastSegment,IpLastSegment被设置在发送端cofigure yaml- +*/ + + +#include +#include +int main(int argc,char** argv) +{ + std::string IpLastSegment = "15"; + int cam = 1; + if (argc>=2) + cam = std::atoi(argv[1]); + std::string udpstrPrevData = "udpsrc address=192.168.123."+ IpLastSegment + " port="; + //端口:前方,下巴,左,右,腹部 + std::array udpPORT = std::array{9201, 9202, 9203, 9204, 9205}; + std::string udpstrBehindData = " ! application/x-rtp,media=video,encoding-name=H264 ! rtph264depay ! h264parse ! omxh264dec ! videoconvert ! appsink"; + std::string udpSendIntegratedPipe = udpstrPrevData + std::to_string(udpPORT[cam-1]) + udpstrBehindData; + std::cout<<"udpSendIntegratedPipe:"<> frame; + if(frame.empty()) + break; + imshow("video", frame); + cv::waitKey(20); + } + cap.release();//释放资源 + return 0; +} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/src/putimagetrans.cc b/src/Robot/go1_guide/nano/UnitreecameraSDK/src/putimagetrans.cc new file mode 100644 index 0000000..9257ac4 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/src/putimagetrans.cc @@ -0,0 +1,108 @@ +/** + * @file example_getRectFrame.cc + * @brief This file is part of UnitreeCameraSDK. + * @details This example that how to Transmission picture + * @author SunMingzhe + * @date 2021.12.07 + * @version 1.1.0 + * @copyright Copyright (c) 2020-2021, Hangzhou Yushu Technology Stock CO.LTD. All Rights Reserved. + */ + + +/* +发送端: +方法概述:采用udp方法输出图片,传输方式已写入程序,由StereoCameraCommon::startCapture(true,false)中第一个参数控制定向udp传输,当其为true时打开udp264硬编码传输模式 +参数:配置文件中IpLastSegment是接收端ip,接收端地址必须是192.168.123.IpLastSegment。 + 配置文件中Transmode决定传输模式 + 配置文件中Transrate决定传输速率,限制了传输速率小于图片速率 + 端口9201~9205分别对应前方,下巴,左,右,腹部 + 启动自定义图传时需使用kill.sh文件关闭Unitree/autostart/02camerarosnode程序来解除相机占用,Unitree/autostart/04imageai来释放算力。 + (也可使用以下几条指令 + ps -A | grep point | awk '{print $1}' | xargs kill -9 + ps -aux|grep mqttControlNode|grep -v grep|head -n 1|awk '{print $2}'|xargs kill -9 + ps -aux|grep live_human_pose|grep -v grep|head -n 1|awk '{print $2}'|xargs kill -9 + ) +传输图片模式:由配置文件中Transmode决定,该值只可通过读取配置文件方式写入 +0:传输左目原始图片 +1:传输双目原始图片 +2:传输左目畸变校正后图片,视野范围角度可调60~140 +3:传输双目畸变校正后图片 +※※※注意,双目图的最后的左右目输出位置是反的。左目->右图,右目->左图 +4:不建议使用!!,Depthmode = 2时 可输出深度图和对应左目图片,不建议使用。 +*/ + + +#include +#include + +int main(int argc, char *argv[]) +{ + int cam_num = 1; + if (argc>=2) + cam_num = std::atoi(argv[1]); + + // int cam_num = 1; // 1,2 the number of cameras used + // nano_id dev_id port_id 位置 + // 13 0 9202 下巴 + // 13 1 9201 前方 + // 14 0 9203 左方 + // 14 1 9204 右方 + // 15 0 9205 腹部(默认) + int cam_id = 0; // the id of the camera used if cam_num is 1 + if (cam_num == 1){ + UnitreeCamera cam("trans_rect_config_"+ std::to_string(cam_id) +".yaml"); ///< init camera by device node number + if(!cam.isOpened()) ///< get camera open state + exit(EXIT_FAILURE); + cam.startCapture(true,false); ///< disable share memory sharing and able image h264 encoding + + usleep(500000); + while(cam.isOpened()) + { + cv::Mat left,right,feim; + if(!cam.getRectStereoFrame(left,right)) + { + + usleep(1000); + continue; + } + char key = cv::waitKey(1); + if(key == 27) // press ESC key + break; + } + + cam.stopCapture(); ///< stop camera capturing + } + else { + UnitreeCamera cam1("trans_rect_config_0.yaml"); + UnitreeCamera cam2("trans_rect_config_1.yaml"); + if(!cam1.isOpened()) + exit(EXIT_FAILURE); + if(!cam2.isOpened()) + exit(EXIT_FAILURE); + cam1.startCapture(true,false); + cam2.startCapture(true,false); + + usleep(500000); + while(cam1.isOpened()) + { + cv::Mat left1,right1,feim1,left2,right2,feim2; + if(!cam1.getRectStereoFrame(left1,right1)) + { + usleep(500); + continue; + } + if(!cam2.getRectStereoFrame(left2,right2)) + { + usleep(500); + continue; + } + char key = cv::waitKey(1); + if(key == 27) // press ESC key + break; + } + + + } + + return 0; +} diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/stereo_camera_config.yaml b/src/Robot/go1_guide/nano/UnitreecameraSDK/stereo_camera_config.yaml new file mode 100644 index 0000000..b5c70d7 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/stereo_camera_config.yaml @@ -0,0 +1,78 @@ +%YAML:1.0 +--- +# unimportant +LogLevel: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 1. ] +# unimportant +Threshold: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 190. ] +# unimportant. It is recommended not to change +Algorithm: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [1. ] +#UDP address for image transfer 192.168.123.IpLastSegment +IpLastSegment: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 15. ] +#DeviceNode +DeviceNode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 0. ] +#fov (perspective 60~140) +hFov: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 90. ] +#image size ([1856.,800.] or [928.,400.]) +FrameSize: !!opencv-matrix + rows: 1 + cols: 2 + dt: d + data: [928.,400.] +# [232.,200.] [464.,400.] [928.,800.] +RectifyFrameSize: !!opencv-matrix + rows: 1 + cols: 2 + dt: d + data: [464.,400.] +#FrameRate +FrameRate: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 3e+01 ] +#0 ori img - right 1 ori img - stereo 2 rect img - right 3 rect img - stereo -1 不传图 +Transmode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ -1. ] +#Transmission rate +Transrate: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 3e+01 ] +# unimportant +Depthmode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 1. ] +Reserved: !!opencv-matrix + rows: 3 + cols: 3 + dt: d \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/trans_rect_config.yaml b/src/Robot/go1_guide/nano/UnitreecameraSDK/trans_rect_config.yaml new file mode 100644 index 0000000..db182b8 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/trans_rect_config.yaml @@ -0,0 +1,79 @@ +%YAML:1.0 +--- +# [pls dont change] The log level +LogLevel: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 1. ] +# [pls dont change] The threshold is applied to detecd point cloud +Threshold: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 190. ] +#[pls dont change] it's a switch for a algorithm in the process of computing stereo disparity +Algorithm: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [1. ] +#UDP address for image transfer 192.168.123.IpLastSegment +IpLastSegment: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 15. ] +#DeviceNode +DeviceNode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 0. ] +#fov (perspective 60~140) +hFov: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 90. ] +#image size ([1856,800] or [928,400]) +FrameSize: !!opencv-matrix + rows: 1 + cols: 2 + dt: d + data: [ 1856., 800. ] +#rectified frame size +RectifyFrameSize: !!opencv-matrix + rows: 1 + cols: 2 + dt: d + data: [ 928., 800. ] +#FrameRate, it gives the limitation for transmission rate(FPS) +FrameRate: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 3e+01 ] +#0 ori img - right 1 ori img - stereo 2 rect img - right 3 rect img - stereo -1 不传图 +Transmode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 0. ] +#Transmission rate(FPS) in the UDP transmitting process. <= FrameRate +Transrate: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 3e+01 ] +# [pls dont change] It's a switch in distortion process of fisheye camera. 1 represents “Longitude and latitude expansion of fisheye camera”; 2 represnets "Perspective distortion correction". +Depthmode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 1. ] + # empty reserved IO +Reserved: !!opencv-matrix + rows: 3 + cols: 3 + dt: d diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/trans_rect_config_0.yaml b/src/Robot/go1_guide/nano/UnitreecameraSDK/trans_rect_config_0.yaml new file mode 100644 index 0000000..e0faf07 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/trans_rect_config_0.yaml @@ -0,0 +1,78 @@ +%YAML:1.0 +--- +# unimportant +LogLevel: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 1. ] +# unimportant +Threshold: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 190. ] +# unimportant. It is recommended not to change +Algorithm: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [1. ] +#UDP address for image transfer 192.168.123.IpLastSegment +IpLastSegment: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 15. ] +#DeviceNode +DeviceNode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 0. ] +#fov (perspective 60~140) +hFov: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 120. ] +#image size ([1856,800] or [928,400]) +FrameSize: !!opencv-matrix + rows: 1 + cols: 2 + dt: d + data: [ 928., 400. ] +# +RectifyFrameSize: !!opencv-matrix + rows: 1 + cols: 2 + dt: d + data: [ 928., 800. ] +#FrameRate +FrameRate: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 3e+01 ] +#0 ori img - right 1 ori img - stereo 2 rect img - right 3 rect img - stereo -1 不传图 +Transmode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 2. ] +#Transmission rate +Transrate: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 3e+01 ] +# unimportant +Depthmode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 1. ] +Reserved: !!opencv-matrix + rows: 3 + cols: 3 + dt: d \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/trans_rect_config_1.yaml b/src/Robot/go1_guide/nano/UnitreecameraSDK/trans_rect_config_1.yaml new file mode 100644 index 0000000..49641f1 --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/trans_rect_config_1.yaml @@ -0,0 +1,78 @@ +%YAML:1.0 +--- +# unimportant +LogLevel: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 1. ] +# unimportant +Threshold: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 190. ] +# unimportant. It is recommended not to change +Algorithm: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [1. ] +#UDP address for image transfer 192.168.123.IpLastSegment +IpLastSegment: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 15. ] +#DeviceNode +DeviceNode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 1. ] +#fov (perspective 60~140) +hFov: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 90. ] +#image size ([1856,800] or [928,400]) +FrameSize: !!opencv-matrix + rows: 1 + cols: 2 + dt: d + data: [ 1856., 800. ] +# +RectifyFrameSize: !!opencv-matrix + rows: 1 + cols: 2 + dt: d + data: [ 928., 800. ] +#FrameRate +FrameRate: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 2e+01 ] +#0 ori img - right 1 ori img - stereo 2 rect img - right 3 rect img - stereo -1 不传图 +Transmode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 2. ] +#Transmission rate +Transrate: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 2e+01 ] +# unimportant +Depthmode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 1. ] +Reserved: !!opencv-matrix + rows: 3 + cols: 3 + dt: d \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/UnitreecameraSDK/version.txt b/src/Robot/go1_guide/nano/UnitreecameraSDK/version.txt new file mode 100644 index 0000000..992977a --- /dev/null +++ b/src/Robot/go1_guide/nano/UnitreecameraSDK/version.txt @@ -0,0 +1 @@ +v1.1.0 \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/kill.sh b/src/Robot/go1_guide/nano/kill.sh new file mode 100644 index 0000000..4bccc18 --- /dev/null +++ b/src/Robot/go1_guide/nano/kill.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +ps -aux | grep point_cloud_node | awk '{print $2}' | xargs kill -9 +ps -aux | grep mqttControlNode | awk '{print $2}' | xargs kill -9 +ps -aux | grep live_human_pose | awk '{print $2}' | xargs kill -9 +ps -aux | grep example_point | awk '{print $2}' | xargs kill -9 diff --git a/src/Robot/go1_guide/nano/picture_processing.py b/src/Robot/go1_guide/nano/picture_processing.py new file mode 100644 index 0000000..0cf7496 --- /dev/null +++ b/src/Robot/go1_guide/nano/picture_processing.py @@ -0,0 +1,128 @@ +import cv2 +import numpy as np +# from capture import USBCamera + +# def saveFrame(): +# capture = USBCamera("/dev/video0") +# frame = capture.getFrame() +# cv2.imwrite('capture.png', frame) + + +# import numpy as np +# import glob +# size = [480,400] +# def get_K_and_D(checkerboard, imgsPath): +# CHECKERBOARD = checkerboard +# subpix_criteria = (cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER, 30, 0.1) +# calibration_flags = cv2.fisheye.CALIB_RECOMPUTE_EXTRINSIC+cv2.fisheye.CALIB_CHECK_COND+cv2.fisheye.CALIB_FIX_SKEW +# objp = np.zeros((1, CHECKERBOARD[0]*CHECKERBOARD[1], 3), np.float32) +# objp[0,:,:2] = np.mgrid[0:CHECKERBOARD[0], 0:CHECKERBOARD[1]].T.reshape(-1, 2) +# _img_shape = None +# objpoints = [] +# imgpoints = [] +# images = glob.glob(imgsPath + '/*.png') +# for fname in images: +# img = cv2.imread(fname) +# img = cv2.resize(img, size) +# if _img_shape == None: +# _img_shape = img.shape[:2] +# else: +# assert _img_shape == img.shape[:2], "All images must share the same size." + +# gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) +# ret, corners = cv2.findChessboardCorners(gray, CHECKERBOARD,cv2.CALIB_CB_ADAPTIVE_THRESH+cv2.CALIB_CB_FAST_CHECK+cv2.CALIB_CB_NORMALIZE_IMAGE) +# if ret == True: +# objpoints.append(objp) +# cv2.cornerSubPix(gray,corners,(3,3),(-1,-1),subpix_criteria) +# imgpoints.append(corners) +# N_OK = len(objpoints) +# K = np.zeros((3, 3)) +# D = np.zeros((4, 1)) +# rvecs = [np.zeros((1, 1, 3), dtype=np.float64) for i in range(N_OK)] +# tvecs = [np.zeros((1, 1, 3), dtype=np.float64) for i in range(N_OK)] +# rms, _, _, _, _ = \ +# cv2.fisheye.calibrate( +# objpoints, +# imgpoints, +# gray.shape[::-1], +# K, +# D, +# rvecs, +# tvecs, +# calibration_flags, +# (cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER, 30, 1e-6) +# ) +# DIM = _img_shape[::-1] +# print("Found " + str(N_OK) + " valid images for calibration") +# print("DIM=" + str(_img_shape[::-1])) +# print("K=np.array(" + str(K.tolist()) + ")") +# print("D=np.array(" + str(D.tolist()) + ")") +# return DIM, K, D + + +# def OpenCVFisheyeImageUndistortion(img): + # cv::Mat img, undistortImg + # cv::Matx33d K, P + # cv::Vec4d D + # cv::Mat mapX, mapY + + # K(0, 0) = 348.52; K(0, 1) = 0; K(0, 2) = 640.19 + # K(1, 0) = 0; K(1, 1) = 348.52; K(1, 2) = 358.56 + # K(2, 0) = 0; K(2, 1) = 0; K(2, 2) = 1 + + # D(0) = 0.066258 + # D(1) = 0.039769 + # D(2) = -0.026906 + # D(3) = 0.003342 + + # P = K + # P(0, 0) /= 1.5 + # P(1, 1) /= 1.5 + + # K = [[348.52, 0, 640.19], + # [0, 348.52, 358.56], + # [0, 0, 1]] + # D = [0.066258, 0.039769, -0.026906, 0.003342] + # cv2.initUndistortRectifyMap(K, D, cv::Matx33d::eye(), P, cv::Size(img.cols, img.rows), CV_16SC2, mapX, mapY) + + # cv::remap(img, undistortImg, mapX, mapY, CV_INTER_LINEAR) + # cv::imshow("src", img) + # cv::imshow("corrected", undistortImg) + + + +# DIM = (480, 400) +# K = np.array([[122.87238744667862, 0.0, 220.28343964853087], +# [0.0, 120.60935347262523, 203.74634232157828], +# [0.0, 0.0, 1.0]]) +# D = np.array([[0.06701341388742599], [0.1906721369775406], [-0.2568929474339438], [0.09063021944980182]]) +DIM = (640,480) +K = np.array([[182.2034195269173, 0.0, 248.72241643510006], + [0.0, 200.88841301751464, 195.87207910703572], + [0.0, 0.0, 1.0]]) +D = np.array([[0.12236488620142214], [-0.053849293887633265], [0.03508527000849206], [-0.011661429257952398]]) + +def undistort(img, DIM=DIM, K=K, D=D): + # img = cv2.resize(img, DIM) + map1, map2 = cv2.fisheye.initUndistortRectifyMap(K, D, np.eye(3), K, DIM,cv2.CV_16SC2) + undistorted_img = cv2.remap(img, map1, map2, interpolation=cv2.INTER_LINEAR,borderMode=cv2.BORDER_CONSTANT) + return undistorted_img + + +def get_img_middle(img, size=[640,480]): + top = int((img.shape[0] - size[1]) / 2) + bottom = top + size[1] + left = int((img.shape[1] - size[0]) / 2) + right = left + size[0] + return img[top:bottom, left:right] + + + + +if __name__ == "__main__": + capture = USBCamera("/dev/video0") + frame = capture.getFrame() + frame = cv2.resize(frame, DIM) + map1, map2 = cv2.fisheye.initUndistortRectifyMap(K, D, np.eye(3), K, DIM,cv2.CV_16SC2) + undistorted_img = cv2.remap(img, map1, map2, interpolation=cv2.INTER_LINEAR,borderMode=cv2.BORDER_CONSTANT) + cv2.imwrite('unfisheyeImage.png', undistorted_img) \ No newline at end of file diff --git a/src/Robot/go1_guide/nano/start.sh b/src/Robot/go1_guide/nano/start.sh new file mode 100644 index 0000000..1ead534 --- /dev/null +++ b/src/Robot/go1_guide/nano/start.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +ps -aux | grep point_cloud_node | awk '{print $2}' | xargs kill -9 +ps -aux | grep mqttControlNode | awk '{print $2}' | xargs kill -9 +ps -aux | grep live_human_pose | awk '{print $2}' | xargs kill -9 +ps -aux | grep example_point | awk '{print $2}' | xargs kill -9 + +python3 webcamera.py +# ./UnitreecameraSDK/bins/putimagetrans 2 diff --git a/src/Robot/go1_guide/nano/templates/index.html b/src/Robot/go1_guide/nano/templates/index.html new file mode 100644 index 0000000..44cc5ce --- /dev/null +++ b/src/Robot/go1_guide/nano/templates/index.html @@ -0,0 +1,13 @@ + + + + + Video Streaming + + + +
+ +
+ + diff --git a/src/Robot/go1_guide/nano/trans_rect_config_0.yaml b/src/Robot/go1_guide/nano/trans_rect_config_0.yaml new file mode 100644 index 0000000..36e1784 --- /dev/null +++ b/src/Robot/go1_guide/nano/trans_rect_config_0.yaml @@ -0,0 +1,78 @@ +%YAML:1.0 +--- +# unimportant +LogLevel: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 1. ] +# unimportant +Threshold: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 190. ] +# unimportant. It is recommended not to change +Algorithm: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [1. ] +#UDP address for image transfer 192.168.123.IpLastSegment +IpLastSegment: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 15. ] +#DeviceNode +DeviceNode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 0. ] +#fov (perspective 60~140) +hFov: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 120. ] +#image size ([1856,800] or [928,400]) +FrameSize: !!opencv-matrix + rows: 1 + cols: 2 + dt: d + data: [ 928., 400. ] +# +RectifyFrameSize: !!opencv-matrix + rows: 1 + cols: 2 + dt: d + data: [ 928., 800. ] +#FrameRate +FrameRate: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 3e+01 ] +#0 ori img - right 1 ori img - stereo 2 rect img - right 3 rect img - stereo -1 不传图 +Transmode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 2. ] +#Transmission rate +Transrate: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 3e+01 ] +# unimportant +Depthmode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 1. ] +Reserved: !!opencv-matrix + rows: 3 + cols: 3 + dt: d diff --git a/src/Robot/go1_guide/nano/trans_rect_config_1.yaml b/src/Robot/go1_guide/nano/trans_rect_config_1.yaml new file mode 100644 index 0000000..8733c6e --- /dev/null +++ b/src/Robot/go1_guide/nano/trans_rect_config_1.yaml @@ -0,0 +1,78 @@ +%YAML:1.0 +--- +# unimportant +LogLevel: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 1. ] +# unimportant +Threshold: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 190. ] +# unimportant. It is recommended not to change +Algorithm: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [1. ] +#UDP address for image transfer 192.168.123.IpLastSegment +IpLastSegment: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 15. ] +#DeviceNode +DeviceNode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 1. ] +#fov (perspective 60~140) +hFov: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 90. ] +#image size ([1856,800] or [928,400]) +FrameSize: !!opencv-matrix + rows: 1 + cols: 2 + dt: d + data: [ 1856., 800. ] +# +RectifyFrameSize: !!opencv-matrix + rows: 1 + cols: 2 + dt: d + data: [ 928., 800. ] +#FrameRate +FrameRate: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 2e+01 ] +#0 ori img - right 1 ori img - stereo 2 rect img - right 3 rect img - stereo -1 不传图 +Transmode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 2. ] +#Transmission rate +Transrate: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 2e+01 ] +# unimportant +Depthmode: !!opencv-matrix + rows: 1 + cols: 1 + dt: d + data: [ 1. ] +Reserved: !!opencv-matrix + rows: 3 + cols: 3 + dt: d diff --git a/src/Robot/go1_guide/nano/webcamera.py b/src/Robot/go1_guide/nano/webcamera.py new file mode 100644 index 0000000..72afb23 --- /dev/null +++ b/src/Robot/go1_guide/nano/webcamera.py @@ -0,0 +1,65 @@ + +from flask import Flask, render_template, Response +import cv2 +from picture_processing import get_img_middle #, undistort + +raw_size = [928,800] +rect_size = [400,300] +rect_size_ = (640,480) +vid0 = cv2.VideoCapture("/dev/video0") +vid1 = cv2.VideoCapture("/dev/video1") +vid0.set(cv2.CAP_PROP_FRAME_WIDTH, raw_size[0]) +vid0.set(cv2.CAP_PROP_FRAME_HEIGHT, raw_size[1]) +vid1.set(cv2.CAP_PROP_FRAME_WIDTH, raw_size[0]) +vid1.set(cv2.CAP_PROP_FRAME_HEIGHT, raw_size[1]) + +def get_frame(n): + if n==0: + frame = vid0.read()[1] + # frame = undistort(frame) + frame = get_img_middle(frame, rect_size) + frame = cv2.resize(frame, rect_size_) + return frame + if n==1: + frame = vid1.read()[1] + # frame = undistort(frame) + frame = get_img_middle(frame, rect_size) + frame = cv2.resize(frame, rect_size_) + return frame + +def get_frame_byte(n): + img = get_frame(n) + return cv2.imencode('.jpg', img)[1].tobytes() + + +app = Flask(__name__) + +@app.route('/') +def index(): + """Video streaming home page.""" + return render_template('index.html') + + +def gen(n): + """Video streaming generator function.""" + yield b'--frame\r\n' + while True: + frame = get_frame_byte(n) + yield b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n--frame\r\n' + + +@app.route('/video1') +def video1(): + """Video streaming route. Put this in the src attribute of an img tag.""" + return Response(gen(1), + mimetype='multipart/x-mixed-replace; boundary=frame') + +@app.route('/video2') +def video2(): + """Video streaming route. Put this in the src attribute of an img tag.""" + return Response(gen(0), + mimetype='multipart/x-mixed-replace; boundary=frame') + + +if __name__ == '__main__': + app.run(host='192.168.123.13', port=5000, threaded=True) diff --git a/src/Robot/go1_guide/predict.py b/src/Robot/go1_guide/predict.py new file mode 100644 index 0000000..8c1ef07 --- /dev/null +++ b/src/Robot/go1_guide/predict.py @@ -0,0 +1,277 @@ +from core.Camera import Camera, Camera_virtual + +import codecs +import os +import time +import json +import yaml +from functools import reduce +import multiprocessing + +from PIL import Image +import cv2 +import numpy as np +import paddle +from paddle.inference import Config +from paddle.inference import create_predictor + +import sys +sys.path.append('PaddleDetection') +from deploy.python.preprocess import Resize, NormalizeImage, Permute, PadStride #, preprocess +from deploy.python.utils import argsparser, Timer, get_current_memory_mb + + +class PredictConfig(): + """set config of preprocess, postprocess and visualize + Args: + model_dir (str): root path of model.yml + """ + + def __init__(self, model_dir): + # parsing Yaml config for Preprocess + deploy_file = os.path.join(model_dir, 'infer_cfg.yml') + with open(deploy_file) as f: + yml_conf = yaml.safe_load(f) + self.arch = yml_conf['arch'] + self.preprocess_infos = yml_conf['Preprocess'] + self.min_subgraph_size = yml_conf['min_subgraph_size'] + self.labels = yml_conf['label_list'] + self.mask = False + self.use_dynamic_shape = yml_conf['use_dynamic_shape'] + if 'mask' in yml_conf: + self.mask = yml_conf['mask'] + self.tracker = None + if 'tracker' in yml_conf: + self.tracker = yml_conf['tracker'] + if 'NMS' in yml_conf: + self.nms = yml_conf['NMS'] + if 'fpn_stride' in yml_conf: + self.fpn_stride = yml_conf['fpn_stride'] + self.print_config() + + def print_config(self): + print('%s: %s' % ('Model Arch', self.arch)) + for op_info in self.preprocess_infos: + print('--%s: %s' % ('transform op', op_info['type'])) + + + +def load_predictor(model_dir): + config = Config( + os.path.join(model_dir, 'model.pdmodel'), + os.path.join(model_dir, 'model.pdiparams')) + # initial GPU memory(M), device ID + config.enable_use_gpu(2000, 0) + # optimize graph and fuse op + config.switch_ir_optim(True) + # disable print log when predict + config.disable_glog_info() + # enable shared memory + config.enable_memory_optim() + # disable feed, fetch OP, needed by zero_copy_run + config.switch_use_feed_fetch_ops(False) + predictor = create_predictor(config) + return predictor, config + + + +def create_inputs(imgs, im_info): + inputs = {} + + im_shape = [] + scale_factor = [] + for e in im_info: + im_shape.append(np.array((e['im_shape'], )).astype('float32')) + scale_factor.append(np.array((e['scale_factor'], )).astype('float32')) + + origin_scale_factor = np.concatenate(scale_factor, axis=0) + + imgs_shape = [[e.shape[1], e.shape[2]] for e in imgs] + max_shape_h = max([e[0] for e in imgs_shape]) + max_shape_w = max([e[1] for e in imgs_shape]) + padding_imgs = [] + padding_imgs_shape = [] + padding_imgs_scale = [] + for img in imgs: + im_c, im_h, im_w = img.shape[:] + padding_im = np.zeros( + (im_c, max_shape_h, max_shape_w), dtype=np.float32) + padding_im[:, :im_h, :im_w] = np.array(img, dtype=np.float32) + padding_imgs.append(padding_im) + padding_imgs_shape.append( + np.array([max_shape_h, max_shape_w]).astype('float32')) + rescale = [float(max_shape_h) / float(im_h), float(max_shape_w) / float(im_w)] + padding_imgs_scale.append(np.array(rescale).astype('float32')) + inputs['image'] = np.stack(padding_imgs, axis=0) + inputs['im_shape'] = np.stack(padding_imgs_shape, axis=0) + inputs['scale_factor'] = origin_scale_factor + return inputs + + +class Detector(object): + + def __init__(self, + pred_config, + model_dir, + device='CPU', + run_mode='paddle', + batch_size=1, + trt_min_shape=1, + trt_max_shape=1280, + trt_opt_shape=640, + trt_calib_mode=False, + cpu_threads=1, + enable_mkldnn=False): + self.pred_config = pred_config + self.predictor, self.config = load_predictor(model_dir) + # self.det_times = Timer() + self.cpu_mem, self.gpu_mem, self.gpu_util = 0, 0, 0 + self.preprocess_ops = self.get_ops() + + def get_ops(self): + preprocess_ops = [] + for op_info in self.pred_config.preprocess_infos: + new_op_info = op_info.copy() + op_type = new_op_info.pop('type') + preprocess_ops.append(eval(op_type)(**new_op_info)) + return preprocess_ops + + + def predict(self, inputs): + # preprocess + input_names = self.predictor.get_input_names() + for i in range(len(input_names)): + input_tensor = self.predictor.get_input_handle(input_names[i]) + input_tensor.copy_from_cpu(inputs[input_names[i]]) + + np_boxes, np_boxes_num = [], [] + + # model_prediction + self.predictor.run() + np_boxes.clear() + np_boxes_num.clear() + output_names = self.predictor.get_output_names() + num_outs = int(len(output_names) / 2) + + + for out_idx in range(num_outs): + np_boxes.append( + self.predictor.get_output_handle(output_names[out_idx]) + .copy_to_cpu()) + np_boxes_num.append( + self.predictor.get_output_handle(output_names[ + out_idx + num_outs]).copy_to_cpu()) + + np_boxes, np_boxes_num = np.array(np_boxes[0]), np.array(np_boxes_num[0]) + return dict(boxes=np_boxes, boxes_num=np_boxes_num) + + + + +def predict_image(detector, image_list, threshold): + c_results = {"result": []} + + for index in range(len(image_list)): + # 检测模型图像预处理 + input_im_lst = [] + input_im_info_lst = [] + + def decode_image(im, im_info): + im_info['im_shape'] = np.array(im.shape[:2], dtype=np.float32) + im_info['scale_factor'] = np.array([1., 1.], dtype=np.float32) + return im_info + + def preprocess(im, preprocess_ops): + # process image by preprocess_ops + im_info = { + 'scale_factor': np.array( + [1., 1.], dtype=np.float32), + 'im_shape': None, + } + im_info = decode_image(im, im_info) + for operator in preprocess_ops: + im, im_info = operator(im, im_info) + return im, im_info + + im = image_list[index] + im, im_info = preprocess(im, detector.preprocess_ops) + + + input_im_lst.append(im) + input_im_info_lst.append(im_info) + inputs = create_inputs(input_im_lst, input_im_info_lst) + + + # 检测模型预测结果 + det_results = detector.predict(inputs) + + # 检测模型写结果 + im_bboxes_num = det_results['boxes_num'][0] + + if im_bboxes_num > 0: + bbox_results = det_results['boxes'][0:im_bboxes_num, 2:] + id_results = det_results['boxes'][0:im_bboxes_num, 0] + score_results = det_results['boxes'][0:im_bboxes_num, 1] + + for idx in range(im_bboxes_num): + if float(score_results[idx]) >= threshold: + c_results["result"].append({"type": int(id_results[idx]) + 1, + "x": float(bbox_results[idx][0]), + "y": float(bbox_results[idx][1]), + "width": float(bbox_results[idx][2]) - float(bbox_results[idx][0]), + "height": float(bbox_results[idx][3]) - float(bbox_results[idx][1]), + "segmentation": []}) + + return c_results + +def draw_box(img, boxes): + for box in boxes: + print((int(box['x']),int(box['y'])), (int(box['x']+box['width']),int(box['y']+box['height']))) + # cv2.rectangle(img, (int(box['x']),int(box['y'])), (int(box['x']+box['width']),int(box['y']+box['height'])), (10, 10, 240), 1) + cv2.putText(img, str(box['type']), (10,10), cv2.FONT_HERSHEY_SIMPLEX, 2, (200,30,30), 1) + return img + +if __name__ == '__main__': + det_model_path = "model/picodet_l_416_coco_lcnet/" + camera = Camera_virtual(path_imgs='./images') # /home/unitree/go1_guide/images0 + paddle.enable_static() + pred_config = PredictConfig(det_model_path) + detector = Detector(pred_config, det_model_path) + threshold = 0.41 #0.05 + while True: + start_time = time.time() + frame = camera.getframe() + c_results = predict_image(detector, [frame], threshold) + curr_time = time.time() + + exec_time = curr_time - start_time + if exec_time: fps = 1.0/exec_time + else: fps = 00.00 + # print("FPS: %.2f time: %.2f ms" % (fps, (1000*exec_time))) + + frame = draw_box(frame, c_results['result']) + cv2.namedWindow('test', 0) + cv2.imshow('test', frame) + + waitkey = cv2.waitKey(1) + if waitkey==ord('q'): break + if waitkey==ord(' '): + camera.nextframe() + cv2.destroyAllWindows() + + + + + +class predicter(): + def __init__(self, det_model_path='model/picodet_l_416_coco_lcnet/', threshold=0.41): + paddle.enable_static() + pred_config = PredictConfig(det_model_path) + self.detector = Detector(pred_config, det_model_path) + self.threshold = threshold + + def predict(self, img, draw=False): + c_results = predict_image(self.detector, [img], self.threshold) + if draw: + img = draw_box(img, c_results['result']) + return c_results diff --git a/src/Robot/go1_guide/raspberrypi/server_robotcontrol.py b/src/Robot/go1_guide/raspberrypi/server_robotcontrol.py new file mode 100644 index 0000000..b76ba6d --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/server_robotcontrol.py @@ -0,0 +1,81 @@ +import socket +import threading +import json + +from unitree_python_sdk import Unitree_Robot_High +unitree_robot = Unitree_Robot_High() + +clients = {} + +class client(object): + def __init__(self, socket, addr, username): + self.addr = addr[0] + self.port = addr[1] + self.username = username + self.socket = socket + + def send(self, msg): + self.socket.send(msg) + + def recv(self, mtu=1024): + try: + data = self.socket.recv(mtu) + if not data: + return False + return data + except: + return False + + def close(self): + try: + self.socket.close() + return True + except: + return False + + def id(self): + return '{0}:{1}'.format(self.addr, self.port) + + +def new_client(c): + try: + while True: + data = c.recv() + if not data: + break + else: + data = json.loads(data) + # print(data) + unitree_robot.execute(data[0], # mode + data[1], # gaitType + data[2], # speedLevel + data[3], # footRaiseHeight + data[4], # bodyHeight + data[5], # euler + data[6], # velocity + data[7], # yawSpeed + data[8]) # reserve + + except socket.error as e: + print('({0})Socket error: {1}'.format(c.id(), e)) + except Exception as e: + print('({0})Other exception: {1}'.format(c.id(), e)) + finally: + print('({0})Client leave.'.format(c.id())) + c.close() + clients.pop(c.id()) + + +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +address = ('192.168.123.161', 8000) +s.bind(address) +s.listen(16) +print('Listening...') + +while True: + conn, addr = s.accept() + c = client(conn, addr, '') + clients[c.id()] = c + t = threading.Thread(target=new_client, args=(c,)) + t.start() + print('({0})Client entry.'.format(c.id())) diff --git a/src/Robot/go1_guide/raspberrypi/start.sh b/src/Robot/go1_guide/raspberrypi/start.sh new file mode 100644 index 0000000..a63f373 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/start.sh @@ -0,0 +1 @@ +python3 server_robotcontrol.py diff --git a/src/Robot/go1_guide/raspberrypi/unitree.py b/src/Robot/go1_guide/raspberrypi/unitree.py new file mode 100644 index 0000000..127e772 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree.py @@ -0,0 +1,27 @@ +HIGHLEVEL = 0xee +LOWLEVEL = 0xff + +FR_ = 0 # leg index +FL_ = 1 +RR_ = 2 +RL_ = 3 + +FR_0 = 0 # joint index +FR_1 = 1 +FR_2 = 2 + +FL_0 = 3 +FL_1 = 4 +FL_2 = 5 + +RR_0 = 6 +RR_1 = 7 +RR_2 = 8 + +RL_0 = 9 +RL_1 = 10 +RL_2 = 11 + +calibration_forwardspeed = 0.0 +calibration_sidespeed = 0.0 +calibration_rotatespeed = 0.0 \ No newline at end of file diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/.gitignore b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/.gitignore new file mode 100644 index 0000000..a2cafc9 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/.gitignore @@ -0,0 +1,4 @@ +build + +*.o +.vscode diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/CMakeLists.txt b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/CMakeLists.txt new file mode 100644 index 0000000..6319159 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/CMakeLists.txt @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 2.8.3) +project(unitree_legged_sdk) + +include_directories(include) + +add_compile_options(-std=c++14) + +# check arch and os +message("-- CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") +if("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86_64.*") + set(ARCH amd64) +endif() +if("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "aarch64.*") + set(ARCH arm64) +endif() + +link_directories(lib/cpp/${ARCH}) +set(EXTRA_LIBS -pthread libunitree_legged_sdk.so) + +set(CMAKE_CXX_FLAGS "-O3 -fPIC") + +# one pc one process +add_executable(example_position example/example_position.cpp) +target_link_libraries(example_position ${EXTRA_LIBS}) + +add_executable(example_velocity example/example_velocity.cpp) +target_link_libraries(example_velocity ${EXTRA_LIBS}) + +add_executable(example_torque example/example_torque.cpp) +target_link_libraries(example_torque ${EXTRA_LIBS}) + +add_executable(example_walk example/example_walk.cpp) +target_link_libraries(example_walk ${EXTRA_LIBS}) + +add_executable(example_joystick example/example_joystick.cpp) +target_link_libraries(example_joystick ${EXTRA_LIBS}) + + +# install +install(TARGETS + example_position example_velocity example_torque example_walk example_joystick + DESTINATION bin/unitree) +install(DIRECTORY lib/cpp/${ARCH}/ + DESTINATION lib/unitree + USE_SOURCE_PERMISSIONS) diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/LICENSE b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/LICENSE new file mode 100644 index 0000000..a612ad9 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/README.md b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/README.md new file mode 100644 index 0000000..eb8b612 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/README.md @@ -0,0 +1,37 @@ +# v3.8.0 +The unitree_legged_sdk is mainly used for communication between PC and Controller board. +It also can be used in other PCs with UDP. + +### Notice +support robot: Go1 + +not support robot: Laikago, Aliengo, A1. (Check release [v3.3.1](https://github.com/unitreerobotics/unitree_legged_sdk/releases/tag/v3.3.1) for support) + +### Dependencies +* [Unitree](https://www.unitree.com/go1_update) +```bash +Legged_sport >= v1.36.0 +firmware H0.1.7 >= v0.1.35 + H0.1.9 >= v0.1.35 +``` +* [Boost](http://www.boost.org) (version 1.5.4 or higher) +* [CMake](http://www.cmake.org) (version 2.8.3 or higher) +* [g++](https://gcc.gnu.org/) (version 8.3.0 or higher) + + +### Build +```bash +mkdir build +cd build +cmake ../ +make +``` + +### Run + +#### Cpp +Run examples with 'sudo' for memory locking. + +#### Python +##### arm +change `sys.path.append('../lib/python/amd64')` to `sys.path.append('../lib/python/arm64')` diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_joystick.cpp b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_joystick.cpp new file mode 100644 index 0000000..45d113c --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_joystick.cpp @@ -0,0 +1,82 @@ +/************************************************************************ +Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +Use of this source code is governed by the MPL-2.0 license, see LICENSE. +************************************************************************/ + +#include "unitree_legged_sdk/unitree_legged_sdk.h" +#include "unitree_legged_sdk/joystick.h" +#include +#include +#include + +using namespace UNITREE_LEGGED_SDK; + +class Custom +{ +public: + Custom(uint8_t level): + safe(LeggedType::Go1), + udp(level, 8090, "192.168.123.10", 8007){ + udp.InitCmdData(cmd); + } + void UDPSend(); + void UDPRecv(); + void RobotControl(); + + Safety safe; + UDP udp; + LowCmd cmd = {0}; + LowState state = {0}; + xRockerBtnDataStruct _keyData; + int motiontime = 0; + float dt = 0.002; // 0.001~0.01 +}; + +void Custom::UDPRecv() +{ + udp.Recv(); +} + +void Custom::UDPSend() +{ + udp.Send(); +} + +void Custom::RobotControl() +{ + motiontime++; + udp.GetRecv(state); + + memcpy(&_keyData, &state.wirelessRemote[0], 40); + + if((int)_keyData.btn.components.A == 1){ + std::cout << "The key A is pressed, and the value of lx is " << _keyData.lx << std::endl; + } + + safe.PowerProtect(cmd, state, 1); + udp.SetSend(cmd); +} + +int main(void) +{ + std::cout << "Communication level is set to LOW-level." << std::endl + << "WARNING: Make sure the robot is hung up." << std::endl + << "Press Enter to continue..." << std::endl; + std::cin.ignore(); + + Custom custom(LOWLEVEL); + // InitEnvironment(); + LoopFunc loop_control("control_loop", custom.dt, boost::bind(&Custom::RobotControl, &custom)); + LoopFunc loop_udpSend("udp_send", custom.dt, 3, boost::bind(&Custom::UDPSend, &custom)); + LoopFunc loop_udpRecv("udp_recv", custom.dt, 3, boost::bind(&Custom::UDPRecv, &custom)); + + loop_udpSend.start(); + loop_udpRecv.start(); + loop_control.start(); + + while(1){ + sleep(10); + }; + + return 0; +} diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_position.cpp b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_position.cpp new file mode 100644 index 0000000..3051928 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_position.cpp @@ -0,0 +1,163 @@ +/***************************************************************** + Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +******************************************************************/ + +#include "unitree_legged_sdk/unitree_legged_sdk.h" +#include +#include +#include +#include + +using namespace std; +using namespace UNITREE_LEGGED_SDK; + +class Custom +{ +public: + Custom(uint8_t level): + safe(LeggedType::Go1), + udp(level, 8090, "192.168.123.10", 8007) { + udp.InitCmdData(cmd); + } + void UDPRecv(); + void UDPSend(); + void RobotControl(); + + Safety safe; + UDP udp; + LowCmd cmd = {0}; + LowState state = {0}; + float qInit[3]={0}; + float qDes[3]={0}; + float sin_mid_q[3] = {0.0, 1.2, -2.0}; + float Kp[3] = {0}; + float Kd[3] = {0}; + double time_consume = 0; + int rate_count = 0; + int sin_count = 0; + int motiontime = 0; + float dt = 0.002; // 0.001~0.01 +}; + +void Custom::UDPRecv() +{ + udp.Recv(); +} + +void Custom::UDPSend() +{ + udp.Send(); +} + +double jointLinearInterpolation(double initPos, double targetPos, double rate) +{ + double p; + rate = std::min(std::max(rate, 0.0), 1.0); + p = initPos*(1-rate) + targetPos*rate; + return p; +} + +void Custom::RobotControl() +{ + motiontime++; + udp.GetRecv(state); + // printf("%d %f\n", motiontime, state.motorState[FR_2].q); + printf("%d %f %f\n", motiontime, state.motorState[FR_1].q, state.motorState[FR_1].dq); + + // gravity compensation + cmd.motorCmd[FR_0].tau = -0.65f; + cmd.motorCmd[FL_0].tau = +0.65f; + cmd.motorCmd[RR_0].tau = -0.65f; + cmd.motorCmd[RL_0].tau = +0.65f; + + // if( motiontime >= 100){ + if( motiontime >= 0){ + // first, get record initial position + // if( motiontime >= 100 && motiontime < 500){ + if( motiontime >= 0 && motiontime < 10){ + qInit[0] = state.motorState[FR_0].q; + qInit[1] = state.motorState[FR_1].q; + qInit[2] = state.motorState[FR_2].q; + } + // second, move to the origin point of a sine movement with Kp Kd + // if( motiontime >= 500 && motiontime < 1500){ + if( motiontime >= 10 && motiontime < 400){ + rate_count++; + double rate = rate_count/200.0; // needs count to 200 + Kp[0] = 5.0; Kp[1] = 5.0; Kp[2] = 5.0; + Kd[0] = 1.0; Kd[1] = 1.0; Kd[2] = 1.0; + // Kp[0] = 20.0; Kp[1] = 20.0; Kp[2] = 20.0; + // Kd[0] = 2.0; Kd[1] = 2.0; Kd[2] = 2.0; + + qDes[0] = jointLinearInterpolation(qInit[0], sin_mid_q[0], rate); + qDes[1] = jointLinearInterpolation(qInit[1], sin_mid_q[1], rate); + qDes[2] = jointLinearInterpolation(qInit[2], sin_mid_q[2], rate); + } + double sin_joint1, sin_joint2; + // last, do sine wave + if( motiontime >= 400){ + sin_count++; + sin_joint1 = 0.6 * sin(3*M_PI*sin_count/1000.0); + sin_joint2 = -0.6 * sin(1.8*M_PI*sin_count/1000.0); + qDes[0] = sin_mid_q[0]; + qDes[1] = sin_mid_q[1]; + qDes[2] = sin_mid_q[2] + sin_joint2; + // qDes[2] = sin_mid_q[2]; + } + + cmd.motorCmd[FR_0].q = qDes[0]; + cmd.motorCmd[FR_0].dq = 0; + cmd.motorCmd[FR_0].Kp = Kp[0]; + cmd.motorCmd[FR_0].Kd = Kd[0]; + cmd.motorCmd[FR_0].tau = -0.65f; + + cmd.motorCmd[FR_1].q = qDes[1]; + cmd.motorCmd[FR_1].dq = 0; + cmd.motorCmd[FR_1].Kp = Kp[1]; + cmd.motorCmd[FR_1].Kd = Kd[1]; + cmd.motorCmd[FR_1].tau = 0.0f; + + cmd.motorCmd[FR_2].q = qDes[2]; + cmd.motorCmd[FR_2].dq = 0; + cmd.motorCmd[FR_2].Kp = Kp[2]; + cmd.motorCmd[FR_2].Kd = Kd[2]; + cmd.motorCmd[FR_2].tau = 0.0f; + + } + + if(motiontime > 10){ + safe.PositionLimit(cmd); + int res1 = safe.PowerProtect(cmd, state, 1); + // You can uncomment it for position protection + // int res2 = safe.PositionProtect(cmd, state, 10); + if(res1 < 0) exit(-1); + } + + udp.SetSend(cmd); + +} + + +int main(void) +{ + std::cout << "Communication level is set to LOW-level." << std::endl + << "WARNING: Make sure the robot is hung up." << std::endl + << "Press Enter to continue..." << std::endl; + std::cin.ignore(); + + Custom custom(LOWLEVEL); + // InitEnvironment(); + LoopFunc loop_control("control_loop", custom.dt, boost::bind(&Custom::RobotControl, &custom)); + LoopFunc loop_udpSend("udp_send", custom.dt, 3, boost::bind(&Custom::UDPSend, &custom)); + LoopFunc loop_udpRecv("udp_recv", custom.dt, 3, boost::bind(&Custom::UDPRecv, &custom)); + + loop_udpSend.start(); + loop_udpRecv.start(); + loop_control.start(); + + while(1){ + sleep(10); + }; + + return 0; +} diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_torque.cpp b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_torque.cpp new file mode 100644 index 0000000..d3967c1 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_torque.cpp @@ -0,0 +1,94 @@ +/***************************************************************** + Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +******************************************************************/ + +#include "unitree_legged_sdk/unitree_legged_sdk.h" +#include +#include +#include + +using namespace UNITREE_LEGGED_SDK; + +class Custom +{ +public: + Custom(uint8_t level): + safe(LeggedType::Go1), + udp(level, 8090, "192.168.123.10", 8007){ + udp.InitCmdData(cmd); + } + void UDPSend(); + void UDPRecv(); + void RobotControl(); + + Safety safe; + UDP udp; + LowCmd cmd = {0}; + LowState state = {0}; + int motiontime = 0; + float dt = 0.002; // 0.001~0.01 +}; + +void Custom::UDPRecv() +{ + udp.Recv(); +} + +void Custom::UDPSend() +{ + udp.Send(); +} + +void Custom::RobotControl() +{ + motiontime++; + udp.GetRecv(state); + // printf("%d\n", motiontime); + // gravity compensation + cmd.motorCmd[FR_0].tau = -0.65f; + cmd.motorCmd[FL_0].tau = +0.65f; + cmd.motorCmd[RR_0].tau = -0.65f; + cmd.motorCmd[RL_0].tau = +0.65f; + + if( motiontime >= 500){ + float torque = (0 - state.motorState[FR_1].q)*10.0f + (0 - state.motorState[FR_1].dq)*1.0f; + if(torque > 5.0f) torque = 5.0f; + if(torque < -5.0f) torque = -5.0f; + // if(torque > 15.0f) torque = 15.0f; + // if(torque < -15.0f) torque = -15.0f; + + cmd.motorCmd[FR_1].q = PosStopF; + cmd.motorCmd[FR_1].dq = VelStopF; + cmd.motorCmd[FR_1].Kp = 0; + cmd.motorCmd[FR_1].Kd = 0; + cmd.motorCmd[FR_1].tau = torque; + } + int res = safe.PowerProtect(cmd, state, 1); + if(res < 0) exit(-1); + + udp.SetSend(cmd); +} + +int main(void) +{ + std::cout << "Communication level is set to LOW-level." << std::endl + << "WARNING: Make sure the robot is hung up." << std::endl + << "Press Enter to continue..." << std::endl; + std::cin.ignore(); + + Custom custom(LOWLEVEL); + // InitEnvironment(); + LoopFunc loop_control("control_loop", custom.dt, boost::bind(&Custom::RobotControl, &custom)); + LoopFunc loop_udpSend("udp_send", custom.dt, 3, boost::bind(&Custom::UDPSend, &custom)); + LoopFunc loop_udpRecv("udp_recv", custom.dt, 3, boost::bind(&Custom::UDPRecv, &custom)); + + loop_udpSend.start(); + loop_udpRecv.start(); + loop_control.start(); + + while(1){ + sleep(10); + }; + + return 0; +} diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_velocity.cpp b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_velocity.cpp new file mode 100644 index 0000000..f34cce8 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_velocity.cpp @@ -0,0 +1,97 @@ +/***************************************************************** + Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +******************************************************************/ + +#include "unitree_legged_sdk/unitree_legged_sdk.h" +#include +#include + +using namespace UNITREE_LEGGED_SDK; + +class Custom +{ +public: + Custom(uint8_t level): + safe(LeggedType::Go1), + udp(level, 8090, "192.168.123.10", 8007){ + udp.InitCmdData(cmd); + } + void UDPRecv(); + void UDPSend(); + void RobotControl(); + + Safety safe; + UDP udp; + LowCmd cmd = {0}; + LowState state = {0}; + int Tpi = 0; + int motiontime = 0; + float dt = 0.002; // 0.001~0.01 +}; + +void Custom::UDPRecv() +{ + udp.Recv(); +} + +void Custom::UDPSend() +{ + udp.Send(); +} + +void Custom::RobotControl() +{ + motiontime++; + udp.GetRecv(state); + + // gravity compensation + cmd.motorCmd[FR_0].tau = -0.65f; + cmd.motorCmd[FL_0].tau = +0.65f; + cmd.motorCmd[RR_0].tau = -0.65f; + cmd.motorCmd[RL_0].tau = +0.65f; + + if( motiontime >= 500){ + float speed = 2 * sin(3*M_PI*Tpi/1500.0); + + cmd.motorCmd[FR_1].q = PosStopF; + cmd.motorCmd[FR_1].dq = speed; + cmd.motorCmd[FR_1].Kp = 0; + cmd.motorCmd[FR_1].Kd = 4; + // cmd.motorCmd[FR_1].Kd = 6; + cmd.motorCmd[FR_1].tau = 0.0f; + Tpi++; + } + + if(motiontime > 10){ + int res1 = safe.PowerProtect(cmd, state, 1); + // You can uncomment it for position protection + // int res2 = safe.PositionProtect(cmd, state, 10); + if(res1 < 0) exit(-1); + } + + udp.SetSend(cmd); +} + +int main(void) +{ + std::cout << "Communication level is set to LOW-level." << std::endl + << "WARNING: Make sure the robot is hung up." << std::endl + << "Press Enter to continue..." << std::endl; + std::cin.ignore(); + + Custom custom(LOWLEVEL); + // InitEnvironment(); + LoopFunc loop_control("control_loop", custom.dt, boost::bind(&Custom::RobotControl, &custom)); + LoopFunc loop_udpSend("udp_send", custom.dt, 3, boost::bind(&Custom::UDPSend, &custom)); + LoopFunc loop_udpRecv("udp_recv", custom.dt, 3, boost::bind(&Custom::UDPRecv, &custom)); + + loop_udpSend.start(); + loop_udpRecv.start(); + loop_control.start(); + + while(1){ + sleep(10); + }; + + return 0; +} diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_walk.cpp b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_walk.cpp new file mode 100644 index 0000000..46e20d4 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example/example_walk.cpp @@ -0,0 +1,156 @@ +/***************************************************************** + Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +******************************************************************/ + +#include "unitree_legged_sdk/unitree_legged_sdk.h" +#include +#include +#include +#include + +using namespace UNITREE_LEGGED_SDK; + +class Custom +{ +public: + Custom(uint8_t level): + safe(LeggedType::Go1), + udp(level, 8090, "192.168.123.161", 8082){ + udp.InitCmdData(cmd); + } + void UDPRecv(); + void UDPSend(); + void RobotControl(); + + Safety safe; + UDP udp; + HighCmd cmd = {0}; + HighState state = {0}; + int motiontime = 0; + float dt = 0.002; // 0.001~0.01 +}; + + +void Custom::UDPRecv() +{ + udp.Recv(); +} + +void Custom::UDPSend() +{ + udp.Send(); +} + +void Custom::RobotControl() +{ + motiontime += 2; + udp.GetRecv(state); + printf("%d %f\n", motiontime, state.imu.quaternion[2]); + + cmd.mode = 0; // 0:idle, default stand 1:forced stand 2:walk continuously + cmd.gaitType = 0; + cmd.speedLevel = 0; + cmd.footRaiseHeight = 0; + cmd.bodyHeight = 0; + cmd.euler[0] = 0; + cmd.euler[1] = 0; + cmd.euler[2] = 0; + cmd.velocity[0] = 0.0f; + cmd.velocity[1] = 0.0f; + cmd.yawSpeed = 0.0f; + cmd.reserve = 0; + + if(motiontime > 0 && motiontime < 1000){ + cmd.mode = 1; + cmd.euler[0] = -0.3; + } + if(motiontime > 1000 && motiontime < 2000){ + cmd.mode = 1; + cmd.euler[0] = 0.3; + } + if(motiontime > 2000 && motiontime < 3000){ + cmd.mode = 1; + cmd.euler[1] = -0.2; + } + if(motiontime > 3000 && motiontime < 4000){ + cmd.mode = 1; + cmd.euler[1] = 0.2; + } + if(motiontime > 4000 && motiontime < 5000){ + cmd.mode = 1; + cmd.euler[2] = -0.2; + } + if(motiontime > 5000 && motiontime < 6000){ + cmd.mode = 1; + cmd.euler[2] = 0.2; + } + if(motiontime > 6000 && motiontime < 7000){ + cmd.mode = 1; + cmd.bodyHeight = -0.2; + } + if(motiontime > 7000 && motiontime < 8000){ + cmd.mode = 1; + cmd.bodyHeight = 0.1; + } + if(motiontime > 8000 && motiontime < 9000){ + cmd.mode = 1; + cmd.bodyHeight = 0.0; + } + if(motiontime > 9000 && motiontime < 11000){ + cmd.mode = 5; + } + if(motiontime > 11000 && motiontime < 13000){ + cmd.mode = 6; + } + if(motiontime > 13000 && motiontime < 14000){ + cmd.mode = 0; + } + if(motiontime > 14000 && motiontime < 18000){ + cmd.mode = 2; + cmd.gaitType = 2; + cmd.velocity[0] = 0.4f; // -1 ~ +1 + cmd.yawSpeed = 2; + cmd.footRaiseHeight = 0.1; + // printf("walk\n"); + } + if(motiontime > 18000 && motiontime < 20000){ + cmd.mode = 0; + cmd.velocity[0] = 0; + } + if(motiontime > 20000 && motiontime < 24000){ + cmd.mode = 2; + cmd.gaitType = 1; + cmd.velocity[0] = 0.2f; // -1 ~ +1 + cmd.bodyHeight = 0.1; + // printf("walk\n"); + } + if(motiontime>24000 ){ + cmd.mode = 1; + } + + udp.SetSend(cmd); +} + +int main(void) +{ + std::cout << "Communication level is set to HIGH-level." << std::endl + << "WARNING: Make sure the robot is standing on the ground." << std::endl + << "Press Enter to continue..." << std::endl; + std::cin.ignore(); + + Custom custom(HIGHLEVEL); + // InitEnvironment(); + LoopFunc loop_control("control_loop", custom.dt, boost::bind(&Custom::RobotControl, &custom)); + LoopFunc loop_udpSend("udp_send", custom.dt, 3, boost::bind(&Custom::UDPSend, &custom)); + LoopFunc loop_udpRecv("udp_recv", custom.dt, 3, boost::bind(&Custom::UDPRecv, &custom)); + + loop_udpSend.start(); + loop_udpRecv.start(); + loop_control.start(); + + while(1){ + sleep(10); + }; + + return 0; +} diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/example_position.py b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/example_position.py new file mode 100644 index 0000000..ddd2dd4 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/example_position.py @@ -0,0 +1,118 @@ +#!/usr/bin/python + +import sys +import time +import math +import numpy as np + +sys.path.append('../lib/python/amd64') +import robot_interface as sdk + +def jointLinearInterpolation(initPos, targetPos, rate): + + rate = np.fmin(np.fmax(rate, 0.0), 1.0) + p = initPos*(1-rate) + targetPos*rate + return p + + +if __name__ == '__main__': + + d = {'FR_0':0, 'FR_1':1, 'FR_2':2, + 'FL_0':3, 'FL_1':4, 'FL_2':5, + 'RR_0':6, 'RR_1':7, 'RR_2':8, + 'RL_0':9, 'RL_1':10, 'RL_2':11 } + PosStopF = math.pow(10,9) + VelStopF = 16000.0 + HIGHLEVEL = 0xee + LOWLEVEL = 0xff + sin_mid_q = [0.0, 1.2, -2.0] + dt = 0.002 + qInit = [0, 0, 0] + qDes = [0, 0, 0] + sin_count = 0 + rate_count = 0 + Kp = [0, 0, 0] + Kd = [0, 0, 0] + + udp = sdk.UDP(LOWLEVEL, 8080, "192.168.123.10", 8007) + safe = sdk.Safety(sdk.LeggedType.Go1) + + cmd = sdk.LowCmd() + state = sdk.LowState() + udp.InitCmdData(cmd) + + Tpi = 0 + motiontime = 0 + while True: + time.sleep(0.002) + motiontime += 1 + + # print(motiontime) + # print(state.imu.rpy[0]) + + + udp.Recv() + udp.GetRecv(state) + + if( motiontime >= 0): + + # first, get record initial position + if( motiontime >= 0 and motiontime < 10): + qInit[0] = state.motorState[d['FR_0']].q + qInit[1] = state.motorState[d['FR_1']].q + qInit[2] = state.motorState[d['FR_2']].q + + # second, move to the origin point of a sine movement with Kp Kd + if( motiontime >= 10 and motiontime < 400): + rate_count += 1 + rate = rate_count/200.0 # needs count to 200 + Kp = [5, 5, 5] + Kd = [1, 1, 1] + # Kp = [20, 20, 20] + # Kd = [2, 2, 2] + + qDes[0] = jointLinearInterpolation(qInit[0], sin_mid_q[0], rate) + qDes[1] = jointLinearInterpolation(qInit[1], sin_mid_q[1], rate) + qDes[2] = jointLinearInterpolation(qInit[2], sin_mid_q[2], rate) + + # last, do sine wave + freq_Hz = 1 + # freq_Hz = 5 + freq_rad = freq_Hz * 2* math.pi + t = dt*sin_count + if( motiontime >= 400): + sin_count += 1 + # sin_joint1 = 0.6 * sin(3*M_PI*sin_count/1000.0) + # sin_joint2 = -0.9 * sin(3*M_PI*sin_count/1000.0) + sin_joint1 = 0.6 * math.sin(t*freq_rad) + sin_joint2 = -0.9 * math.sin(t*freq_rad) + qDes[0] = sin_mid_q[0] + qDes[1] = sin_mid_q[1] + sin_joint1 + qDes[2] = sin_mid_q[2] + sin_joint2 + + + cmd.motorCmd[d['FR_0']].q = qDes[0] + cmd.motorCmd[d['FR_0']].dq = 0 + cmd.motorCmd[d['FR_0']].Kp = Kp[0] + cmd.motorCmd[d['FR_0']].Kd = Kd[0] + cmd.motorCmd[d['FR_0']].tau = -0.65 + + cmd.motorCmd[d['FR_1']].q = qDes[1] + cmd.motorCmd[d['FR_1']].dq = 0 + cmd.motorCmd[d['FR_1']].Kp = Kp[1] + cmd.motorCmd[d['FR_1']].Kd = Kd[1] + cmd.motorCmd[d['FR_1']].tau = 0.0 + + cmd.motorCmd[d['FR_2']].q = qDes[2] + cmd.motorCmd[d['FR_2']].dq = 0 + cmd.motorCmd[d['FR_2']].Kp = Kp[2] + cmd.motorCmd[d['FR_2']].Kd = Kd[2] + cmd.motorCmd[d['FR_2']].tau = 0.0 + # cmd.motorCmd[d['FR_2']].tau = 2 * sin(t*freq_rad) + + + if(motiontime > 10): + safe.PowerProtect(cmd, state, 1) + + udp.SetSend(cmd) + udp.Send() diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/example_torque.py b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/example_torque.py new file mode 100644 index 0000000..97e5e2b --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/example_torque.py @@ -0,0 +1,70 @@ +#!/usr/bin/python + +import sys +import time +import math +import numpy as np + +sys.path.append('../lib/python/amd64') +import robot_interface as sdk + + +if __name__ == '__main__': + + d = {'FR_0':0, 'FR_1':1, 'FR_2':2, + 'FL_0':3, 'FL_1':4, 'FL_2':5, + 'RR_0':6, 'RR_1':7, 'RR_2':8, + 'RL_0':9, 'RL_1':10, 'RL_2':11 } + PosStopF = math.pow(10,9) + VelStopF = 16000.0 + HIGHLEVEL = 0xee + LOWLEVEL = 0xff + dt = 0.002 + sin_count = 0 + + udp = sdk.UDP(LOWLEVEL, 8080, "192.168.123.10", 8007) + safe = sdk.Safety(sdk.LeggedType.Go1) + + cmd = sdk.LowCmd() + state = sdk.LowState() + udp.InitCmdData(cmd) + + Tpi = 0 + motiontime = 0 + while True: + time.sleep(0.002) + motiontime += 1 + + # freq_Hz = 1 + freq_Hz = 2 + # freq_Hz = 5; + freq_rad = freq_Hz * 2* math.pi + # t = dt*sin_count + + # print(motiontime) + # print(state.imu.rpy[0]) + + + udp.Recv() + udp.GetRecv(state) + + if( motiontime >= 500): + sin_count += 1 + torque = (0 - state.motorState[d['FR_1']].q)*10.0 + (0 - state.motorState[d['FR_1']].dq)*1.0 + # torque = (0 - state.motorState[d['FR_1']].q)*20.0 + (0 - state.motorState[d['FR_1']].dq)*2.0 + # torque = 2 * sin(t*freq_rad) + torque = np.fmin(np.fmax(torque, -5.0), 5.0) + # torque = np.fmin(np.fmax(torque, -15.0), 15.0) + + + cmd.motorCmd[d['FR_1']].q = PosStopF + cmd.motorCmd[d['FR_1']].dq = VelStopF + cmd.motorCmd[d['FR_1']].Kp = 0 + cmd.motorCmd[d['FR_1']].Kd = 0 + cmd.motorCmd[d['FR_1']].tau = torque + + if(motiontime > 10): + safe.PowerProtect(cmd, state, 1) + + udp.SetSend(cmd) + udp.Send() diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/example_velocity.py b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/example_velocity.py new file mode 100644 index 0000000..f170b39 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/example_velocity.py @@ -0,0 +1,58 @@ +#!/usr/bin/python + +import sys +import time +import math + +sys.path.append('../lib/python/amd64') +import robot_interface as sdk + + +if __name__ == '__main__': + + d = {'FR_0':0, 'FR_1':1, 'FR_2':2, + 'FL_0':3, 'FL_1':4, 'FL_2':5, + 'RR_0':6, 'RR_1':7, 'RR_2':8, + 'RL_0':9, 'RL_1':10, 'RL_2':11 } + PosStopF = math.pow(10,9) + VelStopF = 16000.0 + HIGHLEVEL = 0xee + LOWLEVEL = 0xff + + udp = sdk.UDP(LOWLEVEL, 8080, "192.168.123.10", 8007) + safe = sdk.Safety(sdk.LeggedType.Go1) + + cmd = sdk.LowCmd() + state = sdk.LowState() + udp.InitCmdData(cmd) + + Tpi = 0 + motiontime = 0 + while True: + time.sleep(0.002) + motiontime += 1 + + # print(motiontime) + # print(state.imu.rpy[0]) + + + udp.Recv() + udp.GetRecv(state) + + if( motiontime >= 500): + speed = 2 * math.sin(3*math.pi*Tpi/2000.0) + + # cmd.motorCmd[d['FL_2']].q = PosStopF + cmd.motorCmd[d['FL_2']].q = 0 + cmd.motorCmd[d['FL_2']].dq = speed + cmd.motorCmd[d['FL_2']].Kp = 0 + cmd.motorCmd[d['FL_2']].Kd = 4 + cmd.motorCmd[d['FL_2']].tau = 0.0 + + Tpi += 1 + + if(motiontime > 10): + safe.PowerProtect(cmd, state, 1) + + udp.SetSend(cmd) + udp.Send() diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/example_walk.py b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/example_walk.py new file mode 100644 index 0000000..c697c33 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/example_walk.py @@ -0,0 +1,119 @@ +#!/usr/bin/python + +import sys +import time +import math + +sys.path.append('../lib/python/amd64') +import robot_interface as sdk + + +if __name__ == '__main__': + + HIGHLEVEL = 0xee + LOWLEVEL = 0xff + + udp = sdk.UDP(HIGHLEVEL, 8080, "192.168.123.161", 8082) + + cmd = sdk.HighCmd() + state = sdk.HighState() + udp.InitCmdData(cmd) + + motiontime = 0 + while True: + time.sleep(0.002) + motiontime = motiontime + 1 + + udp.Recv() + udp.GetRecv(state) + + # print(motiontime) + # print(state.imu.rpy[0]) + # print(motiontime, state.motorState[0].q, state.motorState[1].q, state.motorState[2].q) + # print(state.imu.rpy[0]) + + cmd.mode = 0 # 0:idle, default stand 1:forced stand 2:walk continuously + cmd.gaitType = 0 + cmd.speedLevel = 0 + cmd.footRaiseHeight = 0 + cmd.bodyHeight = 0 + cmd.euler = [0, 0, 0] + cmd.velocity = [0, 0] + cmd.yawSpeed = 0.0 + cmd.reserve = 0 + + # cmd.mode = 2 + # cmd.gaitType = 1 + # # cmd.position = [1, 0] + # # cmd.position[0] = 2 + # cmd.velocity = [-0.2, 0] # -1 ~ +1 + # cmd.yawSpeed = 0 + # cmd.bodyHeight = 0.1 + + if(motiontime > 0 and motiontime < 1000): + cmd.mode = 1 + cmd.euler = [-0.3, 0, 0] + + if(motiontime > 1000 and motiontime < 2000): + cmd.mode = 1 + cmd.euler = [0.3, 0, 0] + + if(motiontime > 2000 and motiontime < 3000): + cmd.mode = 1 + cmd.euler = [0, -0.2, 0] + + if(motiontime > 3000 and motiontime < 4000): + cmd.mode = 1 + cmd.euler = [0, 0.2, 0] + + if(motiontime > 4000 and motiontime < 5000): + cmd.mode = 1 + cmd.euler = [0, 0, -0.2] + + if(motiontime > 5000 and motiontime < 6000): + cmd.mode = 1 + cmd.euler = [0.2, 0, 0] + + if(motiontime > 6000 and motiontime < 7000): + cmd.mode = 1 + cmd.bodyHeight = -0.2 + + if(motiontime > 7000 and motiontime < 8000): + cmd.mode = 1 + cmd.bodyHeight = 0.1 + + if(motiontime > 8000 and motiontime < 9000): + cmd.mode = 1 + cmd.bodyHeight = 0.0 + + if(motiontime > 9000 and motiontime < 11000): + cmd.mode = 5 + + if(motiontime > 11000 and motiontime < 13000): + cmd.mode = 6 + + if(motiontime > 13000 and motiontime < 14000): + cmd.mode = 0 + + if(motiontime > 14000 and motiontime < 18000): + cmd.mode = 2 + cmd.gaitType = 2 + cmd.velocity = [0.4, 0] # -1 ~ +1 + cmd.yawSpeed = 2 + cmd.footRaiseHeight = 0.1 + # printf("walk\n") + + if(motiontime > 18000 and motiontime < 20000): + cmd.mode = 0 + cmd.velocity = [0, 0] + + if(motiontime > 20000 and motiontime < 24000): + cmd.mode = 2 + cmd.gaitType = 1 + cmd.velocity = [0.2, 0] # -1 ~ +1 + cmd.bodyHeight = 0.1 + # printf("walk\n") + + + udp.SetSend(cmd) + udp.Send() diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/test.py b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/test.py new file mode 100644 index 0000000..2c4272b --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/test.py @@ -0,0 +1,7 @@ +import unitree_python_sdk +unitree_robot = unitree_python_sdk.Unitree_Robot_High() + +while True: + unitree_robot.execute(yawSpeed=1) + state = unitree_robot.getState() + # print(state.imu.rpy[0]) diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/unitree.py b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/unitree.py new file mode 100644 index 0000000..127e772 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/unitree.py @@ -0,0 +1,27 @@ +HIGHLEVEL = 0xee +LOWLEVEL = 0xff + +FR_ = 0 # leg index +FL_ = 1 +RR_ = 2 +RL_ = 3 + +FR_0 = 0 # joint index +FR_1 = 1 +FR_2 = 2 + +FL_0 = 3 +FL_1 = 4 +FL_2 = 5 + +RR_0 = 6 +RR_1 = 7 +RR_2 = 8 + +RL_0 = 9 +RL_1 = 10 +RL_2 = 11 + +calibration_forwardspeed = 0.0 +calibration_sidespeed = 0.0 +calibration_rotatespeed = 0.0 \ No newline at end of file diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/unitree_python_sdk.py b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/unitree_python_sdk.py new file mode 100644 index 0000000..2645fbc --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/example_py/unitree_python_sdk.py @@ -0,0 +1,60 @@ +import sys +# sys.path.append('/home/unitree/go1_guide/unitree_legged_sdk/lib/python/arm64') +sys.path.append(r'/home/pi/go1_guide/unitree_legged_sdk/lib/python/arm64') +import robot_interface as sdk + +import unitree + +class Unitree_Robot_High(): + def __init__(self): + self.udp = sdk.UDP(unitree.HIGHLEVEL, 8080, "192.168.123.161", 8082) + self.cmd = sdk.HighCmd() + self.state = sdk.HighState() + self.udp.InitCmdData(self.cmd) + + self.init_cmd() + + def init_cmd(self): + self.cmd.mode = 0 # 0:idle, default stand 1:forced stand 2:walk continuously + self.cmd.gaitType = 0 + self.cmd.speedLevel = 0 + self.cmd.footRaiseHeight = 0 + self.cmd.bodyHeight = 0 + self.cmd.euler = [0, 0, 0] + self.cmd.velocity = [0, 0] + self.cmd.yawSpeed = 0.0 + self.cmd.reserve = 0 + + def send_UDP(self): + self.udp.SetSend(self.cmd) + self.udp.Send() + + def execute(self, mode=2, gaitType=0, speedLevel=0, + footRaiseHeight=0, bodyHeight=0, + euler=[0,0,0], velocity=[0,0], yawSpeed=0.0, reverve=0): + self.init_cmd() + self.cmd.mode = mode + self.cmd.gaitType = gaitType + self.cmd.speedLevel = speedLevel + self.cmd.footRaiseHeight = footRaiseHeight + self.cmd.bodyHeight = bodyHeight + self.cmd.euler = euler + self.cmd.velocity = velocity + self.cmd.yawSpeed = yawSpeed + self.cmd.reserve = reverve + self.send_UDP() + + # def pose(self, roll, pitch, yaw, bodyHeight): + # self.init_cmd() + # self.cmd.mode = 1 + # self.cmd.bodyHeight = bodyHeight + # self.cmd.yaw = yaw + # self.cmd.pitch = pitch + # self.cmd.roll = roll + # self.send_UDP() + + def getState(self): + self.udp.Recv() + self.udp.GetRecv(self.state) + return self.state + diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/a1_const.h b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/a1_const.h new file mode 100644 index 0000000..84e8436 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/a1_const.h @@ -0,0 +1,18 @@ +/***************************************************************** + Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +******************************************************************/ + +#ifndef _UNITREE_LEGGED_A1_H_ +#define _UNITREE_LEGGED_A1_H_ + +namespace UNITREE_LEGGED_SDK +{ + constexpr double a1_Hip_max = 0.802; // unit:radian ( = 46 degree) + constexpr double a1_Hip_min = -0.802; // unit:radian ( = -46 degree) + constexpr double a1_Thigh_max = 4.19; // unit:radian ( = 240 degree) + constexpr double a1_Thigh_min = -1.05; // unit:radian ( = -60 degree) + constexpr double a1_Calf_max = -0.916; // unit:radian ( = -52.5 degree) + constexpr double a1_Calf_min = -2.7; // unit:radian ( = -154.5 degree) +} + +#endif diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/aliengo_const.h b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/aliengo_const.h new file mode 100644 index 0000000..12c3138 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/aliengo_const.h @@ -0,0 +1,18 @@ +/***************************************************************** + Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +******************************************************************/ + +#ifndef _UNITREE_LEGGED_ALIENGO_H_ +#define _UNITREE_LEGGED_ALIENGO_H_ + +namespace UNITREE_LEGGED_SDK +{ + constexpr double aliengo_Hip_max = 1.047; // unit:radian ( = 60 degree) + constexpr double aliengo_Hip_min = -0.873; // unit:radian ( = -50 degree) + constexpr double aliengo_Thigh_max = 3.927; // unit:radian ( = 225 degree) + constexpr double aliengo_Thigh_min = -0.524; // unit:radian ( = -30 degree) + constexpr double aliengo_Calf_max = -0.611; // unit:radian ( = -35 degree) + constexpr double aliengo_Calf_min = -2.775; // unit:radian ( = -159 degree) +} + +#endif diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/comm.h b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/comm.h new file mode 100644 index 0000000..82c594d --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/comm.h @@ -0,0 +1,216 @@ +/***************************************************************** + Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +******************************************************************/ + +#ifndef _UNITREE_LEGGED_COMM_H_ +#define _UNITREE_LEGGED_COMM_H_ + +#include +#include + +namespace UNITREE_LEGGED_SDK +{ + + constexpr int HIGHLEVEL = 0xee; + constexpr int LOWLEVEL = 0xff; + constexpr int TRIGERLEVEL = 0xf0; + constexpr double PosStopF = (2.146E+9f); + constexpr double VelStopF = (16000.0f); + extern const int HIGH_CMD_LENGTH; // sizeof(HighCmd) + extern const int HIGH_STATE_LENGTH; // sizeof(HighState) + extern const int LOW_CMD_LENGTH; // shorter than sizeof(LowCmd), bytes compressed LowCmd length + extern const int LOW_STATE_LENGTH; // shorter than sizeof(LowState), bytes compressed LowState length + +#pragma pack(1) + + typedef struct + { + uint8_t off; // off 0xA5 + std::array reserve; + } BmsCmd; + + typedef struct + { + uint8_t version_h; + uint8_t version_l; + uint8_t bms_status; + uint8_t SOC; // SOC 0-100% + int32_t current; // mA + uint16_t cycle; + std::array BQ_NTC; // x1 degrees centigrade + std::array MCU_NTC; // x1 degrees centigrade + std::array cell_vol; // cell voltage mV + } BmsState; + + typedef struct + { + float x; + float y; + float z; + } Cartesian; + + typedef struct + { + std::array quaternion; // quaternion, normalized, (w,x,y,z) + std::array gyroscope; // angular velocity (unit: rad/s) (raw data) + std::array accelerometer; // m/(s2) (raw data) + std::array rpy; // euler angle(unit: rad) + int8_t temperature; + } IMU; // when under accelerated motion, the attitude of the robot calculated by IMU will drift. + + typedef struct + { + uint8_t r; + uint8_t g; + uint8_t b; + } LED; // foot led brightness: 0~255 + + typedef struct + { + uint8_t mode; // motor working mode + float q; // current angle (unit: radian) + float dq; // current velocity (unit: radian/second) + float ddq; // current acc (unit: radian/second*second) + float tauEst; // current estimated output torque (unit: N.m) + float q_raw; // current angle (unit: radian) + float dq_raw; // current velocity (unit: radian/second) + float ddq_raw; + int8_t temperature; // current temperature (temperature conduction is slow that leads to lag) + std::array reserve; + } MotorState; // motor feedback + + typedef struct + { + uint8_t mode; // desired working mode + float q; // desired angle (unit: radian) + float dq; // desired velocity (unit: radian/second) + float tau; // desired output torque (unit: N.m) + float Kp; // desired position stiffness (unit: N.m/rad ) + float Kd; // desired velocity stiffness (unit: N.m/(rad/s) ) + std::array reserve; + } MotorCmd; // motor control + + typedef struct + { + std::array head; + uint8_t levelFlag; + uint8_t frameReserve; + + std::array SN; + std::array version; + uint16_t bandWidth; + IMU imu; + std::array motorState; + BmsState bms; + std::array footForce; // force sensors + std::array footForceEst; // force sensors + uint32_t tick; // reference real-time from motion controller (unit: us) + std::array wirelessRemote; // wireless commands + uint32_t reserve; + + uint32_t crc; + } LowState; // low level feedback + + typedef struct + { + std::array head; + uint8_t levelFlag; + uint8_t frameReserve; + + std::array SN; + std::array version; + uint16_t bandWidth; + std::array motorCmd; + BmsCmd bms; + std::array wirelessRemote; + uint32_t reserve; + + uint32_t crc; + } LowCmd; // low level control + + typedef struct + { + std::array head; + uint8_t levelFlag; + uint8_t frameReserve; + + std::array SN; + std::array version; + uint16_t bandWidth; + IMU imu; + std::array motorState; + BmsState bms; + std::array footForce; + std::array footForceEst; + uint8_t mode; + float progress; + uint8_t gaitType; // 0.idle 1.trot 2.trot running 3.climb stair 4.trot obstacle + float footRaiseHeight; // (unit: m, default: 0.08m), foot up height while walking + std::array position; // (unit: m), from own odometry in inertial frame, usually drift + float bodyHeight; // (unit: m, default: 0.28m), + std::array velocity; // (unit: m/s), forwardSpeed, sideSpeed, rotateSpeed in body frame + float yawSpeed; // (unit: rad/s), rotateSpeed in body frame + std::array rangeObstacle; + std::array footPosition2Body; // foot position relative to body + std::array footSpeed2Body; // foot speed relative to body + std::array wirelessRemote; + uint32_t reserve; + + uint32_t crc; + } HighState; // high level feedback + + typedef struct + { + std::array head; + uint8_t levelFlag; + uint8_t frameReserve; + + std::array SN; + std::array version; + uint16_t bandWidth; + uint8_t mode; // 0. idle, default stand 1. force stand (controlled by dBodyHeight + ypr) + // 2. target velocity walking (controlled by velocity + yawSpeed) + // 3. target position walking (controlled by position + ypr[0]) + // 4. path mode walking (reserve for future release) + // 5. position stand down. + // 6. position stand up + // 7. damping mode + // 8. recovery stand + // 9. backflip + // 10. jumpYaw + // 11. straightHand + // 12. dance1 + // 13. dance2 + + uint8_t gaitType; // 0.idle 1.trot 2.trot running 3.climb stair 4.trot obstacle + uint8_t speedLevel; // 0. default low speed. 1. medium speed 2. high speed. during walking, only respond MODE 3 + float footRaiseHeight; // (unit: m, default: 0.08m), foot up height while walking, delta value + float bodyHeight; // (unit: m, default: 0.28m), delta value + std::array position; // (unit: m), desired position in inertial frame + std::array euler; // (unit: rad), roll pitch yaw in stand mode + std::array velocity; // (unit: m/s), forwardSpeed, sideSpeed in body frame + float yawSpeed; // (unit: rad/s), rotateSpeed in body frame + BmsCmd bms; + std::array led; + std::array wirelessRemote; + uint32_t reserve; + + uint32_t crc; + } HighCmd; // high level control + +#pragma pack() + + typedef struct + { + unsigned long long TotalCount; // total loop count + unsigned long long SendCount; // total send count + unsigned long long RecvCount; // total receive count + unsigned long long SendError; // total send error + unsigned long long FlagError; // total flag error + unsigned long long RecvCRCError; // total reveive CRC error + unsigned long long RecvLoseError; // total lose package count + } UDPState; // UDP communication state + +} + +#endif diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/go1_const.h b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/go1_const.h new file mode 100644 index 0000000..efdbef2 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/go1_const.h @@ -0,0 +1,18 @@ +/***************************************************************** + Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +******************************************************************/ + +#ifndef _UNITREE_LEGGED_GO1_H_ +#define _UNITREE_LEGGED_GO1_H_ + +namespace UNITREE_LEGGED_SDK +{ + constexpr double go1_Hip_max = 1.047; // unit:radian ( = 60 degree) + constexpr double go1_Hip_min = -1.047; // unit:radian ( = -60 degree) + constexpr double go1_Thigh_max = 2.966; // unit:radian ( = 170 degree) + constexpr double go1_Thigh_min = -0.663; // unit:radian ( = -38 degree) + constexpr double go1_Calf_max = -0.837; // unit:radian ( = -48 degree) + constexpr double go1_Calf_min = -2.721; // unit:radian ( = -156 degree) +} + +#endif diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/joystick.h b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/joystick.h new file mode 100644 index 0000000..6c1cdd2 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/joystick.h @@ -0,0 +1,44 @@ +/***************************************************************** +Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +*****************************************************************/ +#ifndef _UNITREE_LEGGED_JOYSTICK_H_ +#define _UNITREE_LEGGED_JOYSTICK_H_ + +#include +// 16b +typedef union { + struct { + uint8_t R1 :1; + uint8_t L1 :1; + uint8_t start :1; + uint8_t select :1; + uint8_t R2 :1; + uint8_t L2 :1; + uint8_t F1 :1; + uint8_t F2 :1; + uint8_t A :1; + uint8_t B :1; + uint8_t X :1; + uint8_t Y :1; + uint8_t up :1; + uint8_t right :1; + uint8_t down :1; + uint8_t left :1; + } components; + uint16_t value; +} xKeySwitchUnion; + +// 40 Byte (now used 24B) +typedef struct { + uint8_t head[2]; + xKeySwitchUnion btn; + float lx; + float rx; + float ry; + float L2; + float ly; + + uint8_t idle[16]; +} xRockerBtnDataStruct; + +#endif // _UNITREE_LEGGED_JOYSTICK_H_ \ No newline at end of file diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/loop.h b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/loop.h new file mode 100644 index 0000000..b8e1d4c --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/loop.h @@ -0,0 +1,61 @@ +/***************************************************************** + Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +******************************************************************/ + +#ifndef _UNITREE_LEGGED_LOOP_H_ +#define _UNITREE_LEGGED_LOOP_H_ + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace UNITREE_LEGGED_SDK +{ + +constexpr int THREAD_PRIORITY = 95; // real-time priority + +typedef boost::function Callback; + +class Loop { +public: + Loop(std::string name, float period, int bindCPU = -1):_name(name), _period(period), _bindCPU(bindCPU) {} + ~Loop(); + void start(); + void shutdown(); + virtual void functionCB() = 0; + +private: + void entryFunc(); + + std::string _name; + float _period; + int _bindCPU; + bool _bind_cpu_flag = false; + bool _isrunning = false; + std::thread _thread; +}; + +/* + period unit:second + bindCPU change the CPU affinity of this thread +*/ +class LoopFunc : public Loop { +public: + LoopFunc(std::string name, float period, const Callback& _cb) + : Loop(name, period), _fp(_cb){} + LoopFunc(std::string name, float period, int bindCPU, const Callback& _cb) + : Loop(name, period, bindCPU), _fp(_cb){} + void functionCB() { (_fp)(); } +private: + boost::function _fp; +}; + + +} + +#endif diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/quadruped.h b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/quadruped.h new file mode 100644 index 0000000..5ffc794 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/quadruped.h @@ -0,0 +1,50 @@ +/***************************************************************** + Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +******************************************************************/ + +#ifndef _UNITREE_LEGGED_QUADRUPED_H_ +#define _UNITREE_LEGGED_QUADRUPED_H_ + +#include + +using namespace std; + +namespace UNITREE_LEGGED_SDK +{ + +enum class LeggedType { + Aliengo, + A1, + Go1, + B1 +}; + + +string VersionSDK(); +int InitEnvironment(); // memory lock + +// definition of each leg and joint +constexpr int FR_ = 0; // leg index +constexpr int FL_ = 1; +constexpr int RR_ = 2; +constexpr int RL_ = 3; + +constexpr int FR_0 = 0; // joint index +constexpr int FR_1 = 1; +constexpr int FR_2 = 2; + +constexpr int FL_0 = 3; +constexpr int FL_1 = 4; +constexpr int FL_2 = 5; + +constexpr int RR_0 = 6; +constexpr int RR_1 = 7; +constexpr int RR_2 = 8; + +constexpr int RL_0 = 9; +constexpr int RL_1 = 10; +constexpr int RL_2 = 11; + +} + +#endif diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/safety.h b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/safety.h new file mode 100644 index 0000000..59f6297 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/safety.h @@ -0,0 +1,31 @@ +/***************************************************************** + Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +******************************************************************/ + +#ifndef _UNITREE_LEGGED_SAFETY_H_ +#define _UNITREE_LEGGED_SAFETY_H_ + +#include "comm.h" +#include "quadruped.h" + +namespace UNITREE_LEGGED_SDK +{ + +class Safety{ +public: + Safety(LeggedType type); + ~Safety(); + void PositionLimit(LowCmd&); // only effect under Low Level control in Position mode + int PowerProtect(LowCmd&, LowState&, int); /* only effect under Low Level control, input factor: 1~10, + means 10%~100% power limit. If you are new, then use 1; if you are familiar, + then can try bigger number or even comment this function. */ + int PositionProtect(LowCmd&, LowState&, double limit = 0.087); // default limit is 5 degree +private: + int WattLimit, Wcount; // Watt. When limit to 100, you can triger it with 4 hands shaking. + double Hip_max, Hip_min, Thigh_max, Thigh_min, Calf_max, Calf_min; +}; + + +} + +#endif diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/udp.h b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/udp.h new file mode 100644 index 0000000..05d5525 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/udp.h @@ -0,0 +1,101 @@ +/***************************************************************** + Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +******************************************************************/ + +#ifndef _UNITREE_LEGGED_UDP_H_ +#define _UNITREE_LEGGED_UDP_H_ + +#include "comm.h" +#include "unitree_legged_sdk/quadruped.h" +#include +#include + +/* + UDP critical configuration: + + 1. initiativeDisconnect: if need disconnection after connected, another ip/port can access after disconnection + + /--- block will block till data come + 2. recvType ---- block + timeout will block till data come or timeout + \--- non block if no data will return immediately + + /--- Y ip/port will be set later + 3. setIpPort: + \--- N ip/port not specified, as a server wait for connect +*/ + + +namespace UNITREE_LEGGED_SDK +{ + + constexpr int UDP_CLIENT_PORT = 8080; // local port + constexpr int UDP_SERVER_PORT = 8007; // target port + constexpr char UDP_SERVER_IP_BASIC[] = "192.168.123.10"; // target IP address + constexpr char UDP_SERVER_IP_SPORT[] = "192.168.123.161"; // target IP address + + typedef enum { + nonBlock = 0x00, + block = 0x01, + blockTimeout = 0x02, + } RecvEnum; + + // Notice: User defined data(like struct) should add crc(4Byte) at the end. + class UDP { + public: + UDP(uint8_t level, uint16_t localPort, const char* targetIP, uint16_t targetPort); // udp use dafault length according to level + UDP(uint16_t localPort, const char* targetIP, uint16_t targetPort, + int sendLength, int recvLength, bool initiativeDisconnect = false, RecvEnum recvType = RecvEnum::nonBlock); + UDP(uint16_t localPort, + int sendLength, int recvLength, bool initiativeDisconnect = false, RecvEnum recvType = RecvEnum::nonBlock, bool setIpPort = false); + ~UDP(); + + void SetIpPort(const char* targetIP, uint16_t targetPort); // if not indicated at constructor function + void SetRecvTimeout(int time); // use in RecvEnum::blockTimeout (unit: ms) + + void SetDisconnectTime(float callback_dt, float disconnectTime); // initiativeDisconnect = true, disconnect for another IP to connect + void SetAccessibleTime(float callback_dt, float accessibleTime); // check if can access data + + int Send(); + int Recv(); // directly save in buffer + + void InitCmdData(HighCmd& cmd); + void InitCmdData(LowCmd& cmd); + int SetSend(char*); + int SetSend(HighCmd&); + int SetSend(LowCmd&); + void GetRecv(char*); + void GetRecv(HighState&); + void GetRecv(LowState&); + + UDPState udpState; + char* targetIP; + uint16_t targetPort; + char* localIP; + uint16_t localPort; + bool accessible = false; // can access or not + + private: + void init(uint16_t localPort, const char* targetIP = NULL, uint16_t targetPort = 0); + + int sockFd; + bool connected; // udp works with connect() function, rather than server mode + int sendLength; + int recvLength; + int lose_recv; + + char* recvBuf; + char* recvAvaliable; + char* sendBuf; + pthread_mutex_t sendMutex; + pthread_mutex_t recvMutex; + pthread_mutex_t udpMutex; + + bool nonblock = true; + int blockTimeout = -1; // use time out method or not, (unit: ms) + bool initiativeDisconnect = false; // + + }; + +} + +#endif diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/unitree_legged_sdk.h b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/unitree_legged_sdk.h new file mode 100644 index 0000000..074b449 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/include/unitree_legged_sdk/unitree_legged_sdk.h @@ -0,0 +1,18 @@ +/***************************************************************** + Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +******************************************************************/ + +#ifndef _UNITREE_LEGGED_SDK_H_ +#define _UNITREE_LEGGED_SDK_H_ + +#include "comm.h" +#include "safety.h" +#include "udp.h" +#include "loop.h" +#include "quadruped.h" +#include "joystick.h" +#include + +#define UT UNITREE_LEGGED_SDK //short name + +#endif diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/cpp/amd64/libunitree_legged_sdk.a b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/cpp/amd64/libunitree_legged_sdk.a new file mode 100644 index 0000000..baa788a Binary files /dev/null and b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/cpp/amd64/libunitree_legged_sdk.a differ diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/cpp/arm64/libunitree_legged_sdk.a b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/cpp/arm64/libunitree_legged_sdk.a new file mode 100644 index 0000000..78515e9 Binary files /dev/null and b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/cpp/arm64/libunitree_legged_sdk.a differ diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/python/amd64/robot_interface.cpython-38-x86_64-linux-gnu.so b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/python/amd64/robot_interface.cpython-38-x86_64-linux-gnu.so new file mode 100644 index 0000000..86775dc Binary files /dev/null and b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/python/amd64/robot_interface.cpython-38-x86_64-linux-gnu.so differ diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/python/arm64/robot_interface.cpython-37m-aarch64-linux-gnu.so b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/python/arm64/robot_interface.cpython-37m-aarch64-linux-gnu.so new file mode 100644 index 0000000..d9a30f4 Binary files /dev/null and b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/python/arm64/robot_interface.cpython-37m-aarch64-linux-gnu.so differ diff --git a/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/python/arm64/robot_interface.cpython-38-aarch64-linux-gnu.so b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/python/arm64/robot_interface.cpython-38-aarch64-linux-gnu.so new file mode 100644 index 0000000..c13db01 Binary files /dev/null and b/src/Robot/go1_guide/raspberrypi/unitree_legged_sdk/lib/python/arm64/robot_interface.cpython-38-aarch64-linux-gnu.so differ diff --git a/src/Robot/go1_guide/raspberrypi/unitree_python_sdk.py b/src/Robot/go1_guide/raspberrypi/unitree_python_sdk.py new file mode 100644 index 0000000..4ec70b6 --- /dev/null +++ b/src/Robot/go1_guide/raspberrypi/unitree_python_sdk.py @@ -0,0 +1,60 @@ +import sys +# sys.path.append('/home/unitree/go1_guide/raspberrypi/unitree_legged_sdk/lib/python/arm64') +sys.path.append(r'/home/pi/go1_guide/raspberrypi/unitree_legged_sdk/lib/python/arm64') +import robot_interface as sdk + +import unitree + +class Unitree_Robot_High(): + def __init__(self): + self.udp = sdk.UDP(unitree.HIGHLEVEL, 8080, "192.168.123.161", 8082) + self.cmd = sdk.HighCmd() + self.state = sdk.HighState() + self.udp.InitCmdData(self.cmd) + + self.init_cmd() + + def init_cmd(self): + self.cmd.mode = 0 # 0:idle, default stand 1:forced stand 2:walk continuously + self.cmd.gaitType = 0 + self.cmd.speedLevel = 0 + self.cmd.footRaiseHeight = 0 + self.cmd.bodyHeight = 0 + self.cmd.euler = [0, 0, 0] + self.cmd.velocity = [0, 0] + self.cmd.yawSpeed = 0.0 + self.cmd.reserve = 0 + + def send_UDP(self): + self.udp.SetSend(self.cmd) + self.udp.Send() + + def execute(self, mode=2, gaitType=0, speedLevel=0, + footRaiseHeight=0, bodyHeight=0, + euler=[0,0,0], velocity=[0,0], yawSpeed=0.0, reverve=0): + self.init_cmd() + self.cmd.mode = mode + self.cmd.gaitType = gaitType + self.cmd.speedLevel = speedLevel + self.cmd.footRaiseHeight = footRaiseHeight + self.cmd.bodyHeight = bodyHeight + self.cmd.euler = euler + self.cmd.velocity = velocity + self.cmd.yawSpeed = yawSpeed + self.cmd.reserve = reverve + self.send_UDP() + + # def pose(self, roll, pitch, yaw, bodyHeight): + # self.init_cmd() + # self.cmd.mode = 1 + # self.cmd.bodyHeight = bodyHeight + # self.cmd.yaw = yaw + # self.cmd.pitch = pitch + # self.cmd.roll = roll + # self.send_UDP() + + def getState(self): + self.udp.Recv() + self.udp.GetRecv(self.state) + return self.state + diff --git a/src/Robot/go1_guide/setup.sh b/src/Robot/go1_guide/setup.sh new file mode 100644 index 0000000..1dbd223 --- /dev/null +++ b/src/Robot/go1_guide/setup.sh @@ -0,0 +1,5 @@ +## install PaddleDetection +git clone https://gitee.com/PaddlePaddle/PaddleDetection.git +cd ~/PaddleDetection +pip install -r requirements.txt +python setup.py install diff --git a/src/Robot/go1_guide/test.py b/src/Robot/go1_guide/test.py new file mode 100644 index 0000000..4b811b1 --- /dev/null +++ b/src/Robot/go1_guide/test.py @@ -0,0 +1,17 @@ +import cv2 +from core.Camera import Camera + +vedio = Camera('http://192.168.123.13:5000/video1') + +t = 5 +while True: + frame = vedio.getframe() + # cv2.imshow('test', frame) + + t -= 1 + if not t: + cv2.imwrite('test.jpg', frame) + break + + waitkey = cv2.waitKey(1) + if waitkey == ord('q'): break diff --git a/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/details.md b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/details.md new file mode 100644 index 0000000..a238746 --- /dev/null +++ b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/details.md @@ -0,0 +1,62 @@ +# Details + +Date : 2024-06-17 19:42:01 + +Directory d:\\Administrator\\Desktop\\unilidar_sdk + +Total : 47 files, 6250 codes, 1726 comments, 1144 blanks, all 9120 lines + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | +| [README.md](/README.md) | Markdown | 19 | 0 | 9 | 28 | +| [unitree_lidar_ros2/src/unitree_lidar_ros2/README.md](/unitree_lidar_ros2/src/unitree_lidar_ros2/README.md) | Markdown | 60 | 0 | 24 | 84 | +| [unitree_lidar_ros2/src/unitree_lidar_ros2/include/unitree_lidar_ros2.h](/unitree_lidar_ros2/src/unitree_lidar_ros2/include/unitree_lidar_ros2.h) | C++ | 113 | 16 | 44 | 173 | +| [unitree_lidar_ros2/src/unitree_lidar_ros2/launch/launch.py](/unitree_lidar_ros2/src/unitree_lidar_ros2/launch/launch.py) | Python | 24 | 13 | 4 | 41 | +| [unitree_lidar_ros2/src/unitree_lidar_ros2/package.xml](/unitree_lidar_ros2/src/unitree_lidar_ros2/package.xml) | XML | 20 | 0 | 5 | 25 | +| [unitree_lidar_ros2/src/unitree_lidar_ros2/rviz/view.rviz](/unitree_lidar_ros2/src/unitree_lidar_ros2/rviz/view.rviz) | YAML | 168 | 0 | 1 | 169 | +| [unitree_lidar_ros2/src/unitree_lidar_ros2/src/unitree_lidar_ros2_node.cpp](/unitree_lidar_ros2/src/unitree_lidar_ros2/src/unitree_lidar_ros2_node.cpp) | C++ | 9 | 3 | 2 | 14 | +| [unitree_lidar_ros/src/unitree_lidar_ros/README.md](/unitree_lidar_ros/src/unitree_lidar_ros/README.md) | Markdown | 58 | 0 | 24 | 82 | +| [unitree_lidar_ros/src/unitree_lidar_ros/config/config.yaml](/unitree_lidar_ros/src/unitree_lidar_ros/config/config.yaml) | YAML | 16 | 9 | 6 | 31 | +| [unitree_lidar_ros/src/unitree_lidar_ros/include/unitree_lidar_ros.h](/unitree_lidar_ros/src/unitree_lidar_ros/include/unitree_lidar_ros.h) | C++ | 123 | 27 | 36 | 186 | +| [unitree_lidar_ros/src/unitree_lidar_ros/launch/run.launch](/unitree_lidar_ros/src/unitree_lidar_ros/launch/run.launch) | XML | 6 | 0 | 5 | 11 | +| [unitree_lidar_ros/src/unitree_lidar_ros/launch/run_without_rviz.launch](/unitree_lidar_ros/src/unitree_lidar_ros/launch/run_without_rviz.launch) | XML | 5 | 1 | 5 | 11 | +| [unitree_lidar_ros/src/unitree_lidar_ros/package.xml](/unitree_lidar_ros/src/unitree_lidar_ros/package.xml) | XML | 34 | 0 | 11 | 45 | +| [unitree_lidar_ros/src/unitree_lidar_ros/rviz/view.rviz](/unitree_lidar_ros/src/unitree_lidar_ros/rviz/view.rviz) | YAML | 169 | 0 | 1 | 170 | +| [unitree_lidar_ros/src/unitree_lidar_ros/src/unitree_lidar_ros_node.cpp](/unitree_lidar_ros/src/unitree_lidar_ros/src/unitree_lidar_ros_node.cpp) | C++ | 14 | 6 | 6 | 26 | +| [unitree_lidar_sdk/HowToParsePointCloudAndIMUDataFromMavLinkMessages.md](/unitree_lidar_sdk/HowToParsePointCloudAndIMUDataFromMavLinkMessages.md) | Markdown | 147 | 0 | 27 | 174 | +| [unitree_lidar_sdk/README.md](/unitree_lidar_sdk/README.md) | Markdown | 148 | 0 | 47 | 195 | +| [unitree_lidar_sdk/examples/example_lidar.cpp](/unitree_lidar_sdk/examples/example_lidar.cpp) | C++ | 107 | 10 | 23 | 140 | +| [unitree_lidar_sdk/examples/example_lidar_udp.cpp](/unitree_lidar_sdk/examples/example_lidar_udp.cpp) | C++ | 120 | 10 | 27 | 157 | +| [unitree_lidar_sdk/examples/unilidar_publisher_udp.cpp](/unitree_lidar_sdk/examples/unilidar_publisher_udp.cpp) | C++ | 118 | 9 | 25 | 152 | +| [unitree_lidar_sdk/examples/unilidar_subcriber_udp.py](/unitree_lidar_sdk/examples/unilidar_subcriber_udp.py) | Python | 71 | 7 | 17 | 95 | +| [unitree_lidar_sdk/examples/unilidar_subscriber_udp.cpp](/unitree_lidar_sdk/examples/unilidar_subscriber_udp.cpp) | C++ | 84 | 4 | 15 | 103 | +| [unitree_lidar_sdk/include/mavlink/SysMavlink/SysMavlink.h](/unitree_lidar_sdk/include/mavlink/SysMavlink/SysMavlink.h) | C++ | 158 | 18 | 29 | 205 | +| [unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink.h](/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink.h) | C++ | 22 | 4 | 9 | 35 | +| [unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_config_led_ring_table_packet.h](/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_config_led_ring_table_packet.h) | C++ | 181 | 98 | 27 | 306 | +| [unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_config_lidar_working_mode.h](/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_config_lidar_working_mode.h) | C++ | 116 | 66 | 32 | 214 | +| [unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_device_command.h](/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_device_command.h) | C++ | 116 | 66 | 32 | 214 | +| [unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_device_request_data.h](/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_device_request_data.h) | C++ | 116 | 66 | 32 | 214 | +| [unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_imu_attitude_data_packet.h](/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_imu_attitude_data_packet.h) | C++ | 167 | 90 | 26 | 283 | +| [unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_auxiliary_data_packet.h](/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_auxiliary_data_packet.h) | C++ | 501 | 258 | 47 | 806 | +| [unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_distance_data_packet.h](/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_distance_data_packet.h) | C++ | 165 | 90 | 26 | 281 | +| [unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_time_sync_data.h](/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_time_sync_data.h) | C++ | 132 | 74 | 33 | 239 | +| [unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_version.h](/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_version.h) | C++ | 168 | 90 | 34 | 292 | +| [unitree_lidar_sdk/include/mavlink/SysMavlink/testsuite.h](/unitree_lidar_sdk/include/mavlink/SysMavlink/testsuite.h) | C++ | 877 | 19 | 131 | 1,027 | +| [unitree_lidar_sdk/include/mavlink/SysMavlink/version.h](/unitree_lidar_sdk/include/mavlink/SysMavlink/version.h) | C++ | 7 | 4 | 4 | 15 | +| [unitree_lidar_sdk/include/mavlink/checksum.h](/unitree_lidar_sdk/include/mavlink/checksum.h) | C++ | 44 | 37 | 15 | 96 | +| [unitree_lidar_sdk/include/mavlink/mavlink_conversions.h](/unitree_lidar_sdk/include/mavlink/mavlink_conversions.h) | C++ | 122 | 64 | 27 | 213 | +| [unitree_lidar_sdk/include/mavlink/mavlink_get_info.h](/unitree_lidar_sdk/include/mavlink/mavlink_get_info.h) | C++ | 60 | 17 | 7 | 84 | +| [unitree_lidar_sdk/include/mavlink/mavlink_helpers.h](/unitree_lidar_sdk/include/mavlink/mavlink_helpers.h) | C++ | 756 | 284 | 95 | 1,135 | +| [unitree_lidar_sdk/include/mavlink/mavlink_sha256.h](/unitree_lidar_sdk/include/mavlink/mavlink_sha256.h) | C++ | 163 | 46 | 27 | 236 | +| [unitree_lidar_sdk/include/mavlink/mavlink_types.h](/unitree_lidar_sdk/include/mavlink/mavlink_types.h) | C++ | 209 | 56 | 37 | 302 | +| [unitree_lidar_sdk/include/mavlink/protocol.h](/unitree_lidar_sdk/include/mavlink/protocol.h) | C++ | 273 | 21 | 41 | 335 | +| [unitree_lidar_sdk/include/parse_range_auxiliary_data_to_cloud.h](/unitree_lidar_sdk/include/parse_range_auxiliary_data_to_cloud.h) | C++ | 52 | 17 | 12 | 81 | +| [unitree_lidar_sdk/include/udp_handler.h](/unitree_lidar_sdk/include/udp_handler.h) | C++ | 30 | 12 | 9 | 51 | +| [unitree_lidar_sdk/include/unitree_lidar_sdk.h](/unitree_lidar_sdk/include/unitree_lidar_sdk.h) | C++ | 117 | 100 | 36 | 253 | +| [unitree_lidar_sdk/include/unitree_lidar_sdk_config.h](/unitree_lidar_sdk/include/unitree_lidar_sdk_config.h) | C++ | 4 | 0 | 1 | 5 | +| [unitree_lidar_sdk/include/unitree_lidar_sdk_pcl.h](/unitree_lidar_sdk/include/unitree_lidar_sdk_pcl.h) | C++ | 61 | 14 | 11 | 86 | + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/diff-details.md b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/diff-details.md new file mode 100644 index 0000000..736bce2 --- /dev/null +++ b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/diff-details.md @@ -0,0 +1,15 @@ +# Diff Details + +Date : 2024-06-17 19:42:01 + +Directory d:\\Administrator\\Desktop\\unilidar_sdk + +Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/diff.csv b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/diff.csv new file mode 100644 index 0000000..b7d8d75 --- /dev/null +++ b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/diff.csv @@ -0,0 +1,2 @@ +"filename", "language", "", "comment", "blank", "total" +"Total", "-", , 0, 0, 0 \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/diff.md b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/diff.md new file mode 100644 index 0000000..4f78f41 --- /dev/null +++ b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/diff.md @@ -0,0 +1,19 @@ +# Diff Summary + +Date : 2024-06-17 19:42:01 + +Directory d:\\Administrator\\Desktop\\unilidar_sdk + +Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/diff.txt b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/diff.txt new file mode 100644 index 0000000..781072f --- /dev/null +++ b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/diff.txt @@ -0,0 +1,22 @@ +Date : 2024-06-17 19:42:01 +Directory : d:\Administrator\Desktop\unilidar_sdk +Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ ++----------+------------+------------+------------+------------+------------+ + +Directories ++------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++------+------------+------------+------------+------------+------------+ ++------+------------+------------+------------+------------+------------+ + +Files ++----------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++----------+----------+------------+------------+------------+------------+ +| Total | | 0 | 0 | 0 | 0 | ++----------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/results.csv b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/results.csv new file mode 100644 index 0000000..810bb57 --- /dev/null +++ b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/results.csv @@ -0,0 +1,49 @@ +"filename", "language", "C++", "Python", "Markdown", "XML", "YAML", "comment", "blank", "total" +"d:\Administrator\Desktop\unilidar_sdk\README.md", "Markdown", 0, 0, 19, 0, 0, 0, 9, 28 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros2\src\unitree_lidar_ros2\README.md", "Markdown", 0, 0, 60, 0, 0, 0, 24, 84 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros2\src\unitree_lidar_ros2\include\unitree_lidar_ros2.h", "C++", 113, 0, 0, 0, 0, 16, 44, 173 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros2\src\unitree_lidar_ros2\launch\launch.py", "Python", 0, 24, 0, 0, 0, 13, 4, 41 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros2\src\unitree_lidar_ros2\package.xml", "XML", 0, 0, 0, 20, 0, 0, 5, 25 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros2\src\unitree_lidar_ros2\rviz\view.rviz", "YAML", 0, 0, 0, 0, 168, 0, 1, 169 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros2\src\unitree_lidar_ros2\src\unitree_lidar_ros2_node.cpp", "C++", 9, 0, 0, 0, 0, 3, 2, 14 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\README.md", "Markdown", 0, 0, 58, 0, 0, 0, 24, 82 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\config\config.yaml", "YAML", 0, 0, 0, 0, 16, 9, 6, 31 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\include\unitree_lidar_ros.h", "C++", 123, 0, 0, 0, 0, 27, 36, 186 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\launch\run.launch", "XML", 0, 0, 0, 6, 0, 0, 5, 11 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\launch\run_without_rviz.launch", "XML", 0, 0, 0, 5, 0, 1, 5, 11 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\package.xml", "XML", 0, 0, 0, 34, 0, 0, 11, 45 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\rviz\view.rviz", "YAML", 0, 0, 0, 0, 169, 0, 1, 170 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\src\unitree_lidar_ros_node.cpp", "C++", 14, 0, 0, 0, 0, 6, 6, 26 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\HowToParsePointCloudAndIMUDataFromMavLinkMessages.md", "Markdown", 0, 0, 147, 0, 0, 0, 27, 174 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\README.md", "Markdown", 0, 0, 148, 0, 0, 0, 47, 195 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\examples\example_lidar.cpp", "C++", 107, 0, 0, 0, 0, 10, 23, 140 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\examples\example_lidar_udp.cpp", "C++", 120, 0, 0, 0, 0, 10, 27, 157 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\examples\unilidar_publisher_udp.cpp", "C++", 118, 0, 0, 0, 0, 9, 25, 152 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\examples\unilidar_subcriber_udp.py", "Python", 0, 71, 0, 0, 0, 7, 17, 95 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\examples\unilidar_subscriber_udp.cpp", "C++", 84, 0, 0, 0, 0, 4, 15, 103 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\SysMavlink.h", "C++", 158, 0, 0, 0, 0, 18, 29, 205 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink.h", "C++", 22, 0, 0, 0, 0, 4, 9, 35 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_config_led_ring_table_packet.h", "C++", 181, 0, 0, 0, 0, 98, 27, 306 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_config_lidar_working_mode.h", "C++", 116, 0, 0, 0, 0, 66, 32, 214 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_device_command.h", "C++", 116, 0, 0, 0, 0, 66, 32, 214 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_device_request_data.h", "C++", 116, 0, 0, 0, 0, 66, 32, 214 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_ret_imu_attitude_data_packet.h", "C++", 167, 0, 0, 0, 0, 90, 26, 283 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_ret_lidar_auxiliary_data_packet.h", "C++", 501, 0, 0, 0, 0, 258, 47, 806 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_ret_lidar_distance_data_packet.h", "C++", 165, 0, 0, 0, 0, 90, 26, 281 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_ret_lidar_time_sync_data.h", "C++", 132, 0, 0, 0, 0, 74, 33, 239 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_ret_lidar_version.h", "C++", 168, 0, 0, 0, 0, 90, 34, 292 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\testsuite.h", "C++", 877, 0, 0, 0, 0, 19, 131, 1027 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\version.h", "C++", 7, 0, 0, 0, 0, 4, 4, 15 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\checksum.h", "C++", 44, 0, 0, 0, 0, 37, 15, 96 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\mavlink_conversions.h", "C++", 122, 0, 0, 0, 0, 64, 27, 213 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\mavlink_get_info.h", "C++", 60, 0, 0, 0, 0, 17, 7, 84 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\mavlink_helpers.h", "C++", 756, 0, 0, 0, 0, 284, 95, 1135 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\mavlink_sha256.h", "C++", 163, 0, 0, 0, 0, 46, 27, 236 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\mavlink_types.h", "C++", 209, 0, 0, 0, 0, 56, 37, 302 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\protocol.h", "C++", 273, 0, 0, 0, 0, 21, 41, 335 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\parse_range_auxiliary_data_to_cloud.h", "C++", 52, 0, 0, 0, 0, 17, 12, 81 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\udp_handler.h", "C++", 30, 0, 0, 0, 0, 12, 9, 51 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\unitree_lidar_sdk.h", "C++", 117, 0, 0, 0, 0, 100, 36, 253 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\unitree_lidar_sdk_config.h", "C++", 4, 0, 0, 0, 0, 0, 1, 5 +"d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\unitree_lidar_sdk_pcl.h", "C++", 61, 0, 0, 0, 0, 14, 11, 86 +"Total", "-", 5305, 95, 432, 65, 353, 1726, 1144, 9120 \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/results.json b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/results.json new file mode 100644 index 0000000..b13b4cb --- /dev/null +++ b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/results.json @@ -0,0 +1 @@ +{"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/examples/unilidar_subscriber_udp.cpp":{"language":"C++","code":84,"comment":4,"blank":15},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/examples/unilidar_publisher_udp.cpp":{"language":"C++","code":118,"comment":9,"blank":25},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/examples/unilidar_subcriber_udp.py":{"language":"Python","code":71,"comment":7,"blank":17},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/examples/example_lidar_udp.cpp":{"language":"C++","code":120,"comment":10,"blank":27},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/examples/example_lidar.cpp":{"language":"C++","code":107,"comment":10,"blank":23},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/unitree_lidar_sdk_pcl.h":{"language":"C++","code":61,"comment":14,"blank":11},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/unitree_lidar_sdk.h":{"language":"C++","code":117,"comment":100,"blank":36},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/unitree_lidar_sdk_config.h":{"language":"C++","code":4,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/udp_handler.h":{"language":"C++","code":30,"comment":12,"blank":9},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/parse_range_auxiliary_data_to_cloud.h":{"language":"C++","code":52,"comment":17,"blank":12},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/protocol.h":{"language":"C++","code":273,"comment":21,"blank":41},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_types.h":{"language":"C++","code":209,"comment":56,"blank":37},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_helpers.h":{"language":"C++","code":756,"comment":284,"blank":95},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_sha256.h":{"language":"C++","code":163,"comment":46,"blank":27},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/checksum.h":{"language":"C++","code":44,"comment":37,"blank":15},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_get_info.h":{"language":"C++","code":60,"comment":17,"blank":7},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_conversions.h":{"language":"C++","code":122,"comment":64,"blank":27},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_time_sync_data.h":{"language":"C++","code":132,"comment":74,"blank":33},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_imu_attitude_data_packet.h":{"language":"C++","code":167,"comment":90,"blank":26},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_device_request_data.h":{"language":"C++","code":116,"comment":66,"blank":32},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_device_command.h":{"language":"C++","code":116,"comment":66,"blank":32},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_auxiliary_data_packet.h":{"language":"C++","code":501,"comment":258,"blank":47},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_distance_data_packet.h":{"language":"C++","code":165,"comment":90,"blank":26},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/testsuite.h":{"language":"C++","code":877,"comment":19,"blank":131},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/version.h":{"language":"C++","code":7,"comment":4,"blank":4},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/SysMavlink.h":{"language":"C++","code":158,"comment":18,"blank":29},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_config_led_ring_table_packet.h":{"language":"C++","code":181,"comment":98,"blank":27},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/src/unitree_lidar_ros2_node.cpp":{"language":"C++","code":9,"comment":3,"blank":2},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_config_lidar_working_mode.h":{"language":"C++","code":116,"comment":66,"blank":32},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink.h":{"language":"C++","code":22,"comment":4,"blank":9},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_version.h":{"language":"C++","code":168,"comment":90,"blank":34},"file:///d%3A/Administrator/Desktop/unilidar_sdk/README.md":{"language":"Markdown","code":19,"comment":0,"blank":9},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/src/unitree_lidar_ros_node.cpp":{"language":"C++","code":14,"comment":6,"blank":6},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/package.xml":{"language":"XML","code":34,"comment":0,"blank":11},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/HowToParsePointCloudAndIMUDataFromMavLinkMessages.md":{"language":"Markdown","code":147,"comment":0,"blank":27},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/include/unitree_lidar_ros.h":{"language":"C++","code":123,"comment":27,"blank":36},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/config/config.yaml":{"language":"YAML","code":16,"comment":9,"blank":6},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_sdk/README.md":{"language":"Markdown","code":148,"comment":0,"blank":47},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/package.xml":{"language":"XML","code":20,"comment":0,"blank":5},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/launch/run_without_rviz.launch":{"language":"XML","code":5,"comment":1,"blank":5},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/include/unitree_lidar_ros2.h":{"language":"C++","code":113,"comment":16,"blank":44},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/launch/launch.py":{"language":"Python","code":24,"comment":13,"blank":4},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/rviz/view.rviz":{"language":"YAML","code":169,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/launch/run.launch":{"language":"XML","code":6,"comment":0,"blank":5},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/README.md":{"language":"Markdown","code":60,"comment":0,"blank":24},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/rviz/view.rviz":{"language":"YAML","code":168,"comment":0,"blank":1},"file:///d%3A/Administrator/Desktop/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/README.md":{"language":"Markdown","code":58,"comment":0,"blank":24}} \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/results.md b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/results.md new file mode 100644 index 0000000..d5fc140 --- /dev/null +++ b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/results.md @@ -0,0 +1,51 @@ +# Summary + +Date : 2024-06-17 19:42:01 + +Directory d:\\Administrator\\Desktop\\unilidar_sdk + +Total : 47 files, 6250 codes, 1726 comments, 1144 blanks, all 9120 lines + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| C++ | 33 | 5,305 | 1,696 | 958 | 7,959 | +| Markdown | 5 | 432 | 0 | 131 | 563 | +| YAML | 3 | 353 | 9 | 8 | 370 | +| Python | 2 | 95 | 20 | 21 | 136 | +| XML | 4 | 65 | 1 | 26 | 92 | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| . | 47 | 6,250 | 1,726 | 1,144 | 9,120 | +| . (Files) | 1 | 19 | 0 | 9 | 28 | +| unitree_lidar_ros | 8 | 425 | 43 | 94 | 562 | +| unitree_lidar_ros2 | 6 | 394 | 32 | 80 | 506 | +| unitree_lidar_ros2\\src | 6 | 394 | 32 | 80 | 506 | +| unitree_lidar_ros2\\src\\unitree_lidar_ros2 | 6 | 394 | 32 | 80 | 506 | +| unitree_lidar_ros2\\src\\unitree_lidar_ros2 (Files) | 2 | 80 | 0 | 29 | 109 | +| unitree_lidar_ros2\\src\\unitree_lidar_ros2\\include | 1 | 113 | 16 | 44 | 173 | +| unitree_lidar_ros2\\src\\unitree_lidar_ros2\\launch | 1 | 24 | 13 | 4 | 41 | +| unitree_lidar_ros2\\src\\unitree_lidar_ros2\\rviz | 1 | 168 | 0 | 1 | 169 | +| unitree_lidar_ros2\\src\\unitree_lidar_ros2\\src | 1 | 9 | 3 | 2 | 14 | +| unitree_lidar_ros\\src | 8 | 425 | 43 | 94 | 562 | +| unitree_lidar_ros\\src\\unitree_lidar_ros | 8 | 425 | 43 | 94 | 562 | +| unitree_lidar_ros\\src\\unitree_lidar_ros (Files) | 2 | 92 | 0 | 35 | 127 | +| unitree_lidar_ros\\src\\unitree_lidar_ros\\config | 1 | 16 | 9 | 6 | 31 | +| unitree_lidar_ros\\src\\unitree_lidar_ros\\include | 1 | 123 | 27 | 36 | 186 | +| unitree_lidar_ros\\src\\unitree_lidar_ros\\launch | 2 | 11 | 1 | 10 | 22 | +| unitree_lidar_ros\\src\\unitree_lidar_ros\\rviz | 1 | 169 | 0 | 1 | 170 | +| unitree_lidar_ros\\src\\unitree_lidar_ros\\src | 1 | 14 | 6 | 6 | 26 | +| unitree_lidar_sdk | 32 | 5,412 | 1,651 | 961 | 8,024 | +| unitree_lidar_sdk (Files) | 2 | 295 | 0 | 74 | 369 | +| unitree_lidar_sdk\\examples | 5 | 500 | 40 | 107 | 647 | +| unitree_lidar_sdk\\include | 25 | 4,617 | 1,611 | 780 | 7,008 | +| unitree_lidar_sdk\\include (Files) | 5 | 264 | 143 | 69 | 476 | +| unitree_lidar_sdk\\include\\mavlink | 20 | 4,353 | 1,468 | 711 | 6,532 | +| unitree_lidar_sdk\\include\\mavlink (Files) | 7 | 1,627 | 525 | 249 | 2,401 | +| unitree_lidar_sdk\\include\\mavlink\\SysMavlink | 13 | 2,726 | 943 | 462 | 4,131 | + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/results.txt b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/results.txt new file mode 100644 index 0000000..ff0e90a --- /dev/null +++ b/src/Robot/unilidar_sdk/.VSCodeCounter/2024-06-17_19-42-01/results.txt @@ -0,0 +1,101 @@ +Date : 2024-06-17 19:42:01 +Directory : d:\Administrator\Desktop\unilidar_sdk +Total : 47 files, 6250 codes, 1726 comments, 1144 blanks, all 9120 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ +| C++ | 33 | 5,305 | 1,696 | 958 | 7,959 | +| Markdown | 5 | 432 | 0 | 131 | 563 | +| YAML | 3 | 353 | 9 | 8 | 370 | +| Python | 2 | 95 | 20 | 21 | 136 | +| XML | 4 | 65 | 1 | 26 | 92 | ++----------+------------+------------+------------+------------+------------+ + +Directories ++----------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++----------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| . | 47 | 6,250 | 1,726 | 1,144 | 9,120 | +| . (Files) | 1 | 19 | 0 | 9 | 28 | +| unitree_lidar_ros | 8 | 425 | 43 | 94 | 562 | +| unitree_lidar_ros2 | 6 | 394 | 32 | 80 | 506 | +| unitree_lidar_ros2\src | 6 | 394 | 32 | 80 | 506 | +| unitree_lidar_ros2\src\unitree_lidar_ros2 | 6 | 394 | 32 | 80 | 506 | +| unitree_lidar_ros2\src\unitree_lidar_ros2 (Files) | 2 | 80 | 0 | 29 | 109 | +| unitree_lidar_ros2\src\unitree_lidar_ros2\include | 1 | 113 | 16 | 44 | 173 | +| unitree_lidar_ros2\src\unitree_lidar_ros2\launch | 1 | 24 | 13 | 4 | 41 | +| unitree_lidar_ros2\src\unitree_lidar_ros2\rviz | 1 | 168 | 0 | 1 | 169 | +| unitree_lidar_ros2\src\unitree_lidar_ros2\src | 1 | 9 | 3 | 2 | 14 | +| unitree_lidar_ros\src | 8 | 425 | 43 | 94 | 562 | +| unitree_lidar_ros\src\unitree_lidar_ros | 8 | 425 | 43 | 94 | 562 | +| unitree_lidar_ros\src\unitree_lidar_ros (Files) | 2 | 92 | 0 | 35 | 127 | +| unitree_lidar_ros\src\unitree_lidar_ros\config | 1 | 16 | 9 | 6 | 31 | +| unitree_lidar_ros\src\unitree_lidar_ros\include | 1 | 123 | 27 | 36 | 186 | +| unitree_lidar_ros\src\unitree_lidar_ros\launch | 2 | 11 | 1 | 10 | 22 | +| unitree_lidar_ros\src\unitree_lidar_ros\rviz | 1 | 169 | 0 | 1 | 170 | +| unitree_lidar_ros\src\unitree_lidar_ros\src | 1 | 14 | 6 | 6 | 26 | +| unitree_lidar_sdk | 32 | 5,412 | 1,651 | 961 | 8,024 | +| unitree_lidar_sdk (Files) | 2 | 295 | 0 | 74 | 369 | +| unitree_lidar_sdk\examples | 5 | 500 | 40 | 107 | 647 | +| unitree_lidar_sdk\include | 25 | 4,617 | 1,611 | 780 | 7,008 | +| unitree_lidar_sdk\include (Files) | 5 | 264 | 143 | 69 | 476 | +| unitree_lidar_sdk\include\mavlink | 20 | 4,353 | 1,468 | 711 | 6,532 | +| unitree_lidar_sdk\include\mavlink (Files) | 7 | 1,627 | 525 | 249 | 2,401 | +| unitree_lidar_sdk\include\mavlink\SysMavlink | 13 | 2,726 | 943 | 462 | 4,131 | ++----------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ + +Files ++----------------------------------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++----------------------------------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| d:\Administrator\Desktop\unilidar_sdk\README.md | Markdown | 19 | 0 | 9 | 28 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros2\src\unitree_lidar_ros2\README.md | Markdown | 60 | 0 | 24 | 84 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros2\src\unitree_lidar_ros2\include\unitree_lidar_ros2.h | C++ | 113 | 16 | 44 | 173 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros2\src\unitree_lidar_ros2\launch\launch.py | Python | 24 | 13 | 4 | 41 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros2\src\unitree_lidar_ros2\package.xml | XML | 20 | 0 | 5 | 25 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros2\src\unitree_lidar_ros2\rviz\view.rviz | YAML | 168 | 0 | 1 | 169 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros2\src\unitree_lidar_ros2\src\unitree_lidar_ros2_node.cpp | C++ | 9 | 3 | 2 | 14 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\README.md | Markdown | 58 | 0 | 24 | 82 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\config\config.yaml | YAML | 16 | 9 | 6 | 31 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\include\unitree_lidar_ros.h | C++ | 123 | 27 | 36 | 186 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\launch\run.launch | XML | 6 | 0 | 5 | 11 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\launch\run_without_rviz.launch | XML | 5 | 1 | 5 | 11 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\package.xml | XML | 34 | 0 | 11 | 45 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\rviz\view.rviz | YAML | 169 | 0 | 1 | 170 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_ros\src\unitree_lidar_ros\src\unitree_lidar_ros_node.cpp | C++ | 14 | 6 | 6 | 26 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\HowToParsePointCloudAndIMUDataFromMavLinkMessages.md | Markdown | 147 | 0 | 27 | 174 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\README.md | Markdown | 148 | 0 | 47 | 195 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\examples\example_lidar.cpp | C++ | 107 | 10 | 23 | 140 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\examples\example_lidar_udp.cpp | C++ | 120 | 10 | 27 | 157 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\examples\unilidar_publisher_udp.cpp | C++ | 118 | 9 | 25 | 152 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\examples\unilidar_subcriber_udp.py | Python | 71 | 7 | 17 | 95 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\examples\unilidar_subscriber_udp.cpp | C++ | 84 | 4 | 15 | 103 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\SysMavlink.h | C++ | 158 | 18 | 29 | 205 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink.h | C++ | 22 | 4 | 9 | 35 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_config_led_ring_table_packet.h | C++ | 181 | 98 | 27 | 306 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_config_lidar_working_mode.h | C++ | 116 | 66 | 32 | 214 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_device_command.h | C++ | 116 | 66 | 32 | 214 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_device_request_data.h | C++ | 116 | 66 | 32 | 214 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_ret_imu_attitude_data_packet.h | C++ | 167 | 90 | 26 | 283 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_ret_lidar_auxiliary_data_packet.h | C++ | 501 | 258 | 47 | 806 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_ret_lidar_distance_data_packet.h | C++ | 165 | 90 | 26 | 281 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_ret_lidar_time_sync_data.h | C++ | 132 | 74 | 33 | 239 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\mavlink_msg_ret_lidar_version.h | C++ | 168 | 90 | 34 | 292 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\testsuite.h | C++ | 877 | 19 | 131 | 1,027 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\SysMavlink\version.h | C++ | 7 | 4 | 4 | 15 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\checksum.h | C++ | 44 | 37 | 15 | 96 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\mavlink_conversions.h | C++ | 122 | 64 | 27 | 213 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\mavlink_get_info.h | C++ | 60 | 17 | 7 | 84 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\mavlink_helpers.h | C++ | 756 | 284 | 95 | 1,135 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\mavlink_sha256.h | C++ | 163 | 46 | 27 | 236 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\mavlink_types.h | C++ | 209 | 56 | 37 | 302 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\mavlink\protocol.h | C++ | 273 | 21 | 41 | 335 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\parse_range_auxiliary_data_to_cloud.h | C++ | 52 | 17 | 12 | 81 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\udp_handler.h | C++ | 30 | 12 | 9 | 51 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\unitree_lidar_sdk.h | C++ | 117 | 100 | 36 | 253 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\unitree_lidar_sdk_config.h | C++ | 4 | 0 | 1 | 5 | +| d:\Administrator\Desktop\unilidar_sdk\unitree_lidar_sdk\include\unitree_lidar_sdk_pcl.h | C++ | 61 | 14 | 11 | 86 | +| Total | | 6,250 | 1,726 | 1,144 | 9,120 | ++----------------------------------------------------------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/.gitignore b/src/Robot/unilidar_sdk/.gitignore new file mode 100644 index 0000000..48f5967 --- /dev/null +++ b/src/Robot/unilidar_sdk/.gitignore @@ -0,0 +1,12 @@ +unitree_lidar_ros/build +unitree_lidar_ros/devel +unitree_lidar_ros/.catkin_workspace +unitree_lidar_ros/src/CMakeLists.txt + + +unitree_lidar_ros2/build +unitree_lidar_ros2/install +unitree_lidar_ros2/log + +unitree_lidar_sdk/bin +unitree_lidar_sdk/build \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/LICENSE b/src/Robot/unilidar_sdk/LICENSE new file mode 100644 index 0000000..d1febdc --- /dev/null +++ b/src/Robot/unilidar_sdk/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2016-2023 HangZhou YuShu TECHNOLOGY CO.,LTD. ("Unitree Robotics") +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/Robot/unilidar_sdk/README.md b/src/Robot/unilidar_sdk/README.md new file mode 100644 index 0000000..b3299b8 --- /dev/null +++ b/src/Robot/unilidar_sdk/README.md @@ -0,0 +1,28 @@ +# Unilidar SDK + +## Introduction +This repository is a SDK for [Unitree L1 LiDAR](https://www.unitree.com/LiDAR). + +You can use the code interfaces in this repository to obtain point cloud data and IMU data measured in our lidar, as well as configure related parameters. + +We provide three commonly used interfaces for our LiDAR: +- if you prefer to use the original **C++ SDK** directly, you can refer to [README.md](./unitree_lidar_sdk/README.md); +- if you want to use **ROS**, you can refer to [README.md](./unitree_lidar_ros/src/unitree_lidar_ros/README.md); +- if you are developing with the latest **ROS2**, you can refer to [README.md](./unitree_lidar_ros2/src/unitree_lidar_ros2/README.md). + + +## Coordinate System Definition +The reference frame definition is illustrated in the following figure, which satisfies the right-hand coordinate system definition. + +The origin of the lidar frame, which is used to represent coordinates of each point in a pointcloud, is located at the center of the bottom mounting surface of the lidar. +- Its +X axis is in the opposite direction of the outgoing cable. +- Its +Y axis is in the the direction obtained by rotating the +X axis counterclockwise by 90 degrees. +- And its +Z axis is vertically upward. + +The IMU frame's axes are aligned and parallel to the directions of the point cloud coordinate system. The XYZ coordinates of its origin in the lidar frame is [-0.007698, -0.014655, 0.00667] in meters. + +You can also go to our [official website](https://www.unitree.com/download) for further technical details of our lidar. + +
+ +
\ No newline at end of file diff --git a/src/Robot/unilidar_sdk/docs/lidar.png b/src/Robot/unilidar_sdk/docs/lidar.png new file mode 100644 index 0000000..09b2c73 Binary files /dev/null and b/src/Robot/unilidar_sdk/docs/lidar.png differ diff --git a/src/Robot/unilidar_sdk/docs/lidar_frame_definition.jpg b/src/Robot/unilidar_sdk/docs/lidar_frame_definition.jpg new file mode 100644 index 0000000..ea76da4 Binary files /dev/null and b/src/Robot/unilidar_sdk/docs/lidar_frame_definition.jpg differ diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/CMakeLists.txt b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/CMakeLists.txt new file mode 100644 index 0000000..a40fc8c --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/CMakeLists.txt @@ -0,0 +1,61 @@ +cmake_minimum_required(VERSION 2.8.3) +project(unitree_lidar_ros) + +set(CMAKE_BUILD_TYPE "Release") +set(CMAKE_CXX_FLAGS "-std=c++14") +set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb -llz4") +set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall -DNDEBUG -llz4") + +find_package(PCL REQUIRED QUIET) + +find_package(catkin REQUIRED COMPONENTS + tf + roscpp + rospy + rosparam + pcl_conversions + std_msgs + sensor_msgs + geometry_msgs + nav_msgs + message_generation + visualization_msgs + roslib +) + +catkin_package( + INCLUDE_DIRS include + DEPENDS PCL + + CATKIN_DEPENDS + rosparam + std_msgs + nav_msgs + geometry_msgs + sensor_msgs + message_runtime + message_generation + visualization_msgs +) + +include_directories( + include + ${catkin_INCLUDE_DIRS} + ${PCL_INCLUDE_DIRS} + ../../../unitree_lidar_sdk/include +) + +link_directories( + lib + ${PCL_LIBRARY_DIRS} + ../../../unitree_lidar_sdk/lib/${CMAKE_SYSTEM_PROCESSOR} +) + +set(EXTRA_LIBS + ${catkin_LIBRARIES} + ${PCL_LIBRARIES} + libunitree_lidar_sdk.a +) + +add_executable(unitree_lidar_ros_node src/unitree_lidar_ros_node.cpp) +target_link_libraries(unitree_lidar_ros_node ${EXTRA_LIBS}) \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/README.md b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/README.md new file mode 100644 index 0000000..7112c10 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/README.md @@ -0,0 +1,82 @@ +# Unitree Lidar ROS + +## Introduction +This package is a ROS package, which is specially used for running Unitree LiDAR products. + + +The functions that this package can provide includes: +- Parse the raw data transmitted from the lidar hardware, and convert it into pointcloud and IMU data +- Publish the pointcloud data to a ROS topic +- Publish the IMU data to a ROS topic +- In addition, we provide a yaml file to configure the relevant parameters of the lidar. + +## Dependency +The dependencies include `PCL` and `ROS`. + +We have verified that this package can successfully run under this environment: +- `Ubuntu 20.04` +- `ROS noetic` +- `PCL-1.10` +- `unitree_lidar_sdk` + +You are suggested to configure an environment like this to run this package. + + +## Configuration + +Connect your lidar to your computer with a USB cable, then confirm your serial port name for lidar: +``` +$ ls /dev/ttyUSB* +/dev/ttyUSB0 +``` + +The default serial port name is `/dev/ttyUSB0`. +If it is not the default one, you need to modify the configuration in `unitree_lidar_ros/config/config.yaml` +and change the `port` name to yours. For example +``` +# Serial Port +port: "/dev/ttyYourUSBPortName" +``` + +You can leave other parameters in the configuration file with their default value. + +If you have special needs such as changing the cloud topic name or IMU topic name, you are allowed to configure them in the configuration file as well. + +The defalut cloud topic and its frame name is: +- topic: "unilidar/cloud" +- frame: "unilidar_lidar" + +The defalut IMU topic and its frame name is: +- topic: "unilidar/imu" +- frame: "unilidar_imu" + +## Build +You can just build this ROS package as follows: +- Clone the repository +``` +git clone https://github.com/unitreerobotics/unilidar_sdk.git +``` + +- Compile +``` +cd unilidar_sdk/unitree_lidar_ros + +catkin_make +``` + + +## Run +Then you need to source this ROS packege environment and then directly run the launch file: +``` +source devel/setup.bash + +roslaunch unitree_lidar_ros run.launch +``` + +In the Rviz window, you will see our lidar pointcloud like this: + +![img](./docs/cloud.png) + +You can change the `Fixed Frame` to the imu frame `unilidar_imu`, so that you can view the IMU quaternion vector: + +![img](./docs/imu.png) \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/config/config.yaml b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/config/config.yaml new file mode 100644 index 0000000..f3c96f4 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/config/config.yaml @@ -0,0 +1,31 @@ +#################################################### +# lidar sdk configuration +#################################################### + +# Initialization Type +initialize_type: 1 # 1-Serial, 2-UDP + +# Serial Port +port: "/dev/ttyUSB0" # default: "/dev/ttyUSB0" + +# UDP Port +lidar_port: 6101 +lidar_ip: "10.10.10.10" +local_port: 6201 +local_ip: "10.10.10.100" + +# Calibration +rotate_yaw_bias: 0 # default: 0 in degree +range_scale: 0.001 # default: 0.001 in meters +range_bias: 0 # default: 0 in meters +range_max: 50 # default: 50 in meters +range_min: 0.0 # default: 0 in meters + +# PointCloud +cloud_frame: "unilidar_lidar" # default: "unilidar_lidar" +cloud_topic: "unilidar/cloud" # default: "unilidar/cloud" +cloud_scan_num: 18 # default: 18 + +# IMU +imu_frame: "unilidar_imu" # default: "unilidar_imu" +imu_topic: "unilidar/imu" # default: "unilidar/imu" \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/docs/cloud.png b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/docs/cloud.png new file mode 100644 index 0000000..b782037 Binary files /dev/null and b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/docs/cloud.png differ diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/docs/imu.png b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/docs/imu.png new file mode 100644 index 0000000..345c29b Binary files /dev/null and b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/docs/imu.png differ diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/include/unitree_lidar_ros.h b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/include/unitree_lidar_ros.h new file mode 100644 index 0000000..1dd9cda --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/include/unitree_lidar_ros.h @@ -0,0 +1,186 @@ +/********************************************************************** + Copyright (c) 2020-2023, Unitree Robotics.Co.Ltd. All rights reserved. +***********************************************************************/ + +#pragma once + +// ROS +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// PCL +#include + +// Eigen +#include +#include + +#include "unitree_lidar_sdk_pcl.h" + +/** + * @brief Publish a pointcloud + * + * @param thisPub + * @param thisCloud + * @param thisStamp + * @param thisFrame + * @return sensor_msgs::PointCloud2 + */ +inline sensor_msgs::PointCloud2 publishCloud( + ros::Publisher *thisPub, + pcl::PointCloud::Ptr thisCloud, + ros::Time thisStamp, + std::string thisFrame) +{ + sensor_msgs::PointCloud2 tempCloud; + pcl::toROSMsg(*thisCloud, tempCloud); + tempCloud.header.stamp = thisStamp; + tempCloud.header.frame_id = thisFrame; + if (thisPub->getNumSubscribers() != 0) + thisPub->publish(tempCloud); + return tempCloud; +} + +/** + * @brief Unitree Lidar SDK Node + */ +class UnitreeLidarSDKNode{ +protected: + + // ROS + ros::NodeHandle nh_; + ros::Publisher pub_pointcloud_raw_; + ros::Publisher pub_imu_; + tf::TransformBroadcaster tfbc1_; + + // Unitree Lidar Reader + UnitreeLidarReader* lsdk_; + + // Config params + std::string port_; + + double rotate_yaw_bias_; + double range_scale_; + double range_bias_; + double range_max_; + double range_min_; + + std::string cloud_frame_; + std::string cloud_topic_; + int cloud_scan_num_; + + std::string imu_frame_; + std::string imu_topic_; + + int initialize_type_; + int local_port_; + std::string local_ip_; + int lidar_port_; + std::string lidar_ip_; + +public: + + UnitreeLidarSDKNode(ros::NodeHandle nh){ + + // Load config parameters + nh.param("/unitree_lidar_ros_node/initialize_type", initialize_type_, 1); + + nh.param("/unitree_lidar_ros_node/port", port_, std::string("/dev/ttyUSB0")); + + nh.param("/unitree_lidar_ros_node/lidar_port", lidar_port_, 6101); + nh.param("/unitree_lidar_ros_node/lidar_ip", lidar_ip_, std::string("10.10.10.10")); + nh.param("/unitree_lidar_ros_node/local_port", local_port_, 6201); + nh.param("/unitree_lidar_ros_node/local_ip", local_ip_, std::string("10.10.10.100")); + + nh.param("/unitree_lidar_ros_node/rotate_yaw_bias", rotate_yaw_bias_, 0.0); + nh.param("/unitree_lidar_ros_node/range_scale", range_scale_, 0.001); + nh.param("/unitree_lidar_ros_node/range_bias", range_bias_, 0.0); + nh.param("/unitree_lidar_ros_node/range_max", range_max_, 50.0); + nh.param("/unitree_lidar_ros_node/range_min", range_min_, 0.0); + + nh.param("/unitree_lidar_ros_node/cloud_frame", cloud_frame_, std::string("unilidar_lidar")); + nh.param("/unitree_lidar_ros_node/cloud_topic", cloud_topic_, std::string("unilidar/cloud")); + nh.param("/unitree_lidar_ros_node/cloud_scan_num", cloud_scan_num_, 18); + nh.param("/unitree_lidar_ros_node/imu_frame", imu_frame_, std::string("unilidar_imu")); + nh.param("/unitree_lidar_ros_node/imu_topic", imu_topic_, std::string("unilidar/imu")); + + // Initialize UnitreeLidarReader + lsdk_ = createUnitreeLidarReader(); + + if (initialize_type_ == 1){ + lsdk_->initialize(cloud_scan_num_, port_, 2000000, rotate_yaw_bias_, + range_scale_, range_bias_, range_max_, range_min_); + } + else if (initialize_type_ == 2){ + lsdk_->initializeUDP(cloud_scan_num_, lidar_port_, lidar_ip_, local_port_, local_ip_, + rotate_yaw_bias_, range_scale_, range_bias_, range_max_, range_min_); + } + + + lsdk_->setLidarWorkingMode(NORMAL); + + // ROS + nh_ = nh; + pub_pointcloud_raw_ = nh.advertise (cloud_topic_, 100); + pub_imu_ = nh.advertise (imu_topic_, 1000); + } + + ~UnitreeLidarSDKNode(){ + } + + /** + * @brief Run once + */ + bool run(){ + MessageType result = lsdk_->runParse(); + pcl::PointCloud::Ptr cloudOut( new pcl::PointCloud() ); + + if (result == IMU){ + auto & imu = lsdk_->getIMU(); + sensor_msgs::Imu imuMsg; + imuMsg.header.frame_id = imu_frame_; + imuMsg.header.stamp = ros::Time::now().fromSec(imu.stamp); + + imuMsg.orientation.x = imu.quaternion[0]; + imuMsg.orientation.y = imu.quaternion[1]; + imuMsg.orientation.z = imu.quaternion[2]; + imuMsg.orientation.w = imu.quaternion[3]; + + imuMsg.angular_velocity.x = imu.angular_velocity[0]; + imuMsg.angular_velocity.y = imu.angular_velocity[1]; + imuMsg.angular_velocity.z = imu.angular_velocity[2]; + + imuMsg.linear_acceleration.x = imu.linear_acceleration[0]; + imuMsg.linear_acceleration.y = imu.linear_acceleration[1]; + imuMsg.linear_acceleration.z = imu.linear_acceleration[2]; + + pub_imu_.publish(imuMsg); + + return true; + } + else if (result == POINTCLOUD){ + auto &cloud = lsdk_->getCloud(); + transformUnitreeCloudToPCL(cloud, cloudOut); + publishCloud(&pub_pointcloud_raw_, cloudOut, ros::Time::now().fromSec(cloud.stamp), cloud_frame_); + + return true; + }else{ + return false; + } + + } +}; \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/launch/run.launch b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/launch/run.launch new file mode 100644 index 0000000..aab1954 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/launch/run.launch @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/launch/run_without_rviz.launch b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/launch/run_without_rviz.launch new file mode 100644 index 0000000..d3be6f1 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/launch/run_without_rviz.launch @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/package.xml b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/package.xml new file mode 100644 index 0000000..a5e90d3 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/package.xml @@ -0,0 +1,44 @@ + + + unitree_lidar_ros + 1.0.0 + Unitree Lidar SDK for ROS + + Luke Meng + + TODO + + Luke Meng + + catkin + + roscpp + roscpp + rospy + rospy + rosparam + rosparam + + tf + tf + + pcl_conversions + pcl_conversions + + std_msgs + std_msgs + sensor_msgs + sensor_msgs + geometry_msgs + geometry_msgs + nav_msgs + nav_msgs + visualization_msgs + visualization_msgs + + message_generation + message_generation + message_runtime + message_runtime + + diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/rviz/view.rviz b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/rviz/view.rviz new file mode 100644 index 0000000..ab99a45 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/rviz/view.rviz @@ -0,0 +1,169 @@ +Panels: + - Class: rviz/Displays + Help Height: 78 + Name: Displays + Property Tree Widget: + Expanded: + - /Global Options1 + - /Status1 + - /PointCloud21 + - /PointCloud21/Autocompute Value Bounds1 + - /Imu1 + Splitter Ratio: 0.4941176474094391 + Tree Height: 787 + - Class: rviz/Selection + Name: Selection + - Class: rviz/Tool Properties + Expanded: + - /2D Pose Estimate1 + - /2D Nav Goal1 + - /Publish Point1 + Name: Tool Properties + Splitter Ratio: 0.5886790156364441 + - Class: rviz/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 + - Class: rviz/Time + Name: Time + SyncMode: 0 + SyncSource: PointCloud2 +Preferences: + PromptSaveOnExit: true +Toolbars: + toolButtonStyle: 2 +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz/Grid + Color: 160; 160; 164 + Enabled: true + Line Style: + Line Width: 0.029999999329447746 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 50 + Reference Frame: + Value: true + - Alpha: 1 + Class: rviz/Axes + Enabled: true + Length: 1 + Name: Axes + Radius: 0.05000000074505806 + Reference Frame: + Show Trail: false + Value: true + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 3.2763965129852295 + Min Value: -9.93529056358966e-07 + Value: true + Axis: Z + Channel Name: intensity + Class: rviz/PointCloud2 + Color: 255; 255; 255 + Color Transformer: AxisColor + Decay Time: 1 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Min Color: 0; 0; 0 + Name: PointCloud2 + Position Transformer: XYZ + Queue Size: 100 + Selectable: true + Size (Pixels): 3 + Size (m): 0.009999999776482582 + Style: Points + Topic: /unilidar/cloud + Unreliable: false + Use Fixed Frame: true + Use rainbow: true + Value: true + - Alpha: 1 + Class: rviz_plugin_tutorials/Imu + Color: 204; 51; 204 + Enabled: true + History Length: 1 + Name: Imu + Queue Size: 10 + Topic: /unilidar/imu + Unreliable: false + Value: true + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Default Light: true + Fixed Frame: unilidar_lidar + Frame Rate: 30 + Name: root + Tools: + - Class: rviz/Interact + Hide Inactive Objects: true + - Class: rviz/MoveCamera + - Class: rviz/Select + - Class: rviz/FocusCamera + - Class: rviz/Measure + - Class: rviz/SetInitialPose + Theta std deviation: 0.2617993950843811 + Topic: /initialpose + X std deviation: 0.5 + Y std deviation: 0.5 + - Class: rviz/SetGoal + Topic: /move_base_simple/goal + - Class: rviz/PublishPoint + Single click: true + Topic: /clicked_point + Value: true + Views: + Current: + Class: rviz/Orbit + Distance: 12.665559768676758 + Enable Stereo Rendering: + Stereo Eye Separation: 0.05999999865889549 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Field of View: 0.7853981852531433 + Focal Point: + X: -0.04773467779159546 + Y: -0.033093128353357315 + Z: 0.6606433987617493 + Focal Shape Fixed Size: false + Focal Shape Size: 0.05000000074505806 + Invert Z Axis: false + Name: Current View + Near Clip Distance: 0.009999999776482582 + Pitch: 1.5697963237762451 + Target Frame: + Yaw: 3.135389804840088 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 1016 + Hide Left Dock: false + Hide Right Dock: true + QMainWindow State: 000000ff00000000fd0000000400000000000001560000039efc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d0000039e000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000021efc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003b0000021e000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073e00000039fc0100000002fb0000000800540069006d006500000000000000073e000003bc00fffffffb0000000800540069006d00650100000000000004500000000000000000000005e20000039e00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Selection: + collapsed: false + Time: + collapsed: false + Tool Properties: + collapsed: false + Views: + collapsed: true + Width: 1854 + X: 1986 + Y: 27 diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/src/unitree_lidar_ros_node.cpp b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/src/unitree_lidar_ros_node.cpp new file mode 100644 index 0000000..aa7f05a --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros/src/unitree_lidar_ros/src/unitree_lidar_ros_node.cpp @@ -0,0 +1,26 @@ +/********************************************************************** + Copyright (c) 2020-2023, Unitree Robotics.Co.Ltd. All rights reserved. +***********************************************************************/ + +#include "unitree_lidar_ros.h" + +using namespace unitree_lidar_sdk; + +int main(int argc, char **argv) +{ + // ROS + ros::init(argc, argv, "unitree_lidar"); + ros::NodeHandle nh; + + UnitreeLidarSDKNode node(nh); + // ros::Rate rate(2000); + + while (nh.ok()) + { + ros::spinOnce(); + node.run(); + // rate.sleep(); + } + + return 0; +} \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/CMakeLists.txt b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/CMakeLists.txt new file mode 100644 index 0000000..55366de --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/CMakeLists.txt @@ -0,0 +1,63 @@ +cmake_minimum_required(VERSION 3.5) +project(unitree_lidar_ros2) + +# Default to C99 +if(NOT CMAKE_C_STANDARD) + set(CMAKE_C_STANDARD 99) +endif() + +# Default to C++14 +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 14) +endif() + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +find_package(ament_cmake REQUIRED) +find_package(rclcpp REQUIRED) +find_package(std_msgs REQUIRED) +find_package(sensor_msgs REQUIRED) +find_package(pcl_conversions REQUIRED) +find_package(PCL REQUIRED) + +include_directories( + ${PCL_INCLUDE_DIRS} + include + ../../../unitree_lidar_sdk/include +) + +link_directories( + ${PCL_LIBRARY_DIRS} + ../../../unitree_lidar_sdk/lib/${CMAKE_SYSTEM_PROCESSOR} +) + +add_definitions(${PCL_DEFINITIONS}) + +add_executable(unitree_lidar_ros2_node src/unitree_lidar_ros2_node.cpp) + +target_link_libraries( unitree_lidar_ros2_node + ${Boost_SYSTEM_LIBRARY} + ${PCL_LIBRARIES} + libunitree_lidar_sdk.a +) + +ament_target_dependencies( + unitree_lidar_ros2_node + rclcpp std_msgs + sensor_msgs + pcl_conversions +) + +install(TARGETS +unitree_lidar_ros2_node + DESTINATION lib/${PROJECT_NAME} +) + +# install rviz file and launch file +install(FILES rviz/view.rviz launch/launch.py + DESTINATION share/${PROJECT_NAME} +) + +ament_package() diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/README.md b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/README.md new file mode 100644 index 0000000..602b018 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/README.md @@ -0,0 +1,84 @@ +# Unitree Lidar ROS2 + +## Introduction +This package is a ROS2 package, which is specially used for running Unitree LiDAR products. + + +The functions that this package can provide includes: +- Parse the raw data transmitted from the lidar hardware, and convert it into pointcloud and IMU data +- Publish the pointcloud data to a ROS2 topic +- Publish the IMU data to a ROS2 topic +- In addition, you can configure the relevant parameters of the lidar in the `launch.py`. + +## Dependency +The dependencies include `PCL` and `ROS2`. + +We have verified that this package can successfully run under this environment: +- `Ubuntu 20.04` +- `ROS2 foxy` +- `PCL-1.10` +- `unitree_lidar_sdk` + +You are suggested to configure an environment like this to run this package. + +## Configuration + +Connect your lidar to your computer with a USB cable, then confirm your serial port name for lidar: +``` +$ ls /dev/ttyUSB* +/dev/ttyUSB0 +``` + +The default serial port name is `/dev/ttyUSB0`. +If it is not the default one, you need to modify the configuration in `unitree_lidar_ros2/launch/launch.py` +and change the `port` parameter to yours. For example +``` +{'port': '/dev/ttyUSB0'}, +``` + +You can leave other parameters in the configuration file with their default value. + +If you have special needs such as changing the cloud topic name or IMU topic name, you are allowed to configure them in the `launch.py` file as well. + +The defalut cloud topic and its frame name is: +- topic: "unilidar/cloud" +- frame: "unilidar_lidar" + +The defalut IMU topic and its frame name is: +- topic: "unilidar/imu" +- frame: "unilidar_imu" + +## Build + +You can just build this ROS2 package as follows: +- Download +``` +git clone https://github.com/unitreerobotics/unilidar_sdk.git +``` + +- Compile +``` +cd unilidar_sdk/unitree_lidar_ros2 + +colcon build +``` + +## Run + +Then you need to source this ROS packege environment and then directly run the launch.py file: +``` +source install/setup.bash + +ros2 launch unitree_lidar_ros2 launch.py +``` + +To visualize our cloud in Rviz2, you need to run: +``` +rviz2 -d src/unitree_lidar_ros2/rviz/view.rviz +``` + +In the Rviz window, you will see our lidar pointcloud like this: + +![img](./docs/cloud.png) + +You can change the `Fixed Frame` to the imu frame `unilidar_imu`, so that you can view the IMU quaternion vector. \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/docs/cloud.png b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/docs/cloud.png new file mode 100644 index 0000000..faeb1c0 Binary files /dev/null and b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/docs/cloud.png differ diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/include/unitree_lidar_ros2.h b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/include/unitree_lidar_ros2.h new file mode 100644 index 0000000..4f05d61 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/include/unitree_lidar_ros2.h @@ -0,0 +1,173 @@ +/********************************************************************** + Copyright (c) 2020-2023, Unitree Robotics.Co.Ltd. All rights reserved. +***********************************************************************/ + +#pragma once + +#define BOOST_BIND_NO_PLACEHOLDERS + +#include +#include "iostream" +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "sensor_msgs/msg/point_cloud2.hpp" +#include "sensor_msgs/msg/imu.hpp" +#include "std_msgs/msg/header.hpp" + +#include "rclcpp/rclcpp.hpp" +#include "rclcpp/time.hpp" + +#include "unitree_lidar_sdk_pcl.h" + +using std::placeholders::_1; + +class UnitreeLidarSDKNode : public rclcpp::Node +{ +public: + + explicit UnitreeLidarSDKNode(const rclcpp::NodeOptions &options = rclcpp::NodeOptions()); + + ~UnitreeLidarSDKNode(){}; + + void timer_callback(); + +protected: + + // ROS + rclcpp::Publisher::SharedPtr pub_cloud_; + rclcpp::Publisher::SharedPtr pub_imu_; + rclcpp::TimerBase::SharedPtr timer_; + + // Unitree Lidar Reader + UnitreeLidarReader* lsdk_; + + // Config params + std::string port_; + + double rotate_yaw_bias_; + double range_scale_; + double range_bias_; + double range_max_; + double range_min_; + + std::string cloud_frame_; + std::string cloud_topic_; + int cloud_scan_num_; + + std::string imu_frame_; + std::string imu_topic_; +}; + +/////////////////////////////////////////////////////////////////// + +UnitreeLidarSDKNode::UnitreeLidarSDKNode(const rclcpp::NodeOptions& options) + : Node("unitre_lidar_sdk_node", options) +{ + // load config parameters + declare_parameter("port", "/dev/ttyUSB0"); + + declare_parameter("rotate_yaw_bias", 0); + declare_parameter("range_scale", 0.001); + declare_parameter("range_bias", 0); + declare_parameter("range_max", 50); + declare_parameter("range_min", 0); + + declare_parameter("cloud_frame", "unilidar_lidar"); + declare_parameter("cloud_topic", "unilidar/cloud"); + declare_parameter("cloud_scan_num", 18); + + declare_parameter("imu_frame", "unilidar_imu"); + declare_parameter("imu_topic", "unilidar/imu"); + + + port_ = get_parameter("port").as_string(); + + rotate_yaw_bias_ = get_parameter("rotate_yaw_bias").as_double(); + range_scale_ = get_parameter("range_scale").as_double(); + range_bias_ = get_parameter("range_bias").as_double(); + range_max_ = get_parameter("range_max").as_double(); + range_min_ = get_parameter("range_min").as_double(); + + cloud_frame_ = get_parameter("cloud_frame").as_string(); + cloud_topic_ = get_parameter("cloud_topic").as_string(); + cloud_scan_num_ = get_parameter("cloud_scan_num").as_int(); + + imu_frame_ = get_parameter("imu_frame").as_string(); + imu_topic_ = get_parameter("imu_topic").as_string(); + + // std::cout << "port_ = " << port_ + // << ", cloud_topic_ = " << cloud_topic_ + // << ", cloud_scan_num_ = " << cloud_scan_num_ + // << std::endl; + + // Initialize UnitreeLidarReader + lsdk_ = createUnitreeLidarReader(); + lsdk_->initialize(cloud_scan_num_, port_, 2000000, rotate_yaw_bias_, + range_scale_, range_bias_, range_max_, range_min_); + + // ROS2 + pub_cloud_ = this->create_publisher(cloud_topic_, 10); + pub_imu_ = this->create_publisher(imu_topic_, 10); + timer_ = this->create_wall_timer(std::chrono::milliseconds(1), std::bind(&UnitreeLidarSDKNode::timer_callback, this)); +} + +void UnitreeLidarSDKNode::timer_callback() +{ + MessageType result = lsdk_->runParse(); + static pcl::PointCloud::Ptr cloudOut(new pcl::PointCloud()); + + // RCLCPP_INFO(this->get_logger(), "result = %d", result); + + if (result == IMU) + { + auto &imu = lsdk_->getIMU(); + + rclcpp::Time timestamp( + static_cast(imu.stamp), + static_cast((imu.stamp - static_cast(imu.stamp) ) * 1e9)); + + sensor_msgs::msg::Imu imuMsg; + imuMsg.header.frame_id = imu_frame_; + imuMsg.header.stamp = timestamp; + + imuMsg.orientation.x = imu.quaternion[0]; + imuMsg.orientation.y = imu.quaternion[1]; + imuMsg.orientation.z = imu.quaternion[2]; + imuMsg.orientation.w = imu.quaternion[3]; + + imuMsg.angular_velocity.x = imu.angular_velocity[0]; + imuMsg.angular_velocity.y = imu.angular_velocity[1]; + imuMsg.angular_velocity.z = imu.angular_velocity[2]; + + imuMsg.linear_acceleration.x = imu.linear_acceleration[0]; + imuMsg.linear_acceleration.y = imu.linear_acceleration[1]; + imuMsg.linear_acceleration.z = imu.linear_acceleration[2]; + + pub_imu_->publish(imuMsg); + } + else if (result == POINTCLOUD) + { + // RCLCPP_INFO(this->get_logger(), "POINTCLOUD"); + auto &cloud = lsdk_->getCloud(); + transformUnitreeCloudToPCL(cloud, cloudOut); + + rclcpp::Time timestamp( + static_cast(cloud.stamp), + static_cast((cloud.stamp - static_cast(cloud.stamp) ) * 1e9)); + + sensor_msgs::msg::PointCloud2 cloud_msg; + pcl::toROSMsg(*cloudOut, cloud_msg); + cloud_msg.header.frame_id = cloud_frame_; + cloud_msg.header.stamp = timestamp; + + pub_cloud_->publish(cloud_msg); + } +} \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/launch/__pycache__/launch.cpython-38.pyc b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/launch/__pycache__/launch.cpython-38.pyc new file mode 100644 index 0000000..1078e14 Binary files /dev/null and b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/launch/__pycache__/launch.cpython-38.pyc differ diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/launch/launch.py b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/launch/launch.py new file mode 100644 index 0000000..9d64163 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/launch/launch.py @@ -0,0 +1,41 @@ +import os +import subprocess + +from launch import LaunchDescription +from launch_ros.actions import Node + +def generate_launch_description(): + # Run unitree lidar + node1 = Node( + package='unitree_lidar_ros2', + executable='unitree_lidar_ros2_node', + name='unitree_lidar_ros2_node', + output='screen', + parameters= [ + {'port': '/dev/ttyUSB0'}, + {'rotate_yaw_bias': 0.0}, + {'range_scale': 0.001}, + {'range_bias': 0.0}, + {'range_max': 50.0}, + {'range_min': 0.0}, + {'cloud_frame': "unilidar_lidar"}, + {'cloud_topic': "unilidar/cloud"}, + {'cloud_scan_num': 18}, + {'imu_frame': "unilidar_imu"}, + {'imu_topic': "unilidar/imu"}] + ) + + # # Run Rviz + # package_path = subprocess.check_output(['ros2', 'pkg', 'prefix', 'unitree_lidar_ros2']).decode('utf-8').rstrip() + # rviz_config_file = os.path.join(package_path, 'share', 'unitree_lidar_ros2', 'view.rviz') + # print("rviz_config_file = " + rviz_config_file) + # rviz_node = Node( + # package='rviz2', + # executable='rviz2', + # name='rviz2', + # arguments=['-d', rviz_config_file], + # output='log' + # ) + # return LaunchDescription([node1, rviz_node]) + + return LaunchDescription([node1]) \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/package.xml b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/package.xml new file mode 100644 index 0000000..7520c2e --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/package.xml @@ -0,0 +1,24 @@ + + + + unitree_lidar_ros2 + 0.0.0 + unitree lidar ros2 + jo + GPLv3 + + ament_cmake + + ament_lint_auto + ament_lint_common + + rclcpp + std_msgs + sensor_msgs + pcl_conversions + pcl + + + ament_cmake + + diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/rviz/view.rviz b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/rviz/view.rviz new file mode 100644 index 0000000..571f304 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/rviz/view.rviz @@ -0,0 +1,168 @@ +Panels: + - Class: rviz_common/Displays + Help Height: 78 + Name: Displays + Property Tree Widget: + Expanded: + - /Global Options1 + - /PointCloud21 + - /PointCloud21/Topic1 + Splitter Ratio: 0.5 + Tree Height: 787 + - Class: rviz_common/Selection + Name: Selection + - Class: rviz_common/Tool Properties + Expanded: + - /2D Goal Pose1 + - /Publish Point1 + Name: Tool Properties + Splitter Ratio: 0.5886790156364441 + - Class: rviz_common/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz_default_plugins/Grid + Color: 160; 160; 164 + Enabled: true + Line Style: + Line Width: 0.029999999329447746 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 20 + Reference Frame: + Value: true + - Class: rviz_default_plugins/Axes + Enabled: true + Length: 1 + Name: Axes + Radius: 0.10000000149011612 + Reference Frame: + Value: true + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 3.1814634799957275 + Min Value: -1.352985577796062e-06 + Value: true + Axis: Z + Channel Name: intensity + Class: rviz_default_plugins/PointCloud2 + Color: 239; 41; 41 + Color Transformer: AxisColor + Decay Time: 1 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Max Intensity: 4096 + Min Color: 0; 0; 0 + Min Intensity: 0 + Name: PointCloud2 + Position Transformer: XYZ + Selectable: true + Size (Pixels): 3 + Size (m): 0.009999999776482582 + Style: Points + Topic: + Depth: 5 + Durability Policy: Volatile + Filter size: 10 + History Policy: Keep Last + Reliability Policy: Reliable + Value: /unilidar/cloud + Use Fixed Frame: true + Use rainbow: true + Value: true + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Fixed Frame: unilidar_lidar + Frame Rate: 30 + Name: root + Tools: + - Class: rviz_default_plugins/Interact + Hide Inactive Objects: true + - Class: rviz_default_plugins/MoveCamera + - Class: rviz_default_plugins/Select + - Class: rviz_default_plugins/FocusCamera + - Class: rviz_default_plugins/Measure + Line color: 128; 128; 0 + - Class: rviz_default_plugins/SetInitialPose + Covariance x: 0.25 + Covariance y: 0.25 + Covariance yaw: 0.06853891909122467 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /initialpose + - Class: rviz_default_plugins/SetGoal + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /goal_pose + - Class: rviz_default_plugins/PublishPoint + Single click: true + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /clicked_point + Transformation: + Current: + Class: rviz_default_plugins/TF + Value: true + Views: + Current: + Class: rviz_default_plugins/Orbit + Distance: 11.65039348602295 + Enable Stereo Rendering: + Stereo Eye Separation: 0.05999999865889549 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Focal Point: + X: 0 + Y: 0 + Z: 0 + Focal Shape Fixed Size: true + Focal Shape Size: 0.05000000074505806 + Invert Z Axis: false + Name: Current View + Near Clip Distance: 0.009999999776482582 + Pitch: 1.5697963237762451 + Target Frame: map + Value: Orbit (rviz_default_plugins) + Yaw: 3.1399855613708496 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 1016 + Hide Left Dock: false + Hide Right Dock: true + QMainWindow State: 000000ff00000000fd0000000400000000000001560000039efc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d0000039e000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000039efc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d0000039e000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004420000003efc0100000002fb0000000800540069006d00650100000000000004420000000000000000fb0000000800540069006d00650100000000000004500000000000000000000005e20000039e00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Selection: + collapsed: false + Tool Properties: + collapsed: false + Views: + collapsed: true + Width: 1854 + X: 1986 + Y: 27 diff --git a/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/src/unitree_lidar_ros2_node.cpp b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/src/unitree_lidar_ros2_node.cpp new file mode 100644 index 0000000..cb5ab6c --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_ros2/src/unitree_lidar_ros2/src/unitree_lidar_ros2_node.cpp @@ -0,0 +1,14 @@ +/********************************************************************** + Copyright (c) 2020-2023, Unitree Robotics.Co.Ltd. All rights reserved. +***********************************************************************/ + +#include "unitree_lidar_ros2.h" + +int main(int argc, char *argv[]) +{ + const rclcpp::NodeOptions options; + rclcpp::init(argc, argv); + rclcpp::spin(std::make_shared()); + rclcpp::shutdown(); + return 0; +} \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/CMakeLists.txt b/src/Robot/unilidar_sdk/unitree_lidar_sdk/CMakeLists.txt new file mode 100644 index 0000000..8f6158d --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/CMakeLists.txt @@ -0,0 +1,34 @@ +cmake_minimum_required(VERSION 3.0) +project(unitree_lidar_sdk) + +set(CMAKE_BUILD_TYPE "Release") +set(CMAKE_CXX_FLAGS "-std=c++14") +set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb") +set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall -DNDEBUG") + +include_directories(include) + +link_directories(lib/${CMAKE_SYSTEM_PROCESSOR}) + +SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib/${CMAKE_SYSTEM_PROCESSOR}) + +add_executable(example_lidar + examples/example_lidar.cpp +) +target_link_libraries(example_lidar libunitree_lidar_sdk.a ) + +add_executable(example_lidar_udp + examples/example_lidar_udp.cpp +) +target_link_libraries(example_lidar_udp libunitree_lidar_sdk.a ) + +add_executable(unilidar_publisher_udp + examples/unilidar_publisher_udp.cpp +) +target_link_libraries(unilidar_publisher_udp libunitree_lidar_sdk.a ) + +add_executable(unilidar_subscriber_udp + examples/unilidar_subscriber_udp.cpp +) +target_link_libraries(unilidar_subscriber_udp libunitree_lidar_sdk.a ) \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/HowToParsePointCloudAndIMUDataFromMavLinkMessages.md b/src/Robot/unilidar_sdk/unitree_lidar_sdk/HowToParsePointCloudAndIMUDataFromMavLinkMessages.md new file mode 100644 index 0000000..f3dcd83 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/HowToParsePointCloudAndIMUDataFromMavLinkMessages.md @@ -0,0 +1,174 @@ +# How To Parse Cloud and IMU data from MavLink messages + +## MavLink Usage + +If you need to directly parse data from the serial port to obtain point cloud and IMU data, you need to parse the serial data byte-by-byte according to the MavLink protocol to obtain a complete message frame. + +For specific guidance, you can refer to the official examples provided by MavLink. +- https://mavlink.io/en/getting_started/ + +## Parsing IMU Data +The format of the IMU MavLink data structure is defined in the following file: +- `mavlink/SysMavlink/mavlink_msg_ret_imu_attitude_data_packet.h` + +The IMU data structure is defined as: +```c +typedef struct __mavlink_ret_imu_attitude_data_packet_t { + float quaternion[4]; /*< Quaternion Array.*/ + float angular_velocity[3]; /*< Three-axis angular velocity values.*/ + float linear_acceleration[3]; /*< Three-axis acceleration values.*/ + uint16_t packet_id; /*< Data packet ID.*/ +} mavlink_ret_imu_attitude_data_packet_t; +``` + +Where: +- `quaternion[4]` represents the quaternion of the IMU. +- `angular_velocity[3]` represents the angular velocity of the IMU along the xyz axes. +- `linear_acceleration[3]` represents the linear acceleration of the IMU along the xyz axes. +- `packet_id` is the ID of this frame of the message, which can be used to determine the continuity of message transmission. + + +## Parsing Cloud Data + +The message format definition related to point cloud parsing includes two files: +- `mavlink_msg_ret_lidar_auxiliary_data_packet.h` +- `mavlink_msg_ret_lidar_distance_data_packet.h` + +Among them, +- the former contains information about the reflectance of a laser beam, +- while the latter contains information about the range and angle of a laser beam. +- They are matched with each other based on whether their `packet_id` is equal. + +The data structure of auxiliary data is defined as: +```cpp +typedef struct __mavlink_ret_lidar_auxiliary_data_packet_t { + uint32_t lidar_sync_delay_time; /*< Delay time of upper computer communication(us).*/ + uint32_t time_stamp_s_step; /*< LiDAR operational timestamp in seconds.*/ + uint32_t time_stamp_us_step; /*< LiDAR operational timestamp in microsecond .*/ + uint32_t sys_rotation_period; /*< LiDAR low-speed motor rotation period in microsecond .*/ + uint32_t com_rotation_period; /*< LiDAR high-speed motor rotation period in microsecond .*/ + float com_horizontal_angle_start; /*< The first data in the current data packet is the horizontal angle,Distance data applicable to RET_LIDAR_DISTANCE_DATA_PACKET data packet and reflectivity data of RET_LIDAR_AUXILIARY_DATA_PACKET data packet.*/ + float com_horizontal_angle_step; /*< Angle interval between two adjacent data in the horizontal direction.*/ + float sys_vertical_angle_start; /*< The vertical angle of the first data in the current data packet.*/ + float sys_vertical_angle_span; /*< The angular span between adjacent data in the vertical direction of the current data packet.*/ + float apd_temperature; /*< APD temperature value*/ + float dirty_index; /*< Protective cover dirt detection index*/ + float imu_temperature; /*< IMU temperature value*/ + float up_optical_q; /*< Up optical communication quality.*/ + float down_optical_q; /*< Downlink optical communication quality.*/ + float apd_voltage; /*< APD voltage value.*/ + float imu_angle_x_offset; /*< IMU x-axis installation angle error.*/ + float imu_angle_y_offset; /*< IMU y-axis installation angle error.*/ + float imu_angle_z_offset; /*< IMU z-axis installation angle error.*/ + float b_axis_dist; /*< Laser calibration b distance compensation.*/ + float theta_angle; /*< Laser calibration theta angle compensation.*/ + float ksi_angle; /*< Laser calibration ksi angle compensation.*/ + uint16_t packet_id; /*< Data packet ID.*/ + uint16_t payload_size; /*< Data packet payload size.*/ + uint8_t lidar_work_status; /*< LiDAR operational state indicator.*/ + uint8_t reflect_data[120]; /*< reflectivity data*/ +} mavlink_ret_lidar_auxiliary_data_packet_t; +``` + +The data structure of distance data is defined as: +```cpp +typedef struct __mavlink_ret_lidar_distance_data_packet_t { + uint16_t packet_id; /*< Data packet ID.*/ + uint16_t packet_cnt; /*< Data packet count.*/ + uint16_t payload_size; /*< Data packet payload size.*/ + uint8_t point_data[240]; /*< Data packet distance data.*/ +} mavlink_ret_lidar_distance_data_packet_t; +``` + +Among them, +- The array, `reflect_data[120]`, stores the reflection intensity of 120 points accordingly. +- The array, `point_data[240]`, stores the distance information of 120 points on a laser beam: + - Each point's distance is represented in `uint16_t` format and occupies two bytes. + - For example, `point_data[0]` and `point_data[1]` represent the distance of the first point, where `point_data[0]` holds the lower byte, and `point_data[1]` holds the higher byte. + - If the distance of a point equals 0, that point is invalid and should be jumped. + +Assuming that we have parsed a frame of `mavlink_ret_lidar_auxiliary_data_packet_t` data and a matching frame of `mavlink_ret_lidar_distance_data_packet_t` message, we can obtain the point cloud's XYZ coordinates by parsing these two frames. Here is a C++ function example for reference: + +```c +/** + * @file parse_range_auxiliary_data_to_cloud.h + * @date 2023-07-27 + */ + +#pragma once +#include "mavlink/SysMavlink/mavlink.h" +#include +#include + +/** + * @brief Parse A Range And An Auxiliary Data To A Point Cloud + * + * @param auxiliaryData + * @param rangeData + * @param scanCloud Array elements are x, y, z, intensity respectively + * @return true + * @return false + */ +bool parseRangeAuxiliaryDataToCloud( + const mavlink_ret_lidar_auxiliary_data_packet_t &auxiliaryData, + const mavlink_ret_lidar_distance_data_packet_t &rangeData, + std::vector> &scanCloud + ){ + + // check packet id match + if (auxiliaryData.packet_id != rangeData.packet_id){ + return false; + } + + // parse data + float rotate_yaw_bias = 0; + float range_scale = 0.001; + float z_bias = 0.0445; + int points_num_of_scan = 120; + float bias_laser_beam_ = auxiliaryData.b_axis_dist / 1000; + + float sin_theta = sin(auxiliaryData.theta_angle); + float cos_theta = cos(auxiliaryData.theta_angle); + float sin_ksi = sin(auxiliaryData.ksi_angle); + float cos_ksi = cos(auxiliaryData.ksi_angle); + + float pitch_cur = auxiliaryData.sys_vertical_angle_start * M_PI / 180.0; + float pitch_step = auxiliaryData.sys_vertical_angle_span * M_PI / 180.0; + float yaw_cur = (auxiliaryData.com_horizontal_angle_start + rotate_yaw_bias) * M_PI / 180.0; + float yaw_step = auxiliaryData.com_horizontal_angle_step / points_num_of_scan * M_PI / 180.0; + + uint16_t range; + float range_float; + + std::array point; + for (int i = 0, j = 0; j < points_num_of_scan; + i += 2, j += 1, + pitch_cur += pitch_step, yaw_cur += yaw_step) + { + // Calculate point range in float type + range = (rangeData.point_data[i + 1] << 8); + range = range | rangeData.point_data[i]; + if (range == 0){ + continue; + } + range_float = range_scale * range; + + // Transform this point to XYZ coordinate + float&& sin_alpha = sin(pitch_cur); + float&& cos_alpha = cos(pitch_cur); + float&& sin_beta = sin(yaw_cur); + float&& cos_beta = cos(yaw_cur); + + float&& A = (-cos_theta * sin_ksi + sin_theta * sin_alpha * cos_ksi) * range_float + bias_laser_beam_; + float&& B = cos_alpha * cos_ksi * range_float; + + point[0] = cos_beta * A - sin_beta * B; // x + point[1] = sin_beta * A + cos_beta * B; // y + point[2] = (sin_theta * sin_ksi + cos_theta * sin_alpha * cos_ksi) * range_float + z_bias; // z + point[3] = auxiliaryData.reflect_data[j]; + scanCloud.push_back(point); + } + + return true; +} +``` \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/README.md b/src/Robot/unilidar_sdk/unitree_lidar_sdk/README.md new file mode 100644 index 0000000..52c5041 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/README.md @@ -0,0 +1,195 @@ +# Unitree Lidar SDK + +## Introduction +This package is a cmake package, which is specially used for running `Unitree LiDAR L1`. + +The functions that this package can provide includes: +- Parse the raw data transmitted from the lidar hardware, and convert it into pointcloud and IMU data +- Get the pointcloud data +- Get the IMU data + +The output pointcloud defaultly uses a self-defined data type so that this SDK doesn't rely too much on external dependencies. In other case, +- if you are used to use [Point Cloud Library](https://pointclouds.org/), you can use the header `unitree_lidar_sdk_pcl.h` to transform our pointcloud to PCL format; +- if you wish to directly use a [ROS](https://www.ros.org/) package, you are also able to utilize our ROS pacakge for this lidar. + +## Dependency +We have verified that this package can successfully run under this environment: +- `Ubuntu 20.04` + +This SDK hardly depends on any external dependencies. +But if you want to use PCL cloud format, you need to install one. + +## Configure + +Connect your lidar to your computer with a USB cable, then confirm your serial port name for lidar: +``` +$ ls /dev/ttyUSB* +/dev/ttyUSB0 +``` + +The default serial port name is `/dev/ttyUSB0`. +If it is not the default one, you need to modify the configuration parameter in `example_lidar.cpp`. + +## Build + +You can build this program as a cmake project: +``` +cd unitree_lidar_sdk + +mkdir build + +cd build + +cmake .. && make -j2 +``` + +## Run +Directly run the example: +``` +../bin/example_lidar +``` + +The output is like this: +``` +$ ../bin/example_lidar +lidar firmware version = 0.3.2+230511 +lidar sdk version = 1.0.3 + +Dirty Percentage = 5.145833 % +Dirty Percentage = 4.166667 % +Dirty Percentage = 4.166667 % + +Turn on all the LED lights ... +Turn off all the LED lights ... +Set LED mode to: FORWARD_SLOW ... +Set LED mode to: REVERSE_SLOW ... +Set LED mode to: SIXSTAGE_BREATHING ... + +Set Lidar working mode to: NORMAL_MODE ... + +An IMU msg is parsed! + stamp = 1683874160.559222, id = 729 + quaternion (x, y, z, w) = [0.0131, -0.0091, 0.6888, -0.7225] + +An IMU msg is parsed! + stamp = 1683874160.564979, id = 121 + quaternion (x, y, z, w) = [0.0102, -0.0093, 0.7099, -0.7018] + +An IMU msg is parsed! + stamp = 1683874160.568425, id = 122 + quaternion (x, y, z, w) = [0.0118, -0.0096, 0.7099, -0.7018] + +An IMU msg is parsed! + stamp = 1683874160.573472, id = 123 + quaternion (x, y, z, w) = [0.0126, -0.0093, 0.7098, -0.7018] + +An IMU msg is parsed! + stamp = 1683874160.577348, id = 124 + quaternion (x, y, z, w) = [0.0128, -0.0093, 0.7099, -0.7018] + +A Cloud msg is parsed! + stamp = 1683874145.535888, id = 1 + cloud size = 278 + first 10 points (x,y,z,intensity,time,ring) = + (-0.029885, -0.136897, 0.000448, 88.000000, 0.000000, 0) + (-0.035384, -0.171399, 0.005140, 91.000000, 0.000023, 0) + (-0.043000, -0.219542, 0.012437, 127.000000, 0.000046, 0) + (-0.054879, -0.294965, 0.024572, 132.000000, 0.000069, 0) + (-0.055288, -0.301204, 0.033170, 106.000000, 0.000093, 0) + (-0.054542, -0.300348, 0.041173, 101.000000, 0.000116, 0) + (-0.053764, -0.299285, 0.049148, 99.000000, 0.000139, 0) + (-0.056123, -0.318406, 0.060981, 92.000000, 0.000162, 0) + (-0.055230, -0.316827, 0.069422, 91.000000, 0.000185, 0) + (-0.051257, -0.294854, 0.072849, 128.000000, 0.000208, 0) + ... +``` + +Here, we print the first 10 points of the pointcloud message and the quaternion of the IMU message. + +**Notice**: +- In Ubuntu, accessing a serial port device requires the appropriate permissions. If your C++ program does not have sufficient permissions to access the serial port device, you will get a **"Permission denied"** error. +- To solve this error, you can use the following command to add the current user to the dialout group: +``` +sudo usermod -a -G dialout $USER +``` +- After adding the user to the dialout group, you need to log out and log back in for the changes to take effect. + + +## How To Parse Point Cloud From MavLink Messages + +If you want to parse point cloud from MavLink Messages which are acquired from serial directly, you can refer to this document. +- [HowToParsePointCloudAndIMUDataFromMavLinkMessages.md](./doc/HowToParsePointCloudAndIMUDataFromMavLinkMessages.md) + +## Version History + +### v1.0.0 (2023.05.04) +- Support firmware version: 0.3.1 + +### v1.0.1 (2023.05.05) +- Support firmware version: 0.3.1 +- Add support of setting lidar working mode, e.g. `NORMAL_MODE` and `STANDBY_MODE` +- Add support of LED lights + +### v1.0.2 (2023.05.11) +- Support firmware version: 0.3.2 + +### v1.0.3 (2023.05.12) +- Support firmware version: 0.3.2 +- Add support of getting the percentage of removed dirty points + +### v1.0.4 (2023.05.30) +- Support firmware version: 1.0.1 + +### v1.0.5 (2023.06.05) +- Support firmware version: 1.0.1 +- Update default `rotate_yaw_bias` to calibrated value `-38.5` degree. +- Update `README.md` with notice to solve the "Permission denied" error while opening serial port. + +### v1.0.6 (2023.06.19) +- Support firmware version: 1.0.1 +- Modify the `initialize()` function to check whether the specified serial port exist. If the serial port name does not exist, initialization fails and `return -1` rather than throw out an error unexpectedly。 +- Add z bias to lidar basis plane + +### v1.0.7 (2023.06.21) +- Support firmware version: 1.0.1 +- Add coordinate system definition in readme +- Modified readme of `unitree_lidar_ros` and `unitree_lidar_ros2` + +### v1.0.8 (2023.06.28) +- Support firmware version: 1.0.1 +- Solve the dependency problem --- `cannot find -llz4` +- Add mavlink headers for optional use + +### v1.0.9 (2023.06.30) +- Support firmware version: 1.0.1 +- Delete the date postfix of firmware version +- Improve support of setting lidar working mode, which can switch between `NORMAL_MODE` and `STANDBY_MODE` + +### v1.0.10 (2023.07.17) +- Support firmware version: 1.0.1 +- Add a UDP publisher written in C++, which can publish lidar data to a specified IP address and port +- Add a UDP subscriber example written in C++, which is able to subscibe scan and imu data mentioned above +- Add a UDP subscriber example written in Python, which is able to subscibe scan and imu data mentioned above +- Add a compiled install package for Windows user, though which you can acquire lidar data in windows. + +### v1.0.11 (2023.07.27) +- Add a instruction document for how to parse point cloud and imu data from mavlink messages directly. +- The document is `HowToParsePointCloudAndIMUDataFromMavLinkMessages.md` + +### v1.0.12 (2023.09.20) +- Add support of UDP interface, which can parse original bytes from a specified UDP port and send commands to lidar ip and port. +- Update `unitree_lidar_ros` + +### v1.0.13 (2023.10.09) +- Modify the serial port reading method in `unitree_lidar_sdk`. It will block when you call `runParse()` function, waiting for the serial port to have bytes and then reading the data once. +- Support Serial-to-UDP adapter board + +### v1.0.14 (2023.10.30) +- Repair occasional segmentation fault when using serial-to-udp board. + +### v1.0.15 (2024.01.04) +- Modify default lidar and local ip address in `example_lidar_udp.cpp` + +### v1.0.16 (2024.02.18) +- Add a function to close UDP connection +- Set the timeout to 1 second for `initializeUDP()` \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/example_lidar.cpp b/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/example_lidar.cpp new file mode 100644 index 0000000..a46aa1f --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/example_lidar.cpp @@ -0,0 +1,140 @@ +/********************************************************************** + Copyright (c) 2020-2023, Unitree Robotics.Co.Ltd. All rights reserved. +***********************************************************************/ + +#include "unitree_lidar_sdk.h" + +using namespace unitree_lidar_sdk; + +int main(){ + + // Initialize Lidar Object + UnitreeLidarReader* lreader = createUnitreeLidarReader(); + int cloud_scan_num = 18; + std::string port_name = "/dev/ttyUSB0"; + + if ( lreader->initialize(cloud_scan_num, port_name) ){ + printf("Unilidar initialization failed! Exit here!\n"); + exit(-1); + }else{ + printf("Unilidar initialization succeed!\n"); + } + + // Set Lidar Working Mode + printf("Set Lidar working mode to: STANDBY ... \n"); + lreader->setLidarWorkingMode(STANDBY); + sleep(1); + + printf("Set Lidar working mode to: NORMAL ... \n"); + lreader->setLidarWorkingMode(NORMAL); + sleep(1); + + printf("\n"); + + // Print Lidar Version + while(true){ + if (lreader->runParse() == VERSION){ + printf("lidar firmware version = %s\n", lreader->getVersionOfFirmware().c_str() ); + break; + } + usleep(500); + } + printf("lidar sdk version = %s\n\n", lreader->getVersionOfSDK().c_str()); + sleep(2); + + // Check lidar dirty percentange + int count_percentage = 0; + while(true){ + if( lreader->runParse() == AUXILIARY){ + printf("Dirty Percentage = %f %%\n", lreader->getDirtyPercentage()); + if (++count_percentage > 2){ + break; + } + if (lreader->getDirtyPercentage() > 10){ + printf("The protection cover is too dirty! Please clean it right now! Exit here ...\n"); + exit(0); + } + } + usleep(500); + } + printf("\n"); + sleep(2); + + // Set LED + printf("Turn on all the LED lights ...\n"); + uint8_t led_table[45]; + for (int i=0; i < 45; i++){ + led_table[i] = 0xFF; + } + lreader->setLEDDisplayMode(led_table); + sleep(2); + + printf("Turn off all the LED lights ...\n"); + for (int i=0; i < 45; i++){ + led_table[i] = 0x00; + } + lreader->setLEDDisplayMode(led_table); + sleep(2); + + printf("Set LED mode to: FORWARD_SLOW ...\n"); + lreader->setLEDDisplayMode(FORWARD_SLOW); + sleep(2); + + printf("Set LED mode to: REVERSE_SLOW ...\n"); + lreader->setLEDDisplayMode(REVERSE_SLOW); + sleep(2); + + printf("Set LED mode to: SIXSTAGE_BREATHING ...\n"); + lreader->setLEDDisplayMode(SIXSTAGE_BREATHING); + + printf("\n"); + sleep(2); + + // Parse PointCloud and IMU data + MessageType result; + std::string version; + while (true) + { + result = lreader->runParse(); // You need to call this function at least 1500Hz + + switch (result) + { + case NONE: + break; + + case IMU: + printf("An IMU msg is parsed!\n"); + printf("\tstamp = %f, id = %d\n", lreader->getIMU().stamp, lreader->getIMU().id); + printf("\tquaternion (x, y, z, w) = [%.4f, %.4f, %.4f, %.4f]\n", + lreader->getIMU().quaternion[0], lreader->getIMU().quaternion[1], + lreader->getIMU().quaternion[2], lreader->getIMU().quaternion[3]); + printf("\ttimedelay (us) = %d\n\n", lreader->getTimeDelay()); + break; + + case POINTCLOUD: + printf("A Cloud msg is parsed! \n"); + printf("\tstamp = %f, id = %d\n", lreader->getCloud().stamp, lreader->getCloud().id); + printf("\tcloud size = %ld, ringNum = %d\n", lreader->getCloud().points.size(), lreader->getCloud().ringNum); + printf("\tfirst 10 points (x,y,z,intensity,time,ring) = \n"); + for (int i = 0; i< 10; i++){ // print the first 10 points + printf("\t (%f, %f, %f, %f, %f, %d)\n", + lreader->getCloud().points[i].x, + lreader->getCloud().points[i].y, + lreader->getCloud().points[i].z, + lreader->getCloud().points[i].intensity, + lreader->getCloud().points[i].time, + lreader->getCloud().points[i].ring); + } + printf("\t ...\n"); + printf("\ttimedelay (us) = %d\n\n", lreader->getTimeDelay()); + break; + + default: + break; + } + + // usleep(500); + } + + return 0; +} \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/example_lidar_udp.cpp b/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/example_lidar_udp.cpp new file mode 100644 index 0000000..5ca796c --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/example_lidar_udp.cpp @@ -0,0 +1,157 @@ +/********************************************************************** + Copyright (c) 2020-2023, Unitree Robotics.Co.Ltd. All rights reserved. +***********************************************************************/ + +#include "unitree_lidar_sdk.h" + +using namespace unitree_lidar_sdk; + +int main(int argc, char *argv[]){ + + // Initialize Lidar Object + UnitreeLidarReader* lreader = createUnitreeLidarReader(); + + std::string lidar_ip = "192.168.1.62"; + std::string local_ip = "192.168.1.2"; + + unsigned short lidar_port = 6101; + unsigned short local_port = 6201; + + if (argc == 3) + { + lidar_port = std::atoi(argv[1]); + local_port = std::atoi(argv[2]); + }else{ + std::cout << "Usage: ./example_lidar_udp " << std::endl; + return 0; + } + + std::cout << "lidar_port = " << lidar_port << std::endl; + + if ( lreader->initializeUDP(18, lidar_port, lidar_ip, local_port, local_ip) ){ + printf("Unilidar initialization failed! Exit here!\n"); + exit(-1); + }else{ + printf("Unilidar initialization succeed!\n"); + } + + // Set Lidar Working Mode + printf("Set Lidar working mode to: STANDBY ... \n"); + lreader->setLidarWorkingMode(STANDBY); + sleep(1); + + printf("Set Lidar working mode to: NORMAL ... \n"); + lreader->setLidarWorkingMode(NORMAL); + sleep(1); + + printf("\n"); + + // Print Lidar Version + while(true){ + MessageType msgType = lreader->runParse(); + printf("msgType = %d\n", (int) msgType); + if (msgType == VERSION){ + printf("lidar firmware version = %s\n", lreader->getVersionOfFirmware().c_str() ); + break; + } + usleep(500); + } + printf("lidar sdk version = %s\n\n", lreader->getVersionOfSDK().c_str()); + sleep(2); + + // Check lidar dirty percentange + int count_percentage = 0; + while(true){ + if( lreader->runParse() == AUXILIARY){ + printf("Dirty Percentage = %f %%\n", lreader->getDirtyPercentage()); + if (++count_percentage > 2){ + break; + } + if (lreader->getDirtyPercentage() > 10){ + printf("The protection cover is too dirty! Please clean it right now! Exit here ...\n"); + exit(0); + } + } + usleep(500); + } + printf("\n"); + sleep(2); + + // Set LED + printf("Turn on all the LED lights ...\n"); + uint8_t led_table[45]; + for (int i=0; i < 45; i++){ + led_table[i] = 0xFF; + } + lreader->setLEDDisplayMode(led_table); + sleep(2); + + printf("Turn off all the LED lights ...\n"); + for (int i=0; i < 45; i++){ + led_table[i] = 0x00; + } + lreader->setLEDDisplayMode(led_table); + sleep(2); + + printf("Set LED mode to: FORWARD_SLOW ...\n"); + lreader->setLEDDisplayMode(FORWARD_SLOW); + sleep(2); + + printf("Set LED mode to: REVERSE_SLOW ...\n"); + lreader->setLEDDisplayMode(REVERSE_SLOW); + sleep(2); + + printf("Set LED mode to: SIXSTAGE_BREATHING ...\n"); + lreader->setLEDDisplayMode(SIXSTAGE_BREATHING); + + printf("\n"); + sleep(2); + + // Parse PointCloud and IMU data + MessageType result; + std::string version; + while (true) + { + result = lreader->runParse(); // You need to call this function at least 1500Hz + + switch (result) + { + case NONE: + break; + + case IMU: + printf("An IMU msg is parsed!\n"); + printf("\tstamp = %f, id = %d\n", lreader->getIMU().stamp, lreader->getIMU().id); + printf("\tquaternion (x, y, z, w) = [%.4f, %.4f, %.4f, %.4f]\n", + lreader->getIMU().quaternion[0], lreader->getIMU().quaternion[1], + lreader->getIMU().quaternion[2], lreader->getIMU().quaternion[3]); + printf("\ttimedelay (us) = %d\n\n", lreader->getTimeDelay()); + break; + + case POINTCLOUD: + printf("A Cloud msg is parsed! \n"); + printf("\tstamp = %f, id = %d\n", lreader->getCloud().stamp, lreader->getCloud().id); + printf("\tcloud size = %ld, ringNum = %d\n", lreader->getCloud().points.size(), lreader->getCloud().ringNum); + printf("\tfirst 10 points (x,y,z,intensity,time,ring) = \n"); + for (int i = 0; i< 10; i++){ // print the first 10 points + printf("\t (%f, %f, %f, %f, %f, %d)\n", + lreader->getCloud().points[i].x, + lreader->getCloud().points[i].y, + lreader->getCloud().points[i].z, + lreader->getCloud().points[i].intensity, + lreader->getCloud().points[i].time, + lreader->getCloud().points[i].ring); + } + printf("\t ...\n"); + printf("\ttimedelay (us) = %d\n\n", lreader->getTimeDelay()); + break; + + default: + break; + } + + // usleep(500); + } + + return 0; +} \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/unilidar_publisher_udp.cpp b/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/unilidar_publisher_udp.cpp new file mode 100644 index 0000000..aa1d872 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/unilidar_publisher_udp.cpp @@ -0,0 +1,151 @@ +/********************************************************************** + Copyright (c) 2020-2023, Unitree Robotics.Co.Ltd. All rights reserved. +***********************************************************************/ +#include +#include "unitree_lidar_sdk.h" +#include "udp_handler.h" +using namespace unitree_lidar_sdk; + +int main(int argc, char *argv[]) +{ + // Config from terminal + std::string serial_port; + std::string destination_ip; + unsigned short destination_port; + + if (argc == 2) + { + serial_port = argv[1]; + destination_ip = "127.0.0.1"; + destination_port = 12345; + } + else if (argc == 4) + { + serial_port = argv[1]; + destination_ip = argv[2]; + destination_port = std::atoi(argv[3]); + } + else + { + + std::cout << "usage 1: this_executable " << std::endl; + std::cout << "usage 2: this_executable " << std::endl; + std::cout << " where the default sever_ip = 127.0.0.1, = 12345" << std::endl; + + std::cout << "Input Serial Port: "; + std::cin >> serial_port; + + std::cout << "Input Destination IP: "; + std::cin >> destination_ip; + + std::cout << "Input Destination Port: "; + std::cin >> destination_port; + } + + std::cout << "Unilidar Configuration: " + << "\n\tserial_port = " << serial_port + << "\n\tdestination_ip = " << destination_ip + << "\n\tdestination_port = " << destination_port + << std::endl; + + // Initialize Lidar Object + UnitreeLidarReader *lreader = createUnitreeLidarReader(); + int cloud_scan_num = 1; + if (lreader->initialize(cloud_scan_num, serial_port)) + { + printf("Unilidar initialization failed! Exit here!\n"); + exit(-1); + } + else + { + printf("Unilidar initialization succeed!\n"); + } + + // Set Lidar Working Mode + printf("Set Lidar working mode to: NORMAL ... \n"); + lreader->setLidarWorkingMode(NORMAL); + + // Print Lidar Version + while (true) + { + if (lreader->runParse() == VERSION) + { + printf("lidar firmware version = %s\n", lreader->getVersionOfFirmware().c_str()); + break; + } + usleep(500); + } + printf("lidar sdk version = %s\n", lreader->getVersionOfSDK().c_str()); + + // UDP + UDPHandler client; + client.CreateSocket(); + + // Parse PointCloud and IMU data + MessageType result; + std::string version; + PointCloudUnitree cloudMsg; + ScanUnitree scanMsg; + char buffer[10000]; + uint32_t length = 0; + bool imuMsgSent = false; + bool scanMsgSent = false; + uint32_t imuMsgType = 101; + uint32_t scanMsgType = 102; + + printf("Data type size: \n"); + printf("\tsizeof(PointUnitree) = %ld\n", sizeof(PointUnitree)); + printf("\tsizeof(ScanUnitree) = %ld\n", sizeof(ScanUnitree)); + printf("\tsizeof(IMUUnitree) = %ld\n", sizeof(IMUUnitree)); + + while (true) + { + result = lreader->runParse(); // You need to call this function at least 1500Hz + + switch (result) + { + case NONE: + break; + + case IMU: + length = dataStructToUDPBuffer(lreader->getIMU(), imuMsgType, buffer); + client.Send(buffer, length, (char *)destination_ip.c_str(), destination_port); // 发送数据 + + if (imuMsgSent == false) + { + imuMsgSent = true; + printf("IMU message is sending!\n"); + printf("\tData format: | uint32_t msgType | uint32_t dataSize | IMUUnitree data |\n"); + printf("\tMsgType = %d, SentSize=%d, DataSize = %ld\n", imuMsgType, length, sizeof(IMUUnitree)); + } + + break; + + case POINTCLOUD: + cloudMsg = lreader->getCloud(); + scanMsg.id = cloudMsg.id; + scanMsg.stamp = cloudMsg.stamp; + scanMsg.validPointsNum = cloudMsg.points.size(); + memcpy(scanMsg.points, cloudMsg.points.data(), cloudMsg.points.size() * sizeof(PointUnitree)); + + length = dataStructToUDPBuffer(scanMsg, scanMsgType, buffer); + client.Send(buffer, length, (char *)destination_ip.c_str(), destination_port); // 发送数据 + + if (scanMsgSent == false) + { + scanMsgSent = true; + printf("Scan message is sending!\n"); + printf("\tData format: | uint32_t msgType| uint32_t dataSize | ScanUnitree data |\n"); + printf("\tMsgType = %d, SentSize=%d, DataSize = %ld\n", scanMsgType, length, sizeof(ScanUnitree)); + } + break; + + default: + break; + } + + usleep(500); + } + + return 0; +} diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/unilidar_subcriber_udp.py b/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/unilidar_subcriber_udp.py new file mode 100644 index 0000000..c26fed0 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/unilidar_subcriber_udp.py @@ -0,0 +1,94 @@ +import socket +import struct + +# IP and Port +UDP_IP = "0.0.0.0" +UDP_PORT = 12345 + +# Point Type +class PointUnitree: + def __init__(self, x, y, z, intensity, time, ring): + self.x = x + self.y = y + self.z = z + self.intensity = intensity + self.time = time + self.ring = ring + +# Scan Type +class ScanUnitree: + def __init__(self, stamp, id, validPointsNum, points): + self.stamp = stamp + self.id = id + self.validPointsNum = validPointsNum + self.points = points + +# IMU Type +class IMUUnitree: + def __init__(self, stamp, id, quaternion, angular_velocity, linear_acceleration): + self.stamp = stamp + self.id = id + self.quaternion = quaternion + self.angular_velocity = angular_velocity + self.linear_acceleration = linear_acceleration + +# Create UDP socket +sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +sock.bind((UDP_IP, UDP_PORT)) + +# Calculate Struct Sizes +imuDataStr = "=dI4f3f3f" +imuDataSize = struct.calcsize(imuDataStr) + +pointDataStr = "=fffffI" +pointSize = struct.calcsize(pointDataStr) + +scanDataStr = "=dII" + 120 * "fffffI" +scanDataSize = struct.calcsize(scanDataStr) + +print("pointSize = " +str(pointSize) + ", scanDataSize = " + str(scanDataSize) + ", imuDataSize = " + str(imuDataSize)) + +while True: + # Recv data + data, addr = sock.recvfrom(10000) + print(f"Received data from {addr[0]}:{addr[1]}") + + msgType = struct.unpack("=I", data[:4])[0] + print("msgType =", msgType) + + if msgType == 101: # IMU Message + length = struct.unpack("=I", data[4:8])[0] + imuData = struct.unpack(imuDataStr, data[8:8+imuDataSize]) + imuMsg = IMUUnitree(imuData[0], imuData[1], imuData[2:6], imuData[6:9], imuData[9:12]) + + print("An IMU msg is parsed!") + print("\tstamp =", imuMsg.stamp, "id =", imuMsg.id) + print("\tquaternion (x, y, z, w) =", imuMsg.quaternion) + print("\tangular velocity =", imuMsg.angular_velocity) + print("\tlinear acceleration =", imuMsg.linear_acceleration) + print("\n") + + elif msgType == 102: # Scan Message + length = struct.unpack("=I", data[4:8])[0] + stamp = struct.unpack("=d", data[8:16])[0] + id = struct.unpack("=I", data[16:20])[0] + validPointsNum = struct.unpack("=I", data[20:24])[0] + scanPoints = [] + pointStartAddr = 24 + for i in range(validPointsNum): + pointData = struct.unpack(pointDataStr, data[pointStartAddr: pointStartAddr+pointSize]) + pointStartAddr = pointStartAddr + pointSize + point = PointUnitree(*pointData) + scanPoints.append(point) + scanMsg = ScanUnitree(stamp, id, validPointsNum, scanPoints) + + print("A Scan msg is parsed!") + print("\tstamp =", scanMsg.stamp, "id =", scanMsg.id) + print("\tScan size =", scanMsg.validPointsNum) + print("\tfirst 10 points (x, y, z, intensity, time, ring) =") + for i in range(min(10, scanMsg.validPointsNum)): + point = scanMsg.points[i] + print("\t", point.x, point.y, point.z, point.intensity, point.time, point.ring) + print("\n") + +sock.close() diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/unilidar_subscriber_udp.cpp b/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/unilidar_subscriber_udp.cpp new file mode 100644 index 0000000..ce7a358 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/examples/unilidar_subscriber_udp.cpp @@ -0,0 +1,103 @@ +/********************************************************************** + Copyright (c) 2020-2023, Unitree Robotics.Co.Ltd. All rights reserved. +***********************************************************************/ + +#include "unitree_lidar_sdk.h" + +#include "udp_handler.h" +#include +#include +#include + +using namespace unitree_lidar_sdk; +using namespace std; + +int main(int argc, char *argv[]) +{ + // Config from terminal + unsigned short port; + + if (argc == 1){ + std::cout << "Usage: this_executable " << std::endl; + port = 12345; + sleep(1); + } + else if (argc == 2) + { + port = std::atoi(argv[1]); + } + else + { + std::cout << "Usage: this_executable " << std::endl; + std::cout << "Input UDP Port: "; + std::cin >> port; + } + + std::cout << "Unilidar Configuration: " + << "\n\tport = " << port + << std::endl; + + UDPHandler server(port); + server.CreateSocket(); + server.Bind(); + + char recv_buf[10000]; + sockaddr_in client_addr; + memset(&client_addr, 0, sizeof(client_addr)); + + ScanUnitree scanMsg; + IMUUnitree imuMsg; + uint32_t msgType; + uint32_t length; + while (true) + { + int len = server.Recv(recv_buf, sizeof(recv_buf), &client_addr); + if (len <= 0) + { + cout << "recv error" << endl; + break; + } + cout << "received data from " << inet_ntoa(client_addr.sin_addr) << ":" << ntohs(client_addr.sin_port) << endl; + + memcpy(&msgType, recv_buf, 4); + + cout << "msgType = " << msgType << endl; + + if (msgType == 101) + { + memcpy(&length, recv_buf + 4, 4); + memcpy(&imuMsg, recv_buf + 8, sizeof(IMUUnitree)); + + printf("An IMU msg is parsed!\n"); + printf("\tstamp = %f, id = %d\n", imuMsg.stamp, imuMsg.id); + printf("\tquaternion (x, y, z, w) = [%.4f, %.4f, %.4f, %.4f]\n", + imuMsg.quaternion[0], imuMsg.quaternion[1], + imuMsg.quaternion[2], imuMsg.quaternion[3]); + printf("\n"); + } + else if (msgType == 102) // 4+4+2896 bytes, which stands for [msgType, dataSize, data of ScanUnitree] + { + memcpy(&length, recv_buf + 4, 4); + memcpy(&scanMsg, recv_buf + 8, sizeof(ScanUnitree)); + + printf("A Scan msg is parsed! \n"); + printf("\tstamp = %f, id = %d\n", scanMsg.stamp, scanMsg.id); + printf("\tScan size = %d \n", scanMsg.validPointsNum); + printf("\tfirst 10 points (x,y,z,intensity,time,ring) = \n"); + for (int i = 0; i < 10; i++) + { // print the first 10 points + printf("\t (%f, %f, %f, %f, %f, %d)\n", + scanMsg.points[i].x, + scanMsg.points[i].y, + scanMsg.points[i].z, + scanMsg.points[i].intensity, + scanMsg.points[i].time, + scanMsg.points[i].ring); + } + printf("\n"); + } + } + + server.Close(); + return 0; +} \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/SysMavlink.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/SysMavlink.h new file mode 100644 index 0000000..96858cd --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/SysMavlink.h @@ -0,0 +1,204 @@ +/** @file + * @brief MAVLink comm protocol generated from SysMavlink.xml + * @see http://mavlink.org + */ +#pragma once +#ifndef MAVLINK_SYSMAVLINK_H +#define MAVLINK_SYSMAVLINK_H + +#ifndef MAVLINK_H + #error Wrong include order: MAVLINK_SYSMAVLINK.H MUST NOT BE DIRECTLY USED. Include mavlink.h from the same directory instead or set ALL AND EVERY defines from MAVLINK.H manually accordingly, including the #define MAVLINK_H call. +#endif + +#undef MAVLINK_THIS_XML_HASH +#define MAVLINK_THIS_XML_HASH 2384190490983077020 + +#ifdef __cplusplus +extern "C" { +#endif + +// MESSAGE LENGTHS AND CRCS + +#ifndef MAVLINK_MESSAGE_LENGTHS +#define MAVLINK_MESSAGE_LENGTHS {} +#endif + +#ifndef MAVLINK_MESSAGE_CRCS +#define MAVLINK_MESSAGE_CRCS {{11, 106, 1, 1, 0, 0, 0}, {12, 204, 1, 1, 0, 0, 0}, {13, 62, 38, 38, 0, 0, 0}, {14, 84, 1, 1, 0, 0, 0}, {15, 236, 56, 56, 0, 0, 0}, {16, 74, 246, 246, 0, 0, 0}, {17, 99, 209, 209, 0, 0, 0}, {18, 12, 5, 5, 0, 0, 0}, {19, 110, 42, 42, 0, 0, 0}, {121, 228, 1, 1, 0, 0, 0}, {122, 151, 20, 20, 0, 0, 0}, {123, 10, 61, 61, 0, 0, 0}, {124, 68, 44, 44, 0, 0, 0}, {125, 149, 36, 36, 0, 0, 0}, {126, 25, 1, 1, 0, 0, 0}} +#endif + +#include "../protocol.h" + +#define MAVLINK_ENABLED_SYSMAVLINK + +// ENUM DEFINITIONS + + +/** @brief */ +#ifndef HAVE_ENUM_DEVICE_REQUEST_ANSWER_TYPE +#define HAVE_ENUM_DEVICE_REQUEST_ANSWER_TYPE +typedef enum DEVICE_REQUEST_ANSWER_TYPE +{ + PC2COM_OK=1, /* PC return ok to com board | */ + COM2PC_OK=2, /* Com board return ok to PC | */ + COM2SYS_OK=3, /* Com board return ok to sys board | */ + SYS2COM_OK=4, /* Sys board return ok to com board | */ + PC2SYS_OK=5, /* PC return ok to sys board | */ + SYS2PC_OK=6, /* Sys board return ok to PC | */ + DEVICE_REQUEST_ANSWER_TYPE_ENUM_END=7, /* | */ +} DEVICE_REQUEST_ANSWER_TYPE; +#endif + +/** @brief */ +#ifndef HAVE_ENUM_LIDAR_WORKING_MODE +#define HAVE_ENUM_LIDAR_WORKING_MODE +typedef enum LIDAR_WORKING_MODE +{ + NORMAL_MODE=1, /* Configure the LiDAR to operate in normal mode. | */ + STANDBY_MODE=2, /* Configure the LiDAR to enter standby mode. | */ + RAW_MODE=3, /* Configure the LiDAR to operate in raw mode. | */ + LIDAR_WORKING_MODE_ENUM_END=4, /* | */ +} LIDAR_WORKING_MODE; +#endif + +/** @brief */ +#ifndef HAVE_ENUM_LIDAR_WORKING_INTERNAL_MODE +#define HAVE_ENUM_LIDAR_WORKING_INTERNAL_MODE +typedef enum LIDAR_WORKING_INTERNAL_MODE +{ + INTERNAL_NORMAL_MODE=1, /* Configure the LiDAR to operate in normal mode. | */ + INTERNAL_RAW_MODE=2, /* Configure the LiDAR to operate in raw mode. | */ + INTERNAL_STANDBY_MODE=3, /* Configure the LiDAR to enter standby mode. | */ + INTERNAL_COM_MOTOR_STOP_MODE=4, /* Configure the LiDAR to enter 2D mode. | */ + INTERNAL_APD_DEBUG_MODE=5, /* Configure the LiDAR to enter APD test mode. | */ + INTERNAL_STRENGTH_DEBUG_MODE=6, /* Configure the LiDAR to strength test mode. | */ + INTERNAL_DISTANCE_DEBUG_MODE=7, /* Configure the LiDAR to distance test mode. | */ + INTERNAL_POINT_DEGUB_MODE=8, /* Configure the LiDAR to point test mode. | */ + INTERNAL_CONTINUE_POINT_DEGUB_MODE=9, /* Configure the LiDAR to continue point test mode. | */ + INTERNAL_LASER_TEST_MODE=10, /* Configure the LiDAR to laser 100KHZ test mode. | */ + INTERNAL_IMU_QUATERNION_MODE=11, /* Configure the LiDAR to IMU quaternion dispay mode. | */ + INTERNAL_IMU_ACC_GYRO_MODE=12, /* Configure the LiDAR to IMU riginion data test mode. | */ + LIDAR_WORKING_INTERNAL_MODE_ENUM_END=13, /* | */ +} LIDAR_WORKING_INTERNAL_MODE; +#endif + +/** @brief */ +#ifndef HAVE_ENUM_LIDAR_WORKING_STATUS +#define HAVE_ENUM_LIDAR_WORKING_STATUS +typedef enum LIDAR_WORKING_STATUS +{ + WORK_MODE_STA=1, /* Status of lidar work mode 0:Nomal mode 1:Raw mode | */ + LED_RING_LOST_RATE_STA=2, /* Status of led ring data lost status 0: lost rate ok 1:lost rate error | */ + POINT_LOST_RATE_STA=4, /* Status of point cloud lost rate 0: lost rate ok 1:lost rate error | */ + LED_RING_COMMAND_STA=8, /* Status of lidar command mode 0:LED command mode 1:other function work mode | */ + IMU_WORK_STA=16, /* Status of IMU 0: IMU work ok 1: IMU work error | */ + SYS_ENCODER_STA=32, /* Status of SYS encoder 0:encoder ok 1:encoder error | */ + COM_ENCODER_STA=64, /* Status of COM encoder 0:encoder ok 1:encoder error | */ + LIDAR_DATA_AVAILABLE=128, /* Status of lidar data available 0:Available 1:Not Available | */ + LIDAR_WORKING_STATUS_ENUM_END=129, /* | */ +} LIDAR_WORKING_STATUS; +#endif + +/** @brief */ +#ifndef HAVE_ENUM_DEVICE_REQUEST_INTERNAL_DATA_TYPE +#define HAVE_ENUM_DEVICE_REQUEST_INTERNAL_DATA_TYPE +typedef enum DEVICE_REQUEST_INTERNAL_DATA_TYPE +{ + INTERNAL_DATA_REQUEST_CLOCK_SYNC=1, /* Request for device state | */ + INTERNAL_CMD_LIDAR_VERSION=2, /* Request get firmware version | */ + INTERNAL_DATA_REQUEST_COM_FLASH_PARAMETER=3, /* Request for com flash paramteter | */ + INTERNAL_DATA_REQUEST_SYS_FLASH_PARAMETER=4, /* Request for sys flash paramteter | */ + DEVICE_REQUEST_INTERNAL_DATA_TYPE_ENUM_END=5, /* | */ +} DEVICE_REQUEST_INTERNAL_DATA_TYPE; +#endif + +/** @brief */ +#ifndef HAVE_ENUM_DEVICE_REQUEST_DATA_TYPE +#define HAVE_ENUM_DEVICE_REQUEST_DATA_TYPE +typedef enum DEVICE_REQUEST_DATA_TYPE +{ + DATA_REQUEST_CLOCK_SYNC=1, /* Request for device state | */ + CMD_LIDAR_VERSION=2, /* Request get firmware version | */ + DEVICE_REQUEST_DATA_TYPE_ENUM_END=3, /* | */ +} DEVICE_REQUEST_DATA_TYPE; +#endif + +/** @brief */ +#ifndef HAVE_ENUM_DEVICE_COMMAND_TYPE +#define HAVE_ENUM_DEVICE_COMMAND_TYPE +typedef enum DEVICE_COMMAND_TYPE +{ + CMD_LIDAR_SAVE_FLASH=1, /* Save lidar configuration to Flash memory | */ + CMD_LIDAR_REBOOT=2, /* Reboot lidar | */ + DEVICE_COMMAND_TYPE_ENUM_END=3, /* | */ +} DEVICE_COMMAND_TYPE; +#endif + +/** @brief */ +#ifndef HAVE_ENUM_SYNC_TIME_TYPE +#define HAVE_ENUM_SYNC_TIME_TYPE +typedef enum SYNC_TIME_TYPE +{ + CMD_SYNC_TIME_REQUEST=1, /* Lidar sync time request start | */ + CMD_SYNC_TIME_RESPONSE=2, /* Lidar sync time request response | */ + SYNC_TIME_TYPE_ENUM_END=3, /* | */ +} SYNC_TIME_TYPE; +#endif + +/** @brief */ +#ifndef HAVE_ENUM_LED_DISPLAY_MODE_SELECT +#define HAVE_ENUM_LED_DISPLAY_MODE_SELECT +typedef enum LED_DISPLAY_MODE_SELECT +{ + LED_RING_COMMAND_MODE=1, /* Command display mode. | */ + LED_RING_FUN_FORWARD_SLOW_MODE=2, /* Function mode forward at slow. | */ + LED_RING_FUN_FORWARD_FAST_MODE=3, /* Function mode forward at fast. | */ + LED_RING_FUN_REVERSE_SLOW_MODE=4, /* Function mode reverse at slow. | */ + LED_RING_FUN_REVERSE_FAST_MODE=5, /* Function mode reverse at fast. | */ + LED_RING_FUN_TRIPLE_FLIP_MODE=6, /* Function mode triple flip. | */ + LED_RING_FUN_TRIPLE_BREATHING_MODE=7, /* Function mode triple breathing. | */ + LED_RING_FUN_SIXSTAGE_BREATHING_MODE=8, /* Function mode six-stage breathing. | */ + LED_DISPLAY_MODE_SELECT_ENUM_END=9, /* | */ +} LED_DISPLAY_MODE_SELECT; +#endif + +// MAVLINK VERSION + +#ifndef MAVLINK_VERSION +#define MAVLINK_VERSION 34 +#endif + +#if (MAVLINK_VERSION == 0) +#undef MAVLINK_VERSION +#define MAVLINK_VERSION 34 +#endif + +// MESSAGE DEFINITIONS +#include "./mavlink_msg_device_request_data.h" +#include "./mavlink_msg_device_command.h" +#include "./mavlink_msg_ret_lidar_version.h" +#include "./mavlink_msg_config_lidar_working_mode.h" +#include "./mavlink_msg_config_led_ring_table_packet.h" +#include "./mavlink_msg_ret_lidar_distance_data_packet.h" +#include "./mavlink_msg_ret_lidar_auxiliary_data_packet.h" +#include "./mavlink_msg_ret_lidar_time_sync_data.h" +#include "./mavlink_msg_ret_imu_attitude_data_packet.h" + +// base include + + +#undef MAVLINK_THIS_XML_HASH +#define MAVLINK_THIS_XML_HASH 2384190490983077020 + +#if MAVLINK_THIS_XML_HASH == MAVLINK_PRIMARY_XML_HASH +# define MAVLINK_MESSAGE_INFO {MAVLINK_MESSAGE_INFO_DEVICE_REQUEST_DATA, MAVLINK_MESSAGE_INFO_DEVICE_COMMAND, MAVLINK_MESSAGE_INFO_RET_LIDAR_VERSION, MAVLINK_MESSAGE_INFO_CONFIG_LIDAR_WORKING_MODE, MAVLINK_MESSAGE_INFO_CONFIG_LED_RING_TABLE_PACKET, MAVLINK_MESSAGE_INFO_RET_LIDAR_DISTANCE_DATA_PACKET, MAVLINK_MESSAGE_INFO_RET_LIDAR_AUXILIARY_DATA_PACKET, MAVLINK_MESSAGE_INFO_RET_LIDAR_TIME_SYNC_DATA, MAVLINK_MESSAGE_INFO_RET_IMU_ATTITUDE_DATA_PACKET, MAVLINK_MESSAGE_INFO_DEVICE_REQUEST_ANSWER, MAVLINK_MESSAGE_INFO_DEVICE_DEBUG_MODE_PARAMS, MAVLINK_MESSAGE_INFO_SET_COM_NECESSARY_MEASURE_PARAMETER, MAVLINK_MESSAGE_INFO_SET_SYS_NECESSARY_MEASURE_PARAMETER, MAVLINK_MESSAGE_INFO_RET_TDC_POINT_DEBUG_PACKET, MAVLINK_MESSAGE_INFO_DEVICE_REQUEST_INTERNAL_DATA} +# define MAVLINK_MESSAGE_NAMES {{ "CONFIG_LED_RING_TABLE_PACKET", 15 }, { "CONFIG_LIDAR_WORKING_MODE", 14 }, { "DEVICE_COMMAND", 12 }, { "DEVICE_DEBUG_MODE_PARAMS", 122 }, { "DEVICE_REQUEST_ANSWER", 121 }, { "DEVICE_REQUEST_DATA", 11 }, { "DEVICE_REQUEST_INTERNAL_DATA", 126 }, { "RET_IMU_ATTITUDE_DATA_PACKET", 19 }, { "RET_LIDAR_AUXILIARY_DATA_PACKET", 17 }, { "RET_LIDAR_DISTANCE_DATA_PACKET", 16 }, { "RET_LIDAR_TIME_SYNC_DATA", 18 }, { "RET_LIDAR_VERSION", 13 }, { "RET_TDC_POINT_DEBUG_PACKET", 125 }, { "SET_COM_NECESSARY_MEASURE_PARAMETER", 123 }, { "SET_SYS_NECESSARY_MEASURE_PARAMETER", 124 }} +# if MAVLINK_COMMAND_24BIT +# include "../mavlink_get_info.h" +# endif +#endif + +#ifdef __cplusplus +} +#endif // __cplusplus +#endif // MAVLINK_SYSMAVLINK_H diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink.h new file mode 100644 index 0000000..5f93538 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink.h @@ -0,0 +1,34 @@ +/** @file + * @brief MAVLink comm protocol built from SysMavlink.xml + * @see http://mavlink.org + */ +#pragma once +#ifndef MAVLINK_H +#define MAVLINK_H + +#define MAVLINK_PRIMARY_XML_HASH 2384190490983077020 + +#ifndef MAVLINK_STX +#define MAVLINK_STX 253 +#endif + +#ifndef MAVLINK_ENDIAN +#define MAVLINK_ENDIAN MAVLINK_LITTLE_ENDIAN +#endif + +#ifndef MAVLINK_ALIGNED_FIELDS +#define MAVLINK_ALIGNED_FIELDS 1 +#endif + +#ifndef MAVLINK_CRC_EXTRA +#define MAVLINK_CRC_EXTRA 1 +#endif + +#ifndef MAVLINK_COMMAND_24BIT +#define MAVLINK_COMMAND_24BIT 1 +#endif + +#include "version.h" +#include "SysMavlink.h" + +#endif // MAVLINK_H diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_config_led_ring_table_packet.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_config_led_ring_table_packet.h new file mode 100644 index 0000000..00f97e7 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_config_led_ring_table_packet.h @@ -0,0 +1,305 @@ +#pragma once +// MESSAGE CONFIG_LED_RING_TABLE_PACKET PACKING + +#define MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET 15 + + +typedef struct __mavlink_config_led_ring_table_packet_t { + uint32_t led_rotation_period; /*< Rotation period.*/ + uint32_t led_zero_point_offset; /*< Zero offset unit in milliseconds.*/ + uint16_t packet_id; /*< Data packet ID.*/ + uint8_t led_display_mode; /*< LED display mode selection.*/ + uint8_t led_table[45]; /*< LED display field data packet, 45 bytes represent the status of 360 LEDs bit by bit.*/ +} mavlink_config_led_ring_table_packet_t; + +#define MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN 56 +#define MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_MIN_LEN 56 +#define MAVLINK_MSG_ID_15_LEN 56 +#define MAVLINK_MSG_ID_15_MIN_LEN 56 + +#define MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_CRC 236 +#define MAVLINK_MSG_ID_15_CRC 236 + +#define MAVLINK_MSG_CONFIG_LED_RING_TABLE_PACKET_FIELD_LED_TABLE_LEN 45 + +#if MAVLINK_COMMAND_24BIT +#define MAVLINK_MESSAGE_INFO_CONFIG_LED_RING_TABLE_PACKET { \ + 15, \ + "CONFIG_LED_RING_TABLE_PACKET", \ + 5, \ + { { "packet_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_config_led_ring_table_packet_t, packet_id) }, \ + { "led_rotation_period", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_config_led_ring_table_packet_t, led_rotation_period) }, \ + { "led_zero_point_offset", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_config_led_ring_table_packet_t, led_zero_point_offset) }, \ + { "led_display_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_config_led_ring_table_packet_t, led_display_mode) }, \ + { "led_table", NULL, MAVLINK_TYPE_UINT8_T, 45, 11, offsetof(mavlink_config_led_ring_table_packet_t, led_table) }, \ + } \ +} +#else +#define MAVLINK_MESSAGE_INFO_CONFIG_LED_RING_TABLE_PACKET { \ + "CONFIG_LED_RING_TABLE_PACKET", \ + 5, \ + { { "packet_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 8, offsetof(mavlink_config_led_ring_table_packet_t, packet_id) }, \ + { "led_rotation_period", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_config_led_ring_table_packet_t, led_rotation_period) }, \ + { "led_zero_point_offset", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_config_led_ring_table_packet_t, led_zero_point_offset) }, \ + { "led_display_mode", NULL, MAVLINK_TYPE_UINT8_T, 0, 10, offsetof(mavlink_config_led_ring_table_packet_t, led_display_mode) }, \ + { "led_table", NULL, MAVLINK_TYPE_UINT8_T, 45, 11, offsetof(mavlink_config_led_ring_table_packet_t, led_table) }, \ + } \ +} +#endif + +/** + * @brief Pack a config_led_ring_table_packet message + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * + * @param packet_id Data packet ID. + * @param led_rotation_period Rotation period. + * @param led_zero_point_offset Zero offset unit in milliseconds. + * @param led_display_mode LED display mode selection. + * @param led_table LED display field data packet, 45 bytes represent the status of 360 LEDs bit by bit. + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_config_led_ring_table_packet_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, + uint16_t packet_id, uint32_t led_rotation_period, uint32_t led_zero_point_offset, uint8_t led_display_mode, const uint8_t *led_table) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN]; + _mav_put_uint32_t(buf, 0, led_rotation_period); + _mav_put_uint32_t(buf, 4, led_zero_point_offset); + _mav_put_uint16_t(buf, 8, packet_id); + _mav_put_uint8_t(buf, 10, led_display_mode); + _mav_put_uint8_t_array(buf, 11, led_table, 45); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN); +#else + mavlink_config_led_ring_table_packet_t packet; + packet.led_rotation_period = led_rotation_period; + packet.led_zero_point_offset = led_zero_point_offset; + packet.packet_id = packet_id; + packet.led_display_mode = led_display_mode; + mav_array_memcpy(packet.led_table, led_table, sizeof(uint8_t)*45); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET; + return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_MIN_LEN, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_CRC); +} + +/** + * @brief Pack a config_led_ring_table_packet message on a channel + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param packet_id Data packet ID. + * @param led_rotation_period Rotation period. + * @param led_zero_point_offset Zero offset unit in milliseconds. + * @param led_display_mode LED display mode selection. + * @param led_table LED display field data packet, 45 bytes represent the status of 360 LEDs bit by bit. + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_config_led_ring_table_packet_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, + mavlink_message_t* msg, + uint16_t packet_id,uint32_t led_rotation_period,uint32_t led_zero_point_offset,uint8_t led_display_mode,const uint8_t *led_table) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN]; + _mav_put_uint32_t(buf, 0, led_rotation_period); + _mav_put_uint32_t(buf, 4, led_zero_point_offset); + _mav_put_uint16_t(buf, 8, packet_id); + _mav_put_uint8_t(buf, 10, led_display_mode); + _mav_put_uint8_t_array(buf, 11, led_table, 45); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN); +#else + mavlink_config_led_ring_table_packet_t packet; + packet.led_rotation_period = led_rotation_period; + packet.led_zero_point_offset = led_zero_point_offset; + packet.packet_id = packet_id; + packet.led_display_mode = led_display_mode; + mav_array_memcpy(packet.led_table, led_table, sizeof(uint8_t)*45); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET; + return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_MIN_LEN, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_CRC); +} + +/** + * @brief Encode a config_led_ring_table_packet struct + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * @param config_led_ring_table_packet C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_config_led_ring_table_packet_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_config_led_ring_table_packet_t* config_led_ring_table_packet) +{ + return mavlink_msg_config_led_ring_table_packet_pack(system_id, component_id, msg, config_led_ring_table_packet->packet_id, config_led_ring_table_packet->led_rotation_period, config_led_ring_table_packet->led_zero_point_offset, config_led_ring_table_packet->led_display_mode, config_led_ring_table_packet->led_table); +} + +/** + * @brief Encode a config_led_ring_table_packet struct on a channel + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param config_led_ring_table_packet C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_config_led_ring_table_packet_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_config_led_ring_table_packet_t* config_led_ring_table_packet) +{ + return mavlink_msg_config_led_ring_table_packet_pack_chan(system_id, component_id, chan, msg, config_led_ring_table_packet->packet_id, config_led_ring_table_packet->led_rotation_period, config_led_ring_table_packet->led_zero_point_offset, config_led_ring_table_packet->led_display_mode, config_led_ring_table_packet->led_table); +} + +/** + * @brief Send a config_led_ring_table_packet message + * @param chan MAVLink channel to send the message + * + * @param packet_id Data packet ID. + * @param led_rotation_period Rotation period. + * @param led_zero_point_offset Zero offset unit in milliseconds. + * @param led_display_mode LED display mode selection. + * @param led_table LED display field data packet, 45 bytes represent the status of 360 LEDs bit by bit. + */ +#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS + +static inline void mavlink_msg_config_led_ring_table_packet_send(mavlink_channel_t chan, uint16_t packet_id, uint32_t led_rotation_period, uint32_t led_zero_point_offset, uint8_t led_display_mode, const uint8_t *led_table) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN]; + _mav_put_uint32_t(buf, 0, led_rotation_period); + _mav_put_uint32_t(buf, 4, led_zero_point_offset); + _mav_put_uint16_t(buf, 8, packet_id); + _mav_put_uint8_t(buf, 10, led_display_mode); + _mav_put_uint8_t_array(buf, 11, led_table, 45); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET, buf, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_MIN_LEN, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_CRC); +#else + mavlink_config_led_ring_table_packet_t packet; + packet.led_rotation_period = led_rotation_period; + packet.led_zero_point_offset = led_zero_point_offset; + packet.packet_id = packet_id; + packet.led_display_mode = led_display_mode; + mav_array_memcpy(packet.led_table, led_table, sizeof(uint8_t)*45); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET, (const char *)&packet, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_MIN_LEN, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_CRC); +#endif +} + +/** + * @brief Send a config_led_ring_table_packet message + * @param chan MAVLink channel to send the message + * @param struct The MAVLink struct to serialize + */ +static inline void mavlink_msg_config_led_ring_table_packet_send_struct(mavlink_channel_t chan, const mavlink_config_led_ring_table_packet_t* config_led_ring_table_packet) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + mavlink_msg_config_led_ring_table_packet_send(chan, config_led_ring_table_packet->packet_id, config_led_ring_table_packet->led_rotation_period, config_led_ring_table_packet->led_zero_point_offset, config_led_ring_table_packet->led_display_mode, config_led_ring_table_packet->led_table); +#else + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET, (const char *)config_led_ring_table_packet, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_MIN_LEN, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_CRC); +#endif +} + +#if MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN <= MAVLINK_MAX_PAYLOAD_LEN +/* + This variant of _send() can be used to save stack space by re-using + memory from the receive buffer. The caller provides a + mavlink_message_t which is the size of a full mavlink message. This + is usually the receive buffer for the channel, and allows a reply to an + incoming message with minimum stack space usage. + */ +static inline void mavlink_msg_config_led_ring_table_packet_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan, uint16_t packet_id, uint32_t led_rotation_period, uint32_t led_zero_point_offset, uint8_t led_display_mode, const uint8_t *led_table) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char *buf = (char *)msgbuf; + _mav_put_uint32_t(buf, 0, led_rotation_period); + _mav_put_uint32_t(buf, 4, led_zero_point_offset); + _mav_put_uint16_t(buf, 8, packet_id); + _mav_put_uint8_t(buf, 10, led_display_mode); + _mav_put_uint8_t_array(buf, 11, led_table, 45); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET, buf, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_MIN_LEN, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_CRC); +#else + mavlink_config_led_ring_table_packet_t *packet = (mavlink_config_led_ring_table_packet_t *)msgbuf; + packet->led_rotation_period = led_rotation_period; + packet->led_zero_point_offset = led_zero_point_offset; + packet->packet_id = packet_id; + packet->led_display_mode = led_display_mode; + mav_array_memcpy(packet->led_table, led_table, sizeof(uint8_t)*45); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET, (const char *)packet, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_MIN_LEN, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_CRC); +#endif +} +#endif + +#endif + +// MESSAGE CONFIG_LED_RING_TABLE_PACKET UNPACKING + + +/** + * @brief Get field packet_id from config_led_ring_table_packet message + * + * @return Data packet ID. + */ +static inline uint16_t mavlink_msg_config_led_ring_table_packet_get_packet_id(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint16_t(msg, 8); +} + +/** + * @brief Get field led_rotation_period from config_led_ring_table_packet message + * + * @return Rotation period. + */ +static inline uint32_t mavlink_msg_config_led_ring_table_packet_get_led_rotation_period(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint32_t(msg, 0); +} + +/** + * @brief Get field led_zero_point_offset from config_led_ring_table_packet message + * + * @return Zero offset unit in milliseconds. + */ +static inline uint32_t mavlink_msg_config_led_ring_table_packet_get_led_zero_point_offset(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint32_t(msg, 4); +} + +/** + * @brief Get field led_display_mode from config_led_ring_table_packet message + * + * @return LED display mode selection. + */ +static inline uint8_t mavlink_msg_config_led_ring_table_packet_get_led_display_mode(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint8_t(msg, 10); +} + +/** + * @brief Get field led_table from config_led_ring_table_packet message + * + * @return LED display field data packet, 45 bytes represent the status of 360 LEDs bit by bit. + */ +static inline uint16_t mavlink_msg_config_led_ring_table_packet_get_led_table(const mavlink_message_t* msg, uint8_t *led_table) +{ + return _MAV_RETURN_uint8_t_array(msg, led_table, 45, 11); +} + +/** + * @brief Decode a config_led_ring_table_packet message into a struct + * + * @param msg The message to decode + * @param config_led_ring_table_packet C-struct to decode the message contents into + */ +static inline void mavlink_msg_config_led_ring_table_packet_decode(const mavlink_message_t* msg, mavlink_config_led_ring_table_packet_t* config_led_ring_table_packet) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + config_led_ring_table_packet->led_rotation_period = mavlink_msg_config_led_ring_table_packet_get_led_rotation_period(msg); + config_led_ring_table_packet->led_zero_point_offset = mavlink_msg_config_led_ring_table_packet_get_led_zero_point_offset(msg); + config_led_ring_table_packet->packet_id = mavlink_msg_config_led_ring_table_packet_get_packet_id(msg); + config_led_ring_table_packet->led_display_mode = mavlink_msg_config_led_ring_table_packet_get_led_display_mode(msg); + mavlink_msg_config_led_ring_table_packet_get_led_table(msg, config_led_ring_table_packet->led_table); +#else + uint8_t len = msg->len < MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN? msg->len : MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN; + memset(config_led_ring_table_packet, 0, MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_LEN); + memcpy(config_led_ring_table_packet, _MAV_PAYLOAD(msg), len); +#endif +} diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_config_lidar_working_mode.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_config_lidar_working_mode.h new file mode 100644 index 0000000..382d9c6 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_config_lidar_working_mode.h @@ -0,0 +1,213 @@ +#pragma once +// MESSAGE CONFIG_LIDAR_WORKING_MODE PACKING + +#define MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE 14 + + +typedef struct __mavlink_config_lidar_working_mode_t { + uint8_t request_type; /*< Types of operating modes for LiDAR.*/ +} mavlink_config_lidar_working_mode_t; + +#define MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN 1 +#define MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_MIN_LEN 1 +#define MAVLINK_MSG_ID_14_LEN 1 +#define MAVLINK_MSG_ID_14_MIN_LEN 1 + +#define MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_CRC 84 +#define MAVLINK_MSG_ID_14_CRC 84 + + + +#if MAVLINK_COMMAND_24BIT +#define MAVLINK_MESSAGE_INFO_CONFIG_LIDAR_WORKING_MODE { \ + 14, \ + "CONFIG_LIDAR_WORKING_MODE", \ + 1, \ + { { "request_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_config_lidar_working_mode_t, request_type) }, \ + } \ +} +#else +#define MAVLINK_MESSAGE_INFO_CONFIG_LIDAR_WORKING_MODE { \ + "CONFIG_LIDAR_WORKING_MODE", \ + 1, \ + { { "request_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_config_lidar_working_mode_t, request_type) }, \ + } \ +} +#endif + +/** + * @brief Pack a config_lidar_working_mode message + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * + * @param request_type Types of operating modes for LiDAR. + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_config_lidar_working_mode_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, + uint8_t request_type) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN]; + _mav_put_uint8_t(buf, 0, request_type); + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN); +#else + mavlink_config_lidar_working_mode_t packet; + packet.request_type = request_type; + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE; + return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_MIN_LEN, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_CRC); +} + +/** + * @brief Pack a config_lidar_working_mode message on a channel + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param request_type Types of operating modes for LiDAR. + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_config_lidar_working_mode_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, + mavlink_message_t* msg, + uint8_t request_type) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN]; + _mav_put_uint8_t(buf, 0, request_type); + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN); +#else + mavlink_config_lidar_working_mode_t packet; + packet.request_type = request_type; + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE; + return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_MIN_LEN, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_CRC); +} + +/** + * @brief Encode a config_lidar_working_mode struct + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * @param config_lidar_working_mode C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_config_lidar_working_mode_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_config_lidar_working_mode_t* config_lidar_working_mode) +{ + return mavlink_msg_config_lidar_working_mode_pack(system_id, component_id, msg, config_lidar_working_mode->request_type); +} + +/** + * @brief Encode a config_lidar_working_mode struct on a channel + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param config_lidar_working_mode C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_config_lidar_working_mode_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_config_lidar_working_mode_t* config_lidar_working_mode) +{ + return mavlink_msg_config_lidar_working_mode_pack_chan(system_id, component_id, chan, msg, config_lidar_working_mode->request_type); +} + +/** + * @brief Send a config_lidar_working_mode message + * @param chan MAVLink channel to send the message + * + * @param request_type Types of operating modes for LiDAR. + */ +#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS + +static inline void mavlink_msg_config_lidar_working_mode_send(mavlink_channel_t chan, uint8_t request_type) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN]; + _mav_put_uint8_t(buf, 0, request_type); + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE, buf, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_MIN_LEN, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_CRC); +#else + mavlink_config_lidar_working_mode_t packet; + packet.request_type = request_type; + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE, (const char *)&packet, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_MIN_LEN, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_CRC); +#endif +} + +/** + * @brief Send a config_lidar_working_mode message + * @param chan MAVLink channel to send the message + * @param struct The MAVLink struct to serialize + */ +static inline void mavlink_msg_config_lidar_working_mode_send_struct(mavlink_channel_t chan, const mavlink_config_lidar_working_mode_t* config_lidar_working_mode) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + mavlink_msg_config_lidar_working_mode_send(chan, config_lidar_working_mode->request_type); +#else + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE, (const char *)config_lidar_working_mode, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_MIN_LEN, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_CRC); +#endif +} + +#if MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN <= MAVLINK_MAX_PAYLOAD_LEN +/* + This variant of _send() can be used to save stack space by re-using + memory from the receive buffer. The caller provides a + mavlink_message_t which is the size of a full mavlink message. This + is usually the receive buffer for the channel, and allows a reply to an + incoming message with minimum stack space usage. + */ +static inline void mavlink_msg_config_lidar_working_mode_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan, uint8_t request_type) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char *buf = (char *)msgbuf; + _mav_put_uint8_t(buf, 0, request_type); + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE, buf, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_MIN_LEN, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_CRC); +#else + mavlink_config_lidar_working_mode_t *packet = (mavlink_config_lidar_working_mode_t *)msgbuf; + packet->request_type = request_type; + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE, (const char *)packet, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_MIN_LEN, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_CRC); +#endif +} +#endif + +#endif + +// MESSAGE CONFIG_LIDAR_WORKING_MODE UNPACKING + + +/** + * @brief Get field request_type from config_lidar_working_mode message + * + * @return Types of operating modes for LiDAR. + */ +static inline uint8_t mavlink_msg_config_lidar_working_mode_get_request_type(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint8_t(msg, 0); +} + +/** + * @brief Decode a config_lidar_working_mode message into a struct + * + * @param msg The message to decode + * @param config_lidar_working_mode C-struct to decode the message contents into + */ +static inline void mavlink_msg_config_lidar_working_mode_decode(const mavlink_message_t* msg, mavlink_config_lidar_working_mode_t* config_lidar_working_mode) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + config_lidar_working_mode->request_type = mavlink_msg_config_lidar_working_mode_get_request_type(msg); +#else + uint8_t len = msg->len < MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN? msg->len : MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN; + memset(config_lidar_working_mode, 0, MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_LEN); + memcpy(config_lidar_working_mode, _MAV_PAYLOAD(msg), len); +#endif +} diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_device_command.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_device_command.h new file mode 100644 index 0000000..90d9ace --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_device_command.h @@ -0,0 +1,213 @@ +#pragma once +// MESSAGE DEVICE_COMMAND PACKING + +#define MAVLINK_MSG_ID_DEVICE_COMMAND 12 + + +typedef struct __mavlink_device_command_t { + uint8_t cmd_type; /*< Command*/ +} mavlink_device_command_t; + +#define MAVLINK_MSG_ID_DEVICE_COMMAND_LEN 1 +#define MAVLINK_MSG_ID_DEVICE_COMMAND_MIN_LEN 1 +#define MAVLINK_MSG_ID_12_LEN 1 +#define MAVLINK_MSG_ID_12_MIN_LEN 1 + +#define MAVLINK_MSG_ID_DEVICE_COMMAND_CRC 204 +#define MAVLINK_MSG_ID_12_CRC 204 + + + +#if MAVLINK_COMMAND_24BIT +#define MAVLINK_MESSAGE_INFO_DEVICE_COMMAND { \ + 12, \ + "DEVICE_COMMAND", \ + 1, \ + { { "cmd_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_device_command_t, cmd_type) }, \ + } \ +} +#else +#define MAVLINK_MESSAGE_INFO_DEVICE_COMMAND { \ + "DEVICE_COMMAND", \ + 1, \ + { { "cmd_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_device_command_t, cmd_type) }, \ + } \ +} +#endif + +/** + * @brief Pack a device_command message + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * + * @param cmd_type Command + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_device_command_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, + uint8_t cmd_type) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_DEVICE_COMMAND_LEN]; + _mav_put_uint8_t(buf, 0, cmd_type); + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DEVICE_COMMAND_LEN); +#else + mavlink_device_command_t packet; + packet.cmd_type = cmd_type; + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DEVICE_COMMAND_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_DEVICE_COMMAND; + return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_DEVICE_COMMAND_MIN_LEN, MAVLINK_MSG_ID_DEVICE_COMMAND_LEN, MAVLINK_MSG_ID_DEVICE_COMMAND_CRC); +} + +/** + * @brief Pack a device_command message on a channel + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param cmd_type Command + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_device_command_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, + mavlink_message_t* msg, + uint8_t cmd_type) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_DEVICE_COMMAND_LEN]; + _mav_put_uint8_t(buf, 0, cmd_type); + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DEVICE_COMMAND_LEN); +#else + mavlink_device_command_t packet; + packet.cmd_type = cmd_type; + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DEVICE_COMMAND_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_DEVICE_COMMAND; + return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_DEVICE_COMMAND_MIN_LEN, MAVLINK_MSG_ID_DEVICE_COMMAND_LEN, MAVLINK_MSG_ID_DEVICE_COMMAND_CRC); +} + +/** + * @brief Encode a device_command struct + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * @param device_command C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_device_command_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_device_command_t* device_command) +{ + return mavlink_msg_device_command_pack(system_id, component_id, msg, device_command->cmd_type); +} + +/** + * @brief Encode a device_command struct on a channel + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param device_command C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_device_command_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_device_command_t* device_command) +{ + return mavlink_msg_device_command_pack_chan(system_id, component_id, chan, msg, device_command->cmd_type); +} + +/** + * @brief Send a device_command message + * @param chan MAVLink channel to send the message + * + * @param cmd_type Command + */ +#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS + +static inline void mavlink_msg_device_command_send(mavlink_channel_t chan, uint8_t cmd_type) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_DEVICE_COMMAND_LEN]; + _mav_put_uint8_t(buf, 0, cmd_type); + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEVICE_COMMAND, buf, MAVLINK_MSG_ID_DEVICE_COMMAND_MIN_LEN, MAVLINK_MSG_ID_DEVICE_COMMAND_LEN, MAVLINK_MSG_ID_DEVICE_COMMAND_CRC); +#else + mavlink_device_command_t packet; + packet.cmd_type = cmd_type; + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEVICE_COMMAND, (const char *)&packet, MAVLINK_MSG_ID_DEVICE_COMMAND_MIN_LEN, MAVLINK_MSG_ID_DEVICE_COMMAND_LEN, MAVLINK_MSG_ID_DEVICE_COMMAND_CRC); +#endif +} + +/** + * @brief Send a device_command message + * @param chan MAVLink channel to send the message + * @param struct The MAVLink struct to serialize + */ +static inline void mavlink_msg_device_command_send_struct(mavlink_channel_t chan, const mavlink_device_command_t* device_command) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + mavlink_msg_device_command_send(chan, device_command->cmd_type); +#else + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEVICE_COMMAND, (const char *)device_command, MAVLINK_MSG_ID_DEVICE_COMMAND_MIN_LEN, MAVLINK_MSG_ID_DEVICE_COMMAND_LEN, MAVLINK_MSG_ID_DEVICE_COMMAND_CRC); +#endif +} + +#if MAVLINK_MSG_ID_DEVICE_COMMAND_LEN <= MAVLINK_MAX_PAYLOAD_LEN +/* + This variant of _send() can be used to save stack space by re-using + memory from the receive buffer. The caller provides a + mavlink_message_t which is the size of a full mavlink message. This + is usually the receive buffer for the channel, and allows a reply to an + incoming message with minimum stack space usage. + */ +static inline void mavlink_msg_device_command_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan, uint8_t cmd_type) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char *buf = (char *)msgbuf; + _mav_put_uint8_t(buf, 0, cmd_type); + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEVICE_COMMAND, buf, MAVLINK_MSG_ID_DEVICE_COMMAND_MIN_LEN, MAVLINK_MSG_ID_DEVICE_COMMAND_LEN, MAVLINK_MSG_ID_DEVICE_COMMAND_CRC); +#else + mavlink_device_command_t *packet = (mavlink_device_command_t *)msgbuf; + packet->cmd_type = cmd_type; + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEVICE_COMMAND, (const char *)packet, MAVLINK_MSG_ID_DEVICE_COMMAND_MIN_LEN, MAVLINK_MSG_ID_DEVICE_COMMAND_LEN, MAVLINK_MSG_ID_DEVICE_COMMAND_CRC); +#endif +} +#endif + +#endif + +// MESSAGE DEVICE_COMMAND UNPACKING + + +/** + * @brief Get field cmd_type from device_command message + * + * @return Command + */ +static inline uint8_t mavlink_msg_device_command_get_cmd_type(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint8_t(msg, 0); +} + +/** + * @brief Decode a device_command message into a struct + * + * @param msg The message to decode + * @param device_command C-struct to decode the message contents into + */ +static inline void mavlink_msg_device_command_decode(const mavlink_message_t* msg, mavlink_device_command_t* device_command) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + device_command->cmd_type = mavlink_msg_device_command_get_cmd_type(msg); +#else + uint8_t len = msg->len < MAVLINK_MSG_ID_DEVICE_COMMAND_LEN? msg->len : MAVLINK_MSG_ID_DEVICE_COMMAND_LEN; + memset(device_command, 0, MAVLINK_MSG_ID_DEVICE_COMMAND_LEN); + memcpy(device_command, _MAV_PAYLOAD(msg), len); +#endif +} diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_device_request_data.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_device_request_data.h new file mode 100644 index 0000000..c2a944c --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_device_request_data.h @@ -0,0 +1,213 @@ +#pragma once +// MESSAGE DEVICE_REQUEST_DATA PACKING + +#define MAVLINK_MSG_ID_DEVICE_REQUEST_DATA 11 + + +typedef struct __mavlink_device_request_data_t { + uint8_t request_type; /*< Type of the needed data*/ +} mavlink_device_request_data_t; + +#define MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN 1 +#define MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_MIN_LEN 1 +#define MAVLINK_MSG_ID_11_LEN 1 +#define MAVLINK_MSG_ID_11_MIN_LEN 1 + +#define MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_CRC 106 +#define MAVLINK_MSG_ID_11_CRC 106 + + + +#if MAVLINK_COMMAND_24BIT +#define MAVLINK_MESSAGE_INFO_DEVICE_REQUEST_DATA { \ + 11, \ + "DEVICE_REQUEST_DATA", \ + 1, \ + { { "request_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_device_request_data_t, request_type) }, \ + } \ +} +#else +#define MAVLINK_MESSAGE_INFO_DEVICE_REQUEST_DATA { \ + "DEVICE_REQUEST_DATA", \ + 1, \ + { { "request_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 0, offsetof(mavlink_device_request_data_t, request_type) }, \ + } \ +} +#endif + +/** + * @brief Pack a device_request_data message + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * + * @param request_type Type of the needed data + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_device_request_data_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, + uint8_t request_type) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN]; + _mav_put_uint8_t(buf, 0, request_type); + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN); +#else + mavlink_device_request_data_t packet; + packet.request_type = request_type; + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_DEVICE_REQUEST_DATA; + return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_MIN_LEN, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_CRC); +} + +/** + * @brief Pack a device_request_data message on a channel + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param request_type Type of the needed data + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_device_request_data_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, + mavlink_message_t* msg, + uint8_t request_type) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN]; + _mav_put_uint8_t(buf, 0, request_type); + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN); +#else + mavlink_device_request_data_t packet; + packet.request_type = request_type; + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_DEVICE_REQUEST_DATA; + return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_MIN_LEN, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_CRC); +} + +/** + * @brief Encode a device_request_data struct + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * @param device_request_data C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_device_request_data_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_device_request_data_t* device_request_data) +{ + return mavlink_msg_device_request_data_pack(system_id, component_id, msg, device_request_data->request_type); +} + +/** + * @brief Encode a device_request_data struct on a channel + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param device_request_data C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_device_request_data_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_device_request_data_t* device_request_data) +{ + return mavlink_msg_device_request_data_pack_chan(system_id, component_id, chan, msg, device_request_data->request_type); +} + +/** + * @brief Send a device_request_data message + * @param chan MAVLink channel to send the message + * + * @param request_type Type of the needed data + */ +#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS + +static inline void mavlink_msg_device_request_data_send(mavlink_channel_t chan, uint8_t request_type) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN]; + _mav_put_uint8_t(buf, 0, request_type); + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA, buf, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_MIN_LEN, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_CRC); +#else + mavlink_device_request_data_t packet; + packet.request_type = request_type; + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA, (const char *)&packet, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_MIN_LEN, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_CRC); +#endif +} + +/** + * @brief Send a device_request_data message + * @param chan MAVLink channel to send the message + * @param struct The MAVLink struct to serialize + */ +static inline void mavlink_msg_device_request_data_send_struct(mavlink_channel_t chan, const mavlink_device_request_data_t* device_request_data) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + mavlink_msg_device_request_data_send(chan, device_request_data->request_type); +#else + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA, (const char *)device_request_data, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_MIN_LEN, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_CRC); +#endif +} + +#if MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN <= MAVLINK_MAX_PAYLOAD_LEN +/* + This variant of _send() can be used to save stack space by re-using + memory from the receive buffer. The caller provides a + mavlink_message_t which is the size of a full mavlink message. This + is usually the receive buffer for the channel, and allows a reply to an + incoming message with minimum stack space usage. + */ +static inline void mavlink_msg_device_request_data_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan, uint8_t request_type) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char *buf = (char *)msgbuf; + _mav_put_uint8_t(buf, 0, request_type); + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA, buf, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_MIN_LEN, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_CRC); +#else + mavlink_device_request_data_t *packet = (mavlink_device_request_data_t *)msgbuf; + packet->request_type = request_type; + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA, (const char *)packet, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_MIN_LEN, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_CRC); +#endif +} +#endif + +#endif + +// MESSAGE DEVICE_REQUEST_DATA UNPACKING + + +/** + * @brief Get field request_type from device_request_data message + * + * @return Type of the needed data + */ +static inline uint8_t mavlink_msg_device_request_data_get_request_type(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint8_t(msg, 0); +} + +/** + * @brief Decode a device_request_data message into a struct + * + * @param msg The message to decode + * @param device_request_data C-struct to decode the message contents into + */ +static inline void mavlink_msg_device_request_data_decode(const mavlink_message_t* msg, mavlink_device_request_data_t* device_request_data) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + device_request_data->request_type = mavlink_msg_device_request_data_get_request_type(msg); +#else + uint8_t len = msg->len < MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN? msg->len : MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN; + memset(device_request_data, 0, MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_LEN); + memcpy(device_request_data, _MAV_PAYLOAD(msg), len); +#endif +} diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_imu_attitude_data_packet.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_imu_attitude_data_packet.h new file mode 100644 index 0000000..dfbd067 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_imu_attitude_data_packet.h @@ -0,0 +1,282 @@ +#pragma once +// MESSAGE RET_IMU_ATTITUDE_DATA_PACKET PACKING + +#define MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET 19 + + +typedef struct __mavlink_ret_imu_attitude_data_packet_t { + float quaternion[4]; /*< Quaternion Array.*/ + float angular_velocity[3]; /*< Three-axis angular velocity values.*/ + float linear_acceleration[3]; /*< Three-axis acceleration values.*/ + uint16_t packet_id; /*< Data packet ID.*/ +} mavlink_ret_imu_attitude_data_packet_t; + +#define MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN 42 +#define MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_MIN_LEN 42 +#define MAVLINK_MSG_ID_19_LEN 42 +#define MAVLINK_MSG_ID_19_MIN_LEN 42 + +#define MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_CRC 110 +#define MAVLINK_MSG_ID_19_CRC 110 + +#define MAVLINK_MSG_RET_IMU_ATTITUDE_DATA_PACKET_FIELD_QUATERNION_LEN 4 +#define MAVLINK_MSG_RET_IMU_ATTITUDE_DATA_PACKET_FIELD_ANGULAR_VELOCITY_LEN 3 +#define MAVLINK_MSG_RET_IMU_ATTITUDE_DATA_PACKET_FIELD_LINEAR_ACCELERATION_LEN 3 + +#if MAVLINK_COMMAND_24BIT +#define MAVLINK_MESSAGE_INFO_RET_IMU_ATTITUDE_DATA_PACKET { \ + 19, \ + "RET_IMU_ATTITUDE_DATA_PACKET", \ + 4, \ + { { "packet_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 40, offsetof(mavlink_ret_imu_attitude_data_packet_t, packet_id) }, \ + { "quaternion", NULL, MAVLINK_TYPE_FLOAT, 4, 0, offsetof(mavlink_ret_imu_attitude_data_packet_t, quaternion) }, \ + { "angular_velocity", NULL, MAVLINK_TYPE_FLOAT, 3, 16, offsetof(mavlink_ret_imu_attitude_data_packet_t, angular_velocity) }, \ + { "linear_acceleration", NULL, MAVLINK_TYPE_FLOAT, 3, 28, offsetof(mavlink_ret_imu_attitude_data_packet_t, linear_acceleration) }, \ + } \ +} +#else +#define MAVLINK_MESSAGE_INFO_RET_IMU_ATTITUDE_DATA_PACKET { \ + "RET_IMU_ATTITUDE_DATA_PACKET", \ + 4, \ + { { "packet_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 40, offsetof(mavlink_ret_imu_attitude_data_packet_t, packet_id) }, \ + { "quaternion", NULL, MAVLINK_TYPE_FLOAT, 4, 0, offsetof(mavlink_ret_imu_attitude_data_packet_t, quaternion) }, \ + { "angular_velocity", NULL, MAVLINK_TYPE_FLOAT, 3, 16, offsetof(mavlink_ret_imu_attitude_data_packet_t, angular_velocity) }, \ + { "linear_acceleration", NULL, MAVLINK_TYPE_FLOAT, 3, 28, offsetof(mavlink_ret_imu_attitude_data_packet_t, linear_acceleration) }, \ + } \ +} +#endif + +/** + * @brief Pack a ret_imu_attitude_data_packet message + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * + * @param packet_id Data packet ID. + * @param quaternion Quaternion Array. + * @param angular_velocity Three-axis angular velocity values. + * @param linear_acceleration Three-axis acceleration values. + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_ret_imu_attitude_data_packet_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, + uint16_t packet_id, const float *quaternion, const float *angular_velocity, const float *linear_acceleration) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN]; + _mav_put_uint16_t(buf, 40, packet_id); + _mav_put_float_array(buf, 0, quaternion, 4); + _mav_put_float_array(buf, 16, angular_velocity, 3); + _mav_put_float_array(buf, 28, linear_acceleration, 3); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN); +#else + mavlink_ret_imu_attitude_data_packet_t packet; + packet.packet_id = packet_id; + mav_array_memcpy(packet.quaternion, quaternion, sizeof(float)*4); + mav_array_memcpy(packet.angular_velocity, angular_velocity, sizeof(float)*3); + mav_array_memcpy(packet.linear_acceleration, linear_acceleration, sizeof(float)*3); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET; + return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_CRC); +} + +/** + * @brief Pack a ret_imu_attitude_data_packet message on a channel + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param packet_id Data packet ID. + * @param quaternion Quaternion Array. + * @param angular_velocity Three-axis angular velocity values. + * @param linear_acceleration Three-axis acceleration values. + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_ret_imu_attitude_data_packet_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, + mavlink_message_t* msg, + uint16_t packet_id,const float *quaternion,const float *angular_velocity,const float *linear_acceleration) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN]; + _mav_put_uint16_t(buf, 40, packet_id); + _mav_put_float_array(buf, 0, quaternion, 4); + _mav_put_float_array(buf, 16, angular_velocity, 3); + _mav_put_float_array(buf, 28, linear_acceleration, 3); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN); +#else + mavlink_ret_imu_attitude_data_packet_t packet; + packet.packet_id = packet_id; + mav_array_memcpy(packet.quaternion, quaternion, sizeof(float)*4); + mav_array_memcpy(packet.angular_velocity, angular_velocity, sizeof(float)*3); + mav_array_memcpy(packet.linear_acceleration, linear_acceleration, sizeof(float)*3); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET; + return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_CRC); +} + +/** + * @brief Encode a ret_imu_attitude_data_packet struct + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * @param ret_imu_attitude_data_packet C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_ret_imu_attitude_data_packet_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_ret_imu_attitude_data_packet_t* ret_imu_attitude_data_packet) +{ + return mavlink_msg_ret_imu_attitude_data_packet_pack(system_id, component_id, msg, ret_imu_attitude_data_packet->packet_id, ret_imu_attitude_data_packet->quaternion, ret_imu_attitude_data_packet->angular_velocity, ret_imu_attitude_data_packet->linear_acceleration); +} + +/** + * @brief Encode a ret_imu_attitude_data_packet struct on a channel + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param ret_imu_attitude_data_packet C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_ret_imu_attitude_data_packet_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_ret_imu_attitude_data_packet_t* ret_imu_attitude_data_packet) +{ + return mavlink_msg_ret_imu_attitude_data_packet_pack_chan(system_id, component_id, chan, msg, ret_imu_attitude_data_packet->packet_id, ret_imu_attitude_data_packet->quaternion, ret_imu_attitude_data_packet->angular_velocity, ret_imu_attitude_data_packet->linear_acceleration); +} + +/** + * @brief Send a ret_imu_attitude_data_packet message + * @param chan MAVLink channel to send the message + * + * @param packet_id Data packet ID. + * @param quaternion Quaternion Array. + * @param angular_velocity Three-axis angular velocity values. + * @param linear_acceleration Three-axis acceleration values. + */ +#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS + +static inline void mavlink_msg_ret_imu_attitude_data_packet_send(mavlink_channel_t chan, uint16_t packet_id, const float *quaternion, const float *angular_velocity, const float *linear_acceleration) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN]; + _mav_put_uint16_t(buf, 40, packet_id); + _mav_put_float_array(buf, 0, quaternion, 4); + _mav_put_float_array(buf, 16, angular_velocity, 3); + _mav_put_float_array(buf, 28, linear_acceleration, 3); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET, buf, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_CRC); +#else + mavlink_ret_imu_attitude_data_packet_t packet; + packet.packet_id = packet_id; + mav_array_memcpy(packet.quaternion, quaternion, sizeof(float)*4); + mav_array_memcpy(packet.angular_velocity, angular_velocity, sizeof(float)*3); + mav_array_memcpy(packet.linear_acceleration, linear_acceleration, sizeof(float)*3); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET, (const char *)&packet, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_CRC); +#endif +} + +/** + * @brief Send a ret_imu_attitude_data_packet message + * @param chan MAVLink channel to send the message + * @param struct The MAVLink struct to serialize + */ +static inline void mavlink_msg_ret_imu_attitude_data_packet_send_struct(mavlink_channel_t chan, const mavlink_ret_imu_attitude_data_packet_t* ret_imu_attitude_data_packet) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + mavlink_msg_ret_imu_attitude_data_packet_send(chan, ret_imu_attitude_data_packet->packet_id, ret_imu_attitude_data_packet->quaternion, ret_imu_attitude_data_packet->angular_velocity, ret_imu_attitude_data_packet->linear_acceleration); +#else + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET, (const char *)ret_imu_attitude_data_packet, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_CRC); +#endif +} + +#if MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN <= MAVLINK_MAX_PAYLOAD_LEN +/* + This variant of _send() can be used to save stack space by re-using + memory from the receive buffer. The caller provides a + mavlink_message_t which is the size of a full mavlink message. This + is usually the receive buffer for the channel, and allows a reply to an + incoming message with minimum stack space usage. + */ +static inline void mavlink_msg_ret_imu_attitude_data_packet_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan, uint16_t packet_id, const float *quaternion, const float *angular_velocity, const float *linear_acceleration) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char *buf = (char *)msgbuf; + _mav_put_uint16_t(buf, 40, packet_id); + _mav_put_float_array(buf, 0, quaternion, 4); + _mav_put_float_array(buf, 16, angular_velocity, 3); + _mav_put_float_array(buf, 28, linear_acceleration, 3); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET, buf, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_CRC); +#else + mavlink_ret_imu_attitude_data_packet_t *packet = (mavlink_ret_imu_attitude_data_packet_t *)msgbuf; + packet->packet_id = packet_id; + mav_array_memcpy(packet->quaternion, quaternion, sizeof(float)*4); + mav_array_memcpy(packet->angular_velocity, angular_velocity, sizeof(float)*3); + mav_array_memcpy(packet->linear_acceleration, linear_acceleration, sizeof(float)*3); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET, (const char *)packet, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_CRC); +#endif +} +#endif + +#endif + +// MESSAGE RET_IMU_ATTITUDE_DATA_PACKET UNPACKING + + +/** + * @brief Get field packet_id from ret_imu_attitude_data_packet message + * + * @return Data packet ID. + */ +static inline uint16_t mavlink_msg_ret_imu_attitude_data_packet_get_packet_id(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint16_t(msg, 40); +} + +/** + * @brief Get field quaternion from ret_imu_attitude_data_packet message + * + * @return Quaternion Array. + */ +static inline uint16_t mavlink_msg_ret_imu_attitude_data_packet_get_quaternion(const mavlink_message_t* msg, float *quaternion) +{ + return _MAV_RETURN_float_array(msg, quaternion, 4, 0); +} + +/** + * @brief Get field angular_velocity from ret_imu_attitude_data_packet message + * + * @return Three-axis angular velocity values. + */ +static inline uint16_t mavlink_msg_ret_imu_attitude_data_packet_get_angular_velocity(const mavlink_message_t* msg, float *angular_velocity) +{ + return _MAV_RETURN_float_array(msg, angular_velocity, 3, 16); +} + +/** + * @brief Get field linear_acceleration from ret_imu_attitude_data_packet message + * + * @return Three-axis acceleration values. + */ +static inline uint16_t mavlink_msg_ret_imu_attitude_data_packet_get_linear_acceleration(const mavlink_message_t* msg, float *linear_acceleration) +{ + return _MAV_RETURN_float_array(msg, linear_acceleration, 3, 28); +} + +/** + * @brief Decode a ret_imu_attitude_data_packet message into a struct + * + * @param msg The message to decode + * @param ret_imu_attitude_data_packet C-struct to decode the message contents into + */ +static inline void mavlink_msg_ret_imu_attitude_data_packet_decode(const mavlink_message_t* msg, mavlink_ret_imu_attitude_data_packet_t* ret_imu_attitude_data_packet) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + mavlink_msg_ret_imu_attitude_data_packet_get_quaternion(msg, ret_imu_attitude_data_packet->quaternion); + mavlink_msg_ret_imu_attitude_data_packet_get_angular_velocity(msg, ret_imu_attitude_data_packet->angular_velocity); + mavlink_msg_ret_imu_attitude_data_packet_get_linear_acceleration(msg, ret_imu_attitude_data_packet->linear_acceleration); + ret_imu_attitude_data_packet->packet_id = mavlink_msg_ret_imu_attitude_data_packet_get_packet_id(msg); +#else + uint8_t len = msg->len < MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN? msg->len : MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN; + memset(ret_imu_attitude_data_packet, 0, MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_LEN); + memcpy(ret_imu_attitude_data_packet, _MAV_PAYLOAD(msg), len); +#endif +} diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_auxiliary_data_packet.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_auxiliary_data_packet.h new file mode 100644 index 0000000..4f67534 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_auxiliary_data_packet.h @@ -0,0 +1,805 @@ +#pragma once +// MESSAGE RET_LIDAR_AUXILIARY_DATA_PACKET PACKING + +#define MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET 17 + + +typedef struct __mavlink_ret_lidar_auxiliary_data_packet_t { + uint32_t lidar_sync_delay_time; /*< Delay time of upper computer communication(us).*/ + uint32_t time_stamp_s_step; /*< LiDAR operational timestamp in seconds.*/ + uint32_t time_stamp_us_step; /*< LiDAR operational timestamp in microsecond .*/ + uint32_t sys_rotation_period; /*< LiDAR low-speed motor rotation period in microsecond .*/ + uint32_t com_rotation_period; /*< LiDAR high-speed motor rotation period in microsecond .*/ + float com_horizontal_angle_start; /*< The first data in the current data packet is the horizontal angle,Distance data applicable to RET_LIDAR_DISTANCE_DATA_PACKET data packet and reflectivity data of RET_LIDAR_AUXILIARY_DATA_PACKET data packet.*/ + float com_horizontal_angle_step; /*< Angle interval between two adjacent data in the horizontal direction.*/ + float sys_vertical_angle_start; /*< The vertical angle of the first data in the current data packet.*/ + float sys_vertical_angle_span; /*< The angular span between adjacent data in the vertical direction of the current data packet.*/ + float apd_temperature; /*< APD temperature value*/ + float dirty_index; /*< Protective cover dirt detection index*/ + float imu_temperature; /*< IMU temperature value*/ + float up_optical_q; /*< Up optical communication quality.*/ + float down_optical_q; /*< Downlink optical communication quality.*/ + float apd_voltage; /*< APD voltage value.*/ + float imu_angle_x_offset; /*< IMU x-axis installation angle error.*/ + float imu_angle_y_offset; /*< IMU y-axis installation angle error.*/ + float imu_angle_z_offset; /*< IMU z-axis installation angle error.*/ + float b_axis_dist; /*< Laser calibration b distance compensation.*/ + float theta_angle; /*< Laser calibration theta angle compensation.*/ + float ksi_angle; /*< Laser calibration ksi angle compensation.*/ + uint16_t packet_id; /*< Data packet ID.*/ + uint16_t payload_size; /*< Data packet payload size.*/ + uint8_t lidar_work_status; /*< LiDAR operational state indicator.*/ + uint8_t reflect_data[120]; /*< reflectivity data*/ +} mavlink_ret_lidar_auxiliary_data_packet_t; + +#define MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN 209 +#define MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_MIN_LEN 209 +#define MAVLINK_MSG_ID_17_LEN 209 +#define MAVLINK_MSG_ID_17_MIN_LEN 209 + +#define MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_CRC 99 +#define MAVLINK_MSG_ID_17_CRC 99 + +#define MAVLINK_MSG_RET_LIDAR_AUXILIARY_DATA_PACKET_FIELD_REFLECT_DATA_LEN 120 + +#if MAVLINK_COMMAND_24BIT +#define MAVLINK_MESSAGE_INFO_RET_LIDAR_AUXILIARY_DATA_PACKET { \ + 17, \ + "RET_LIDAR_AUXILIARY_DATA_PACKET", \ + 25, \ + { { "lidar_work_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 88, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, lidar_work_status) }, \ + { "packet_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 84, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, packet_id) }, \ + { "payload_size", NULL, MAVLINK_TYPE_UINT16_T, 0, 86, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, payload_size) }, \ + { "lidar_sync_delay_time", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, lidar_sync_delay_time) }, \ + { "time_stamp_s_step", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, time_stamp_s_step) }, \ + { "time_stamp_us_step", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, time_stamp_us_step) }, \ + { "sys_rotation_period", NULL, MAVLINK_TYPE_UINT32_T, 0, 12, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, sys_rotation_period) }, \ + { "com_rotation_period", NULL, MAVLINK_TYPE_UINT32_T, 0, 16, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, com_rotation_period) }, \ + { "com_horizontal_angle_start", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, com_horizontal_angle_start) }, \ + { "com_horizontal_angle_step", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, com_horizontal_angle_step) }, \ + { "sys_vertical_angle_start", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, sys_vertical_angle_start) }, \ + { "sys_vertical_angle_span", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, sys_vertical_angle_span) }, \ + { "apd_temperature", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, apd_temperature) }, \ + { "dirty_index", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, dirty_index) }, \ + { "imu_temperature", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, imu_temperature) }, \ + { "up_optical_q", NULL, MAVLINK_TYPE_FLOAT, 0, 48, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, up_optical_q) }, \ + { "down_optical_q", NULL, MAVLINK_TYPE_FLOAT, 0, 52, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, down_optical_q) }, \ + { "apd_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 56, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, apd_voltage) }, \ + { "imu_angle_x_offset", NULL, MAVLINK_TYPE_FLOAT, 0, 60, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, imu_angle_x_offset) }, \ + { "imu_angle_y_offset", NULL, MAVLINK_TYPE_FLOAT, 0, 64, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, imu_angle_y_offset) }, \ + { "imu_angle_z_offset", NULL, MAVLINK_TYPE_FLOAT, 0, 68, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, imu_angle_z_offset) }, \ + { "b_axis_dist", NULL, MAVLINK_TYPE_FLOAT, 0, 72, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, b_axis_dist) }, \ + { "theta_angle", NULL, MAVLINK_TYPE_FLOAT, 0, 76, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, theta_angle) }, \ + { "ksi_angle", NULL, MAVLINK_TYPE_FLOAT, 0, 80, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, ksi_angle) }, \ + { "reflect_data", NULL, MAVLINK_TYPE_UINT8_T, 120, 89, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, reflect_data) }, \ + } \ +} +#else +#define MAVLINK_MESSAGE_INFO_RET_LIDAR_AUXILIARY_DATA_PACKET { \ + "RET_LIDAR_AUXILIARY_DATA_PACKET", \ + 25, \ + { { "lidar_work_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 88, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, lidar_work_status) }, \ + { "packet_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 84, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, packet_id) }, \ + { "payload_size", NULL, MAVLINK_TYPE_UINT16_T, 0, 86, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, payload_size) }, \ + { "lidar_sync_delay_time", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, lidar_sync_delay_time) }, \ + { "time_stamp_s_step", NULL, MAVLINK_TYPE_UINT32_T, 0, 4, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, time_stamp_s_step) }, \ + { "time_stamp_us_step", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, time_stamp_us_step) }, \ + { "sys_rotation_period", NULL, MAVLINK_TYPE_UINT32_T, 0, 12, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, sys_rotation_period) }, \ + { "com_rotation_period", NULL, MAVLINK_TYPE_UINT32_T, 0, 16, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, com_rotation_period) }, \ + { "com_horizontal_angle_start", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, com_horizontal_angle_start) }, \ + { "com_horizontal_angle_step", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, com_horizontal_angle_step) }, \ + { "sys_vertical_angle_start", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, sys_vertical_angle_start) }, \ + { "sys_vertical_angle_span", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, sys_vertical_angle_span) }, \ + { "apd_temperature", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, apd_temperature) }, \ + { "dirty_index", NULL, MAVLINK_TYPE_FLOAT, 0, 40, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, dirty_index) }, \ + { "imu_temperature", NULL, MAVLINK_TYPE_FLOAT, 0, 44, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, imu_temperature) }, \ + { "up_optical_q", NULL, MAVLINK_TYPE_FLOAT, 0, 48, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, up_optical_q) }, \ + { "down_optical_q", NULL, MAVLINK_TYPE_FLOAT, 0, 52, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, down_optical_q) }, \ + { "apd_voltage", NULL, MAVLINK_TYPE_FLOAT, 0, 56, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, apd_voltage) }, \ + { "imu_angle_x_offset", NULL, MAVLINK_TYPE_FLOAT, 0, 60, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, imu_angle_x_offset) }, \ + { "imu_angle_y_offset", NULL, MAVLINK_TYPE_FLOAT, 0, 64, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, imu_angle_y_offset) }, \ + { "imu_angle_z_offset", NULL, MAVLINK_TYPE_FLOAT, 0, 68, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, imu_angle_z_offset) }, \ + { "b_axis_dist", NULL, MAVLINK_TYPE_FLOAT, 0, 72, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, b_axis_dist) }, \ + { "theta_angle", NULL, MAVLINK_TYPE_FLOAT, 0, 76, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, theta_angle) }, \ + { "ksi_angle", NULL, MAVLINK_TYPE_FLOAT, 0, 80, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, ksi_angle) }, \ + { "reflect_data", NULL, MAVLINK_TYPE_UINT8_T, 120, 89, offsetof(mavlink_ret_lidar_auxiliary_data_packet_t, reflect_data) }, \ + } \ +} +#endif + +/** + * @brief Pack a ret_lidar_auxiliary_data_packet message + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * + * @param lidar_work_status LiDAR operational state indicator. + * @param packet_id Data packet ID. + * @param payload_size Data packet payload size. + * @param lidar_sync_delay_time Delay time of upper computer communication(us). + * @param time_stamp_s_step LiDAR operational timestamp in seconds. + * @param time_stamp_us_step LiDAR operational timestamp in microsecond . + * @param sys_rotation_period LiDAR low-speed motor rotation period in microsecond . + * @param com_rotation_period LiDAR high-speed motor rotation period in microsecond . + * @param com_horizontal_angle_start The first data in the current data packet is the horizontal angle,Distance data applicable to RET_LIDAR_DISTANCE_DATA_PACKET data packet and reflectivity data of RET_LIDAR_AUXILIARY_DATA_PACKET data packet. + * @param com_horizontal_angle_step Angle interval between two adjacent data in the horizontal direction. + * @param sys_vertical_angle_start The vertical angle of the first data in the current data packet. + * @param sys_vertical_angle_span The angular span between adjacent data in the vertical direction of the current data packet. + * @param apd_temperature APD temperature value + * @param dirty_index Protective cover dirt detection index + * @param imu_temperature IMU temperature value + * @param up_optical_q Up optical communication quality. + * @param down_optical_q Downlink optical communication quality. + * @param apd_voltage APD voltage value. + * @param imu_angle_x_offset IMU x-axis installation angle error. + * @param imu_angle_y_offset IMU y-axis installation angle error. + * @param imu_angle_z_offset IMU z-axis installation angle error. + * @param b_axis_dist Laser calibration b distance compensation. + * @param theta_angle Laser calibration theta angle compensation. + * @param ksi_angle Laser calibration ksi angle compensation. + * @param reflect_data reflectivity data + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_ret_lidar_auxiliary_data_packet_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, + uint8_t lidar_work_status, uint16_t packet_id, uint16_t payload_size, uint32_t lidar_sync_delay_time, uint32_t time_stamp_s_step, uint32_t time_stamp_us_step, uint32_t sys_rotation_period, uint32_t com_rotation_period, float com_horizontal_angle_start, float com_horizontal_angle_step, float sys_vertical_angle_start, float sys_vertical_angle_span, float apd_temperature, float dirty_index, float imu_temperature, float up_optical_q, float down_optical_q, float apd_voltage, float imu_angle_x_offset, float imu_angle_y_offset, float imu_angle_z_offset, float b_axis_dist, float theta_angle, float ksi_angle, const uint8_t *reflect_data) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN]; + _mav_put_uint32_t(buf, 0, lidar_sync_delay_time); + _mav_put_uint32_t(buf, 4, time_stamp_s_step); + _mav_put_uint32_t(buf, 8, time_stamp_us_step); + _mav_put_uint32_t(buf, 12, sys_rotation_period); + _mav_put_uint32_t(buf, 16, com_rotation_period); + _mav_put_float(buf, 20, com_horizontal_angle_start); + _mav_put_float(buf, 24, com_horizontal_angle_step); + _mav_put_float(buf, 28, sys_vertical_angle_start); + _mav_put_float(buf, 32, sys_vertical_angle_span); + _mav_put_float(buf, 36, apd_temperature); + _mav_put_float(buf, 40, dirty_index); + _mav_put_float(buf, 44, imu_temperature); + _mav_put_float(buf, 48, up_optical_q); + _mav_put_float(buf, 52, down_optical_q); + _mav_put_float(buf, 56, apd_voltage); + _mav_put_float(buf, 60, imu_angle_x_offset); + _mav_put_float(buf, 64, imu_angle_y_offset); + _mav_put_float(buf, 68, imu_angle_z_offset); + _mav_put_float(buf, 72, b_axis_dist); + _mav_put_float(buf, 76, theta_angle); + _mav_put_float(buf, 80, ksi_angle); + _mav_put_uint16_t(buf, 84, packet_id); + _mav_put_uint16_t(buf, 86, payload_size); + _mav_put_uint8_t(buf, 88, lidar_work_status); + _mav_put_uint8_t_array(buf, 89, reflect_data, 120); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN); +#else + mavlink_ret_lidar_auxiliary_data_packet_t packet; + packet.lidar_sync_delay_time = lidar_sync_delay_time; + packet.time_stamp_s_step = time_stamp_s_step; + packet.time_stamp_us_step = time_stamp_us_step; + packet.sys_rotation_period = sys_rotation_period; + packet.com_rotation_period = com_rotation_period; + packet.com_horizontal_angle_start = com_horizontal_angle_start; + packet.com_horizontal_angle_step = com_horizontal_angle_step; + packet.sys_vertical_angle_start = sys_vertical_angle_start; + packet.sys_vertical_angle_span = sys_vertical_angle_span; + packet.apd_temperature = apd_temperature; + packet.dirty_index = dirty_index; + packet.imu_temperature = imu_temperature; + packet.up_optical_q = up_optical_q; + packet.down_optical_q = down_optical_q; + packet.apd_voltage = apd_voltage; + packet.imu_angle_x_offset = imu_angle_x_offset; + packet.imu_angle_y_offset = imu_angle_y_offset; + packet.imu_angle_z_offset = imu_angle_z_offset; + packet.b_axis_dist = b_axis_dist; + packet.theta_angle = theta_angle; + packet.ksi_angle = ksi_angle; + packet.packet_id = packet_id; + packet.payload_size = payload_size; + packet.lidar_work_status = lidar_work_status; + mav_array_memcpy(packet.reflect_data, reflect_data, sizeof(uint8_t)*120); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET; + return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_CRC); +} + +/** + * @brief Pack a ret_lidar_auxiliary_data_packet message on a channel + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param lidar_work_status LiDAR operational state indicator. + * @param packet_id Data packet ID. + * @param payload_size Data packet payload size. + * @param lidar_sync_delay_time Delay time of upper computer communication(us). + * @param time_stamp_s_step LiDAR operational timestamp in seconds. + * @param time_stamp_us_step LiDAR operational timestamp in microsecond . + * @param sys_rotation_period LiDAR low-speed motor rotation period in microsecond . + * @param com_rotation_period LiDAR high-speed motor rotation period in microsecond . + * @param com_horizontal_angle_start The first data in the current data packet is the horizontal angle,Distance data applicable to RET_LIDAR_DISTANCE_DATA_PACKET data packet and reflectivity data of RET_LIDAR_AUXILIARY_DATA_PACKET data packet. + * @param com_horizontal_angle_step Angle interval between two adjacent data in the horizontal direction. + * @param sys_vertical_angle_start The vertical angle of the first data in the current data packet. + * @param sys_vertical_angle_span The angular span between adjacent data in the vertical direction of the current data packet. + * @param apd_temperature APD temperature value + * @param dirty_index Protective cover dirt detection index + * @param imu_temperature IMU temperature value + * @param up_optical_q Up optical communication quality. + * @param down_optical_q Downlink optical communication quality. + * @param apd_voltage APD voltage value. + * @param imu_angle_x_offset IMU x-axis installation angle error. + * @param imu_angle_y_offset IMU y-axis installation angle error. + * @param imu_angle_z_offset IMU z-axis installation angle error. + * @param b_axis_dist Laser calibration b distance compensation. + * @param theta_angle Laser calibration theta angle compensation. + * @param ksi_angle Laser calibration ksi angle compensation. + * @param reflect_data reflectivity data + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_ret_lidar_auxiliary_data_packet_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, + mavlink_message_t* msg, + uint8_t lidar_work_status,uint16_t packet_id,uint16_t payload_size,uint32_t lidar_sync_delay_time,uint32_t time_stamp_s_step,uint32_t time_stamp_us_step,uint32_t sys_rotation_period,uint32_t com_rotation_period,float com_horizontal_angle_start,float com_horizontal_angle_step,float sys_vertical_angle_start,float sys_vertical_angle_span,float apd_temperature,float dirty_index,float imu_temperature,float up_optical_q,float down_optical_q,float apd_voltage,float imu_angle_x_offset,float imu_angle_y_offset,float imu_angle_z_offset,float b_axis_dist,float theta_angle,float ksi_angle,const uint8_t *reflect_data) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN]; + _mav_put_uint32_t(buf, 0, lidar_sync_delay_time); + _mav_put_uint32_t(buf, 4, time_stamp_s_step); + _mav_put_uint32_t(buf, 8, time_stamp_us_step); + _mav_put_uint32_t(buf, 12, sys_rotation_period); + _mav_put_uint32_t(buf, 16, com_rotation_period); + _mav_put_float(buf, 20, com_horizontal_angle_start); + _mav_put_float(buf, 24, com_horizontal_angle_step); + _mav_put_float(buf, 28, sys_vertical_angle_start); + _mav_put_float(buf, 32, sys_vertical_angle_span); + _mav_put_float(buf, 36, apd_temperature); + _mav_put_float(buf, 40, dirty_index); + _mav_put_float(buf, 44, imu_temperature); + _mav_put_float(buf, 48, up_optical_q); + _mav_put_float(buf, 52, down_optical_q); + _mav_put_float(buf, 56, apd_voltage); + _mav_put_float(buf, 60, imu_angle_x_offset); + _mav_put_float(buf, 64, imu_angle_y_offset); + _mav_put_float(buf, 68, imu_angle_z_offset); + _mav_put_float(buf, 72, b_axis_dist); + _mav_put_float(buf, 76, theta_angle); + _mav_put_float(buf, 80, ksi_angle); + _mav_put_uint16_t(buf, 84, packet_id); + _mav_put_uint16_t(buf, 86, payload_size); + _mav_put_uint8_t(buf, 88, lidar_work_status); + _mav_put_uint8_t_array(buf, 89, reflect_data, 120); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN); +#else + mavlink_ret_lidar_auxiliary_data_packet_t packet; + packet.lidar_sync_delay_time = lidar_sync_delay_time; + packet.time_stamp_s_step = time_stamp_s_step; + packet.time_stamp_us_step = time_stamp_us_step; + packet.sys_rotation_period = sys_rotation_period; + packet.com_rotation_period = com_rotation_period; + packet.com_horizontal_angle_start = com_horizontal_angle_start; + packet.com_horizontal_angle_step = com_horizontal_angle_step; + packet.sys_vertical_angle_start = sys_vertical_angle_start; + packet.sys_vertical_angle_span = sys_vertical_angle_span; + packet.apd_temperature = apd_temperature; + packet.dirty_index = dirty_index; + packet.imu_temperature = imu_temperature; + packet.up_optical_q = up_optical_q; + packet.down_optical_q = down_optical_q; + packet.apd_voltage = apd_voltage; + packet.imu_angle_x_offset = imu_angle_x_offset; + packet.imu_angle_y_offset = imu_angle_y_offset; + packet.imu_angle_z_offset = imu_angle_z_offset; + packet.b_axis_dist = b_axis_dist; + packet.theta_angle = theta_angle; + packet.ksi_angle = ksi_angle; + packet.packet_id = packet_id; + packet.payload_size = payload_size; + packet.lidar_work_status = lidar_work_status; + mav_array_memcpy(packet.reflect_data, reflect_data, sizeof(uint8_t)*120); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET; + return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_CRC); +} + +/** + * @brief Encode a ret_lidar_auxiliary_data_packet struct + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * @param ret_lidar_auxiliary_data_packet C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_ret_lidar_auxiliary_data_packet_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_ret_lidar_auxiliary_data_packet_t* ret_lidar_auxiliary_data_packet) +{ + return mavlink_msg_ret_lidar_auxiliary_data_packet_pack(system_id, component_id, msg, ret_lidar_auxiliary_data_packet->lidar_work_status, ret_lidar_auxiliary_data_packet->packet_id, ret_lidar_auxiliary_data_packet->payload_size, ret_lidar_auxiliary_data_packet->lidar_sync_delay_time, ret_lidar_auxiliary_data_packet->time_stamp_s_step, ret_lidar_auxiliary_data_packet->time_stamp_us_step, ret_lidar_auxiliary_data_packet->sys_rotation_period, ret_lidar_auxiliary_data_packet->com_rotation_period, ret_lidar_auxiliary_data_packet->com_horizontal_angle_start, ret_lidar_auxiliary_data_packet->com_horizontal_angle_step, ret_lidar_auxiliary_data_packet->sys_vertical_angle_start, ret_lidar_auxiliary_data_packet->sys_vertical_angle_span, ret_lidar_auxiliary_data_packet->apd_temperature, ret_lidar_auxiliary_data_packet->dirty_index, ret_lidar_auxiliary_data_packet->imu_temperature, ret_lidar_auxiliary_data_packet->up_optical_q, ret_lidar_auxiliary_data_packet->down_optical_q, ret_lidar_auxiliary_data_packet->apd_voltage, ret_lidar_auxiliary_data_packet->imu_angle_x_offset, ret_lidar_auxiliary_data_packet->imu_angle_y_offset, ret_lidar_auxiliary_data_packet->imu_angle_z_offset, ret_lidar_auxiliary_data_packet->b_axis_dist, ret_lidar_auxiliary_data_packet->theta_angle, ret_lidar_auxiliary_data_packet->ksi_angle, ret_lidar_auxiliary_data_packet->reflect_data); +} + +/** + * @brief Encode a ret_lidar_auxiliary_data_packet struct on a channel + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param ret_lidar_auxiliary_data_packet C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_ret_lidar_auxiliary_data_packet_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_ret_lidar_auxiliary_data_packet_t* ret_lidar_auxiliary_data_packet) +{ + return mavlink_msg_ret_lidar_auxiliary_data_packet_pack_chan(system_id, component_id, chan, msg, ret_lidar_auxiliary_data_packet->lidar_work_status, ret_lidar_auxiliary_data_packet->packet_id, ret_lidar_auxiliary_data_packet->payload_size, ret_lidar_auxiliary_data_packet->lidar_sync_delay_time, ret_lidar_auxiliary_data_packet->time_stamp_s_step, ret_lidar_auxiliary_data_packet->time_stamp_us_step, ret_lidar_auxiliary_data_packet->sys_rotation_period, ret_lidar_auxiliary_data_packet->com_rotation_period, ret_lidar_auxiliary_data_packet->com_horizontal_angle_start, ret_lidar_auxiliary_data_packet->com_horizontal_angle_step, ret_lidar_auxiliary_data_packet->sys_vertical_angle_start, ret_lidar_auxiliary_data_packet->sys_vertical_angle_span, ret_lidar_auxiliary_data_packet->apd_temperature, ret_lidar_auxiliary_data_packet->dirty_index, ret_lidar_auxiliary_data_packet->imu_temperature, ret_lidar_auxiliary_data_packet->up_optical_q, ret_lidar_auxiliary_data_packet->down_optical_q, ret_lidar_auxiliary_data_packet->apd_voltage, ret_lidar_auxiliary_data_packet->imu_angle_x_offset, ret_lidar_auxiliary_data_packet->imu_angle_y_offset, ret_lidar_auxiliary_data_packet->imu_angle_z_offset, ret_lidar_auxiliary_data_packet->b_axis_dist, ret_lidar_auxiliary_data_packet->theta_angle, ret_lidar_auxiliary_data_packet->ksi_angle, ret_lidar_auxiliary_data_packet->reflect_data); +} + +/** + * @brief Send a ret_lidar_auxiliary_data_packet message + * @param chan MAVLink channel to send the message + * + * @param lidar_work_status LiDAR operational state indicator. + * @param packet_id Data packet ID. + * @param payload_size Data packet payload size. + * @param lidar_sync_delay_time Delay time of upper computer communication(us). + * @param time_stamp_s_step LiDAR operational timestamp in seconds. + * @param time_stamp_us_step LiDAR operational timestamp in microsecond . + * @param sys_rotation_period LiDAR low-speed motor rotation period in microsecond . + * @param com_rotation_period LiDAR high-speed motor rotation period in microsecond . + * @param com_horizontal_angle_start The first data in the current data packet is the horizontal angle,Distance data applicable to RET_LIDAR_DISTANCE_DATA_PACKET data packet and reflectivity data of RET_LIDAR_AUXILIARY_DATA_PACKET data packet. + * @param com_horizontal_angle_step Angle interval between two adjacent data in the horizontal direction. + * @param sys_vertical_angle_start The vertical angle of the first data in the current data packet. + * @param sys_vertical_angle_span The angular span between adjacent data in the vertical direction of the current data packet. + * @param apd_temperature APD temperature value + * @param dirty_index Protective cover dirt detection index + * @param imu_temperature IMU temperature value + * @param up_optical_q Up optical communication quality. + * @param down_optical_q Downlink optical communication quality. + * @param apd_voltage APD voltage value. + * @param imu_angle_x_offset IMU x-axis installation angle error. + * @param imu_angle_y_offset IMU y-axis installation angle error. + * @param imu_angle_z_offset IMU z-axis installation angle error. + * @param b_axis_dist Laser calibration b distance compensation. + * @param theta_angle Laser calibration theta angle compensation. + * @param ksi_angle Laser calibration ksi angle compensation. + * @param reflect_data reflectivity data + */ +#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS + +static inline void mavlink_msg_ret_lidar_auxiliary_data_packet_send(mavlink_channel_t chan, uint8_t lidar_work_status, uint16_t packet_id, uint16_t payload_size, uint32_t lidar_sync_delay_time, uint32_t time_stamp_s_step, uint32_t time_stamp_us_step, uint32_t sys_rotation_period, uint32_t com_rotation_period, float com_horizontal_angle_start, float com_horizontal_angle_step, float sys_vertical_angle_start, float sys_vertical_angle_span, float apd_temperature, float dirty_index, float imu_temperature, float up_optical_q, float down_optical_q, float apd_voltage, float imu_angle_x_offset, float imu_angle_y_offset, float imu_angle_z_offset, float b_axis_dist, float theta_angle, float ksi_angle, const uint8_t *reflect_data) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN]; + _mav_put_uint32_t(buf, 0, lidar_sync_delay_time); + _mav_put_uint32_t(buf, 4, time_stamp_s_step); + _mav_put_uint32_t(buf, 8, time_stamp_us_step); + _mav_put_uint32_t(buf, 12, sys_rotation_period); + _mav_put_uint32_t(buf, 16, com_rotation_period); + _mav_put_float(buf, 20, com_horizontal_angle_start); + _mav_put_float(buf, 24, com_horizontal_angle_step); + _mav_put_float(buf, 28, sys_vertical_angle_start); + _mav_put_float(buf, 32, sys_vertical_angle_span); + _mav_put_float(buf, 36, apd_temperature); + _mav_put_float(buf, 40, dirty_index); + _mav_put_float(buf, 44, imu_temperature); + _mav_put_float(buf, 48, up_optical_q); + _mav_put_float(buf, 52, down_optical_q); + _mav_put_float(buf, 56, apd_voltage); + _mav_put_float(buf, 60, imu_angle_x_offset); + _mav_put_float(buf, 64, imu_angle_y_offset); + _mav_put_float(buf, 68, imu_angle_z_offset); + _mav_put_float(buf, 72, b_axis_dist); + _mav_put_float(buf, 76, theta_angle); + _mav_put_float(buf, 80, ksi_angle); + _mav_put_uint16_t(buf, 84, packet_id); + _mav_put_uint16_t(buf, 86, payload_size); + _mav_put_uint8_t(buf, 88, lidar_work_status); + _mav_put_uint8_t_array(buf, 89, reflect_data, 120); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET, buf, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_CRC); +#else + mavlink_ret_lidar_auxiliary_data_packet_t packet; + packet.lidar_sync_delay_time = lidar_sync_delay_time; + packet.time_stamp_s_step = time_stamp_s_step; + packet.time_stamp_us_step = time_stamp_us_step; + packet.sys_rotation_period = sys_rotation_period; + packet.com_rotation_period = com_rotation_period; + packet.com_horizontal_angle_start = com_horizontal_angle_start; + packet.com_horizontal_angle_step = com_horizontal_angle_step; + packet.sys_vertical_angle_start = sys_vertical_angle_start; + packet.sys_vertical_angle_span = sys_vertical_angle_span; + packet.apd_temperature = apd_temperature; + packet.dirty_index = dirty_index; + packet.imu_temperature = imu_temperature; + packet.up_optical_q = up_optical_q; + packet.down_optical_q = down_optical_q; + packet.apd_voltage = apd_voltage; + packet.imu_angle_x_offset = imu_angle_x_offset; + packet.imu_angle_y_offset = imu_angle_y_offset; + packet.imu_angle_z_offset = imu_angle_z_offset; + packet.b_axis_dist = b_axis_dist; + packet.theta_angle = theta_angle; + packet.ksi_angle = ksi_angle; + packet.packet_id = packet_id; + packet.payload_size = payload_size; + packet.lidar_work_status = lidar_work_status; + mav_array_memcpy(packet.reflect_data, reflect_data, sizeof(uint8_t)*120); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET, (const char *)&packet, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_CRC); +#endif +} + +/** + * @brief Send a ret_lidar_auxiliary_data_packet message + * @param chan MAVLink channel to send the message + * @param struct The MAVLink struct to serialize + */ +static inline void mavlink_msg_ret_lidar_auxiliary_data_packet_send_struct(mavlink_channel_t chan, const mavlink_ret_lidar_auxiliary_data_packet_t* ret_lidar_auxiliary_data_packet) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + mavlink_msg_ret_lidar_auxiliary_data_packet_send(chan, ret_lidar_auxiliary_data_packet->lidar_work_status, ret_lidar_auxiliary_data_packet->packet_id, ret_lidar_auxiliary_data_packet->payload_size, ret_lidar_auxiliary_data_packet->lidar_sync_delay_time, ret_lidar_auxiliary_data_packet->time_stamp_s_step, ret_lidar_auxiliary_data_packet->time_stamp_us_step, ret_lidar_auxiliary_data_packet->sys_rotation_period, ret_lidar_auxiliary_data_packet->com_rotation_period, ret_lidar_auxiliary_data_packet->com_horizontal_angle_start, ret_lidar_auxiliary_data_packet->com_horizontal_angle_step, ret_lidar_auxiliary_data_packet->sys_vertical_angle_start, ret_lidar_auxiliary_data_packet->sys_vertical_angle_span, ret_lidar_auxiliary_data_packet->apd_temperature, ret_lidar_auxiliary_data_packet->dirty_index, ret_lidar_auxiliary_data_packet->imu_temperature, ret_lidar_auxiliary_data_packet->up_optical_q, ret_lidar_auxiliary_data_packet->down_optical_q, ret_lidar_auxiliary_data_packet->apd_voltage, ret_lidar_auxiliary_data_packet->imu_angle_x_offset, ret_lidar_auxiliary_data_packet->imu_angle_y_offset, ret_lidar_auxiliary_data_packet->imu_angle_z_offset, ret_lidar_auxiliary_data_packet->b_axis_dist, ret_lidar_auxiliary_data_packet->theta_angle, ret_lidar_auxiliary_data_packet->ksi_angle, ret_lidar_auxiliary_data_packet->reflect_data); +#else + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET, (const char *)ret_lidar_auxiliary_data_packet, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_CRC); +#endif +} + +#if MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN <= MAVLINK_MAX_PAYLOAD_LEN +/* + This variant of _send() can be used to save stack space by re-using + memory from the receive buffer. The caller provides a + mavlink_message_t which is the size of a full mavlink message. This + is usually the receive buffer for the channel, and allows a reply to an + incoming message with minimum stack space usage. + */ +static inline void mavlink_msg_ret_lidar_auxiliary_data_packet_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan, uint8_t lidar_work_status, uint16_t packet_id, uint16_t payload_size, uint32_t lidar_sync_delay_time, uint32_t time_stamp_s_step, uint32_t time_stamp_us_step, uint32_t sys_rotation_period, uint32_t com_rotation_period, float com_horizontal_angle_start, float com_horizontal_angle_step, float sys_vertical_angle_start, float sys_vertical_angle_span, float apd_temperature, float dirty_index, float imu_temperature, float up_optical_q, float down_optical_q, float apd_voltage, float imu_angle_x_offset, float imu_angle_y_offset, float imu_angle_z_offset, float b_axis_dist, float theta_angle, float ksi_angle, const uint8_t *reflect_data) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char *buf = (char *)msgbuf; + _mav_put_uint32_t(buf, 0, lidar_sync_delay_time); + _mav_put_uint32_t(buf, 4, time_stamp_s_step); + _mav_put_uint32_t(buf, 8, time_stamp_us_step); + _mav_put_uint32_t(buf, 12, sys_rotation_period); + _mav_put_uint32_t(buf, 16, com_rotation_period); + _mav_put_float(buf, 20, com_horizontal_angle_start); + _mav_put_float(buf, 24, com_horizontal_angle_step); + _mav_put_float(buf, 28, sys_vertical_angle_start); + _mav_put_float(buf, 32, sys_vertical_angle_span); + _mav_put_float(buf, 36, apd_temperature); + _mav_put_float(buf, 40, dirty_index); + _mav_put_float(buf, 44, imu_temperature); + _mav_put_float(buf, 48, up_optical_q); + _mav_put_float(buf, 52, down_optical_q); + _mav_put_float(buf, 56, apd_voltage); + _mav_put_float(buf, 60, imu_angle_x_offset); + _mav_put_float(buf, 64, imu_angle_y_offset); + _mav_put_float(buf, 68, imu_angle_z_offset); + _mav_put_float(buf, 72, b_axis_dist); + _mav_put_float(buf, 76, theta_angle); + _mav_put_float(buf, 80, ksi_angle); + _mav_put_uint16_t(buf, 84, packet_id); + _mav_put_uint16_t(buf, 86, payload_size); + _mav_put_uint8_t(buf, 88, lidar_work_status); + _mav_put_uint8_t_array(buf, 89, reflect_data, 120); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET, buf, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_CRC); +#else + mavlink_ret_lidar_auxiliary_data_packet_t *packet = (mavlink_ret_lidar_auxiliary_data_packet_t *)msgbuf; + packet->lidar_sync_delay_time = lidar_sync_delay_time; + packet->time_stamp_s_step = time_stamp_s_step; + packet->time_stamp_us_step = time_stamp_us_step; + packet->sys_rotation_period = sys_rotation_period; + packet->com_rotation_period = com_rotation_period; + packet->com_horizontal_angle_start = com_horizontal_angle_start; + packet->com_horizontal_angle_step = com_horizontal_angle_step; + packet->sys_vertical_angle_start = sys_vertical_angle_start; + packet->sys_vertical_angle_span = sys_vertical_angle_span; + packet->apd_temperature = apd_temperature; + packet->dirty_index = dirty_index; + packet->imu_temperature = imu_temperature; + packet->up_optical_q = up_optical_q; + packet->down_optical_q = down_optical_q; + packet->apd_voltage = apd_voltage; + packet->imu_angle_x_offset = imu_angle_x_offset; + packet->imu_angle_y_offset = imu_angle_y_offset; + packet->imu_angle_z_offset = imu_angle_z_offset; + packet->b_axis_dist = b_axis_dist; + packet->theta_angle = theta_angle; + packet->ksi_angle = ksi_angle; + packet->packet_id = packet_id; + packet->payload_size = payload_size; + packet->lidar_work_status = lidar_work_status; + mav_array_memcpy(packet->reflect_data, reflect_data, sizeof(uint8_t)*120); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET, (const char *)packet, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_CRC); +#endif +} +#endif + +#endif + +// MESSAGE RET_LIDAR_AUXILIARY_DATA_PACKET UNPACKING + + +/** + * @brief Get field lidar_work_status from ret_lidar_auxiliary_data_packet message + * + * @return LiDAR operational state indicator. + */ +static inline uint8_t mavlink_msg_ret_lidar_auxiliary_data_packet_get_lidar_work_status(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint8_t(msg, 88); +} + +/** + * @brief Get field packet_id from ret_lidar_auxiliary_data_packet message + * + * @return Data packet ID. + */ +static inline uint16_t mavlink_msg_ret_lidar_auxiliary_data_packet_get_packet_id(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint16_t(msg, 84); +} + +/** + * @brief Get field payload_size from ret_lidar_auxiliary_data_packet message + * + * @return Data packet payload size. + */ +static inline uint16_t mavlink_msg_ret_lidar_auxiliary_data_packet_get_payload_size(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint16_t(msg, 86); +} + +/** + * @brief Get field lidar_sync_delay_time from ret_lidar_auxiliary_data_packet message + * + * @return Delay time of upper computer communication(us). + */ +static inline uint32_t mavlink_msg_ret_lidar_auxiliary_data_packet_get_lidar_sync_delay_time(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint32_t(msg, 0); +} + +/** + * @brief Get field time_stamp_s_step from ret_lidar_auxiliary_data_packet message + * + * @return LiDAR operational timestamp in seconds. + */ +static inline uint32_t mavlink_msg_ret_lidar_auxiliary_data_packet_get_time_stamp_s_step(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint32_t(msg, 4); +} + +/** + * @brief Get field time_stamp_us_step from ret_lidar_auxiliary_data_packet message + * + * @return LiDAR operational timestamp in microsecond . + */ +static inline uint32_t mavlink_msg_ret_lidar_auxiliary_data_packet_get_time_stamp_us_step(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint32_t(msg, 8); +} + +/** + * @brief Get field sys_rotation_period from ret_lidar_auxiliary_data_packet message + * + * @return LiDAR low-speed motor rotation period in microsecond . + */ +static inline uint32_t mavlink_msg_ret_lidar_auxiliary_data_packet_get_sys_rotation_period(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint32_t(msg, 12); +} + +/** + * @brief Get field com_rotation_period from ret_lidar_auxiliary_data_packet message + * + * @return LiDAR high-speed motor rotation period in microsecond . + */ +static inline uint32_t mavlink_msg_ret_lidar_auxiliary_data_packet_get_com_rotation_period(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint32_t(msg, 16); +} + +/** + * @brief Get field com_horizontal_angle_start from ret_lidar_auxiliary_data_packet message + * + * @return The first data in the current data packet is the horizontal angle,Distance data applicable to RET_LIDAR_DISTANCE_DATA_PACKET data packet and reflectivity data of RET_LIDAR_AUXILIARY_DATA_PACKET data packet. + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_com_horizontal_angle_start(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 20); +} + +/** + * @brief Get field com_horizontal_angle_step from ret_lidar_auxiliary_data_packet message + * + * @return Angle interval between two adjacent data in the horizontal direction. + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_com_horizontal_angle_step(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 24); +} + +/** + * @brief Get field sys_vertical_angle_start from ret_lidar_auxiliary_data_packet message + * + * @return The vertical angle of the first data in the current data packet. + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_sys_vertical_angle_start(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 28); +} + +/** + * @brief Get field sys_vertical_angle_span from ret_lidar_auxiliary_data_packet message + * + * @return The angular span between adjacent data in the vertical direction of the current data packet. + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_sys_vertical_angle_span(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 32); +} + +/** + * @brief Get field apd_temperature from ret_lidar_auxiliary_data_packet message + * + * @return APD temperature value + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_apd_temperature(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 36); +} + +/** + * @brief Get field dirty_index from ret_lidar_auxiliary_data_packet message + * + * @return Protective cover dirt detection index + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_dirty_index(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 40); +} + +/** + * @brief Get field imu_temperature from ret_lidar_auxiliary_data_packet message + * + * @return IMU temperature value + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_imu_temperature(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 44); +} + +/** + * @brief Get field up_optical_q from ret_lidar_auxiliary_data_packet message + * + * @return Up optical communication quality. + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_up_optical_q(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 48); +} + +/** + * @brief Get field down_optical_q from ret_lidar_auxiliary_data_packet message + * + * @return Downlink optical communication quality. + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_down_optical_q(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 52); +} + +/** + * @brief Get field apd_voltage from ret_lidar_auxiliary_data_packet message + * + * @return APD voltage value. + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_apd_voltage(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 56); +} + +/** + * @brief Get field imu_angle_x_offset from ret_lidar_auxiliary_data_packet message + * + * @return IMU x-axis installation angle error. + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_imu_angle_x_offset(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 60); +} + +/** + * @brief Get field imu_angle_y_offset from ret_lidar_auxiliary_data_packet message + * + * @return IMU y-axis installation angle error. + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_imu_angle_y_offset(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 64); +} + +/** + * @brief Get field imu_angle_z_offset from ret_lidar_auxiliary_data_packet message + * + * @return IMU z-axis installation angle error. + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_imu_angle_z_offset(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 68); +} + +/** + * @brief Get field b_axis_dist from ret_lidar_auxiliary_data_packet message + * + * @return Laser calibration b distance compensation. + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_b_axis_dist(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 72); +} + +/** + * @brief Get field theta_angle from ret_lidar_auxiliary_data_packet message + * + * @return Laser calibration theta angle compensation. + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_theta_angle(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 76); +} + +/** + * @brief Get field ksi_angle from ret_lidar_auxiliary_data_packet message + * + * @return Laser calibration ksi angle compensation. + */ +static inline float mavlink_msg_ret_lidar_auxiliary_data_packet_get_ksi_angle(const mavlink_message_t* msg) +{ + return _MAV_RETURN_float(msg, 80); +} + +/** + * @brief Get field reflect_data from ret_lidar_auxiliary_data_packet message + * + * @return reflectivity data + */ +static inline uint16_t mavlink_msg_ret_lidar_auxiliary_data_packet_get_reflect_data(const mavlink_message_t* msg, uint8_t *reflect_data) +{ + return _MAV_RETURN_uint8_t_array(msg, reflect_data, 120, 89); +} + +/** + * @brief Decode a ret_lidar_auxiliary_data_packet message into a struct + * + * @param msg The message to decode + * @param ret_lidar_auxiliary_data_packet C-struct to decode the message contents into + */ +static inline void mavlink_msg_ret_lidar_auxiliary_data_packet_decode(const mavlink_message_t* msg, mavlink_ret_lidar_auxiliary_data_packet_t* ret_lidar_auxiliary_data_packet) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + ret_lidar_auxiliary_data_packet->lidar_sync_delay_time = mavlink_msg_ret_lidar_auxiliary_data_packet_get_lidar_sync_delay_time(msg); + ret_lidar_auxiliary_data_packet->time_stamp_s_step = mavlink_msg_ret_lidar_auxiliary_data_packet_get_time_stamp_s_step(msg); + ret_lidar_auxiliary_data_packet->time_stamp_us_step = mavlink_msg_ret_lidar_auxiliary_data_packet_get_time_stamp_us_step(msg); + ret_lidar_auxiliary_data_packet->sys_rotation_period = mavlink_msg_ret_lidar_auxiliary_data_packet_get_sys_rotation_period(msg); + ret_lidar_auxiliary_data_packet->com_rotation_period = mavlink_msg_ret_lidar_auxiliary_data_packet_get_com_rotation_period(msg); + ret_lidar_auxiliary_data_packet->com_horizontal_angle_start = mavlink_msg_ret_lidar_auxiliary_data_packet_get_com_horizontal_angle_start(msg); + ret_lidar_auxiliary_data_packet->com_horizontal_angle_step = mavlink_msg_ret_lidar_auxiliary_data_packet_get_com_horizontal_angle_step(msg); + ret_lidar_auxiliary_data_packet->sys_vertical_angle_start = mavlink_msg_ret_lidar_auxiliary_data_packet_get_sys_vertical_angle_start(msg); + ret_lidar_auxiliary_data_packet->sys_vertical_angle_span = mavlink_msg_ret_lidar_auxiliary_data_packet_get_sys_vertical_angle_span(msg); + ret_lidar_auxiliary_data_packet->apd_temperature = mavlink_msg_ret_lidar_auxiliary_data_packet_get_apd_temperature(msg); + ret_lidar_auxiliary_data_packet->dirty_index = mavlink_msg_ret_lidar_auxiliary_data_packet_get_dirty_index(msg); + ret_lidar_auxiliary_data_packet->imu_temperature = mavlink_msg_ret_lidar_auxiliary_data_packet_get_imu_temperature(msg); + ret_lidar_auxiliary_data_packet->up_optical_q = mavlink_msg_ret_lidar_auxiliary_data_packet_get_up_optical_q(msg); + ret_lidar_auxiliary_data_packet->down_optical_q = mavlink_msg_ret_lidar_auxiliary_data_packet_get_down_optical_q(msg); + ret_lidar_auxiliary_data_packet->apd_voltage = mavlink_msg_ret_lidar_auxiliary_data_packet_get_apd_voltage(msg); + ret_lidar_auxiliary_data_packet->imu_angle_x_offset = mavlink_msg_ret_lidar_auxiliary_data_packet_get_imu_angle_x_offset(msg); + ret_lidar_auxiliary_data_packet->imu_angle_y_offset = mavlink_msg_ret_lidar_auxiliary_data_packet_get_imu_angle_y_offset(msg); + ret_lidar_auxiliary_data_packet->imu_angle_z_offset = mavlink_msg_ret_lidar_auxiliary_data_packet_get_imu_angle_z_offset(msg); + ret_lidar_auxiliary_data_packet->b_axis_dist = mavlink_msg_ret_lidar_auxiliary_data_packet_get_b_axis_dist(msg); + ret_lidar_auxiliary_data_packet->theta_angle = mavlink_msg_ret_lidar_auxiliary_data_packet_get_theta_angle(msg); + ret_lidar_auxiliary_data_packet->ksi_angle = mavlink_msg_ret_lidar_auxiliary_data_packet_get_ksi_angle(msg); + ret_lidar_auxiliary_data_packet->packet_id = mavlink_msg_ret_lidar_auxiliary_data_packet_get_packet_id(msg); + ret_lidar_auxiliary_data_packet->payload_size = mavlink_msg_ret_lidar_auxiliary_data_packet_get_payload_size(msg); + ret_lidar_auxiliary_data_packet->lidar_work_status = mavlink_msg_ret_lidar_auxiliary_data_packet_get_lidar_work_status(msg); + mavlink_msg_ret_lidar_auxiliary_data_packet_get_reflect_data(msg, ret_lidar_auxiliary_data_packet->reflect_data); +#else + uint8_t len = msg->len < MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN? msg->len : MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN; + memset(ret_lidar_auxiliary_data_packet, 0, MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_LEN); + memcpy(ret_lidar_auxiliary_data_packet, _MAV_PAYLOAD(msg), len); +#endif +} diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_distance_data_packet.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_distance_data_packet.h new file mode 100644 index 0000000..c94a10e --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_distance_data_packet.h @@ -0,0 +1,280 @@ +#pragma once +// MESSAGE RET_LIDAR_DISTANCE_DATA_PACKET PACKING + +#define MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET 16 + + +typedef struct __mavlink_ret_lidar_distance_data_packet_t { + uint16_t packet_id; /*< Data packet ID.*/ + uint16_t packet_cnt; /*< Data packet count.*/ + uint16_t payload_size; /*< Data packet payload size.*/ + uint8_t point_data[240]; /*< Data packet distance data.*/ +} mavlink_ret_lidar_distance_data_packet_t; + +#define MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN 246 +#define MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_MIN_LEN 246 +#define MAVLINK_MSG_ID_16_LEN 246 +#define MAVLINK_MSG_ID_16_MIN_LEN 246 + +#define MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_CRC 74 +#define MAVLINK_MSG_ID_16_CRC 74 + +#define MAVLINK_MSG_RET_LIDAR_DISTANCE_DATA_PACKET_FIELD_POINT_DATA_LEN 240 + +#if MAVLINK_COMMAND_24BIT +#define MAVLINK_MESSAGE_INFO_RET_LIDAR_DISTANCE_DATA_PACKET { \ + 16, \ + "RET_LIDAR_DISTANCE_DATA_PACKET", \ + 4, \ + { { "packet_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_ret_lidar_distance_data_packet_t, packet_id) }, \ + { "packet_cnt", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_ret_lidar_distance_data_packet_t, packet_cnt) }, \ + { "payload_size", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_ret_lidar_distance_data_packet_t, payload_size) }, \ + { "point_data", NULL, MAVLINK_TYPE_UINT8_T, 240, 6, offsetof(mavlink_ret_lidar_distance_data_packet_t, point_data) }, \ + } \ +} +#else +#define MAVLINK_MESSAGE_INFO_RET_LIDAR_DISTANCE_DATA_PACKET { \ + "RET_LIDAR_DISTANCE_DATA_PACKET", \ + 4, \ + { { "packet_id", NULL, MAVLINK_TYPE_UINT16_T, 0, 0, offsetof(mavlink_ret_lidar_distance_data_packet_t, packet_id) }, \ + { "packet_cnt", NULL, MAVLINK_TYPE_UINT16_T, 0, 2, offsetof(mavlink_ret_lidar_distance_data_packet_t, packet_cnt) }, \ + { "payload_size", NULL, MAVLINK_TYPE_UINT16_T, 0, 4, offsetof(mavlink_ret_lidar_distance_data_packet_t, payload_size) }, \ + { "point_data", NULL, MAVLINK_TYPE_UINT8_T, 240, 6, offsetof(mavlink_ret_lidar_distance_data_packet_t, point_data) }, \ + } \ +} +#endif + +/** + * @brief Pack a ret_lidar_distance_data_packet message + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * + * @param packet_id Data packet ID. + * @param packet_cnt Data packet count. + * @param payload_size Data packet payload size. + * @param point_data Data packet distance data. + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_ret_lidar_distance_data_packet_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, + uint16_t packet_id, uint16_t packet_cnt, uint16_t payload_size, const uint8_t *point_data) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN]; + _mav_put_uint16_t(buf, 0, packet_id); + _mav_put_uint16_t(buf, 2, packet_cnt); + _mav_put_uint16_t(buf, 4, payload_size); + _mav_put_uint8_t_array(buf, 6, point_data, 240); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN); +#else + mavlink_ret_lidar_distance_data_packet_t packet; + packet.packet_id = packet_id; + packet.packet_cnt = packet_cnt; + packet.payload_size = payload_size; + mav_array_memcpy(packet.point_data, point_data, sizeof(uint8_t)*240); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET; + return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_CRC); +} + +/** + * @brief Pack a ret_lidar_distance_data_packet message on a channel + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param packet_id Data packet ID. + * @param packet_cnt Data packet count. + * @param payload_size Data packet payload size. + * @param point_data Data packet distance data. + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_ret_lidar_distance_data_packet_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, + mavlink_message_t* msg, + uint16_t packet_id,uint16_t packet_cnt,uint16_t payload_size,const uint8_t *point_data) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN]; + _mav_put_uint16_t(buf, 0, packet_id); + _mav_put_uint16_t(buf, 2, packet_cnt); + _mav_put_uint16_t(buf, 4, payload_size); + _mav_put_uint8_t_array(buf, 6, point_data, 240); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN); +#else + mavlink_ret_lidar_distance_data_packet_t packet; + packet.packet_id = packet_id; + packet.packet_cnt = packet_cnt; + packet.payload_size = payload_size; + mav_array_memcpy(packet.point_data, point_data, sizeof(uint8_t)*240); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET; + return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_CRC); +} + +/** + * @brief Encode a ret_lidar_distance_data_packet struct + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * @param ret_lidar_distance_data_packet C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_ret_lidar_distance_data_packet_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_ret_lidar_distance_data_packet_t* ret_lidar_distance_data_packet) +{ + return mavlink_msg_ret_lidar_distance_data_packet_pack(system_id, component_id, msg, ret_lidar_distance_data_packet->packet_id, ret_lidar_distance_data_packet->packet_cnt, ret_lidar_distance_data_packet->payload_size, ret_lidar_distance_data_packet->point_data); +} + +/** + * @brief Encode a ret_lidar_distance_data_packet struct on a channel + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param ret_lidar_distance_data_packet C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_ret_lidar_distance_data_packet_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_ret_lidar_distance_data_packet_t* ret_lidar_distance_data_packet) +{ + return mavlink_msg_ret_lidar_distance_data_packet_pack_chan(system_id, component_id, chan, msg, ret_lidar_distance_data_packet->packet_id, ret_lidar_distance_data_packet->packet_cnt, ret_lidar_distance_data_packet->payload_size, ret_lidar_distance_data_packet->point_data); +} + +/** + * @brief Send a ret_lidar_distance_data_packet message + * @param chan MAVLink channel to send the message + * + * @param packet_id Data packet ID. + * @param packet_cnt Data packet count. + * @param payload_size Data packet payload size. + * @param point_data Data packet distance data. + */ +#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS + +static inline void mavlink_msg_ret_lidar_distance_data_packet_send(mavlink_channel_t chan, uint16_t packet_id, uint16_t packet_cnt, uint16_t payload_size, const uint8_t *point_data) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN]; + _mav_put_uint16_t(buf, 0, packet_id); + _mav_put_uint16_t(buf, 2, packet_cnt); + _mav_put_uint16_t(buf, 4, payload_size); + _mav_put_uint8_t_array(buf, 6, point_data, 240); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET, buf, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_CRC); +#else + mavlink_ret_lidar_distance_data_packet_t packet; + packet.packet_id = packet_id; + packet.packet_cnt = packet_cnt; + packet.payload_size = payload_size; + mav_array_memcpy(packet.point_data, point_data, sizeof(uint8_t)*240); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET, (const char *)&packet, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_CRC); +#endif +} + +/** + * @brief Send a ret_lidar_distance_data_packet message + * @param chan MAVLink channel to send the message + * @param struct The MAVLink struct to serialize + */ +static inline void mavlink_msg_ret_lidar_distance_data_packet_send_struct(mavlink_channel_t chan, const mavlink_ret_lidar_distance_data_packet_t* ret_lidar_distance_data_packet) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + mavlink_msg_ret_lidar_distance_data_packet_send(chan, ret_lidar_distance_data_packet->packet_id, ret_lidar_distance_data_packet->packet_cnt, ret_lidar_distance_data_packet->payload_size, ret_lidar_distance_data_packet->point_data); +#else + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET, (const char *)ret_lidar_distance_data_packet, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_CRC); +#endif +} + +#if MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN <= MAVLINK_MAX_PAYLOAD_LEN +/* + This variant of _send() can be used to save stack space by re-using + memory from the receive buffer. The caller provides a + mavlink_message_t which is the size of a full mavlink message. This + is usually the receive buffer for the channel, and allows a reply to an + incoming message with minimum stack space usage. + */ +static inline void mavlink_msg_ret_lidar_distance_data_packet_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan, uint16_t packet_id, uint16_t packet_cnt, uint16_t payload_size, const uint8_t *point_data) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char *buf = (char *)msgbuf; + _mav_put_uint16_t(buf, 0, packet_id); + _mav_put_uint16_t(buf, 2, packet_cnt); + _mav_put_uint16_t(buf, 4, payload_size); + _mav_put_uint8_t_array(buf, 6, point_data, 240); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET, buf, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_CRC); +#else + mavlink_ret_lidar_distance_data_packet_t *packet = (mavlink_ret_lidar_distance_data_packet_t *)msgbuf; + packet->packet_id = packet_id; + packet->packet_cnt = packet_cnt; + packet->payload_size = payload_size; + mav_array_memcpy(packet->point_data, point_data, sizeof(uint8_t)*240); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET, (const char *)packet, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_CRC); +#endif +} +#endif + +#endif + +// MESSAGE RET_LIDAR_DISTANCE_DATA_PACKET UNPACKING + + +/** + * @brief Get field packet_id from ret_lidar_distance_data_packet message + * + * @return Data packet ID. + */ +static inline uint16_t mavlink_msg_ret_lidar_distance_data_packet_get_packet_id(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint16_t(msg, 0); +} + +/** + * @brief Get field packet_cnt from ret_lidar_distance_data_packet message + * + * @return Data packet count. + */ +static inline uint16_t mavlink_msg_ret_lidar_distance_data_packet_get_packet_cnt(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint16_t(msg, 2); +} + +/** + * @brief Get field payload_size from ret_lidar_distance_data_packet message + * + * @return Data packet payload size. + */ +static inline uint16_t mavlink_msg_ret_lidar_distance_data_packet_get_payload_size(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint16_t(msg, 4); +} + +/** + * @brief Get field point_data from ret_lidar_distance_data_packet message + * + * @return Data packet distance data. + */ +static inline uint16_t mavlink_msg_ret_lidar_distance_data_packet_get_point_data(const mavlink_message_t* msg, uint8_t *point_data) +{ + return _MAV_RETURN_uint8_t_array(msg, point_data, 240, 6); +} + +/** + * @brief Decode a ret_lidar_distance_data_packet message into a struct + * + * @param msg The message to decode + * @param ret_lidar_distance_data_packet C-struct to decode the message contents into + */ +static inline void mavlink_msg_ret_lidar_distance_data_packet_decode(const mavlink_message_t* msg, mavlink_ret_lidar_distance_data_packet_t* ret_lidar_distance_data_packet) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + ret_lidar_distance_data_packet->packet_id = mavlink_msg_ret_lidar_distance_data_packet_get_packet_id(msg); + ret_lidar_distance_data_packet->packet_cnt = mavlink_msg_ret_lidar_distance_data_packet_get_packet_cnt(msg); + ret_lidar_distance_data_packet->payload_size = mavlink_msg_ret_lidar_distance_data_packet_get_payload_size(msg); + mavlink_msg_ret_lidar_distance_data_packet_get_point_data(msg, ret_lidar_distance_data_packet->point_data); +#else + uint8_t len = msg->len < MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN? msg->len : MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN; + memset(ret_lidar_distance_data_packet, 0, MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_LEN); + memcpy(ret_lidar_distance_data_packet, _MAV_PAYLOAD(msg), len); +#endif +} diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_time_sync_data.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_time_sync_data.h new file mode 100644 index 0000000..2fd466f --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_time_sync_data.h @@ -0,0 +1,238 @@ +#pragma once +// MESSAGE RET_LIDAR_TIME_SYNC_DATA PACKING + +#define MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA 18 + + +typedef struct __mavlink_ret_lidar_time_sync_data_t { + uint32_t lidar_sync_count; /*< Time synchronization packet count.*/ + uint8_t lidar_sync_type; /*< Time synchronization packet type.*/ +} mavlink_ret_lidar_time_sync_data_t; + +#define MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN 5 +#define MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_MIN_LEN 5 +#define MAVLINK_MSG_ID_18_LEN 5 +#define MAVLINK_MSG_ID_18_MIN_LEN 5 + +#define MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_CRC 12 +#define MAVLINK_MSG_ID_18_CRC 12 + + + +#if MAVLINK_COMMAND_24BIT +#define MAVLINK_MESSAGE_INFO_RET_LIDAR_TIME_SYNC_DATA { \ + 18, \ + "RET_LIDAR_TIME_SYNC_DATA", \ + 2, \ + { { "lidar_sync_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_ret_lidar_time_sync_data_t, lidar_sync_type) }, \ + { "lidar_sync_count", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_ret_lidar_time_sync_data_t, lidar_sync_count) }, \ + } \ +} +#else +#define MAVLINK_MESSAGE_INFO_RET_LIDAR_TIME_SYNC_DATA { \ + "RET_LIDAR_TIME_SYNC_DATA", \ + 2, \ + { { "lidar_sync_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 4, offsetof(mavlink_ret_lidar_time_sync_data_t, lidar_sync_type) }, \ + { "lidar_sync_count", NULL, MAVLINK_TYPE_UINT32_T, 0, 0, offsetof(mavlink_ret_lidar_time_sync_data_t, lidar_sync_count) }, \ + } \ +} +#endif + +/** + * @brief Pack a ret_lidar_time_sync_data message + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * + * @param lidar_sync_type Time synchronization packet type. + * @param lidar_sync_count Time synchronization packet count. + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_ret_lidar_time_sync_data_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, + uint8_t lidar_sync_type, uint32_t lidar_sync_count) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN]; + _mav_put_uint32_t(buf, 0, lidar_sync_count); + _mav_put_uint8_t(buf, 4, lidar_sync_type); + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN); +#else + mavlink_ret_lidar_time_sync_data_t packet; + packet.lidar_sync_count = lidar_sync_count; + packet.lidar_sync_type = lidar_sync_type; + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA; + return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_CRC); +} + +/** + * @brief Pack a ret_lidar_time_sync_data message on a channel + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param lidar_sync_type Time synchronization packet type. + * @param lidar_sync_count Time synchronization packet count. + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_ret_lidar_time_sync_data_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, + mavlink_message_t* msg, + uint8_t lidar_sync_type,uint32_t lidar_sync_count) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN]; + _mav_put_uint32_t(buf, 0, lidar_sync_count); + _mav_put_uint8_t(buf, 4, lidar_sync_type); + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN); +#else + mavlink_ret_lidar_time_sync_data_t packet; + packet.lidar_sync_count = lidar_sync_count; + packet.lidar_sync_type = lidar_sync_type; + + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA; + return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_CRC); +} + +/** + * @brief Encode a ret_lidar_time_sync_data struct + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * @param ret_lidar_time_sync_data C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_ret_lidar_time_sync_data_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_ret_lidar_time_sync_data_t* ret_lidar_time_sync_data) +{ + return mavlink_msg_ret_lidar_time_sync_data_pack(system_id, component_id, msg, ret_lidar_time_sync_data->lidar_sync_type, ret_lidar_time_sync_data->lidar_sync_count); +} + +/** + * @brief Encode a ret_lidar_time_sync_data struct on a channel + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param ret_lidar_time_sync_data C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_ret_lidar_time_sync_data_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_ret_lidar_time_sync_data_t* ret_lidar_time_sync_data) +{ + return mavlink_msg_ret_lidar_time_sync_data_pack_chan(system_id, component_id, chan, msg, ret_lidar_time_sync_data->lidar_sync_type, ret_lidar_time_sync_data->lidar_sync_count); +} + +/** + * @brief Send a ret_lidar_time_sync_data message + * @param chan MAVLink channel to send the message + * + * @param lidar_sync_type Time synchronization packet type. + * @param lidar_sync_count Time synchronization packet count. + */ +#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS + +static inline void mavlink_msg_ret_lidar_time_sync_data_send(mavlink_channel_t chan, uint8_t lidar_sync_type, uint32_t lidar_sync_count) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN]; + _mav_put_uint32_t(buf, 0, lidar_sync_count); + _mav_put_uint8_t(buf, 4, lidar_sync_type); + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA, buf, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_CRC); +#else + mavlink_ret_lidar_time_sync_data_t packet; + packet.lidar_sync_count = lidar_sync_count; + packet.lidar_sync_type = lidar_sync_type; + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA, (const char *)&packet, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_CRC); +#endif +} + +/** + * @brief Send a ret_lidar_time_sync_data message + * @param chan MAVLink channel to send the message + * @param struct The MAVLink struct to serialize + */ +static inline void mavlink_msg_ret_lidar_time_sync_data_send_struct(mavlink_channel_t chan, const mavlink_ret_lidar_time_sync_data_t* ret_lidar_time_sync_data) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + mavlink_msg_ret_lidar_time_sync_data_send(chan, ret_lidar_time_sync_data->lidar_sync_type, ret_lidar_time_sync_data->lidar_sync_count); +#else + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA, (const char *)ret_lidar_time_sync_data, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_CRC); +#endif +} + +#if MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN <= MAVLINK_MAX_PAYLOAD_LEN +/* + This variant of _send() can be used to save stack space by re-using + memory from the receive buffer. The caller provides a + mavlink_message_t which is the size of a full mavlink message. This + is usually the receive buffer for the channel, and allows a reply to an + incoming message with minimum stack space usage. + */ +static inline void mavlink_msg_ret_lidar_time_sync_data_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan, uint8_t lidar_sync_type, uint32_t lidar_sync_count) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char *buf = (char *)msgbuf; + _mav_put_uint32_t(buf, 0, lidar_sync_count); + _mav_put_uint8_t(buf, 4, lidar_sync_type); + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA, buf, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_CRC); +#else + mavlink_ret_lidar_time_sync_data_t *packet = (mavlink_ret_lidar_time_sync_data_t *)msgbuf; + packet->lidar_sync_count = lidar_sync_count; + packet->lidar_sync_type = lidar_sync_type; + + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA, (const char *)packet, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_CRC); +#endif +} +#endif + +#endif + +// MESSAGE RET_LIDAR_TIME_SYNC_DATA UNPACKING + + +/** + * @brief Get field lidar_sync_type from ret_lidar_time_sync_data message + * + * @return Time synchronization packet type. + */ +static inline uint8_t mavlink_msg_ret_lidar_time_sync_data_get_lidar_sync_type(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint8_t(msg, 4); +} + +/** + * @brief Get field lidar_sync_count from ret_lidar_time_sync_data message + * + * @return Time synchronization packet count. + */ +static inline uint32_t mavlink_msg_ret_lidar_time_sync_data_get_lidar_sync_count(const mavlink_message_t* msg) +{ + return _MAV_RETURN_uint32_t(msg, 0); +} + +/** + * @brief Decode a ret_lidar_time_sync_data message into a struct + * + * @param msg The message to decode + * @param ret_lidar_time_sync_data C-struct to decode the message contents into + */ +static inline void mavlink_msg_ret_lidar_time_sync_data_decode(const mavlink_message_t* msg, mavlink_ret_lidar_time_sync_data_t* ret_lidar_time_sync_data) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + ret_lidar_time_sync_data->lidar_sync_count = mavlink_msg_ret_lidar_time_sync_data_get_lidar_sync_count(msg); + ret_lidar_time_sync_data->lidar_sync_type = mavlink_msg_ret_lidar_time_sync_data_get_lidar_sync_type(msg); +#else + uint8_t len = msg->len < MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN? msg->len : MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN; + memset(ret_lidar_time_sync_data, 0, MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_LEN); + memcpy(ret_lidar_time_sync_data, _MAV_PAYLOAD(msg), len); +#endif +} diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_version.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_version.h new file mode 100644 index 0000000..9ab8565 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/mavlink_msg_ret_lidar_version.h @@ -0,0 +1,291 @@ +#pragma once +// MESSAGE RET_LIDAR_VERSION PACKING + +#define MAVLINK_MSG_ID_RET_LIDAR_VERSION 13 + + +typedef struct __mavlink_ret_lidar_version_t { + uint8_t sys_soft_version[13]; /*< SYS board soft version.*/ + uint8_t com_soft_version[13]; /*< COM board soft version.*/ + uint8_t sys_hard_version[6]; /*< SYS board hard version.*/ + uint8_t com_hard_version[6]; /*< COM board hard version.*/ +} mavlink_ret_lidar_version_t; + +#define MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN 38 +#define MAVLINK_MSG_ID_RET_LIDAR_VERSION_MIN_LEN 38 +#define MAVLINK_MSG_ID_13_LEN 38 +#define MAVLINK_MSG_ID_13_MIN_LEN 38 + +#define MAVLINK_MSG_ID_RET_LIDAR_VERSION_CRC 62 +#define MAVLINK_MSG_ID_13_CRC 62 + +#define MAVLINK_MSG_RET_LIDAR_VERSION_FIELD_SYS_SOFT_VERSION_LEN 13 +#define MAVLINK_MSG_RET_LIDAR_VERSION_FIELD_COM_SOFT_VERSION_LEN 13 +#define MAVLINK_MSG_RET_LIDAR_VERSION_FIELD_SYS_HARD_VERSION_LEN 6 +#define MAVLINK_MSG_RET_LIDAR_VERSION_FIELD_COM_HARD_VERSION_LEN 6 + +#if MAVLINK_COMMAND_24BIT +#define MAVLINK_MESSAGE_INFO_RET_LIDAR_VERSION { \ + 13, \ + "RET_LIDAR_VERSION", \ + 4, \ + { { "sys_soft_version", NULL, MAVLINK_TYPE_UINT8_T, 13, 0, offsetof(mavlink_ret_lidar_version_t, sys_soft_version) }, \ + { "com_soft_version", NULL, MAVLINK_TYPE_UINT8_T, 13, 13, offsetof(mavlink_ret_lidar_version_t, com_soft_version) }, \ + { "sys_hard_version", NULL, MAVLINK_TYPE_UINT8_T, 6, 26, offsetof(mavlink_ret_lidar_version_t, sys_hard_version) }, \ + { "com_hard_version", NULL, MAVLINK_TYPE_UINT8_T, 6, 32, offsetof(mavlink_ret_lidar_version_t, com_hard_version) }, \ + } \ +} +#else +#define MAVLINK_MESSAGE_INFO_RET_LIDAR_VERSION { \ + "RET_LIDAR_VERSION", \ + 4, \ + { { "sys_soft_version", NULL, MAVLINK_TYPE_UINT8_T, 13, 0, offsetof(mavlink_ret_lidar_version_t, sys_soft_version) }, \ + { "com_soft_version", NULL, MAVLINK_TYPE_UINT8_T, 13, 13, offsetof(mavlink_ret_lidar_version_t, com_soft_version) }, \ + { "sys_hard_version", NULL, MAVLINK_TYPE_UINT8_T, 6, 26, offsetof(mavlink_ret_lidar_version_t, sys_hard_version) }, \ + { "com_hard_version", NULL, MAVLINK_TYPE_UINT8_T, 6, 32, offsetof(mavlink_ret_lidar_version_t, com_hard_version) }, \ + } \ +} +#endif + +/** + * @brief Pack a ret_lidar_version message + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * + * @param sys_soft_version SYS board soft version. + * @param com_soft_version COM board soft version. + * @param sys_hard_version SYS board hard version. + * @param com_hard_version COM board hard version. + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_ret_lidar_version_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, + const uint8_t *sys_soft_version, const uint8_t *com_soft_version, const uint8_t *sys_hard_version, const uint8_t *com_hard_version) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN]; + + _mav_put_uint8_t_array(buf, 0, sys_soft_version, 13); + _mav_put_uint8_t_array(buf, 13, com_soft_version, 13); + _mav_put_uint8_t_array(buf, 26, sys_hard_version, 6); + _mav_put_uint8_t_array(buf, 32, com_hard_version, 6); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN); +#else + mavlink_ret_lidar_version_t packet; + + mav_array_memcpy(packet.sys_soft_version, sys_soft_version, sizeof(uint8_t)*13); + mav_array_memcpy(packet.com_soft_version, com_soft_version, sizeof(uint8_t)*13); + mav_array_memcpy(packet.sys_hard_version, sys_hard_version, sizeof(uint8_t)*6); + mav_array_memcpy(packet.com_hard_version, com_hard_version, sizeof(uint8_t)*6); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_RET_LIDAR_VERSION; + return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_RET_LIDAR_VERSION_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN, MAVLINK_MSG_ID_RET_LIDAR_VERSION_CRC); +} + +/** + * @brief Pack a ret_lidar_version message on a channel + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param sys_soft_version SYS board soft version. + * @param com_soft_version COM board soft version. + * @param sys_hard_version SYS board hard version. + * @param com_hard_version COM board hard version. + * @return length of the message in bytes (excluding serial stream start sign) + */ +static inline uint16_t mavlink_msg_ret_lidar_version_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, + mavlink_message_t* msg, + const uint8_t *sys_soft_version,const uint8_t *com_soft_version,const uint8_t *sys_hard_version,const uint8_t *com_hard_version) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN]; + + _mav_put_uint8_t_array(buf, 0, sys_soft_version, 13); + _mav_put_uint8_t_array(buf, 13, com_soft_version, 13); + _mav_put_uint8_t_array(buf, 26, sys_hard_version, 6); + _mav_put_uint8_t_array(buf, 32, com_hard_version, 6); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN); +#else + mavlink_ret_lidar_version_t packet; + + mav_array_memcpy(packet.sys_soft_version, sys_soft_version, sizeof(uint8_t)*13); + mav_array_memcpy(packet.com_soft_version, com_soft_version, sizeof(uint8_t)*13); + mav_array_memcpy(packet.sys_hard_version, sys_hard_version, sizeof(uint8_t)*6); + mav_array_memcpy(packet.com_hard_version, com_hard_version, sizeof(uint8_t)*6); + memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN); +#endif + + msg->msgid = MAVLINK_MSG_ID_RET_LIDAR_VERSION; + return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_RET_LIDAR_VERSION_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN, MAVLINK_MSG_ID_RET_LIDAR_VERSION_CRC); +} + +/** + * @brief Encode a ret_lidar_version struct + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param msg The MAVLink message to compress the data into + * @param ret_lidar_version C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_ret_lidar_version_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_ret_lidar_version_t* ret_lidar_version) +{ + return mavlink_msg_ret_lidar_version_pack(system_id, component_id, msg, ret_lidar_version->sys_soft_version, ret_lidar_version->com_soft_version, ret_lidar_version->sys_hard_version, ret_lidar_version->com_hard_version); +} + +/** + * @brief Encode a ret_lidar_version struct on a channel + * + * @param system_id ID of this system + * @param component_id ID of this component (e.g. 200 for IMU) + * @param chan The MAVLink channel this message will be sent over + * @param msg The MAVLink message to compress the data into + * @param ret_lidar_version C-struct to read the message contents from + */ +static inline uint16_t mavlink_msg_ret_lidar_version_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_ret_lidar_version_t* ret_lidar_version) +{ + return mavlink_msg_ret_lidar_version_pack_chan(system_id, component_id, chan, msg, ret_lidar_version->sys_soft_version, ret_lidar_version->com_soft_version, ret_lidar_version->sys_hard_version, ret_lidar_version->com_hard_version); +} + +/** + * @brief Send a ret_lidar_version message + * @param chan MAVLink channel to send the message + * + * @param sys_soft_version SYS board soft version. + * @param com_soft_version COM board soft version. + * @param sys_hard_version SYS board hard version. + * @param com_hard_version COM board hard version. + */ +#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS + +static inline void mavlink_msg_ret_lidar_version_send(mavlink_channel_t chan, const uint8_t *sys_soft_version, const uint8_t *com_soft_version, const uint8_t *sys_hard_version, const uint8_t *com_hard_version) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char buf[MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN]; + + _mav_put_uint8_t_array(buf, 0, sys_soft_version, 13); + _mav_put_uint8_t_array(buf, 13, com_soft_version, 13); + _mav_put_uint8_t_array(buf, 26, sys_hard_version, 6); + _mav_put_uint8_t_array(buf, 32, com_hard_version, 6); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_VERSION, buf, MAVLINK_MSG_ID_RET_LIDAR_VERSION_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN, MAVLINK_MSG_ID_RET_LIDAR_VERSION_CRC); +#else + mavlink_ret_lidar_version_t packet; + + mav_array_memcpy(packet.sys_soft_version, sys_soft_version, sizeof(uint8_t)*13); + mav_array_memcpy(packet.com_soft_version, com_soft_version, sizeof(uint8_t)*13); + mav_array_memcpy(packet.sys_hard_version, sys_hard_version, sizeof(uint8_t)*6); + mav_array_memcpy(packet.com_hard_version, com_hard_version, sizeof(uint8_t)*6); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_VERSION, (const char *)&packet, MAVLINK_MSG_ID_RET_LIDAR_VERSION_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN, MAVLINK_MSG_ID_RET_LIDAR_VERSION_CRC); +#endif +} + +/** + * @brief Send a ret_lidar_version message + * @param chan MAVLink channel to send the message + * @param struct The MAVLink struct to serialize + */ +static inline void mavlink_msg_ret_lidar_version_send_struct(mavlink_channel_t chan, const mavlink_ret_lidar_version_t* ret_lidar_version) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + mavlink_msg_ret_lidar_version_send(chan, ret_lidar_version->sys_soft_version, ret_lidar_version->com_soft_version, ret_lidar_version->sys_hard_version, ret_lidar_version->com_hard_version); +#else + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_VERSION, (const char *)ret_lidar_version, MAVLINK_MSG_ID_RET_LIDAR_VERSION_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN, MAVLINK_MSG_ID_RET_LIDAR_VERSION_CRC); +#endif +} + +#if MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN <= MAVLINK_MAX_PAYLOAD_LEN +/* + This variant of _send() can be used to save stack space by re-using + memory from the receive buffer. The caller provides a + mavlink_message_t which is the size of a full mavlink message. This + is usually the receive buffer for the channel, and allows a reply to an + incoming message with minimum stack space usage. + */ +static inline void mavlink_msg_ret_lidar_version_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan, const uint8_t *sys_soft_version, const uint8_t *com_soft_version, const uint8_t *sys_hard_version, const uint8_t *com_hard_version) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + char *buf = (char *)msgbuf; + + _mav_put_uint8_t_array(buf, 0, sys_soft_version, 13); + _mav_put_uint8_t_array(buf, 13, com_soft_version, 13); + _mav_put_uint8_t_array(buf, 26, sys_hard_version, 6); + _mav_put_uint8_t_array(buf, 32, com_hard_version, 6); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_VERSION, buf, MAVLINK_MSG_ID_RET_LIDAR_VERSION_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN, MAVLINK_MSG_ID_RET_LIDAR_VERSION_CRC); +#else + mavlink_ret_lidar_version_t *packet = (mavlink_ret_lidar_version_t *)msgbuf; + + mav_array_memcpy(packet->sys_soft_version, sys_soft_version, sizeof(uint8_t)*13); + mav_array_memcpy(packet->com_soft_version, com_soft_version, sizeof(uint8_t)*13); + mav_array_memcpy(packet->sys_hard_version, sys_hard_version, sizeof(uint8_t)*6); + mav_array_memcpy(packet->com_hard_version, com_hard_version, sizeof(uint8_t)*6); + _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_RET_LIDAR_VERSION, (const char *)packet, MAVLINK_MSG_ID_RET_LIDAR_VERSION_MIN_LEN, MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN, MAVLINK_MSG_ID_RET_LIDAR_VERSION_CRC); +#endif +} +#endif + +#endif + +// MESSAGE RET_LIDAR_VERSION UNPACKING + + +/** + * @brief Get field sys_soft_version from ret_lidar_version message + * + * @return SYS board soft version. + */ +static inline uint16_t mavlink_msg_ret_lidar_version_get_sys_soft_version(const mavlink_message_t* msg, uint8_t *sys_soft_version) +{ + return _MAV_RETURN_uint8_t_array(msg, sys_soft_version, 13, 0); +} + +/** + * @brief Get field com_soft_version from ret_lidar_version message + * + * @return COM board soft version. + */ +static inline uint16_t mavlink_msg_ret_lidar_version_get_com_soft_version(const mavlink_message_t* msg, uint8_t *com_soft_version) +{ + return _MAV_RETURN_uint8_t_array(msg, com_soft_version, 13, 13); +} + +/** + * @brief Get field sys_hard_version from ret_lidar_version message + * + * @return SYS board hard version. + */ +static inline uint16_t mavlink_msg_ret_lidar_version_get_sys_hard_version(const mavlink_message_t* msg, uint8_t *sys_hard_version) +{ + return _MAV_RETURN_uint8_t_array(msg, sys_hard_version, 6, 26); +} + +/** + * @brief Get field com_hard_version from ret_lidar_version message + * + * @return COM board hard version. + */ +static inline uint16_t mavlink_msg_ret_lidar_version_get_com_hard_version(const mavlink_message_t* msg, uint8_t *com_hard_version) +{ + return _MAV_RETURN_uint8_t_array(msg, com_hard_version, 6, 32); +} + +/** + * @brief Decode a ret_lidar_version message into a struct + * + * @param msg The message to decode + * @param ret_lidar_version C-struct to decode the message contents into + */ +static inline void mavlink_msg_ret_lidar_version_decode(const mavlink_message_t* msg, mavlink_ret_lidar_version_t* ret_lidar_version) +{ +#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS + mavlink_msg_ret_lidar_version_get_sys_soft_version(msg, ret_lidar_version->sys_soft_version); + mavlink_msg_ret_lidar_version_get_com_soft_version(msg, ret_lidar_version->com_soft_version); + mavlink_msg_ret_lidar_version_get_sys_hard_version(msg, ret_lidar_version->sys_hard_version); + mavlink_msg_ret_lidar_version_get_com_hard_version(msg, ret_lidar_version->com_hard_version); +#else + uint8_t len = msg->len < MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN? msg->len : MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN; + memset(ret_lidar_version, 0, MAVLINK_MSG_ID_RET_LIDAR_VERSION_LEN); + memcpy(ret_lidar_version, _MAV_PAYLOAD(msg), len); +#endif +} diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/testsuite.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/testsuite.h new file mode 100644 index 0000000..3010d8b --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/SysMavlink/testsuite.h @@ -0,0 +1,1026 @@ +/** @file + * @brief MAVLink comm protocol testsuite generated from SysMavlink.xml + * @see https://mavlink.io/en/ + */ +#pragma once +#ifndef SYSMAVLINK_TESTSUITE_H +#define SYSMAVLINK_TESTSUITE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef MAVLINK_TEST_ALL +#define MAVLINK_TEST_ALL + +static void mavlink_test_SysMavlink(uint8_t, uint8_t, mavlink_message_t *last_msg); + +static void mavlink_test_all(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg) +{ + + mavlink_test_SysMavlink(system_id, component_id, last_msg); +} +#endif + + + + +static void mavlink_test_device_request_answer(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg) +{ +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + mavlink_status_t *status = mavlink_get_channel_status(MAVLINK_COMM_0); + if ((status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_DEVICE_REQUEST_ANSWER >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_device_request_answer_t packet_in = { + 5 + }; + mavlink_device_request_answer_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + packet1.command_return_ok = packet_in.command_return_ok; + + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_DEVICE_REQUEST_ANSWER_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_DEVICE_REQUEST_ANSWER_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_request_answer_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_device_request_answer_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_request_answer_pack(system_id, component_id, &msg , packet1.command_return_ok ); + mavlink_msg_device_request_answer_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_request_answer_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.command_return_ok ); + mavlink_msg_device_request_answer_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; iflags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_DEVICE_DEBUG_MODE_PARAMS >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_device_debug_mode_params_t packet_in = { + 17.0,45.0,17651,17755,17859,17963,53,120,187,254 + }; + mavlink_device_debug_mode_params_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + packet1.debug_param_value = packet_in.debug_param_value; + packet1.debug_float_reserve = packet_in.debug_float_reserve; + packet1.debug_pos = packet_in.debug_pos; + packet1.debug_count = packet_in.debug_count; + packet1.debug_laser_cycle = packet_in.debug_laser_cycle; + packet1.debug_uin16_t_reserve = packet_in.debug_uin16_t_reserve; + packet1.debug_mode = packet_in.debug_mode; + packet1.debug_needed = packet_in.debug_needed; + packet1.debug_first_test_flag = packet_in.debug_first_test_flag; + packet1.debug_uin8_t_reserve = packet_in.debug_uin8_t_reserve; + + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_DEVICE_DEBUG_MODE_PARAMS_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_DEVICE_DEBUG_MODE_PARAMS_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_debug_mode_params_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_device_debug_mode_params_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_debug_mode_params_pack(system_id, component_id, &msg , packet1.debug_mode , packet1.debug_needed , packet1.debug_first_test_flag , packet1.debug_uin8_t_reserve , packet1.debug_pos , packet1.debug_count , packet1.debug_laser_cycle , packet1.debug_uin16_t_reserve , packet1.debug_param_value , packet1.debug_float_reserve ); + mavlink_msg_device_debug_mode_params_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_debug_mode_params_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.debug_mode , packet1.debug_needed , packet1.debug_first_test_flag , packet1.debug_uin8_t_reserve , packet1.debug_pos , packet1.debug_count , packet1.debug_laser_cycle , packet1.debug_uin16_t_reserve , packet1.debug_param_value , packet1.debug_float_reserve ); + mavlink_msg_device_debug_mode_params_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; iflags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_SET_COM_NECESSARY_MEASURE_PARAMETER >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_set_com_necessary_measure_parameter_t packet_in = { + 17.0,45.0,73.0,101.0,129.0,157.0,185.0,963498920,963499128,963499336,963499544,963499752,963499960,19939,20043,20147,20251,185 + }; + mavlink_set_com_necessary_measure_parameter_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + packet1.moto_target_speed = packet_in.moto_target_speed; + packet1.moto_control_coef = packet_in.moto_control_coef; + packet1.moto_speed_threshold = packet_in.moto_speed_threshold; + packet1.imu_target_tempe = packet_in.imu_target_tempe; + packet1.imu_x_axis_error = packet_in.imu_x_axis_error; + packet1.imu_y_axis_error = packet_in.imu_y_axis_error; + packet1.imu_z_axis_error = packet_in.imu_z_axis_error; + packet1.imu_acc_bias_x = packet_in.imu_acc_bias_x; + packet1.imu_acc_bias_y = packet_in.imu_acc_bias_y; + packet1.imu_acc_bias_z = packet_in.imu_acc_bias_z; + packet1.imu_gyro_bias_x = packet_in.imu_gyro_bias_x; + packet1.imu_gyro_bias_y = packet_in.imu_gyro_bias_y; + packet1.imu_gyro_bias_z = packet_in.imu_gyro_bias_z; + packet1.flash_ok_flag = packet_in.flash_ok_flag; + packet1.led_mode_config = packet_in.led_mode_config; + packet1.imu_work_mode_select = packet_in.imu_work_mode_select; + packet1.moto_pwm_duty = packet_in.moto_pwm_duty; + packet1.factory_mode_en = packet_in.factory_mode_en; + + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_SET_COM_NECESSARY_MEASURE_PARAMETER_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_SET_COM_NECESSARY_MEASURE_PARAMETER_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_set_com_necessary_measure_parameter_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_set_com_necessary_measure_parameter_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_set_com_necessary_measure_parameter_pack(system_id, component_id, &msg , packet1.factory_mode_en , packet1.flash_ok_flag , packet1.led_mode_config , packet1.imu_work_mode_select , packet1.moto_pwm_duty , packet1.moto_target_speed , packet1.moto_control_coef , packet1.moto_speed_threshold , packet1.imu_target_tempe , packet1.imu_x_axis_error , packet1.imu_y_axis_error , packet1.imu_z_axis_error , packet1.imu_acc_bias_x , packet1.imu_acc_bias_y , packet1.imu_acc_bias_z , packet1.imu_gyro_bias_x , packet1.imu_gyro_bias_y , packet1.imu_gyro_bias_z ); + mavlink_msg_set_com_necessary_measure_parameter_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_set_com_necessary_measure_parameter_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.factory_mode_en , packet1.flash_ok_flag , packet1.led_mode_config , packet1.imu_work_mode_select , packet1.moto_pwm_duty , packet1.moto_target_speed , packet1.moto_control_coef , packet1.moto_speed_threshold , packet1.imu_target_tempe , packet1.imu_x_axis_error , packet1.imu_y_axis_error , packet1.imu_z_axis_error , packet1.imu_acc_bias_x , packet1.imu_acc_bias_y , packet1.imu_acc_bias_z , packet1.imu_gyro_bias_x , packet1.imu_gyro_bias_y , packet1.imu_gyro_bias_z ); + mavlink_msg_set_com_necessary_measure_parameter_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; iflags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_SET_SYS_NECESSARY_MEASURE_PARAMETER >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_set_sys_necessary_measure_parameter_t packet_in = { + 17.0,45.0,73.0,101.0,129.0,157.0,185.0,213.0,241.0,19107,19211,19315,3,70 + }; + mavlink_set_sys_necessary_measure_parameter_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + packet1.tdc_bin_length = packet_in.tdc_bin_length; + packet1.apd_temp_param = packet_in.apd_temp_param; + packet1.gray_param_a = packet_in.gray_param_a; + packet1.gray_param_b = packet_in.gray_param_b; + packet1.gray_param_c = packet_in.gray_param_c; + packet1.reflect_param = packet_in.reflect_param; + packet1.b_axis_dist = packet_in.b_axis_dist; + packet1.theta_angle = packet_in.theta_angle; + packet1.ksi_angle = packet_in.ksi_angle; + packet1.comparator_voltage = packet_in.comparator_voltage; + packet1.zero_offset_bin = packet_in.zero_offset_bin; + packet1.flash_ok_flag = packet_in.flash_ok_flag; + packet1.start_offset = packet_in.start_offset; + packet1.gray_calibration_en = packet_in.gray_calibration_en; + + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_SET_SYS_NECESSARY_MEASURE_PARAMETER_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_SET_SYS_NECESSARY_MEASURE_PARAMETER_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_set_sys_necessary_measure_parameter_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_set_sys_necessary_measure_parameter_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_set_sys_necessary_measure_parameter_pack(system_id, component_id, &msg , packet1.start_offset , packet1.gray_calibration_en , packet1.comparator_voltage , packet1.zero_offset_bin , packet1.flash_ok_flag , packet1.tdc_bin_length , packet1.apd_temp_param , packet1.gray_param_a , packet1.gray_param_b , packet1.gray_param_c , packet1.reflect_param , packet1.b_axis_dist , packet1.theta_angle , packet1.ksi_angle ); + mavlink_msg_set_sys_necessary_measure_parameter_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_set_sys_necessary_measure_parameter_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.start_offset , packet1.gray_calibration_en , packet1.comparator_voltage , packet1.zero_offset_bin , packet1.flash_ok_flag , packet1.tdc_bin_length , packet1.apd_temp_param , packet1.gray_param_a , packet1.gray_param_b , packet1.gray_param_c , packet1.reflect_param , packet1.b_axis_dist , packet1.theta_angle , packet1.ksi_angle ); + mavlink_msg_set_sys_necessary_measure_parameter_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; iflags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_RET_TDC_POINT_DEBUG_PACKET >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_ret_tdc_point_debug_packet_t packet_in = { + 17.0,45.0,73.0,101.0,18067,18171,18275,18379,18483,18587,18691,18795,18899,235,46 + }; + mavlink_ret_tdc_point_debug_packet_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + packet1.width_correction_diff = packet_in.width_correction_diff; + packet1.apd_temperature = packet_in.apd_temperature; + packet1.imu_temperature = packet_in.imu_temperature; + packet1.apd_voltage = packet_in.apd_voltage; + packet1.start = packet_in.start; + packet1.width = packet_in.width; + packet1.spec_start = packet_in.spec_start; + packet1.spec_width = packet_in.spec_width; + packet1.dist = packet_in.dist; + packet1.point_index = packet_in.point_index; + packet1.reserve_2 = packet_in.reserve_2; + packet1.reserve_3 = packet_in.reserve_3; + packet1.reserve_4 = packet_in.reserve_4; + packet1.spec_reflectivity = packet_in.spec_reflectivity; + packet1.packet_index = packet_in.packet_index; + + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_RET_TDC_POINT_DEBUG_PACKET_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_RET_TDC_POINT_DEBUG_PACKET_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_tdc_point_debug_packet_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_ret_tdc_point_debug_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_tdc_point_debug_packet_pack(system_id, component_id, &msg , packet1.spec_reflectivity , packet1.packet_index , packet1.start , packet1.width , packet1.spec_start , packet1.spec_width , packet1.dist , packet1.point_index , packet1.reserve_2 , packet1.reserve_3 , packet1.reserve_4 , packet1.width_correction_diff , packet1.apd_temperature , packet1.imu_temperature , packet1.apd_voltage ); + mavlink_msg_ret_tdc_point_debug_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_tdc_point_debug_packet_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.spec_reflectivity , packet1.packet_index , packet1.start , packet1.width , packet1.spec_start , packet1.spec_width , packet1.dist , packet1.point_index , packet1.reserve_2 , packet1.reserve_3 , packet1.reserve_4 , packet1.width_correction_diff , packet1.apd_temperature , packet1.imu_temperature , packet1.apd_voltage ); + mavlink_msg_ret_tdc_point_debug_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; iflags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_DEVICE_REQUEST_INTERNAL_DATA >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_device_request_internal_data_t packet_in = { + 5 + }; + mavlink_device_request_internal_data_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + packet1.request_type = packet_in.request_type; + + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_DEVICE_REQUEST_INTERNAL_DATA_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_DEVICE_REQUEST_INTERNAL_DATA_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_request_internal_data_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_device_request_internal_data_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_request_internal_data_pack(system_id, component_id, &msg , packet1.request_type ); + mavlink_msg_device_request_internal_data_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_request_internal_data_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.request_type ); + mavlink_msg_device_request_internal_data_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; iflags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_DEVICE_REQUEST_DATA >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_device_request_data_t packet_in = { + 5 + }; + mavlink_device_request_data_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + packet1.request_type = packet_in.request_type; + + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_DEVICE_REQUEST_DATA_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_request_data_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_device_request_data_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_request_data_pack(system_id, component_id, &msg , packet1.request_type ); + mavlink_msg_device_request_data_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_request_data_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.request_type ); + mavlink_msg_device_request_data_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; iflags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_DEVICE_COMMAND >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_device_command_t packet_in = { + 5 + }; + mavlink_device_command_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + packet1.cmd_type = packet_in.cmd_type; + + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_DEVICE_COMMAND_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_DEVICE_COMMAND_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_command_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_device_command_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_command_pack(system_id, component_id, &msg , packet1.cmd_type ); + mavlink_msg_device_command_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_device_command_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.cmd_type ); + mavlink_msg_device_command_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; iflags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_RET_LIDAR_VERSION >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_ret_lidar_version_t packet_in = { + { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 },{ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120 },{ 211, 212, 213, 214, 215, 216 },{ 101, 102, 103, 104, 105, 106 } + }; + mavlink_ret_lidar_version_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + + mav_array_memcpy(packet1.sys_soft_version, packet_in.sys_soft_version, sizeof(uint8_t)*13); + mav_array_memcpy(packet1.com_soft_version, packet_in.com_soft_version, sizeof(uint8_t)*13); + mav_array_memcpy(packet1.sys_hard_version, packet_in.sys_hard_version, sizeof(uint8_t)*6); + mav_array_memcpy(packet1.com_hard_version, packet_in.com_hard_version, sizeof(uint8_t)*6); + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_RET_LIDAR_VERSION_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_RET_LIDAR_VERSION_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_lidar_version_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_ret_lidar_version_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_lidar_version_pack(system_id, component_id, &msg , packet1.sys_soft_version , packet1.com_soft_version , packet1.sys_hard_version , packet1.com_hard_version ); + mavlink_msg_ret_lidar_version_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_lidar_version_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.sys_soft_version , packet1.com_soft_version , packet1.sys_hard_version , packet1.com_hard_version ); + mavlink_msg_ret_lidar_version_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; iflags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_config_lidar_working_mode_t packet_in = { + 5 + }; + mavlink_config_lidar_working_mode_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + packet1.request_type = packet_in.request_type; + + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_CONFIG_LIDAR_WORKING_MODE_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_config_lidar_working_mode_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_config_lidar_working_mode_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_config_lidar_working_mode_pack(system_id, component_id, &msg , packet1.request_type ); + mavlink_msg_config_lidar_working_mode_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_config_lidar_working_mode_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.request_type ); + mavlink_msg_config_lidar_working_mode_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; iflags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_config_led_ring_table_packet_t packet_in = { + 963497464,963497672,17651,163,{ 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 } + }; + mavlink_config_led_ring_table_packet_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + packet1.led_rotation_period = packet_in.led_rotation_period; + packet1.led_zero_point_offset = packet_in.led_zero_point_offset; + packet1.packet_id = packet_in.packet_id; + packet1.led_display_mode = packet_in.led_display_mode; + + mav_array_memcpy(packet1.led_table, packet_in.led_table, sizeof(uint8_t)*45); + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_CONFIG_LED_RING_TABLE_PACKET_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_config_led_ring_table_packet_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_config_led_ring_table_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_config_led_ring_table_packet_pack(system_id, component_id, &msg , packet1.packet_id , packet1.led_rotation_period , packet1.led_zero_point_offset , packet1.led_display_mode , packet1.led_table ); + mavlink_msg_config_led_ring_table_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_config_led_ring_table_packet_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.packet_id , packet1.led_rotation_period , packet1.led_zero_point_offset , packet1.led_display_mode , packet1.led_table ); + mavlink_msg_config_led_ring_table_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; iflags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_ret_lidar_distance_data_packet_t packet_in = { + 17235,17339,17443,{ 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134 } + }; + mavlink_ret_lidar_distance_data_packet_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + packet1.packet_id = packet_in.packet_id; + packet1.packet_cnt = packet_in.packet_cnt; + packet1.payload_size = packet_in.payload_size; + + mav_array_memcpy(packet1.point_data, packet_in.point_data, sizeof(uint8_t)*240); + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_RET_LIDAR_DISTANCE_DATA_PACKET_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_lidar_distance_data_packet_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_ret_lidar_distance_data_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_lidar_distance_data_packet_pack(system_id, component_id, &msg , packet1.packet_id , packet1.packet_cnt , packet1.payload_size , packet1.point_data ); + mavlink_msg_ret_lidar_distance_data_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_lidar_distance_data_packet_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.packet_id , packet1.packet_cnt , packet1.payload_size , packet1.point_data ); + mavlink_msg_ret_lidar_distance_data_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; iflags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_ret_lidar_auxiliary_data_packet_t packet_in = { + 963497464,963497672,963497880,963498088,963498296,157.0,185.0,213.0,241.0,269.0,297.0,325.0,353.0,381.0,409.0,437.0,465.0,493.0,521.0,549.0,577.0,21603,21707,13,{ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199 } + }; + mavlink_ret_lidar_auxiliary_data_packet_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + packet1.lidar_sync_delay_time = packet_in.lidar_sync_delay_time; + packet1.time_stamp_s_step = packet_in.time_stamp_s_step; + packet1.time_stamp_us_step = packet_in.time_stamp_us_step; + packet1.sys_rotation_period = packet_in.sys_rotation_period; + packet1.com_rotation_period = packet_in.com_rotation_period; + packet1.com_horizontal_angle_start = packet_in.com_horizontal_angle_start; + packet1.com_horizontal_angle_step = packet_in.com_horizontal_angle_step; + packet1.sys_vertical_angle_start = packet_in.sys_vertical_angle_start; + packet1.sys_vertical_angle_span = packet_in.sys_vertical_angle_span; + packet1.apd_temperature = packet_in.apd_temperature; + packet1.dirty_index = packet_in.dirty_index; + packet1.imu_temperature = packet_in.imu_temperature; + packet1.up_optical_q = packet_in.up_optical_q; + packet1.down_optical_q = packet_in.down_optical_q; + packet1.apd_voltage = packet_in.apd_voltage; + packet1.imu_angle_x_offset = packet_in.imu_angle_x_offset; + packet1.imu_angle_y_offset = packet_in.imu_angle_y_offset; + packet1.imu_angle_z_offset = packet_in.imu_angle_z_offset; + packet1.b_axis_dist = packet_in.b_axis_dist; + packet1.theta_angle = packet_in.theta_angle; + packet1.ksi_angle = packet_in.ksi_angle; + packet1.packet_id = packet_in.packet_id; + packet1.payload_size = packet_in.payload_size; + packet1.lidar_work_status = packet_in.lidar_work_status; + + mav_array_memcpy(packet1.reflect_data, packet_in.reflect_data, sizeof(uint8_t)*120); + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_RET_LIDAR_AUXILIARY_DATA_PACKET_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_lidar_auxiliary_data_packet_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_ret_lidar_auxiliary_data_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_lidar_auxiliary_data_packet_pack(system_id, component_id, &msg , packet1.lidar_work_status , packet1.packet_id , packet1.payload_size , packet1.lidar_sync_delay_time , packet1.time_stamp_s_step , packet1.time_stamp_us_step , packet1.sys_rotation_period , packet1.com_rotation_period , packet1.com_horizontal_angle_start , packet1.com_horizontal_angle_step , packet1.sys_vertical_angle_start , packet1.sys_vertical_angle_span , packet1.apd_temperature , packet1.dirty_index , packet1.imu_temperature , packet1.up_optical_q , packet1.down_optical_q , packet1.apd_voltage , packet1.imu_angle_x_offset , packet1.imu_angle_y_offset , packet1.imu_angle_z_offset , packet1.b_axis_dist , packet1.theta_angle , packet1.ksi_angle , packet1.reflect_data ); + mavlink_msg_ret_lidar_auxiliary_data_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_lidar_auxiliary_data_packet_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.lidar_work_status , packet1.packet_id , packet1.payload_size , packet1.lidar_sync_delay_time , packet1.time_stamp_s_step , packet1.time_stamp_us_step , packet1.sys_rotation_period , packet1.com_rotation_period , packet1.com_horizontal_angle_start , packet1.com_horizontal_angle_step , packet1.sys_vertical_angle_start , packet1.sys_vertical_angle_span , packet1.apd_temperature , packet1.dirty_index , packet1.imu_temperature , packet1.up_optical_q , packet1.down_optical_q , packet1.apd_voltage , packet1.imu_angle_x_offset , packet1.imu_angle_y_offset , packet1.imu_angle_z_offset , packet1.b_axis_dist , packet1.theta_angle , packet1.ksi_angle , packet1.reflect_data ); + mavlink_msg_ret_lidar_auxiliary_data_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; iflags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_ret_lidar_time_sync_data_t packet_in = { + 963497464,17 + }; + mavlink_ret_lidar_time_sync_data_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + packet1.lidar_sync_count = packet_in.lidar_sync_count; + packet1.lidar_sync_type = packet_in.lidar_sync_type; + + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_RET_LIDAR_TIME_SYNC_DATA_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_lidar_time_sync_data_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_ret_lidar_time_sync_data_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_lidar_time_sync_data_pack(system_id, component_id, &msg , packet1.lidar_sync_type , packet1.lidar_sync_count ); + mavlink_msg_ret_lidar_time_sync_data_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_lidar_time_sync_data_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.lidar_sync_type , packet1.lidar_sync_count ); + mavlink_msg_ret_lidar_time_sync_data_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; iflags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET >= 256) { + return; + } +#endif + mavlink_message_t msg; + uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; + uint16_t i; + mavlink_ret_imu_attitude_data_packet_t packet_in = { + { 17.0, 18.0, 19.0, 20.0 },{ 129.0, 130.0, 131.0 },{ 213.0, 214.0, 215.0 },19315 + }; + mavlink_ret_imu_attitude_data_packet_t packet1, packet2; + memset(&packet1, 0, sizeof(packet1)); + packet1.packet_id = packet_in.packet_id; + + mav_array_memcpy(packet1.quaternion, packet_in.quaternion, sizeof(float)*4); + mav_array_memcpy(packet1.angular_velocity, packet_in.angular_velocity, sizeof(float)*3); + mav_array_memcpy(packet1.linear_acceleration, packet_in.linear_acceleration, sizeof(float)*3); + +#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 + if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { + // cope with extensions + memset(MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_RET_IMU_ATTITUDE_DATA_PACKET_MIN_LEN); + } +#endif + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_imu_attitude_data_packet_encode(system_id, component_id, &msg, &packet1); + mavlink_msg_ret_imu_attitude_data_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_imu_attitude_data_packet_pack(system_id, component_id, &msg , packet1.packet_id , packet1.quaternion , packet1.angular_velocity , packet1.linear_acceleration ); + mavlink_msg_ret_imu_attitude_data_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_ret_imu_attitude_data_packet_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg , packet1.packet_id , packet1.quaternion , packet1.angular_velocity , packet1.linear_acceleration ); + mavlink_msg_ret_imu_attitude_data_packet_decode(&msg, &packet2); + MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); + + memset(&packet2, 0, sizeof(packet2)); + mavlink_msg_to_send_buffer(buffer, &msg); + for (i=0; i + +/** + * + * CALCULATE THE CHECKSUM + * + */ + +#define X25_INIT_CRC 0xffff +#define X25_VALIDATE_CRC 0xf0b8 + +#ifndef HAVE_CRC_ACCUMULATE +/** + * @brief Accumulate the CRC16_MCRF4XX checksum by adding one char at a time. + * + * The checksum function adds the hash of one char at a time to the + * 16 bit checksum (uint16_t). + * + * @param data new char to hash + * @param crcAccum the already accumulated checksum + **/ +static inline void crc_accumulate(uint8_t data, uint16_t *crcAccum) +{ + /*Accumulate one byte of data into the CRC*/ + uint8_t tmp; + + tmp = data ^ (uint8_t)(*crcAccum &0xff); + tmp ^= (tmp<<4); + *crcAccum = (*crcAccum>>8) ^ (tmp<<8) ^ (tmp <<3) ^ (tmp>>4); +} +#endif + + +/** + * @brief Initialize the buffer for the MCRF4XX CRC16 + * + * @param crcAccum the 16 bit MCRF4XX CRC16 + */ +static inline void crc_init(uint16_t* crcAccum) +{ + *crcAccum = X25_INIT_CRC; +} + + +/** + * @brief Calculates the CRC16_MCRF4XX checksum on a byte buffer + * + * @param pBuffer buffer containing the byte array to hash + * @param length length of the byte array + * @return the checksum over the buffer bytes + **/ +static inline uint16_t crc_calculate(const uint8_t* pBuffer, uint16_t length) +{ + uint16_t crcTmp; + crc_init(&crcTmp); + while (length--) { + crc_accumulate(*pBuffer++, &crcTmp); + } + return crcTmp; +} + + +/** + * @brief Accumulate the MCRF4XX CRC16 by adding an array of bytes + * + * The checksum function adds the hash of one char at a time to the + * 16 bit checksum (uint16_t). + * + * @param data new bytes to hash + * @param crcAccum the already accumulated checksum + **/ +static inline void crc_accumulate_buffer(uint16_t *crcAccum, const char *pBuffer, uint16_t length) +{ + const uint8_t *p = (const uint8_t *)pBuffer; + while (length--) { + crc_accumulate(*p++, crcAccum); + } +} + +#if defined(MAVLINK_USE_CXX_NAMESPACE) || defined(__cplusplus) +} +#endif diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_conversions.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_conversions.h new file mode 100644 index 0000000..85a79d3 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_conversions.h @@ -0,0 +1,212 @@ +#pragma once + +#ifndef MAVLINK_NO_CONVERSION_HELPERS + +/* enable math defines on Windows */ +#ifdef _MSC_VER +#ifndef _USE_MATH_DEFINES +#define _USE_MATH_DEFINES +#endif +#endif +#include + +#ifndef M_PI_2 + #define M_PI_2 ((float)asin(1)) +#endif + +/** + * @file mavlink_conversions.h + * + * These conversion functions follow the NASA rotation standards definition file + * available online. + * + * Their intent is to lower the barrier for MAVLink adopters to use gimbal-lock free + * (both rotation matrices, sometimes called DCM, and quaternions are gimbal-lock free) + * rotation representations. Euler angles (roll, pitch, yaw) will be phased out of the + * protocol as widely as possible. + * + * @author James Goppert + * @author Thomas Gubler + */ + + +/** + * Converts a quaternion to a rotation matrix + * + * @param quaternion a [w, x, y, z] ordered quaternion (null-rotation being 1 0 0 0) + * @param dcm a 3x3 rotation matrix + */ +MAVLINK_HELPER void mavlink_quaternion_to_dcm(const float quaternion[4], float dcm[3][3]) +{ + double a = (double)quaternion[0]; + double b = (double)quaternion[1]; + double c = (double)quaternion[2]; + double d = (double)quaternion[3]; + double aSq = a * a; + double bSq = b * b; + double cSq = c * c; + double dSq = d * d; + dcm[0][0] = aSq + bSq - cSq - dSq; + dcm[0][1] = 2 * (b * c - a * d); + dcm[0][2] = 2 * (a * c + b * d); + dcm[1][0] = 2 * (b * c + a * d); + dcm[1][1] = aSq - bSq + cSq - dSq; + dcm[1][2] = 2 * (c * d - a * b); + dcm[2][0] = 2 * (b * d - a * c); + dcm[2][1] = 2 * (a * b + c * d); + dcm[2][2] = aSq - bSq - cSq + dSq; +} + + +/** + * Converts a rotation matrix to euler angles + * + * @param dcm a 3x3 rotation matrix + * @param roll the roll angle in radians + * @param pitch the pitch angle in radians + * @param yaw the yaw angle in radians + */ +MAVLINK_HELPER void mavlink_dcm_to_euler(const float dcm[3][3], float* roll, float* pitch, float* yaw) +{ + float phi, theta, psi; + theta = asinf(-dcm[2][0]); + + if (fabsf(theta - (float)M_PI_2) < 1.0e-3f) { + phi = 0.0f; + psi = (atan2f(dcm[1][2] - dcm[0][1], + dcm[0][2] + dcm[1][1]) + phi); + + } else if (fabsf(theta + (float)M_PI_2) < 1.0e-3f) { + phi = 0.0f; + psi = atan2f(dcm[1][2] - dcm[0][1], + dcm[0][2] + dcm[1][1] - phi); + + } else { + phi = atan2f(dcm[2][1], dcm[2][2]); + psi = atan2f(dcm[1][0], dcm[0][0]); + } + + *roll = phi; + *pitch = theta; + *yaw = psi; +} + + +/** + * Converts a quaternion to euler angles + * + * @param quaternion a [w, x, y, z] ordered quaternion (null-rotation being 1 0 0 0) + * @param roll the roll angle in radians + * @param pitch the pitch angle in radians + * @param yaw the yaw angle in radians + */ +MAVLINK_HELPER void mavlink_quaternion_to_euler(const float quaternion[4], float* roll, float* pitch, float* yaw) +{ + float dcm[3][3]; + mavlink_quaternion_to_dcm(quaternion, dcm); + mavlink_dcm_to_euler((const float(*)[3])dcm, roll, pitch, yaw); +} + + +/** + * Converts euler angles to a quaternion + * + * @param roll the roll angle in radians + * @param pitch the pitch angle in radians + * @param yaw the yaw angle in radians + * @param quaternion a [w, x, y, z] ordered quaternion (null-rotation being 1 0 0 0) + */ +MAVLINK_HELPER void mavlink_euler_to_quaternion(float roll, float pitch, float yaw, float quaternion[4]) +{ + float cosPhi_2 = cosf(roll / 2); + float sinPhi_2 = sinf(roll / 2); + float cosTheta_2 = cosf(pitch / 2); + float sinTheta_2 = sinf(pitch / 2); + float cosPsi_2 = cosf(yaw / 2); + float sinPsi_2 = sinf(yaw / 2); + quaternion[0] = (cosPhi_2 * cosTheta_2 * cosPsi_2 + + sinPhi_2 * sinTheta_2 * sinPsi_2); + quaternion[1] = (sinPhi_2 * cosTheta_2 * cosPsi_2 - + cosPhi_2 * sinTheta_2 * sinPsi_2); + quaternion[2] = (cosPhi_2 * sinTheta_2 * cosPsi_2 + + sinPhi_2 * cosTheta_2 * sinPsi_2); + quaternion[3] = (cosPhi_2 * cosTheta_2 * sinPsi_2 - + sinPhi_2 * sinTheta_2 * cosPsi_2); +} + + +/** + * Converts a rotation matrix to a quaternion + * Reference: + * - Shoemake, Quaternions, + * http://www.cs.ucr.edu/~vbz/resources/quatut.pdf + * + * @param dcm a 3x3 rotation matrix + * @param quaternion a [w, x, y, z] ordered quaternion (null-rotation being 1 0 0 0) + */ +MAVLINK_HELPER void mavlink_dcm_to_quaternion(const float dcm[3][3], float quaternion[4]) +{ + float tr = dcm[0][0] + dcm[1][1] + dcm[2][2]; + if (tr > 0.0f) { + float s = sqrtf(tr + 1.0f); + quaternion[0] = s * 0.5f; + s = 0.5f / s; + quaternion[1] = (dcm[2][1] - dcm[1][2]) * s; + quaternion[2] = (dcm[0][2] - dcm[2][0]) * s; + quaternion[3] = (dcm[1][0] - dcm[0][1]) * s; + } else { + /* Find maximum diagonal element in dcm + * store index in dcm_i */ + int dcm_i = 0; + int i; + for (i = 1; i < 3; i++) { + if (dcm[i][i] > dcm[dcm_i][dcm_i]) { + dcm_i = i; + } + } + + int dcm_j = (dcm_i + 1) % 3; + int dcm_k = (dcm_i + 2) % 3; + + float s = sqrtf((dcm[dcm_i][dcm_i] - dcm[dcm_j][dcm_j] - + dcm[dcm_k][dcm_k]) + 1.0f); + quaternion[dcm_i + 1] = s * 0.5f; + s = 0.5f / s; + quaternion[dcm_j + 1] = (dcm[dcm_i][dcm_j] + dcm[dcm_j][dcm_i]) * s; + quaternion[dcm_k + 1] = (dcm[dcm_k][dcm_i] + dcm[dcm_i][dcm_k]) * s; + quaternion[0] = (dcm[dcm_k][dcm_j] - dcm[dcm_j][dcm_k]) * s; + } +} + + +/** + * Converts euler angles to a rotation matrix + * + * @param roll the roll angle in radians + * @param pitch the pitch angle in radians + * @param yaw the yaw angle in radians + * @param dcm a 3x3 rotation matrix + */ +MAVLINK_HELPER void mavlink_euler_to_dcm(float roll, float pitch, float yaw, float dcm[3][3]) +{ + float cosPhi = cosf(roll); + float sinPhi = sinf(roll); + float cosThe = cosf(pitch); + float sinThe = sinf(pitch); + float cosPsi = cosf(yaw); + float sinPsi = sinf(yaw); + + dcm[0][0] = cosThe * cosPsi; + dcm[0][1] = -cosPhi * sinPsi + sinPhi * sinThe * cosPsi; + dcm[0][2] = sinPhi * sinPsi + cosPhi * sinThe * cosPsi; + + dcm[1][0] = cosThe * sinPsi; + dcm[1][1] = cosPhi * cosPsi + sinPhi * sinThe * sinPsi; + dcm[1][2] = -sinPhi * cosPsi + cosPhi * sinThe * sinPsi; + + dcm[2][0] = -sinThe; + dcm[2][1] = sinPhi * cosThe; + dcm[2][2] = cosPhi * cosThe; +} + +#endif // MAVLINK_NO_CONVERSION_HELPERS diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_get_info.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_get_info.h new file mode 100644 index 0000000..302ec8b --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_get_info.h @@ -0,0 +1,83 @@ +#pragma once + +#ifdef MAVLINK_USE_MESSAGE_INFO +#define MAVLINK_HAVE_GET_MESSAGE_INFO + +/* + return the message_info struct for a message +*/ +MAVLINK_HELPER const mavlink_message_info_t *mavlink_get_message_info_by_id(uint32_t msgid) +{ + static const mavlink_message_info_t mavlink_message_info[] = MAVLINK_MESSAGE_INFO; + /* + use a bisection search to find the right entry. A perfect hash may be better + Note that this assumes the table is sorted with primary key msgid + */ + const uint32_t count = sizeof(mavlink_message_info)/sizeof(mavlink_message_info[0]); + if (count == 0) { + return NULL; + } + uint32_t low=0, high=count-1; + while (low < high) { + uint32_t mid = (low+high)/2; + if (msgid < mavlink_message_info[mid].msgid) { + high = mid; + continue; + } + if (msgid > mavlink_message_info[mid].msgid) { + low = mid+1; + continue; + } + return &mavlink_message_info[mid]; + } + if (mavlink_message_info[low].msgid == msgid) { + return &mavlink_message_info[low]; + } + return NULL; +} + +/* + return the message_info struct for a message +*/ +MAVLINK_HELPER const mavlink_message_info_t *mavlink_get_message_info(const mavlink_message_t *msg) +{ + return mavlink_get_message_info_by_id(msg->msgid); +} + +/* + return the message_info struct for a message +*/ +MAVLINK_HELPER const mavlink_message_info_t *mavlink_get_message_info_by_name(const char *name) +{ + static const struct { const char *name; uint32_t msgid; } mavlink_message_names[] = MAVLINK_MESSAGE_NAMES; + /* + use a bisection search to find the right entry. A perfect hash may be better + Note that this assumes the table is sorted with primary key name + */ + const uint32_t count = sizeof(mavlink_message_names)/sizeof(mavlink_message_names[0]); + if (count == 0) { + return NULL; + } + uint32_t low=0, high=count-1; + while (low < high) { + uint32_t mid = (low+high)/2; + int cmp = strcmp(mavlink_message_names[mid].name, name); + if (cmp > 0) { + high = mid; + continue; + } + if (cmp < 0) { + low = mid+1; + continue; + } + low = mid; + break; + } + if (strcmp(mavlink_message_names[low].name, name) == 0) { + return mavlink_get_message_info_by_id(mavlink_message_names[low].msgid); + } + return NULL; +} +#endif // MAVLINK_USE_MESSAGE_INFO + + diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_helpers.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_helpers.h new file mode 100644 index 0000000..ffc6a01 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_helpers.h @@ -0,0 +1,1134 @@ +#pragma once + +#include "string.h" +#include "checksum.h" +#include "mavlink_types.h" +#include "mavlink_conversions.h" +#include + +#ifndef MAVLINK_HELPER +#define MAVLINK_HELPER +#endif + +#include "mavlink_sha256.h" + +#ifdef MAVLINK_USE_CXX_NAMESPACE +namespace mavlink { +#endif + +/* + * Internal function to give access to the channel status for each channel + */ +#ifndef MAVLINK_GET_CHANNEL_STATUS +MAVLINK_HELPER mavlink_status_t* mavlink_get_channel_status(uint8_t chan) +{ +#ifdef MAVLINK_EXTERNAL_RX_STATUS + // No m_mavlink_status array defined in function, + // has to be defined externally +#else + static mavlink_status_t m_mavlink_status[MAVLINK_COMM_NUM_BUFFERS]; +#endif + return &m_mavlink_status[chan]; +} +#endif + +/* + * Internal function to give access to the channel buffer for each channel + */ +#ifndef MAVLINK_GET_CHANNEL_BUFFER +MAVLINK_HELPER mavlink_message_t* mavlink_get_channel_buffer(uint8_t chan) +{ + +#ifdef MAVLINK_EXTERNAL_RX_BUFFER + // No m_mavlink_buffer array defined in function, + // has to be defined externally +#else + static mavlink_message_t m_mavlink_buffer[MAVLINK_COMM_NUM_BUFFERS]; +#endif + return &m_mavlink_buffer[chan]; +} +#endif // MAVLINK_GET_CHANNEL_BUFFER + +/* Enable this option to check the length of each message. + This allows invalid messages to be caught much sooner. Use if the transmission + medium is prone to missing (or extra) characters (e.g. a radio that fades in + and out). Only use if the channel will only contain messages types listed in + the headers. +*/ +//#define MAVLINK_CHECK_MESSAGE_LENGTH + +/** + * @brief Reset the status of a channel. + */ +MAVLINK_HELPER void mavlink_reset_channel_status(uint8_t chan) +{ + mavlink_status_t *status = mavlink_get_channel_status(chan); + status->parse_state = MAVLINK_PARSE_STATE_IDLE; +} + +/** + * @brief create a signature block for a packet + */ +MAVLINK_HELPER uint8_t mavlink_sign_packet(mavlink_signing_t *signing, + uint8_t signature[MAVLINK_SIGNATURE_BLOCK_LEN], + const uint8_t *header, uint8_t header_len, + const uint8_t *packet, uint8_t packet_len, + const uint8_t crc[2]) +{ + mavlink_sha256_ctx ctx; + union { + uint64_t t64; + uint8_t t8[8]; + } tstamp; + if (signing == NULL || !(signing->flags & MAVLINK_SIGNING_FLAG_SIGN_OUTGOING)) { + return 0; + } + signature[0] = signing->link_id; + tstamp.t64 = signing->timestamp; + memcpy(&signature[1], tstamp.t8, 6); + signing->timestamp++; + + mavlink_sha256_init(&ctx); + mavlink_sha256_update(&ctx, signing->secret_key, sizeof(signing->secret_key)); + mavlink_sha256_update(&ctx, header, header_len); + mavlink_sha256_update(&ctx, packet, packet_len); + mavlink_sha256_update(&ctx, crc, 2); + mavlink_sha256_update(&ctx, signature, 7); + mavlink_sha256_final_48(&ctx, &signature[7]); + + return MAVLINK_SIGNATURE_BLOCK_LEN; +} + +/** + * @brief Trim payload of any trailing zero-populated bytes (MAVLink 2 only). + * + * @param payload Serialised payload buffer. + * @param length Length of full-width payload buffer. + * @return Length of payload after zero-filled bytes are trimmed. + */ +MAVLINK_HELPER uint8_t _mav_trim_payload(const char *payload, uint8_t length) +{ + while (length > 1 && payload[length-1] == 0) { + length--; + } + return length; +} + +/** + * @brief check a signature block for a packet + */ +MAVLINK_HELPER bool mavlink_signature_check(mavlink_signing_t *signing, + mavlink_signing_streams_t *signing_streams, + const mavlink_message_t *msg) +{ + if (signing == NULL) { + return true; + } + const uint8_t *p = (const uint8_t *)&msg->magic; + const uint8_t *psig = msg->signature; + const uint8_t *incoming_signature = psig+7; + mavlink_sha256_ctx ctx; + uint8_t signature[6]; + uint16_t i; + + mavlink_sha256_init(&ctx); + mavlink_sha256_update(&ctx, signing->secret_key, sizeof(signing->secret_key)); + mavlink_sha256_update(&ctx, p, MAVLINK_NUM_HEADER_BYTES); + mavlink_sha256_update(&ctx, _MAV_PAYLOAD(msg), msg->len); + mavlink_sha256_update(&ctx, msg->ck, 2); + mavlink_sha256_update(&ctx, psig, 1+6); + mavlink_sha256_final_48(&ctx, signature); + if (memcmp(signature, incoming_signature, 6) != 0) { + return false; + } + + // now check timestamp + union tstamp { + uint64_t t64; + uint8_t t8[8]; + } tstamp; + uint8_t link_id = psig[0]; + tstamp.t64 = 0; + memcpy(tstamp.t8, psig+1, 6); + + if (signing_streams == NULL) { + return false; + } + + // find stream + for (i=0; inum_signing_streams; i++) { + if (msg->sysid == signing_streams->stream[i].sysid && + msg->compid == signing_streams->stream[i].compid && + link_id == signing_streams->stream[i].link_id) { + break; + } + } + if (i == signing_streams->num_signing_streams) { + if (signing_streams->num_signing_streams >= MAVLINK_MAX_SIGNING_STREAMS) { + // over max number of streams + return false; + } + // new stream. Only accept if timestamp is not more than 1 minute old + if (tstamp.t64 + 6000*1000UL < signing->timestamp) { + return false; + } + // add new stream + signing_streams->stream[i].sysid = msg->sysid; + signing_streams->stream[i].compid = msg->compid; + signing_streams->stream[i].link_id = link_id; + signing_streams->num_signing_streams++; + } else { + union tstamp last_tstamp; + last_tstamp.t64 = 0; + memcpy(last_tstamp.t8, signing_streams->stream[i].timestamp_bytes, 6); + if (tstamp.t64 <= last_tstamp.t64) { + // repeating old timestamp + return false; + } + } + + // remember last timestamp + memcpy(signing_streams->stream[i].timestamp_bytes, psig+1, 6); + + // our next timestamp must be at least this timestamp + if (tstamp.t64 > signing->timestamp) { + signing->timestamp = tstamp.t64; + } + return true; +} + + +/** + * @brief Finalize a MAVLink message with channel assignment + * + * This function calculates the checksum and sets length and aircraft id correctly. + * It assumes that the message id and the payload are already correctly set. This function + * can also be used if the message header has already been written before (as in mavlink_msg_xxx_pack + * instead of mavlink_msg_xxx_pack_headerless), it just introduces little extra overhead. + * + * @param msg Message to finalize + * @param system_id Id of the sending (this) system, 1-127 + * @param length Message length + */ +MAVLINK_HELPER uint16_t mavlink_finalize_message_buffer(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, + mavlink_status_t* status, uint8_t min_length, uint8_t length, uint8_t crc_extra) +{ + bool mavlink1 = (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) != 0; + bool signing = (!mavlink1) && status->signing && (status->signing->flags & MAVLINK_SIGNING_FLAG_SIGN_OUTGOING); + uint8_t signature_len = signing? MAVLINK_SIGNATURE_BLOCK_LEN : 0; + uint8_t header_len = MAVLINK_CORE_HEADER_LEN+1; + uint8_t buf[MAVLINK_CORE_HEADER_LEN+1]; + if (mavlink1) { + msg->magic = MAVLINK_STX_MAVLINK1; + header_len = MAVLINK_CORE_HEADER_MAVLINK1_LEN+1; + } else { + msg->magic = MAVLINK_STX; + } + msg->len = mavlink1?min_length:_mav_trim_payload(_MAV_PAYLOAD(msg), length); + msg->sysid = system_id; + msg->compid = component_id; + msg->incompat_flags = 0; + if (signing) { + msg->incompat_flags |= MAVLINK_IFLAG_SIGNED; + } + msg->compat_flags = 0; + msg->seq = status->current_tx_seq; + status->current_tx_seq = status->current_tx_seq + 1; + + // form the header as a byte array for the crc + buf[0] = msg->magic; + buf[1] = msg->len; + if (mavlink1) { + buf[2] = msg->seq; + buf[3] = msg->sysid; + buf[4] = msg->compid; + buf[5] = msg->msgid & 0xFF; + } else { + buf[2] = msg->incompat_flags; + buf[3] = msg->compat_flags; + buf[4] = msg->seq; + buf[5] = msg->sysid; + buf[6] = msg->compid; + buf[7] = msg->msgid & 0xFF; + buf[8] = (msg->msgid >> 8) & 0xFF; + buf[9] = (msg->msgid >> 16) & 0xFF; + } + + uint16_t checksum = crc_calculate(&buf[1], header_len-1); + crc_accumulate_buffer(&checksum, _MAV_PAYLOAD(msg), msg->len); + crc_accumulate(crc_extra, &checksum); + mavlink_ck_a(msg) = (uint8_t)(checksum & 0xFF); + mavlink_ck_b(msg) = (uint8_t)(checksum >> 8); + + msg->checksum = checksum; + + if (signing) { + mavlink_sign_packet(status->signing, + msg->signature, + (const uint8_t *)buf, header_len, + (const uint8_t *)_MAV_PAYLOAD(msg), msg->len, + (const uint8_t *)_MAV_PAYLOAD(msg)+(uint16_t)msg->len); + } + + return msg->len + header_len + 2 + signature_len; +} + +MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, + uint8_t chan, uint8_t min_length, uint8_t length, uint8_t crc_extra) +{ + mavlink_status_t *status = mavlink_get_channel_status(chan); + return mavlink_finalize_message_buffer(msg, system_id, component_id, status, min_length, length, crc_extra); +} + +/** + * @brief Finalize a MAVLink message with MAVLINK_COMM_0 as default channel + */ +MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, + uint8_t min_length, uint8_t length, uint8_t crc_extra) +{ + return mavlink_finalize_message_chan(msg, system_id, component_id, MAVLINK_COMM_0, min_length, length, crc_extra); +} + +static inline void _mav_parse_error(mavlink_status_t *status) +{ + status->parse_error++; +} + +#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS +MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len); + +/** + * @brief Finalize a MAVLink message with channel assignment and send + */ +MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint32_t msgid, + const char *packet, + uint8_t min_length, uint8_t length, uint8_t crc_extra) +{ + uint16_t checksum; + uint8_t buf[MAVLINK_NUM_HEADER_BYTES]; + uint8_t ck[2]; + mavlink_status_t *status = mavlink_get_channel_status(chan); + uint8_t header_len = MAVLINK_CORE_HEADER_LEN; + uint8_t signature_len = 0; + uint8_t signature[MAVLINK_SIGNATURE_BLOCK_LEN]; + bool mavlink1 = (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) != 0; + bool signing = (!mavlink1) && status->signing && (status->signing->flags & MAVLINK_SIGNING_FLAG_SIGN_OUTGOING); + + if (mavlink1) { + length = min_length; + if (msgid > 255) { + // can't send 16 bit messages + _mav_parse_error(status); + return; + } + header_len = MAVLINK_CORE_HEADER_MAVLINK1_LEN; + buf[0] = MAVLINK_STX_MAVLINK1; + buf[1] = length; + buf[2] = status->current_tx_seq; + buf[3] = mavlink_system.sysid; + buf[4] = mavlink_system.compid; + buf[5] = msgid & 0xFF; + } else { + uint8_t incompat_flags = 0; + if (signing) { + incompat_flags |= MAVLINK_IFLAG_SIGNED; + } + length = _mav_trim_payload(packet, length); + buf[0] = MAVLINK_STX; + buf[1] = length; + buf[2] = incompat_flags; + buf[3] = 0; // compat_flags + buf[4] = status->current_tx_seq; + buf[5] = mavlink_system.sysid; + buf[6] = mavlink_system.compid; + buf[7] = msgid & 0xFF; + buf[8] = (msgid >> 8) & 0xFF; + buf[9] = (msgid >> 16) & 0xFF; + } + status->current_tx_seq++; + checksum = crc_calculate((const uint8_t*)&buf[1], header_len); + crc_accumulate_buffer(&checksum, packet, length); + crc_accumulate(crc_extra, &checksum); + ck[0] = (uint8_t)(checksum & 0xFF); + ck[1] = (uint8_t)(checksum >> 8); + + if (signing) { + // possibly add a signature + signature_len = mavlink_sign_packet(status->signing, signature, buf, header_len+1, + (const uint8_t *)packet, length, ck); + } + + MAVLINK_START_UART_SEND(chan, header_len + 3 + (uint16_t)length + (uint16_t)signature_len); + _mavlink_send_uart(chan, (const char *)buf, header_len+1); + _mavlink_send_uart(chan, packet, length); + _mavlink_send_uart(chan, (const char *)ck, 2); + if (signature_len != 0) { + _mavlink_send_uart(chan, (const char *)signature, signature_len); + } + MAVLINK_END_UART_SEND(chan, header_len + 3 + (uint16_t)length + (uint16_t)signature_len); +} + +/** + * @brief re-send a message over a uart channel + * this is more stack efficient than re-marshalling the message + * If the message is signed then the original signature is also sent + */ +MAVLINK_HELPER void _mavlink_resend_uart(mavlink_channel_t chan, const mavlink_message_t *msg) +{ + uint8_t ck[2]; + + ck[0] = (uint8_t)(msg->checksum & 0xFF); + ck[1] = (uint8_t)(msg->checksum >> 8); + // XXX use the right sequence here + + uint8_t header_len; + uint8_t signature_len; + + if (msg->magic == MAVLINK_STX_MAVLINK1) { + header_len = MAVLINK_CORE_HEADER_MAVLINK1_LEN + 1; + signature_len = 0; + MAVLINK_START_UART_SEND(chan, header_len + msg->len + 2 + signature_len); + // we can't send the structure directly as it has extra mavlink2 elements in it + uint8_t buf[MAVLINK_CORE_HEADER_MAVLINK1_LEN + 1]; + buf[0] = msg->magic; + buf[1] = msg->len; + buf[2] = msg->seq; + buf[3] = msg->sysid; + buf[4] = msg->compid; + buf[5] = msg->msgid & 0xFF; + _mavlink_send_uart(chan, (const char*)buf, header_len); + } else { + header_len = MAVLINK_CORE_HEADER_LEN + 1; + signature_len = (msg->incompat_flags & MAVLINK_IFLAG_SIGNED)?MAVLINK_SIGNATURE_BLOCK_LEN:0; + MAVLINK_START_UART_SEND(chan, header_len + msg->len + 2 + signature_len); + uint8_t buf[MAVLINK_CORE_HEADER_LEN + 1]; + buf[0] = msg->magic; + buf[1] = msg->len; + buf[2] = msg->incompat_flags; + buf[3] = msg->compat_flags; + buf[4] = msg->seq; + buf[5] = msg->sysid; + buf[6] = msg->compid; + buf[7] = msg->msgid & 0xFF; + buf[8] = (msg->msgid >> 8) & 0xFF; + buf[9] = (msg->msgid >> 16) & 0xFF; + _mavlink_send_uart(chan, (const char *)buf, header_len); + } + _mavlink_send_uart(chan, _MAV_PAYLOAD(msg), msg->len); + _mavlink_send_uart(chan, (const char *)ck, 2); + if (signature_len != 0) { + _mavlink_send_uart(chan, (const char *)msg->signature, MAVLINK_SIGNATURE_BLOCK_LEN); + } + MAVLINK_END_UART_SEND(chan, header_len + msg->len + 2 + signature_len); +} +#endif // MAVLINK_USE_CONVENIENCE_FUNCTIONS + +/** + * @brief Pack a message to send it over a serial byte stream + */ +MAVLINK_HELPER uint16_t mavlink_msg_to_send_buffer(uint8_t *buf, const mavlink_message_t *msg) +{ + uint8_t signature_len, header_len; + uint8_t *ck; + uint8_t length = msg->len; + + if (msg->magic == MAVLINK_STX_MAVLINK1) { + signature_len = 0; + header_len = MAVLINK_CORE_HEADER_MAVLINK1_LEN; + buf[0] = msg->magic; + buf[1] = length; + buf[2] = msg->seq; + buf[3] = msg->sysid; + buf[4] = msg->compid; + buf[5] = msg->msgid & 0xFF; + memcpy(&buf[6], _MAV_PAYLOAD(msg), msg->len); + ck = buf + header_len + 1 + (uint16_t)msg->len; + } else { + length = _mav_trim_payload(_MAV_PAYLOAD(msg), length); + header_len = MAVLINK_CORE_HEADER_LEN; + buf[0] = msg->magic; + buf[1] = length; + buf[2] = msg->incompat_flags; + buf[3] = msg->compat_flags; + buf[4] = msg->seq; + buf[5] = msg->sysid; + buf[6] = msg->compid; + buf[7] = msg->msgid & 0xFF; + buf[8] = (msg->msgid >> 8) & 0xFF; + buf[9] = (msg->msgid >> 16) & 0xFF; + memcpy(&buf[10], _MAV_PAYLOAD(msg), length); + ck = buf + header_len + 1 + (uint16_t)length; + signature_len = (msg->incompat_flags & MAVLINK_IFLAG_SIGNED)?MAVLINK_SIGNATURE_BLOCK_LEN:0; + } + ck[0] = (uint8_t)(msg->checksum & 0xFF); + ck[1] = (uint8_t)(msg->checksum >> 8); + if (signature_len > 0) { + memcpy(&ck[2], msg->signature, signature_len); + } + + return header_len + 1 + 2 + (uint16_t)length + (uint16_t)signature_len; +} + +union __mavlink_bitfield { + uint8_t uint8; + int8_t int8; + uint16_t uint16; + int16_t int16; + uint32_t uint32; + int32_t int32; +}; + + +MAVLINK_HELPER void mavlink_start_checksum(mavlink_message_t* msg) +{ + uint16_t crcTmp = 0; + crc_init(&crcTmp); + msg->checksum = crcTmp; +} + +MAVLINK_HELPER void mavlink_update_checksum(mavlink_message_t* msg, uint8_t c) +{ + uint16_t checksum = msg->checksum; + crc_accumulate(c, &checksum); + msg->checksum = checksum; +} + +/* + return the crc_entry value for a msgid +*/ +#ifndef MAVLINK_GET_MSG_ENTRY +MAVLINK_HELPER const mavlink_msg_entry_t *mavlink_get_msg_entry(uint32_t msgid) +{ + static const mavlink_msg_entry_t mavlink_message_crcs[] = MAVLINK_MESSAGE_CRCS; + /* + use a bisection search to find the right entry. A perfect hash may be better + Note that this assumes the table is sorted by msgid + */ + uint32_t low=0, high=sizeof(mavlink_message_crcs)/sizeof(mavlink_message_crcs[0]) - 1; + while (low < high) { + uint32_t mid = (low+1+high)/2; + if (msgid < mavlink_message_crcs[mid].msgid) { + high = mid-1; + continue; + } + if (msgid > mavlink_message_crcs[mid].msgid) { + low = mid; + continue; + } + low = mid; + break; + } + if (mavlink_message_crcs[low].msgid != msgid) { + // msgid is not in the table + return NULL; + } + return &mavlink_message_crcs[low]; +} +#endif // MAVLINK_GET_MSG_ENTRY + +/* + return the crc_extra value for a message +*/ +MAVLINK_HELPER uint8_t mavlink_get_crc_extra(const mavlink_message_t *msg) +{ + const mavlink_msg_entry_t *e = mavlink_get_msg_entry(msg->msgid); + return e?e->crc_extra:0; +} + +/* + return the min message length +*/ +#define MAVLINK_HAVE_MIN_MESSAGE_LENGTH +MAVLINK_HELPER uint8_t mavlink_min_message_length(const mavlink_message_t *msg) +{ + const mavlink_msg_entry_t *e = mavlink_get_msg_entry(msg->msgid); + return e?e->min_msg_len:0; +} + +/* + return the max message length (including extensions) +*/ +#define MAVLINK_HAVE_MAX_MESSAGE_LENGTH +MAVLINK_HELPER uint8_t mavlink_max_message_length(const mavlink_message_t *msg) +{ + const mavlink_msg_entry_t *e = mavlink_get_msg_entry(msg->msgid); + return e?e->max_msg_len:0; +} + +/** + * This is a variant of mavlink_frame_char() but with caller supplied + * parsing buffers. It is useful when you want to create a MAVLink + * parser in a library that doesn't use any global variables + * + * @param rxmsg parsing message buffer + * @param status parsing status buffer + * @param c The char to parse + * + * @param r_message NULL if no message could be decoded, otherwise the message data + * @param r_mavlink_status if a message was decoded, this is filled with the channel's stats + * @return 0 if no message could be decoded, 1 on good message and CRC, 2 on bad CRC + * + */ +MAVLINK_HELPER uint8_t mavlink_frame_char_buffer(mavlink_message_t* rxmsg, + mavlink_status_t* status, + uint8_t c, + mavlink_message_t* r_message, + mavlink_status_t* r_mavlink_status) +{ + int bufferIndex = 0; + + status->msg_received = MAVLINK_FRAMING_INCOMPLETE; + + switch (status->parse_state) + { + case MAVLINK_PARSE_STATE_UNINIT: + case MAVLINK_PARSE_STATE_IDLE: + if (c == MAVLINK_STX) + { + status->parse_state = MAVLINK_PARSE_STATE_GOT_STX; + rxmsg->len = 0; + rxmsg->magic = c; + status->flags &= ~MAVLINK_STATUS_FLAG_IN_MAVLINK1; + mavlink_start_checksum(rxmsg); + } else if (c == MAVLINK_STX_MAVLINK1) + { + status->parse_state = MAVLINK_PARSE_STATE_GOT_STX; + rxmsg->len = 0; + rxmsg->magic = c; + status->flags |= MAVLINK_STATUS_FLAG_IN_MAVLINK1; + mavlink_start_checksum(rxmsg); + } + break; + + case MAVLINK_PARSE_STATE_GOT_STX: + if (status->msg_received +/* Support shorter buffers than the + default maximum packet size */ +#if (MAVLINK_MAX_PAYLOAD_LEN < 255) + || c > MAVLINK_MAX_PAYLOAD_LEN +#endif + ) + { + status->buffer_overrun++; + _mav_parse_error(status); + status->msg_received = 0; + status->parse_state = MAVLINK_PARSE_STATE_IDLE; + } + else + { + // NOT counting STX, LENGTH, SEQ, SYSID, COMPID, MSGID, CRC1 and CRC2 + rxmsg->len = c; + status->packet_idx = 0; + mavlink_update_checksum(rxmsg, c); + if (status->flags & MAVLINK_STATUS_FLAG_IN_MAVLINK1) { + rxmsg->incompat_flags = 0; + rxmsg->compat_flags = 0; + status->parse_state = MAVLINK_PARSE_STATE_GOT_COMPAT_FLAGS; + } else { + status->parse_state = MAVLINK_PARSE_STATE_GOT_LENGTH; + } + } + break; + + case MAVLINK_PARSE_STATE_GOT_LENGTH: + rxmsg->incompat_flags = c; + if ((rxmsg->incompat_flags & ~MAVLINK_IFLAG_MASK) != 0) { + // message includes an incompatible feature flag + _mav_parse_error(status); + status->msg_received = 0; + status->parse_state = MAVLINK_PARSE_STATE_IDLE; + break; + } + mavlink_update_checksum(rxmsg, c); + status->parse_state = MAVLINK_PARSE_STATE_GOT_INCOMPAT_FLAGS; + break; + + case MAVLINK_PARSE_STATE_GOT_INCOMPAT_FLAGS: + rxmsg->compat_flags = c; + mavlink_update_checksum(rxmsg, c); + status->parse_state = MAVLINK_PARSE_STATE_GOT_COMPAT_FLAGS; + break; + + case MAVLINK_PARSE_STATE_GOT_COMPAT_FLAGS: + rxmsg->seq = c; + mavlink_update_checksum(rxmsg, c); + status->parse_state = MAVLINK_PARSE_STATE_GOT_SEQ; + break; + + case MAVLINK_PARSE_STATE_GOT_SEQ: + rxmsg->sysid = c; + mavlink_update_checksum(rxmsg, c); + status->parse_state = MAVLINK_PARSE_STATE_GOT_SYSID; + break; + + case MAVLINK_PARSE_STATE_GOT_SYSID: + rxmsg->compid = c; + mavlink_update_checksum(rxmsg, c); + status->parse_state = MAVLINK_PARSE_STATE_GOT_COMPID; + break; + + case MAVLINK_PARSE_STATE_GOT_COMPID: + rxmsg->msgid = c; + mavlink_update_checksum(rxmsg, c); + if (status->flags & MAVLINK_STATUS_FLAG_IN_MAVLINK1) { + if(rxmsg->len > 0) { + status->parse_state = MAVLINK_PARSE_STATE_GOT_MSGID3; + } else { + status->parse_state = MAVLINK_PARSE_STATE_GOT_PAYLOAD; + } +#ifdef MAVLINK_CHECK_MESSAGE_LENGTH + if (rxmsg->len < mavlink_min_message_length(rxmsg) || + rxmsg->len > mavlink_max_message_length(rxmsg)) { + _mav_parse_error(status); + status->parse_state = MAVLINK_PARSE_STATE_IDLE; + break; + } +#endif + } else { + status->parse_state = MAVLINK_PARSE_STATE_GOT_MSGID1; + } + break; + + case MAVLINK_PARSE_STATE_GOT_MSGID1: + rxmsg->msgid |= c<<8; + mavlink_update_checksum(rxmsg, c); + status->parse_state = MAVLINK_PARSE_STATE_GOT_MSGID2; + break; + + case MAVLINK_PARSE_STATE_GOT_MSGID2: + rxmsg->msgid |= ((uint32_t)c)<<16; + mavlink_update_checksum(rxmsg, c); + if(rxmsg->len > 0){ + status->parse_state = MAVLINK_PARSE_STATE_GOT_MSGID3; + } else { + status->parse_state = MAVLINK_PARSE_STATE_GOT_PAYLOAD; + } +#ifdef MAVLINK_CHECK_MESSAGE_LENGTH + if (rxmsg->len < mavlink_min_message_length(rxmsg) || + rxmsg->len > mavlink_max_message_length(rxmsg)) + { + _mav_parse_error(status); + status->parse_state = MAVLINK_PARSE_STATE_IDLE; + break; + } +#endif + break; + + case MAVLINK_PARSE_STATE_GOT_MSGID3: + _MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx++] = (char)c; + mavlink_update_checksum(rxmsg, c); + if (status->packet_idx == rxmsg->len) + { + status->parse_state = MAVLINK_PARSE_STATE_GOT_PAYLOAD; + } + break; + + case MAVLINK_PARSE_STATE_GOT_PAYLOAD: { + const mavlink_msg_entry_t *e = mavlink_get_msg_entry(rxmsg->msgid); + uint8_t crc_extra = e?e->crc_extra:0; + mavlink_update_checksum(rxmsg, crc_extra); + if (c != (rxmsg->checksum & 0xFF)) { + status->parse_state = MAVLINK_PARSE_STATE_GOT_BAD_CRC1; + } else { + status->parse_state = MAVLINK_PARSE_STATE_GOT_CRC1; + } + rxmsg->ck[0] = c; + + // zero-fill the packet to cope with short incoming packets + if (e && status->packet_idx < e->max_msg_len) { + memset(&_MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx], 0, e->max_msg_len - status->packet_idx); + } + break; + } + + case MAVLINK_PARSE_STATE_GOT_CRC1: + case MAVLINK_PARSE_STATE_GOT_BAD_CRC1: + if (status->parse_state == MAVLINK_PARSE_STATE_GOT_BAD_CRC1 || c != (rxmsg->checksum >> 8)) { + // got a bad CRC message + status->msg_received = MAVLINK_FRAMING_BAD_CRC; + } else { + // Successfully got message + status->msg_received = MAVLINK_FRAMING_OK; + } + rxmsg->ck[1] = c; + + if (rxmsg->incompat_flags & MAVLINK_IFLAG_SIGNED) { + status->parse_state = MAVLINK_PARSE_STATE_SIGNATURE_WAIT; + status->signature_wait = MAVLINK_SIGNATURE_BLOCK_LEN; + + // If the CRC is already wrong, don't overwrite msg_received, + // otherwise we can end up with garbage flagged as valid. + if (status->msg_received != MAVLINK_FRAMING_BAD_CRC) { + status->msg_received = MAVLINK_FRAMING_INCOMPLETE; + } + } else { + if (status->signing && + (status->signing->accept_unsigned_callback == NULL || + !status->signing->accept_unsigned_callback(status, rxmsg->msgid))) { + + // If the CRC is already wrong, don't overwrite msg_received. + if (status->msg_received != MAVLINK_FRAMING_BAD_CRC) { + status->msg_received = MAVLINK_FRAMING_BAD_SIGNATURE; + } + } + status->parse_state = MAVLINK_PARSE_STATE_IDLE; + if (r_message != NULL) { + memcpy(r_message, rxmsg, sizeof(mavlink_message_t)); + } + } + break; + case MAVLINK_PARSE_STATE_SIGNATURE_WAIT: + rxmsg->signature[MAVLINK_SIGNATURE_BLOCK_LEN-status->signature_wait] = c; + status->signature_wait--; + if (status->signature_wait == 0) { + // we have the whole signature, check it is OK + bool sig_ok = mavlink_signature_check(status->signing, status->signing_streams, rxmsg); + if (!sig_ok && + (status->signing->accept_unsigned_callback && + status->signing->accept_unsigned_callback(status, rxmsg->msgid))) { + // accepted via application level override + sig_ok = true; + } + if (sig_ok) { + status->msg_received = MAVLINK_FRAMING_OK; + } else { + status->msg_received = MAVLINK_FRAMING_BAD_SIGNATURE; + } + status->parse_state = MAVLINK_PARSE_STATE_IDLE; + if (r_message !=NULL) { + memcpy(r_message, rxmsg, sizeof(mavlink_message_t)); + } + } + break; + } + + bufferIndex++; + // If a message has been successfully decoded, check index + if (status->msg_received == MAVLINK_FRAMING_OK) + { + //while(status->current_seq != rxmsg->seq) + //{ + // status->packet_rx_drop_count++; + // status->current_seq++; + //} + status->current_rx_seq = rxmsg->seq; + // Initial condition: If no packet has been received so far, drop count is undefined + if (status->packet_rx_success_count == 0) status->packet_rx_drop_count = 0; + // Count this packet as received + status->packet_rx_success_count++; + } + + if (r_message != NULL) { + r_message->len = rxmsg->len; // Provide visibility on how far we are into current msg + } + if (r_mavlink_status != NULL) { + r_mavlink_status->parse_state = status->parse_state; + r_mavlink_status->packet_idx = status->packet_idx; + r_mavlink_status->current_rx_seq = status->current_rx_seq+1; + r_mavlink_status->packet_rx_success_count = status->packet_rx_success_count; + r_mavlink_status->packet_rx_drop_count = status->parse_error; + r_mavlink_status->flags = status->flags; + } + status->parse_error = 0; + + if (status->msg_received == MAVLINK_FRAMING_BAD_CRC) { + /* + the CRC came out wrong. We now need to overwrite the + msg CRC with the one on the wire so that if the + caller decides to forward the message anyway that + mavlink_msg_to_send_buffer() won't overwrite the + checksum + */ + if (r_message != NULL) { + r_message->checksum = rxmsg->ck[0] | (rxmsg->ck[1]<<8); + } + } + + return status->msg_received; +} + +/** + * This is a convenience function which handles the complete MAVLink parsing. + * the function will parse one byte at a time and return the complete packet once + * it could be successfully decoded. This function will return 0, 1 or + * 2 (MAVLINK_FRAMING_INCOMPLETE, MAVLINK_FRAMING_OK or MAVLINK_FRAMING_BAD_CRC) + * + * Messages are parsed into an internal buffer (one for each channel). When a complete + * message is received it is copies into *r_message and the channel's status is + * copied into *r_mavlink_status. + * + * @param chan ID of the channel to be parsed. + * A channel is not a physical message channel like a serial port, but a logical partition of + * the communication streams. COMM_NB is the limit for the number of channels + * on MCU (e.g. ARM7), while COMM_NB_HIGH is the limit for the number of channels in Linux/Windows + * @param c The char to parse + * + * @param r_message NULL if no message could be decoded, otherwise the message data + * @param r_mavlink_status if a message was decoded, this is filled with the channel's stats + * @return 0 if no message could be decoded, 1 on good message and CRC, 2 on bad CRC + * + * A typical use scenario of this function call is: + * + * @code + * #include + * + * mavlink_status_t status; + * mavlink_message_t msg; + * int chan = 0; + * + * + * while(serial.bytesAvailable > 0) + * { + * uint8_t byte = serial.getNextByte(); + * if (mavlink_frame_char(chan, byte, &msg, &status) != MAVLINK_FRAMING_INCOMPLETE) + * { + * printf("Received message with ID %d, sequence: %d from component %d of system %d", msg.msgid, msg.seq, msg.compid, msg.sysid); + * } + * } + * + * + * @endcode + */ +MAVLINK_HELPER uint8_t mavlink_frame_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status) +{ + return mavlink_frame_char_buffer(mavlink_get_channel_buffer(chan), + mavlink_get_channel_status(chan), + c, + r_message, + r_mavlink_status); +} + +/** + * Set the protocol version + */ +MAVLINK_HELPER void mavlink_set_proto_version(uint8_t chan, unsigned int version) +{ + mavlink_status_t *status = mavlink_get_channel_status(chan); + if (version > 1) { + status->flags &= ~(MAVLINK_STATUS_FLAG_OUT_MAVLINK1); + } else { + status->flags |= MAVLINK_STATUS_FLAG_OUT_MAVLINK1; + } +} + +/** + * Get the protocol version + * + * @return 1 for v1, 2 for v2 + */ +MAVLINK_HELPER unsigned int mavlink_get_proto_version(uint8_t chan) +{ + mavlink_status_t *status = mavlink_get_channel_status(chan); + if ((status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) > 0) { + return 1; + } else { + return 2; + } +} + +/** + * This is a convenience function which handles the complete MAVLink parsing. + * the function will parse one byte at a time and return the complete packet once + * it could be successfully decoded. This function will return 0 or 1. + * + * Messages are parsed into an internal buffer (one for each channel). When a complete + * message is received it is copies into *r_message and the channel's status is + * copied into *r_mavlink_status. + * + * @param chan ID of the channel to be parsed. + * A channel is not a physical message channel like a serial port, but a logical partition of + * the communication streams. COMM_NB is the limit for the number of channels + * on MCU (e.g. ARM7), while COMM_NB_HIGH is the limit for the number of channels in Linux/Windows + * @param c The char to parse + * + * @param r_message NULL if no message could be decoded, otherwise the message data + * @param r_mavlink_status if a message was decoded, this is filled with the channel's stats + * @return 0 if no message could be decoded or bad CRC, 1 on good message and CRC + * + * A typical use scenario of this function call is: + * + * @code + * #include + * + * mavlink_status_t status; + * mavlink_message_t msg; + * int chan = 0; + * + * + * while(serial.bytesAvailable > 0) + * { + * uint8_t byte = serial.getNextByte(); + * if (mavlink_parse_char(chan, byte, &msg, &status)) + * { + * printf("Received message with ID %d, sequence: %d from component %d of system %d", msg.msgid, msg.seq, msg.compid, msg.sysid); + * } + * } + * + * + * @endcode + */ +MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status) +{ + uint8_t msg_received = mavlink_frame_char(chan, c, r_message, r_mavlink_status); + if (msg_received == MAVLINK_FRAMING_BAD_CRC || + msg_received == MAVLINK_FRAMING_BAD_SIGNATURE) { + // we got a bad CRC. Treat as a parse failure + mavlink_message_t* rxmsg = mavlink_get_channel_buffer(chan); + mavlink_status_t* status = mavlink_get_channel_status(chan); + _mav_parse_error(status); + status->msg_received = MAVLINK_FRAMING_INCOMPLETE; + status->parse_state = MAVLINK_PARSE_STATE_IDLE; + if (c == MAVLINK_STX) + { + status->parse_state = MAVLINK_PARSE_STATE_GOT_STX; + rxmsg->len = 0; + mavlink_start_checksum(rxmsg); + } + return 0; + } + return msg_received; +} + +/** + * @brief Put a bitfield of length 1-32 bit into the buffer + * + * @param b the value to add, will be encoded in the bitfield + * @param bits number of bits to use to encode b, e.g. 1 for boolean, 2, 3, etc. + * @param packet_index the position in the packet (the index of the first byte to use) + * @param bit_index the position in the byte (the index of the first bit to use) + * @param buffer packet buffer to write into + * @return new position of the last used byte in the buffer + */ +MAVLINK_HELPER uint8_t put_bitfield_n_by_index(int32_t b, uint8_t bits, uint8_t packet_index, uint8_t bit_index, uint8_t* r_bit_index, uint8_t* buffer) +{ + uint16_t bits_remain = bits; + // Transform number into network order + int32_t v; + uint8_t i_bit_index, i_byte_index, curr_bits_n; +#if MAVLINK_NEED_BYTE_SWAP + union { + int32_t i; + uint8_t b[4]; + } bin, bout; + bin.i = b; + bout.b[0] = bin.b[3]; + bout.b[1] = bin.b[2]; + bout.b[2] = bin.b[1]; + bout.b[3] = bin.b[0]; + v = bout.i; +#else + v = b; +#endif + + // buffer in + // 01100000 01000000 00000000 11110001 + // buffer out + // 11110001 00000000 01000000 01100000 + + // Existing partly filled byte (four free slots) + // 0111xxxx + + // Mask n free bits + // 00001111 = 2^0 + 2^1 + 2^2 + 2^3 = 2^n - 1 + // = ((uint32_t)(1 << n)) - 1; // = 2^n - 1 + + // Shift n bits into the right position + // out = in >> n; + + // Mask and shift bytes + i_bit_index = bit_index; + i_byte_index = packet_index; + if (bit_index > 0) + { + // If bits were available at start, they were available + // in the byte before the current index + i_byte_index--; + } + + // While bits have not been packed yet + while (bits_remain > 0) + { + // Bits still have to be packed + // there can be more than 8 bits, so + // we might have to pack them into more than one byte + + // First pack everything we can into the current 'open' byte + //curr_bits_n = bits_remain << 3; // Equals bits_remain mod 8 + //FIXME + if (bits_remain <= (uint8_t)(8 - i_bit_index)) + { + // Enough space + curr_bits_n = (uint8_t)bits_remain; + } + else + { + curr_bits_n = (8 - i_bit_index); + } + + // Pack these n bits into the current byte + // Mask out whatever was at that position with ones (xxx11111) + buffer[i_byte_index] &= (0xFF >> (8 - curr_bits_n)); + // Put content to this position, by masking out the non-used part + buffer[i_byte_index] |= ((0x00 << curr_bits_n) & v); + + // Increment the bit index + i_bit_index += curr_bits_n; + + // Now proceed to the next byte, if necessary + bits_remain -= curr_bits_n; + if (bits_remain > 0) + { + // Offer another 8 bits / one byte + i_byte_index++; + i_bit_index = 0; + } + } + + *r_bit_index = i_bit_index; + // If a partly filled byte is present, mark this as consumed + if (i_bit_index != 7) i_byte_index++; + return i_byte_index - packet_index; +} + +#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS + +// To make MAVLink work on your MCU, define comm_send_ch() if you wish +// to send 1 byte at a time, or MAVLINK_SEND_UART_BYTES() to send a +// whole packet at a time + +/* + +#include "mavlink_types.h" + +void comm_send_ch(mavlink_channel_t chan, uint8_t ch) +{ + if (chan == MAVLINK_COMM_0) + { + uart0_transmit(ch); + } + if (chan == MAVLINK_COMM_1) + { + uart1_transmit(ch); + } +} + */ + +MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len) +{ +#ifdef MAVLINK_SEND_UART_BYTES + /* this is the more efficient approach, if the platform + defines it */ + MAVLINK_SEND_UART_BYTES(chan, (const uint8_t *)buf, len); +#else + /* fallback to one byte at a time */ + uint16_t i; + for (i = 0; i < len; i++) { + comm_send_ch(chan, (uint8_t)buf[i]); + } +#endif +} +#endif // MAVLINK_USE_CONVENIENCE_FUNCTIONS + +#ifdef MAVLINK_USE_CXX_NAMESPACE +} // namespace mavlink +#endif diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_sha256.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_sha256.h new file mode 100644 index 0000000..7accd03 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_sha256.h @@ -0,0 +1,235 @@ +#pragma once + +/* + sha-256 implementation for MAVLink based on Heimdal sources, with + modifications to suit mavlink headers + */ +/* + * Copyright (c) 1995 - 2001 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + allow implementation to provide their own sha256 with the same API +*/ +#ifndef HAVE_MAVLINK_SHA256 + +#ifdef MAVLINK_USE_CXX_NAMESPACE +namespace mavlink { +#endif + +#ifndef MAVLINK_HELPER +#define MAVLINK_HELPER +#endif + +typedef struct { + uint32_t sz[2]; + uint32_t counter[8]; + union { + unsigned char save_bytes[64]; + uint32_t save_u32[16]; + } u; +} mavlink_sha256_ctx; + +#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) +#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) + +#define ROTR(x,n) (((x)>>(n)) | ((x) << (32 - (n)))) + +#define Sigma0(x) (ROTR(x,2) ^ ROTR(x,13) ^ ROTR(x,22)) +#define Sigma1(x) (ROTR(x,6) ^ ROTR(x,11) ^ ROTR(x,25)) +#define sigma0(x) (ROTR(x,7) ^ ROTR(x,18) ^ ((x)>>3)) +#define sigma1(x) (ROTR(x,17) ^ ROTR(x,19) ^ ((x)>>10)) + +static const uint32_t mavlink_sha256_constant_256[64] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +}; + +MAVLINK_HELPER void mavlink_sha256_init(mavlink_sha256_ctx *m) +{ + m->sz[0] = 0; + m->sz[1] = 0; + m->counter[0] = 0x6a09e667; + m->counter[1] = 0xbb67ae85; + m->counter[2] = 0x3c6ef372; + m->counter[3] = 0xa54ff53a; + m->counter[4] = 0x510e527f; + m->counter[5] = 0x9b05688c; + m->counter[6] = 0x1f83d9ab; + m->counter[7] = 0x5be0cd19; +} + +static inline void mavlink_sha256_calc(mavlink_sha256_ctx *m, uint32_t *in) +{ + uint32_t AA, BB, CC, DD, EE, FF, GG, HH; + uint32_t data[64]; + int i; + + AA = m->counter[0]; + BB = m->counter[1]; + CC = m->counter[2]; + DD = m->counter[3]; + EE = m->counter[4]; + FF = m->counter[5]; + GG = m->counter[6]; + HH = m->counter[7]; + + for (i = 0; i < 16; ++i) + data[i] = in[i]; + for (i = 16; i < 64; ++i) + data[i] = sigma1(data[i-2]) + data[i-7] + + sigma0(data[i-15]) + data[i - 16]; + + for (i = 0; i < 64; i++) { + uint32_t T1, T2; + + T1 = HH + Sigma1(EE) + Ch(EE, FF, GG) + mavlink_sha256_constant_256[i] + data[i]; + T2 = Sigma0(AA) + Maj(AA,BB,CC); + + HH = GG; + GG = FF; + FF = EE; + EE = DD + T1; + DD = CC; + CC = BB; + BB = AA; + AA = T1 + T2; + } + + m->counter[0] += AA; + m->counter[1] += BB; + m->counter[2] += CC; + m->counter[3] += DD; + m->counter[4] += EE; + m->counter[5] += FF; + m->counter[6] += GG; + m->counter[7] += HH; +} + +MAVLINK_HELPER void mavlink_sha256_update(mavlink_sha256_ctx *m, const void *v, uint32_t len) +{ + const unsigned char *p = (const unsigned char *)v; + uint32_t old_sz = m->sz[0]; + uint32_t offset; + + m->sz[0] += len * 8; + if (m->sz[0] < old_sz) + ++m->sz[1]; + offset = (old_sz / 8) % 64; + while(len > 0){ + uint32_t l = 64 - offset; + if (len < l) { + l = len; + } + memcpy(m->u.save_bytes + offset, p, l); + offset += l; + p += l; + len -= l; + if(offset == 64){ + int i; + uint32_t current[16]; + const uint32_t *u = m->u.save_u32; + for (i = 0; i < 16; i++){ + const uint8_t *p1 = (const uint8_t *)&u[i]; + uint8_t *p2 = (uint8_t *)¤t[i]; + p2[0] = p1[3]; + p2[1] = p1[2]; + p2[2] = p1[1]; + p2[3] = p1[0]; + } + mavlink_sha256_calc(m, current); + offset = 0; + } + } +} + +/* + get first 48 bits of final sha256 hash + */ +MAVLINK_HELPER void mavlink_sha256_final_48(mavlink_sha256_ctx *m, uint8_t result[6]) +{ + unsigned char zeros[72]; + unsigned offset = (m->sz[0] / 8) % 64; + unsigned int dstart = (120 - offset - 1) % 64 + 1; + uint8_t *p = (uint8_t *)&m->counter[0]; + + *zeros = 0x80; + memset (zeros + 1, 0, sizeof(zeros) - 1); + zeros[dstart+7] = (m->sz[0] >> 0) & 0xff; + zeros[dstart+6] = (m->sz[0] >> 8) & 0xff; + zeros[dstart+5] = (m->sz[0] >> 16) & 0xff; + zeros[dstart+4] = (m->sz[0] >> 24) & 0xff; + zeros[dstart+3] = (m->sz[1] >> 0) & 0xff; + zeros[dstart+2] = (m->sz[1] >> 8) & 0xff; + zeros[dstart+1] = (m->sz[1] >> 16) & 0xff; + zeros[dstart+0] = (m->sz[1] >> 24) & 0xff; + + mavlink_sha256_update(m, zeros, dstart + 8); + + // this ordering makes the result consistent with taking the first + // 6 bytes of more conventional sha256 functions. It assumes + // little-endian ordering of m->counter + result[0] = p[3]; + result[1] = p[2]; + result[2] = p[1]; + result[3] = p[0]; + result[4] = p[7]; + result[5] = p[6]; +} + +// prevent conflicts with users of the header +#undef Ch +#undef ROTR +#undef Sigma0 +#undef Sigma1 +#undef sigma0 +#undef sigma1 + +#ifdef MAVLINK_USE_CXX_NAMESPACE +} // namespace mavlink +#endif + +#endif // HAVE_MAVLINK_SHA256 diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_types.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_types.h new file mode 100644 index 0000000..8bdf0b5 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/mavlink_types.h @@ -0,0 +1,301 @@ +#pragma once + +// Visual Studio versions before 2010 don't have stdint.h, so we just error out. +#if (defined _MSC_VER) && (_MSC_VER < 1600) +#error "The C-MAVLink implementation requires Visual Studio 2010 or greater" +#endif + +#include +#include + +#ifdef MAVLINK_USE_CXX_NAMESPACE +namespace mavlink { +#endif + +// Macro to define packed structures +#ifdef __GNUC__ + #define MAVPACKED( __Declaration__ ) __Declaration__ __attribute__((packed)) +#else + #define MAVPACKED( __Declaration__ ) __pragma( pack(push, 1) ) __Declaration__ __pragma( pack(pop) ) +#endif + +#ifndef MAVLINK_MAX_PAYLOAD_LEN +// it is possible to override this, but be careful! +#define MAVLINK_MAX_PAYLOAD_LEN 255 ///< Maximum payload length +#endif + +#define MAVLINK_CORE_HEADER_LEN 9 ///< Length of core header (of the comm. layer) +#define MAVLINK_CORE_HEADER_MAVLINK1_LEN 5 ///< Length of MAVLink1 core header (of the comm. layer) +#define MAVLINK_NUM_HEADER_BYTES (MAVLINK_CORE_HEADER_LEN + 1) ///< Length of all header bytes, including core and stx +#define MAVLINK_NUM_CHECKSUM_BYTES 2 +#define MAVLINK_NUM_NON_PAYLOAD_BYTES (MAVLINK_NUM_HEADER_BYTES + MAVLINK_NUM_CHECKSUM_BYTES) + +#define MAVLINK_SIGNATURE_BLOCK_LEN 13 + +#define MAVLINK_MAX_PACKET_LEN (MAVLINK_MAX_PAYLOAD_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES + MAVLINK_SIGNATURE_BLOCK_LEN) ///< Maximum packet length + +/** + * Old-style 4 byte param union + * + * This struct is the data format to be used when sending + * parameters. The parameter should be copied to the native + * type (without type conversion) + * and re-instanted on the receiving side using the + * native type as well. + */ +MAVPACKED( +typedef struct param_union { + union { + float param_float; + int32_t param_int32; + uint32_t param_uint32; + int16_t param_int16; + uint16_t param_uint16; + int8_t param_int8; + uint8_t param_uint8; + uint8_t bytes[4]; + }; + uint8_t type; +}) mavlink_param_union_t; + + +/** + * New-style 8 byte param union + * mavlink_param_union_double_t will be 8 bytes long, and treated as needing 8 byte alignment for the purposes of MAVLink 1.0 field ordering. + * The mavlink_param_union_double_t will be treated as a little-endian structure. + * + * If is_double is 1 then the type is a double, and the remaining 63 bits are the double, with the lowest bit of the mantissa zero. + * The intention is that by replacing the is_double bit with 0 the type can be directly used as a double (as the is_double bit corresponds to the + * lowest mantissa bit of a double). If is_double is 0 then mavlink_type gives the type in the union. + * The mavlink_types.h header will also need to have shifts/masks to define the bit boundaries in the above, + * as bitfield ordering isn't consistent between platforms. The above is intended to be for gcc on x86, + * which should be the same as gcc on little-endian arm. When using shifts/masks the value will be treated as a 64 bit unsigned number, + * and the bits pulled out using the shifts/masks. +*/ +MAVPACKED( +typedef struct param_union_extended { + union { + struct { + uint8_t is_double:1; + uint8_t mavlink_type:7; + union { + char c; + uint8_t uint8; + int8_t int8; + uint16_t uint16; + int16_t int16; + uint32_t uint32; + int32_t int32; + float f; + uint8_t align[7]; + }; + }; + uint8_t data[8]; + }; +}) mavlink_param_union_double_t; + +/** + * This structure is required to make the mavlink_send_xxx convenience functions + * work, as it tells the library what the current system and component ID are. + */ +MAVPACKED( +typedef struct __mavlink_system { + uint8_t sysid; ///< Used by the MAVLink message_xx_send() convenience function + uint8_t compid; ///< Used by the MAVLink message_xx_send() convenience function +}) mavlink_system_t; + +MAVPACKED( +typedef struct __mavlink_message { + uint16_t checksum; ///< sent at end of packet + uint8_t magic; ///< protocol magic marker + uint8_t len; ///< Length of payload + uint8_t incompat_flags; ///< flags that must be understood + uint8_t compat_flags; ///< flags that can be ignored if not understood + uint8_t seq; ///< Sequence of packet + uint8_t sysid; ///< ID of message sender system/aircraft + uint8_t compid; ///< ID of the message sender component + uint32_t msgid:24; ///< ID of message in payload + uint64_t payload64[(MAVLINK_MAX_PAYLOAD_LEN+MAVLINK_NUM_CHECKSUM_BYTES+7)/8]; + uint8_t ck[2]; ///< incoming checksum bytes + uint8_t signature[MAVLINK_SIGNATURE_BLOCK_LEN]; +}) mavlink_message_t; + +typedef enum { + MAVLINK_TYPE_CHAR = 0, + MAVLINK_TYPE_UINT8_T = 1, + MAVLINK_TYPE_INT8_T = 2, + MAVLINK_TYPE_UINT16_T = 3, + MAVLINK_TYPE_INT16_T = 4, + MAVLINK_TYPE_UINT32_T = 5, + MAVLINK_TYPE_INT32_T = 6, + MAVLINK_TYPE_UINT64_T = 7, + MAVLINK_TYPE_INT64_T = 8, + MAVLINK_TYPE_FLOAT = 9, + MAVLINK_TYPE_DOUBLE = 10 +} mavlink_message_type_t; + +#define MAVLINK_MAX_FIELDS 64 + +typedef struct __mavlink_field_info { + const char *name; // name of this field + const char *print_format; // printing format hint, or NULL + mavlink_message_type_t type; // type of this field + unsigned int array_length; // if non-zero, field is an array + unsigned int wire_offset; // offset of each field in the payload + unsigned int structure_offset; // offset in a C structure +} mavlink_field_info_t; + +// note that in this structure the order of fields is the order +// in the XML file, not necessary the wire order +typedef struct __mavlink_message_info { + uint32_t msgid; // message ID + const char *name; // name of the message + unsigned num_fields; // how many fields in this message + mavlink_field_info_t fields[MAVLINK_MAX_FIELDS]; // field information +} mavlink_message_info_t; + +#define _MAV_PAYLOAD(msg) ((const char *)(&((msg)->payload64[0]))) +#define _MAV_PAYLOAD_NON_CONST(msg) ((char *)(&((msg)->payload64[0]))) + +// checksum is immediately after the payload bytes +#define mavlink_ck_a(msg) *((msg)->len + (uint8_t *)_MAV_PAYLOAD_NON_CONST(msg)) +#define mavlink_ck_b(msg) *(((msg)->len+(uint16_t)1) + (uint8_t *)_MAV_PAYLOAD_NON_CONST(msg)) + +#ifndef HAVE_MAVLINK_CHANNEL_T +typedef enum { + MAVLINK_COMM_0, + MAVLINK_COMM_1, + MAVLINK_COMM_2, + MAVLINK_COMM_3 +} mavlink_channel_t; +#endif + +/* + * applications can set MAVLINK_COMM_NUM_BUFFERS to the maximum number + * of buffers they will use. If more are used, then the result will be + * a stack overrun + */ +#ifndef MAVLINK_COMM_NUM_BUFFERS +#if (defined linux) | (defined __linux) | (defined __MACH__) | (defined _WIN32) +# define MAVLINK_COMM_NUM_BUFFERS 16 +#else +# define MAVLINK_COMM_NUM_BUFFERS 4 +#endif +#endif + +typedef enum { + MAVLINK_PARSE_STATE_UNINIT=0, + MAVLINK_PARSE_STATE_IDLE, + MAVLINK_PARSE_STATE_GOT_STX, + MAVLINK_PARSE_STATE_GOT_LENGTH, + MAVLINK_PARSE_STATE_GOT_INCOMPAT_FLAGS, + MAVLINK_PARSE_STATE_GOT_COMPAT_FLAGS, + MAVLINK_PARSE_STATE_GOT_SEQ, + MAVLINK_PARSE_STATE_GOT_SYSID, + MAVLINK_PARSE_STATE_GOT_COMPID, + MAVLINK_PARSE_STATE_GOT_MSGID1, + MAVLINK_PARSE_STATE_GOT_MSGID2, + MAVLINK_PARSE_STATE_GOT_MSGID3, + MAVLINK_PARSE_STATE_GOT_PAYLOAD, + MAVLINK_PARSE_STATE_GOT_CRC1, + MAVLINK_PARSE_STATE_GOT_BAD_CRC1, + MAVLINK_PARSE_STATE_SIGNATURE_WAIT +} mavlink_parse_state_t; ///< The state machine for the comm parser + +typedef enum { + MAVLINK_FRAMING_INCOMPLETE=0, + MAVLINK_FRAMING_OK=1, + MAVLINK_FRAMING_BAD_CRC=2, + MAVLINK_FRAMING_BAD_SIGNATURE=3 +} mavlink_framing_t; + +#define MAVLINK_STATUS_FLAG_IN_MAVLINK1 1 // last incoming packet was MAVLink1 +#define MAVLINK_STATUS_FLAG_OUT_MAVLINK1 2 // generate MAVLink1 by default +#define MAVLINK_STATUS_FLAG_IN_SIGNED 4 // last incoming packet was signed and validated +#define MAVLINK_STATUS_FLAG_IN_BADSIG 8 // last incoming packet had a bad signature + +#define MAVLINK_STX_MAVLINK1 0xFE // marker for old protocol + +typedef struct __mavlink_status { + uint8_t msg_received; ///< Number of received messages + uint8_t buffer_overrun; ///< Number of buffer overruns + uint8_t parse_error; ///< Number of parse errors + mavlink_parse_state_t parse_state; ///< Parsing state machine + uint8_t packet_idx; ///< Index in current packet + uint8_t current_rx_seq; ///< Sequence number of last packet received + uint8_t current_tx_seq; ///< Sequence number of last packet sent + uint16_t packet_rx_success_count; ///< Received packets + uint16_t packet_rx_drop_count; ///< Number of packet drops + uint8_t flags; ///< MAVLINK_STATUS_FLAG_* + uint8_t signature_wait; ///< number of signature bytes left to receive + struct __mavlink_signing *signing; ///< optional signing state + struct __mavlink_signing_streams *signing_streams; ///< global record of stream timestamps +} mavlink_status_t; + +/* + a callback function to allow for accepting unsigned packets + */ +typedef bool (*mavlink_accept_unsigned_t)(const mavlink_status_t *status, uint32_t msgid); + +/* + flags controlling signing + */ +#define MAVLINK_SIGNING_FLAG_SIGN_OUTGOING 1 ///< Enable outgoing signing + +/* + state of MAVLink signing for this channel + */ +typedef struct __mavlink_signing { + uint8_t flags; ///< MAVLINK_SIGNING_FLAG_* + uint8_t link_id; ///< Same as MAVLINK_CHANNEL + uint64_t timestamp; ///< Timestamp, in microseconds since UNIX epoch GMT + uint8_t secret_key[32]; + mavlink_accept_unsigned_t accept_unsigned_callback; +} mavlink_signing_t; + +/* + timestamp state of each logical signing stream. This needs to be the same structure for all + connections in order to be secure + */ +#ifndef MAVLINK_MAX_SIGNING_STREAMS +#define MAVLINK_MAX_SIGNING_STREAMS 16 +#endif +typedef struct __mavlink_signing_streams { + uint16_t num_signing_streams; + struct __mavlink_signing_stream { + uint8_t link_id; ///< ID of the link (MAVLINK_CHANNEL) + uint8_t sysid; ///< Remote system ID + uint8_t compid; ///< Remote component ID + uint8_t timestamp_bytes[6]; ///< Timestamp, in microseconds since UNIX epoch GMT + } stream[MAVLINK_MAX_SIGNING_STREAMS]; +} mavlink_signing_streams_t; + + +#define MAVLINK_BIG_ENDIAN 0 +#define MAVLINK_LITTLE_ENDIAN 1 + +#define MAV_MSG_ENTRY_FLAG_HAVE_TARGET_SYSTEM 1 +#define MAV_MSG_ENTRY_FLAG_HAVE_TARGET_COMPONENT 2 + +/* + entry in table of information about each message type + */ +typedef struct __mavlink_msg_entry { + uint32_t msgid; + uint8_t crc_extra; + uint8_t min_msg_len; // minimum message length + uint8_t max_msg_len; // maximum message length (e.g. including mavlink2 extensions) + uint8_t flags; // MAV_MSG_ENTRY_FLAG_* + uint8_t target_system_ofs; // payload offset to target_system, or 0 + uint8_t target_component_ofs; // payload offset to target_component, or 0 +} mavlink_msg_entry_t; + +/* + incompat_flags bits + */ +#define MAVLINK_IFLAG_SIGNED 0x01 +#define MAVLINK_IFLAG_MASK 0x01 // mask of all understood bits + +#ifdef MAVLINK_USE_CXX_NAMESPACE +} // namespace mavlink +#endif diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/protocol.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/protocol.h new file mode 100644 index 0000000..d922730 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/mavlink/protocol.h @@ -0,0 +1,334 @@ +#pragma once + +#include "string.h" +#include "mavlink_types.h" + +/* + If you want MAVLink on a system that is native big-endian, + you need to define NATIVE_BIG_ENDIAN +*/ +#ifdef NATIVE_BIG_ENDIAN +# define MAVLINK_NEED_BYTE_SWAP (MAVLINK_ENDIAN == MAVLINK_LITTLE_ENDIAN) +#else +# define MAVLINK_NEED_BYTE_SWAP (MAVLINK_ENDIAN != MAVLINK_LITTLE_ENDIAN) +#endif + +#ifndef MAVLINK_STACK_BUFFER +#define MAVLINK_STACK_BUFFER 0 +#endif + +#ifndef MAVLINK_AVOID_GCC_STACK_BUG +# define MAVLINK_AVOID_GCC_STACK_BUG defined(__GNUC__) +#endif + +#ifndef MAVLINK_ASSERT +#define MAVLINK_ASSERT(x) +#endif + +#ifndef MAVLINK_START_UART_SEND +#define MAVLINK_START_UART_SEND(chan, length) +#endif + +#ifndef MAVLINK_END_UART_SEND +#define MAVLINK_END_UART_SEND(chan, length) +#endif + +/* option to provide alternative implementation of mavlink_helpers.h */ +#ifdef MAVLINK_SEPARATE_HELPERS + + #define MAVLINK_HELPER + + /* decls in sync with those in mavlink_helpers.h */ + #ifndef MAVLINK_GET_CHANNEL_STATUS + MAVLINK_HELPER mavlink_status_t* mavlink_get_channel_status(uint8_t chan); + #endif + MAVLINK_HELPER void mavlink_reset_channel_status(uint8_t chan); + MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, + uint8_t chan, uint8_t min_length, uint8_t length, uint8_t crc_extra); + MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, + uint8_t min_length, uint8_t length, uint8_t crc_extra); + #ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS + MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint32_t msgid, const char *packet, + uint8_t min_length, uint8_t length, uint8_t crc_extra); + #endif + MAVLINK_HELPER uint16_t mavlink_msg_to_send_buffer(uint8_t *buffer, const mavlink_message_t *msg); + MAVLINK_HELPER void mavlink_start_checksum(mavlink_message_t* msg); + MAVLINK_HELPER void mavlink_update_checksum(mavlink_message_t* msg, uint8_t c); + MAVLINK_HELPER uint8_t mavlink_frame_char_buffer(mavlink_message_t* rxmsg, + mavlink_status_t* status, + uint8_t c, + mavlink_message_t* r_message, + mavlink_status_t* r_mavlink_status); + MAVLINK_HELPER uint8_t mavlink_frame_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status); + MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status); + MAVLINK_HELPER uint8_t put_bitfield_n_by_index(int32_t b, uint8_t bits, uint8_t packet_index, uint8_t bit_index, + uint8_t* r_bit_index, uint8_t* buffer); + MAVLINK_HELPER const mavlink_msg_entry_t *mavlink_get_msg_entry(uint32_t msgid); + #ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS + MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len); + MAVLINK_HELPER void _mavlink_resend_uart(mavlink_channel_t chan, const mavlink_message_t *msg); + #endif + +#else + + #define MAVLINK_HELPER static inline + #include "mavlink_helpers.h" + +#endif // MAVLINK_SEPARATE_HELPERS + + +/** + * @brief Get the required buffer size for this message + */ +static inline uint16_t mavlink_msg_get_send_buffer_length(const mavlink_message_t* msg) +{ + if (msg->magic == MAVLINK_STX_MAVLINK1) { + return msg->len + MAVLINK_CORE_HEADER_MAVLINK1_LEN+1 + 2; + } + uint16_t signature_len = (msg->incompat_flags & MAVLINK_IFLAG_SIGNED)?MAVLINK_SIGNATURE_BLOCK_LEN:0; + return msg->len + MAVLINK_NUM_NON_PAYLOAD_BYTES + signature_len; +} + +#if MAVLINK_NEED_BYTE_SWAP +static inline void byte_swap_2(char *dst, const char *src) +{ + dst[0] = src[1]; + dst[1] = src[0]; +} +static inline void byte_swap_4(char *dst, const char *src) +{ + dst[0] = src[3]; + dst[1] = src[2]; + dst[2] = src[1]; + dst[3] = src[0]; +} +static inline void byte_swap_8(char *dst, const char *src) +{ + dst[0] = src[7]; + dst[1] = src[6]; + dst[2] = src[5]; + dst[3] = src[4]; + dst[4] = src[3]; + dst[5] = src[2]; + dst[6] = src[1]; + dst[7] = src[0]; +} +#elif !MAVLINK_ALIGNED_FIELDS +static inline void byte_copy_2(char *dst, const char *src) +{ + dst[0] = src[0]; + dst[1] = src[1]; +} +static inline void byte_copy_4(char *dst, const char *src) +{ + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + dst[3] = src[3]; +} +static inline void byte_copy_8(char *dst, const char *src) +{ + memcpy(dst, src, 8); +} +#endif + +#define _mav_put_uint8_t(buf, wire_offset, b) buf[wire_offset] = (uint8_t)b +#define _mav_put_int8_t(buf, wire_offset, b) buf[wire_offset] = (int8_t)b +#define _mav_put_char(buf, wire_offset, b) buf[wire_offset] = b + +#if MAVLINK_NEED_BYTE_SWAP +#define _mav_put_uint16_t(buf, wire_offset, b) byte_swap_2(&buf[wire_offset], (const char *)&b) +#define _mav_put_int16_t(buf, wire_offset, b) byte_swap_2(&buf[wire_offset], (const char *)&b) +#define _mav_put_uint32_t(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b) +#define _mav_put_int32_t(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b) +#define _mav_put_uint64_t(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b) +#define _mav_put_int64_t(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b) +#define _mav_put_float(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b) +#define _mav_put_double(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b) +#elif !MAVLINK_ALIGNED_FIELDS +#define _mav_put_uint16_t(buf, wire_offset, b) byte_copy_2(&buf[wire_offset], (const char *)&b) +#define _mav_put_int16_t(buf, wire_offset, b) byte_copy_2(&buf[wire_offset], (const char *)&b) +#define _mav_put_uint32_t(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b) +#define _mav_put_int32_t(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b) +#define _mav_put_uint64_t(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b) +#define _mav_put_int64_t(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b) +#define _mav_put_float(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b) +#define _mav_put_double(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b) +#else +#define _mav_put_uint16_t(buf, wire_offset, b) *(uint16_t *)&buf[wire_offset] = b +#define _mav_put_int16_t(buf, wire_offset, b) *(int16_t *)&buf[wire_offset] = b +#define _mav_put_uint32_t(buf, wire_offset, b) *(uint32_t *)&buf[wire_offset] = b +#define _mav_put_int32_t(buf, wire_offset, b) *(int32_t *)&buf[wire_offset] = b +#define _mav_put_uint64_t(buf, wire_offset, b) *(uint64_t *)&buf[wire_offset] = b +#define _mav_put_int64_t(buf, wire_offset, b) *(int64_t *)&buf[wire_offset] = b +#define _mav_put_float(buf, wire_offset, b) *(float *)&buf[wire_offset] = b +#define _mav_put_double(buf, wire_offset, b) *(double *)&buf[wire_offset] = b +#endif + +/* + like memcpy(), but if src is NULL, do a memset to zero +*/ +static inline void mav_array_memcpy(void *dest, const void *src, size_t n) +{ + if (src == NULL) { + memset(dest, 0, n); + } else { + memcpy(dest, src, n); + } +} + +/* + * Place a char array into a buffer + */ +static inline void _mav_put_char_array(char *buf, uint8_t wire_offset, const char *b, uint8_t array_length) +{ + mav_array_memcpy(&buf[wire_offset], b, array_length); + +} + +/* + * Place a uint8_t array into a buffer + */ +static inline void _mav_put_uint8_t_array(char *buf, uint8_t wire_offset, const uint8_t *b, uint8_t array_length) +{ + mav_array_memcpy(&buf[wire_offset], b, array_length); + +} + +/* + * Place a int8_t array into a buffer + */ +static inline void _mav_put_int8_t_array(char *buf, uint8_t wire_offset, const int8_t *b, uint8_t array_length) +{ + mav_array_memcpy(&buf[wire_offset], b, array_length); + +} + +#if MAVLINK_NEED_BYTE_SWAP +#define _MAV_PUT_ARRAY(TYPE, V) \ +static inline void _mav_put_ ## TYPE ##_array(char *buf, uint8_t wire_offset, const TYPE *b, uint8_t array_length) \ +{ \ + if (b == NULL) { \ + memset(&buf[wire_offset], 0, array_length*sizeof(TYPE)); \ + } else { \ + uint16_t i; \ + for (i=0; i +#include + +/** + * @brief Parse A Range And An Auxiliary Data To A Point Cloud + * + * @param auxiliaryData + * @param rangeData + * @param scanCloud Array elements are x, y, z, intensity respectively + * @return true + * @return false + */ +bool parseRangeAuxiliaryDataToCloud( + const mavlink_ret_lidar_auxiliary_data_packet_t &auxiliaryData, + const mavlink_ret_lidar_distance_data_packet_t &rangeData, + std::vector> &scanCloud + ){ + + // check packet id match + if (auxiliaryData.packet_id != rangeData.packet_id){ + return false; + } + + // parse data + float rotate_yaw_bias = 0; + float range_scale = 0.001; + float z_bias = 0.0445; + int points_num_of_scan = 120; + float bias_laser_beam_ = auxiliaryData.b_axis_dist / 1000; + + float sin_theta = sin(auxiliaryData.theta_angle); + float cos_theta = cos(auxiliaryData.theta_angle); + float sin_ksi = sin(auxiliaryData.ksi_angle); + float cos_ksi = cos(auxiliaryData.ksi_angle); + + float pitch_cur = auxiliaryData.sys_vertical_angle_start * M_PI / 180.0; + float pitch_step = auxiliaryData.sys_vertical_angle_span * M_PI / 180.0; + float yaw_cur = (auxiliaryData.com_horizontal_angle_start + rotate_yaw_bias) * M_PI / 180.0; + float yaw_step = auxiliaryData.com_horizontal_angle_step / points_num_of_scan * M_PI / 180.0; + + uint16_t range; + float range_float; + + std::array point; + for (int i = 0, j = 0; j < points_num_of_scan; + i += 2, j += 1, + pitch_cur += pitch_step, yaw_cur += yaw_step) + { + // Calculate point range in float type + range = (rangeData.point_data[i + 1] << 8); + range = range | rangeData.point_data[i]; + if (range == 0){ + continue; + } + range_float = range_scale * range; + + // Transform this point to XYZ coordinate + float&& sin_alpha = sin(pitch_cur); + float&& cos_alpha = cos(pitch_cur); + float&& sin_beta = sin(yaw_cur); + float&& cos_beta = cos(yaw_cur); + + float&& A = (-cos_theta * sin_ksi + sin_theta * sin_alpha * cos_ksi) * range_float + bias_laser_beam_; + float&& B = cos_alpha * cos_ksi * range_float; + + point[0] = cos_beta * A - sin_beta * B; // x + point[1] = sin_beta * A + cos_beta * B; // y + point[2] = (sin_theta * sin_ksi + cos_theta * sin_alpha * cos_ksi) * range_float + z_bias; // z + point[3] = auxiliaryData.reflect_data[j]; + scanCloud.push_back(point); + } + + return true; +} \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/udp_handler.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/udp_handler.h new file mode 100644 index 0000000..7269fe3 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/udp_handler.h @@ -0,0 +1,51 @@ +#pragma once + +#ifdef _WIN32 + #include + #define socklen_t int + typedef unsigned int uint32_t; +#else + #include + #include + # define closesocket close +#endif + +#include +#include + +/** + * @brief UDP Handler + */ +class UDPHandler +{ +public: + UDPHandler(unsigned short port = 9000); + virtual ~UDPHandler(); + + int CreateSocket(); + void Close(); + bool Bind(); + + int Send(const char *buf, int size, char *ip, unsigned short port); + int Recv(char *buf, int bufsize, sockaddr_in *from); + + int SetRecvTimeout(int sec); + int SetSendTimeout(int sec); + +private: + int sockfd_ = 0; + unsigned short udp_port_ = 0; +}; + + +/** + * @brief Transform a Data Struct to UDP buffer + * + * @tparam DataStruct an IMUUnitree or ScanUnitree + * @param data + * @param buffer + * @param msgType + * @return uint32_t the total bytes sent through udp + */ +template +uint32_t dataStructToUDPBuffer(const DataStruct &data, uint32_t msgType, char *buffer); \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/unitree_lidar_sdk.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/unitree_lidar_sdk.h new file mode 100644 index 0000000..0984a6d --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/unitree_lidar_sdk.h @@ -0,0 +1,253 @@ +/********************************************************************** + Copyright (c) 2020-2023, Unitree Robotics.Co.Ltd. All rights reserved. +***********************************************************************/ + +#pragma once + +#if defined(_WIN32) && !defined(__MINGW32__) + typedef signed char int8_t; + typedef unsigned char uint8_t; + typedef short int16_t; // NOLINT + typedef unsigned short uint16_t; // NOLINT + typedef int int32_t; + typedef unsigned int uint32_t; + typedef __int64 int64_t; + typedef unsigned __int64 uint64_t; + // intptr_t and friends are defined in crtdefs.h through stdio.h. +#else + #include +#endif + +#include +#include +#include +#include +#include +#include + +#include "unitree_lidar_sdk_config.h" + +namespace unitree_lidar_sdk{ + +// const float DEGREE_TO_RADIAN = M_PI / 180.0; +// const float RADIAN_TO_DEGREE = 180.0 / M_PI; + +const float PI_UNITEE = 3.14159265358979323846; +const float DEGREE_TO_RADIAN = PI_UNITEE / 180.0; +const float RADIAN_TO_DEGREE = 180.0 / PI_UNITEE; + +/** + * @brief Get the system timestamp in seconds. + */ +double get_system_timestamp(); + +/** + * @brief Point Type + */ +typedef struct +{ + float x; + float y; + float z; + float intensity; + float time; // relative time of this point from cloud stamp + uint32_t ring; // ring +}PointUnitree; + +/** + * @brief Cloud Type + */ +typedef struct{ + double stamp; // cloud timestamp + uint32_t id; // sequence id + uint32_t ringNum; + std::vector points; +}PointCloudUnitree; + +/** + * @brief Scan Type + */ +typedef struct{ + double stamp; // cloud timestamp + uint32_t id; // sequence id + uint32_t validPointsNum; // first validPointsNum points are valid + PointUnitree points[120]; +}ScanUnitree; + + +/** + * @brief IMU Type + */ +typedef struct{ + double stamp; // imu timestamp + uint32_t id; // sequence id + float quaternion[4]; // quaternion: [x,y,z,w] + float angular_velocity[3]; // three-axis angular velocity values. + float linear_acceleration[3]; // three-axis acceleration values. +}IMUUnitree; + +/** + * @brief Returned message type after one parse + */ +enum MessageType{ + NONE = 0, // No valid message + IMU = 1, // An IMU message + POINTCLOUD = 2, // A cached PointCloud message + RANGE = 3, // A Range message + AUXILIARY = 4, // An Auxiliary message + VERSION = 5, // A Version info + TIMESYNC = 6 // A time sync info +}; + +/** + * @brief Lidar Woking Mode + */ +enum LidarWorkingMode +{ + NORMAL=1, // Configure the LiDAR to operate in normal mode. + STANDBY=2 // Configure the LiDAR to enter standby mode. +}; + +/** + * @brief LED display mode + */ +enum LEDDisplayMode +{ + FORWARD_SLOW=2, /* Function mode forward at slow. | */ + FORWARD_FAST=3, /* Function mode forward at fast. | */ + REVERSE_SLOW=4, /* Function mode reverse at slow. | */ + REVERSE_FAST=5, /* Function mode reverse at fast. | */ + TRIPLE_FLIP=6, /* Function mode triple flip. | */ + TRIPLE_BREATHING=7, /* Function mode triple breathing. | */ + SIXSTAGE_BREATHING=8 /* Function mode six-stage breathing. | */ +}; + +/** + * @brief Unitree Lidar Reader + */ +class UnitreeLidarReader{ + +public: + + /** + * @brief Initialize + * @return Return 0 if the serial port is opened successfully; + * return -1 if we failed to open the serial port. + */ + virtual int initialize( + uint16_t cloud_scan_num = 18, + std::string port = "/dev/ttyUSB0", + uint32_t baudrate = 2000000, + float rotate_yaw_bias = 0, + float range_scale = 0.001, + float range_bias = 0, + float range_max = 50, + float range_min = 0 + ) = 0; + + /** + * @brief Initialize for UDP board + */ + virtual int initializeUDP( + uint16_t cloud_scan_num = 18, + unsigned short lidar_port = 5001, + std::string lidar_ip = "10.10.10.10", + unsigned short local_port = 5000, + std::string local_ip = "10.10.10.100", + float rotate_yaw_bias = 0, + float range_scale = 0.001, + float range_bias = 0, + float range_max = 50, + float range_min = 0 + ) = 0; + + /** + * @brief Close UDP connection + */ + virtual bool closeUDP() = 0; + + /** + * @brief Try to parse a message from the serial buffer once. + * @note This is the main entrance of this class + * @return + * NONE if no valid message parsed. + * IMU if a new imu message is parsed. + * POINTCLOUD if a new cloud is cached. + */ + virtual MessageType runParse() = 0; + + /** + * @brief Reset lidar + */ + virtual void reset() = 0; + + /** + * @brief Get point cloud data + */ + virtual const PointCloudUnitree& getCloud() const = 0; + + /** + * @brief Get IMU data + */ + virtual const IMUUnitree& getIMU() const = 0; + + /** + * @brief Get Version of lidar firmware + */ + virtual std::string getVersionOfFirmware() const = 0; + + /** + * @brief Get the Version of Lidar SDK + */ + virtual std::string getVersionOfSDK() const = 0; + + /** + * @brief Get time delay of one-way data transmission in us. + */ + virtual uint32_t getTimeDelay() const = 0; + + /** + * @brief Get the removal percentage of points due to the dirt on the protection cover + * @return the percentage of removed dirty points + */ + virtual float getDirtyPercentage() const = 0; + + /** + * @brief Set the Lidar Working Mode + * @param mode + */ + virtual void setLidarWorkingMode(LidarWorkingMode mode) = 0; + + /** + * @brief Set LED display mode with each LED light on/off + * @param led_table 45 bytes represent the status of 360 LEDs bit by bit + */ + virtual void setLEDDisplayMode(uint8_t led_table[45]) = 0; + + /** + * @brief Ser LEF display mode with default pattern + * @param mode + * LED_RING_FUN_FORWARD_SLOW_MODE=2, Function mode forward at slow. + * LED_RING_FUN_FORWARD_FAST_MODE=3, Function mode forward at fast. + * LED_RING_FUN_REVERSE_SLOW_MODE=4, Function mode reverse at slow. + * LED_RING_FUN_REVERSE_FAST_MODE=5, Function mode reverse at fast. + * LED_RING_FUN_TRIPLE_FLIP_MODE=6, Function mode triple flip. + * LED_RING_FUN_TRIPLE_BREATHING_MODE=7, Function mode triple breathing. + * LED_RING_FUN_SIXSTAGE_BREATHING_MODE=8, Function mode six-stage breathing. + */ + virtual void setLEDDisplayMode(LEDDisplayMode mode) = 0; + + /** + * @brief Print configuration parameters + */ + virtual void printConfig() = 0; +}; + + +/** + * @brief Create a Unitree Lidar Reader object + * @return UnitreeLidarReader* + */ +UnitreeLidarReader* createUnitreeLidarReader(); + +} // end of namespace unitree_lidar_sdk \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/unitree_lidar_sdk_config.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/unitree_lidar_sdk_config.h new file mode 100644 index 0000000..e0f2e6f --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/unitree_lidar_sdk_config.h @@ -0,0 +1,4 @@ +#define unitree_lidar_sdk_VERSION "1.0.16" +#define unitree_lidar_sdk_VERSION_MAJOR 1 +#define unitree_lidar_sdk_VERSION_MINOR 0 +#define unitree_lidar_sdk_VERSION_PATCH 16 diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/unitree_lidar_sdk_pcl.h b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/unitree_lidar_sdk_pcl.h new file mode 100644 index 0000000..f6c3592 --- /dev/null +++ b/src/Robot/unilidar_sdk/unitree_lidar_sdk/include/unitree_lidar_sdk_pcl.h @@ -0,0 +1,86 @@ +/********************************************************************** + Copyright (c) 2020-2023, Unitree Robotics.Co.Ltd. All rights reserved. +***********************************************************************/ + +#pragma once + +#ifndef PCL_NO_PRECOMPILE +#define PCL_NO_PRECOMPILE +#endif + +// PCL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +// Eigen +#include +#include + +#include "unitree_lidar_sdk.h" + +using namespace unitree_lidar_sdk; + +/** + * @brief PCL Point Type + */ +struct PointType +{ + PCL_ADD_POINT4D + PCL_ADD_INTENSITY + std::uint16_t ring; + float time; + EIGEN_MAKE_ALIGNED_OPERATOR_NEW +} EIGEN_ALIGN16; +POINT_CLOUD_REGISTER_POINT_STRUCT(PointType, + (float, x, x)(float, y, y)(float, z, z) + (float, intensity, intensity) + (std::uint16_t, ring, ring) + (float, time, time) +) + +PCL_INSTANTIATE(VoxelGrid, PointType) +PCL_INSTANTIATE(KdTree, PointType) +PCL_INSTANTIATE(RadiusOutlierRemoval, PointType) + +/** + * @brief Transform a Unitree cloud to PCL cloud + * + * @param cloudIn + * @param cloudOut + */ +void transformUnitreeCloudToPCL(const PointCloudUnitree& cloudIn, pcl::PointCloud::Ptr cloudOut){ + cloudOut->clear(); + PointType pt; + for (size_t i = 0; i < cloudIn.points.size(); i ++){ + pt.x = cloudIn.points[i].x; + pt.y = cloudIn.points[i].y; + pt.z = cloudIn.points[i].z; + pt.intensity = cloudIn.points[i].intensity; + pt.time = cloudIn.points[i].time; + pt.ring = cloudIn.points[i].ring; + cloudOut->push_back(pt); + } +} \ No newline at end of file diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/lib/aarch64/libunitree_lidar_sdk.a b/src/Robot/unilidar_sdk/unitree_lidar_sdk/lib/aarch64/libunitree_lidar_sdk.a new file mode 100644 index 0000000..207b54d Binary files /dev/null and b/src/Robot/unilidar_sdk/unitree_lidar_sdk/lib/aarch64/libunitree_lidar_sdk.a differ diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/lib/x86_64/libunitree_lidar_sdk.a b/src/Robot/unilidar_sdk/unitree_lidar_sdk/lib/x86_64/libunitree_lidar_sdk.a new file mode 100644 index 0000000..5cf766e Binary files /dev/null and b/src/Robot/unilidar_sdk/unitree_lidar_sdk/lib/x86_64/libunitree_lidar_sdk.a differ diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/win64/libgcc_s_seh-1.dll b/src/Robot/unilidar_sdk/unitree_lidar_sdk/win64/libgcc_s_seh-1.dll new file mode 100644 index 0000000..ff403c9 Binary files /dev/null and b/src/Robot/unilidar_sdk/unitree_lidar_sdk/win64/libgcc_s_seh-1.dll differ diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/win64/libstdc++-6.dll b/src/Robot/unilidar_sdk/unitree_lidar_sdk/win64/libstdc++-6.dll new file mode 100644 index 0000000..7bdd098 Binary files /dev/null and b/src/Robot/unilidar_sdk/unitree_lidar_sdk/win64/libstdc++-6.dll differ diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/win64/libwinpthread-1.dll b/src/Robot/unilidar_sdk/unitree_lidar_sdk/win64/libwinpthread-1.dll new file mode 100644 index 0000000..7bfba0e Binary files /dev/null and b/src/Robot/unilidar_sdk/unitree_lidar_sdk/win64/libwinpthread-1.dll differ diff --git a/src/Robot/unilidar_sdk/unitree_lidar_sdk/win64/unitree_lidar_sdk-1.0.10-win64.exe b/src/Robot/unilidar_sdk/unitree_lidar_sdk/win64/unitree_lidar_sdk-1.0.10-win64.exe new file mode 100644 index 0000000..0387d63 Binary files /dev/null and b/src/Robot/unilidar_sdk/unitree_lidar_sdk/win64/unitree_lidar_sdk-1.0.10-win64.exe differ