diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..afd7a9b --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,58 @@ +name: ci + +on: + # Runs on pushes targeting the default branch + push: + branches: + - main + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Pages + uses: actions/configure-pages@v2 + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + - name: Install MkDocs and Material for MkDocs + run: pip install mkdocs mkdocs-material mkdocs-awesome-pages-plugin mkdocs-macros-plugin mkdocs-video + - name: Setup caching + uses: actions/cache@v3 + with: + key: ${{ github.sha }} + path: .cache + - name: Build site (_site directory name is used for Jekyll compatiblity) + run: mkdocs build --config-file ./mkdocs.yml --site-dir ./_site + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b3f075d --- /dev/null +++ b/.gitignore @@ -0,0 +1,132 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# macbook +.DS_Store \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..619acb1 --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ + + +# Pixkit Documentation + +- 该仓库包含了[MkDocs](https://www.mkdocs.org/)源文件,内容呈现在[挂载在github服务器上的页面](https://www.pixmoving.com). +- ** TBD ** \ No newline at end of file diff --git a/assets/images/pixmoving.png b/assets/images/pixmoving.png new file mode 100644 index 0000000..55fc0cd Binary files /dev/null and b/assets/images/pixmoving.png differ diff --git a/docs/.pages b/docs/.pages new file mode 100644 index 0000000..0279c79 --- /dev/null +++ b/docs/.pages @@ -0,0 +1,8 @@ +nav: + - 介绍: index.md + - 硬件安装 + - pix底盘使用手册 + - 传感器标定 + - 地图 + - Autoware上手 + - 支持 \ No newline at end of file diff --git "a/docs/Autoware\344\270\212\346\211\213/.pages" "b/docs/Autoware\344\270\212\346\211\213/.pages" new file mode 100644 index 0000000..757a754 --- /dev/null +++ "b/docs/Autoware\344\270\212\346\211\213/.pages" @@ -0,0 +1,9 @@ +nav: + - 启动autoware.md + - 多传感器融合定位.md + - 基于LiDAR的感知.md + - 车道内行驶.md + - 自动泊车.md + - 交通信号灯检测.md + - 轨迹跟踪.md + - 车辆接口.md \ No newline at end of file diff --git "a/docs/Autoware\344\270\212\346\211\213/images/base_on_path_coordinate_of_four_wheel_steering_model.png" "b/docs/Autoware\344\270\212\346\211\213/images/base_on_path_coordinate_of_four_wheel_steering_model.png" new file mode 100755 index 0000000..7307c34 Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/base_on_path_coordinate_of_four_wheel_steering_model.png" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/costmap_generator_1.jpg" "b/docs/Autoware\344\270\212\346\211\213/images/costmap_generator_1.jpg" new file mode 100644 index 0000000..eeb7499 Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/costmap_generator_1.jpg" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/costmap_generator_2.png" "b/docs/Autoware\344\270\212\346\211\213/images/costmap_generator_2.png" new file mode 100644 index 0000000..6eecf63 Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/costmap_generator_2.png" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/costmap_generator_3.png" "b/docs/Autoware\344\270\212\346\211\213/images/costmap_generator_3.png" new file mode 100644 index 0000000..01f0beb Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/costmap_generator_3.png" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/four-wheel-steering-model.png" "b/docs/Autoware\344\270\212\346\211\213/images/four-wheel-steering-model.png" new file mode 100644 index 0000000..fb4c116 Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/four-wheel-steering-model.png" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/lane_driving.png" "b/docs/Autoware\344\270\212\346\211\213/images/lane_driving.png" new file mode 100644 index 0000000..bd67648 Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/lane_driving.png" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/lane_driving_click_auto_button.gif" "b/docs/Autoware\344\270\212\346\211\213/images/lane_driving_click_auto_button.gif" new file mode 100644 index 0000000..593fdd2 Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/lane_driving_click_auto_button.gif" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/lane_driving_select_init_goal_pose.gif" "b/docs/Autoware\344\270\212\346\211\213/images/lane_driving_select_init_goal_pose.gif" new file mode 100644 index 0000000..8999e26 Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/lane_driving_select_init_goal_pose.gif" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/lane_driving_select_init_goal_pose_failed_opposite_direction.gif" "b/docs/Autoware\344\270\212\346\211\213/images/lane_driving_select_init_goal_pose_failed_opposite_direction.gif" new file mode 100644 index 0000000..12d1173 Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/lane_driving_select_init_goal_pose_failed_opposite_direction.gif" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/lane_driving_set_obstacle.png" "b/docs/Autoware\344\270\212\346\211\213/images/lane_driving_set_obstacle.png" new file mode 100644 index 0000000..9f5a7ed Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/lane_driving_set_obstacle.png" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/lane_driving_set_obstcle.gif" "b/docs/Autoware\344\270\212\346\211\213/images/lane_driving_set_obstcle.gif" new file mode 100644 index 0000000..8d8ae3b Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/lane_driving_set_obstcle.gif" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/lane_driving_startup_planning_simulator.gif" "b/docs/Autoware\344\270\212\346\211\213/images/lane_driving_startup_planning_simulator.gif" new file mode 100644 index 0000000..b3e9831 Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/lane_driving_startup_planning_simulator.gif" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/launch.png" "b/docs/Autoware\344\270\212\346\211\213/images/launch.png" new file mode 100644 index 0000000..8380f9d Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/launch.png" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/lidar_based_perception_1.jpg" "b/docs/Autoware\344\270\212\346\211\213/images/lidar_based_perception_1.jpg" new file mode 100644 index 0000000..fe2da36 Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/lidar_based_perception_1.jpg" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/lidar_based_perception_2.png" "b/docs/Autoware\344\270\212\346\211\213/images/lidar_based_perception_2.png" new file mode 100644 index 0000000..b43678d Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/lidar_based_perception_2.png" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/lidar_based_perception_3.png" "b/docs/Autoware\344\270\212\346\211\213/images/lidar_based_perception_3.png" new file mode 100644 index 0000000..7ae11ba Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/lidar_based_perception_3.png" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/lidar_based_perception_4.png" "b/docs/Autoware\344\270\212\346\211\213/images/lidar_based_perception_4.png" new file mode 100644 index 0000000..d62f17d Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/lidar_based_perception_4.png" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/localization_demo.gif" "b/docs/Autoware\344\270\212\346\211\213/images/localization_demo.gif" new file mode 100644 index 0000000..8af1d3f Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/localization_demo.gif" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/multi_sensor_localization.jpg" "b/docs/Autoware\344\270\212\346\211\213/images/multi_sensor_localization.jpg" new file mode 100644 index 0000000..042369e Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/multi_sensor_localization.jpg" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/parking_architecture.jpg" "b/docs/Autoware\344\270\212\346\211\213/images/parking_architecture.jpg" new file mode 100644 index 0000000..a12709e Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/parking_architecture.jpg" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/pix_chassis_interface_design.jpg" "b/docs/Autoware\344\270\212\346\211\213/images/pix_chassis_interface_design.jpg" new file mode 100644 index 0000000..712abf4 Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/pix_chassis_interface_design.jpg" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/tf_tree.png" "b/docs/Autoware\344\270\212\346\211\213/images/tf_tree.png" new file mode 100644 index 0000000..bad1ff7 Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/tf_tree.png" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/trafficlight_detection_1.jpg" "b/docs/Autoware\344\270\212\346\211\213/images/trafficlight_detection_1.jpg" new file mode 100644 index 0000000..44e5ac9 Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/trafficlight_detection_1.jpg" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/trafficlight_detection_2.jpg" "b/docs/Autoware\344\270\212\346\211\213/images/trafficlight_detection_2.jpg" new file mode 100644 index 0000000..4fea381 Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/trafficlight_detection_2.jpg" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/trafficlight_detection_3.jpg" "b/docs/Autoware\344\270\212\346\211\213/images/trafficlight_detection_3.jpg" new file mode 100644 index 0000000..fb7436c Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/trafficlight_detection_3.jpg" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/trafficlight_detection_4.jpg" "b/docs/Autoware\344\270\212\346\211\213/images/trafficlight_detection_4.jpg" new file mode 100644 index 0000000..17320ed Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/trafficlight_detection_4.jpg" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/images/vehicle_model.png" "b/docs/Autoware\344\270\212\346\211\213/images/vehicle_model.png" new file mode 100644 index 0000000..e21371b Binary files /dev/null and "b/docs/Autoware\344\270\212\346\211\213/images/vehicle_model.png" differ diff --git "a/docs/Autoware\344\270\212\346\211\213/\344\272\244\351\200\232\344\277\241\345\217\267\347\201\257\346\243\200\346\265\213.md" "b/docs/Autoware\344\270\212\346\211\213/\344\272\244\351\200\232\344\277\241\345\217\267\347\201\257\346\243\200\346\265\213.md" new file mode 100644 index 0000000..1b5e069 --- /dev/null +++ "b/docs/Autoware\344\270\212\346\211\213/\344\272\244\351\200\232\344\277\241\345\217\267\347\201\257\346\243\200\346\265\213.md" @@ -0,0 +1,34 @@ +# 交通信号灯检测 + +## Overview +![trafficlight_1](./images/trafficlight_detection_1.jpg) + +1. 通过[traffic light map based detector](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/traffic_light_map_based_detector)、[摄像头内参](../%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A0%87%E5%AE%9A/camera%E5%86%85%E5%8F%82%E6%A0%87%E5%AE%9A.md)、[摄像头外参](../%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A0%87%E5%AE%9A/LiDAR-camera%E6%A0%87%E5%AE%9A.md)、[矢量地图](../%E5%9C%B0%E5%9B%BE/lanelet2%E5%9C%B0%E5%9B%BE.md)获取当前道路的交通信号灯的粗ROI +2. 基于粗ROI,通过[traffic light SSD fine detector](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/traffic_light_ssd_fine_detector)获取精细ROI +3. 基于精细ROI,通过[traffic light classifier](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/traffic_light_classifier)对交通信号灯进行分类 +4. 交通信号灯分类结果返回给Planning模块中的[behavior velocity planner](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/behavior_velocity_planner),来对轨迹速度进行修改 + +## How To Use +### 绘制Lanelet2地图 +需要在Lanelet2地图中绘制`lanelet`,还有其参考的`traffic_light`,绘制方法参考[lanelet2地图](../%E5%9C%B0%E5%9B%BE/lanelet2%E5%9C%B0%E5%9B%BE.md) + +### 标定摄像头内参与外参 +1. 内参标定,参考[camera内参标定](../%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A0%87%E5%AE%9A/camera%E5%86%85%E5%8F%82%E6%A0%87%E5%AE%9A.md),将内参保存在`~/pix/pix-kit/Autoware/src/sensor_kit/external/pixkit_sensor_kit_launch/data/camera_info.yaml`中 +2. 外参标定,参考[LiDAR-Camera外参标定](../%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A0%87%E5%AE%9A/LiDAR-camera%E6%A0%87%E5%AE%9A.md),将外参保存在`~/pix/pix-kit/Autoware/src/param/autoware_individual_params/individual_params/config/default/pixkit_sensor_kit/sensors_calibration.yaml`中 + +### 设置Goal Pose +设置Goal Pose以生成`LaneletRoute`,可以看到下图中有一根绿色线段连接`traffic light`与车辆 +![trafficlight_detection_2](./images/trafficlight_detection_2.jpg) + +### 检测交通信号灯 +- 当检测到红灯信号后,在停止线后的轨迹变成红色,表明车辆会停在停止线前 +![trafficlight_detection_3](./images/trafficlight_detection_3.jpg) +- 当检测到绿灯信号后,停止线后的轨迹变为黄色或者绿色,表明车辆越过停止线、通过有信号灯的路口 +![trafficlight_detection_4](./images/trafficlight_detection_4.jpg) + +## 参考资料 +- [traffic light map based detector](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/traffic_light_map_based_detector) +- [traffic light SSD fine detector](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/traffic_light_ssd_fine_detector) +- [traffic light classifier](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/traffic_light_classifier) +- [behavior velocity planner](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/behavior_velocity_planner) +- [design of planning in Autoware](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/) \ No newline at end of file diff --git "a/docs/Autoware\344\270\212\346\211\213/\345\220\257\345\212\250autoware.md" "b/docs/Autoware\344\270\212\346\211\213/\345\220\257\345\212\250autoware.md" new file mode 100644 index 0000000..f35ef10 --- /dev/null +++ "b/docs/Autoware\344\270\212\346\211\213/\345\220\257\345\212\250autoware.md" @@ -0,0 +1,72 @@ +# 启动Autoware + +Autoware分为模拟与实车运行两个部分,模拟运行请参考[Autoware Simulator Tutorials](https://autowarefoundation.github.io/autoware-documentation/main/tutorials/),如需实车运行,请参考以下操作 +## launch文件及参数配置 +可以使用以下命令来启动Autoware +``` shell +ros2 launch autoware_launch autoware.launch.xml \ +map_path:=$HOME/autoware_map/factory_20230325 \ +vehicle_model:=pixkit \ +sensor_model:=pixkit_sensor_kit +``` +以上命令可分为以下5个部分 + +- `autoware_launch` launch文件所在的package +- `autoware.launch.xml` launch文件 +- `map_path` 地图的地址参数,包含点云地图与矢量地图,地图制作方式参考[地图](../%E5%9C%B0%E5%9B%BE/index.md) +- `vehicle_model` 车辆模型参数,会根据参数来选取相应的车辆[urdf模型](https://docs.ros.org/en/humble/Tutorials/Intermediate/URDF/URDF-Main.html)与[autoware的接口](https://github.com/pixmoving-moveit/pix_driver),参考[pixkit_launch](https://github.com/pixmoving-moveit/pixkit_launch) +- `sensor_model` 传感器模型参数,会根据参数来选取相应的传感器[urdf模型](https://docs.ros.org/en/humble/Tutorials/Intermediate/URDF/URDF-Main.html)与传感器驱动,参考[pixkit_sensor_kit_launch](https://github.com/pixmoving-moveit/pixkit_sensor_kit_launch) + +## 启动界面 +以上命令正常运行后,会出现[rviz2](https://github.com/ros2/rviz)窗口 +![pix](./images/launch.png) +在可视化窗口内能够看到导入的底盘模型及点云地图与矢量地图 +## 启动成功验证 +- [验证地图是否导入](#验证地图是否导入) +- [验证车辆模型是否启动](#验证车辆模型是否导入) +- [验证传感器是否正常启动](#验证传感器是否正常启动) +### 验证地图是否导入 +可通过以下方法查看是否有地图导入 +- 可直接观察rviz中是否有点云地图与矢量地图 +- 通过[ros2 cli](https://docs.ros.org/en/foxy/Tutorials/Beginner-CLI-Tools.html)查看是否有地图数据发布,如有数据输出则表明明地图导入正常,命令如下 +``` bash +ros2 top echo [topic name] +``` + +| **Topic** | **类型** | **描述** | +|------| ------ | ------ | +| /map/pointcloud_map | sensor_msgs/msg/PointCloud2 | 点云地图 | +| /map/vector_map | autoware_auto_mapping_msgs/msg/HADMapBin | 矢量地图(lanelet2格式) | + +### 验证车辆模型是否导入 +1. 观察rviz可视化窗口中是否有车辆模型,如下图所示 +![vehicle_model](./images/vehicle_model.png) +2. 查看底盘反馈是否正常,底盘反馈的topic见下表,通过[ros2 cli](https://docs.ros.org/en/foxy/Tutorials/Beginner-CLI-Tools.html)查看底盘是否通信正常,命令如下 +``` bash +ros2 top echo [topic name] +``` + +| **Topic** | **类型** | **描述** | +| ------ | ------ | ----------- | +| /vehicle/status/control_mode | autoware_auto_vehicle_msgs::msg::ControlModeReport | 底盘控制模式反馈 | +| /vehicle/status/velocity_status | autoware_auto_vehicle_msgs::msg::VelocityReport | 底盘速度反馈 | +| /vehicle/status/steering_status | autoware_auto_vehicle_msgs::msg::SteeringReport | 底盘转向反馈 | +| /vehicle/status/gear_status | autoware_auto_vehicle_msgs::msg::GearReport | 底盘档位反馈 | +| /vehicle/status/turn_indicators_status | autoware_auto_vehicle_msgs::msg::TurnIndicatorsReport | 底盘转向灯反馈 | +| /vehicle/status/hazard_lights_status | autoware_auto_vehicle_msgs::msg::HazardLightsReport | 底盘应急灯状态反馈 | + +### 验证传感器是否正常启动 +1. 通过[ros2 cli](https://docs.ros.org/en/foxy/Tutorials/Beginner-CLI-Tools.html)查看是否有传感器数据发布,如果有数据发布则表明传感器启动正常,命令如下 +``` bash +ros2 top echo [topic name] +``` + +| **Topic** | **类型** | **描述** | +| ------ | ------ | ----------- | +| /sensing/lidar/top/outlier_filtered/pointcloud | sensor_msgs/msg/PointCloud2 | LiDAR数据 | +| /sensing/imu/imu_data | sensor_msgs/msg/Imu | IMU数据 | + + +## 注意事项 + +- 启动前需要确保地图文件存在,如map_path指定的文件夹不存在或文件不存在会导致启动失败 \ No newline at end of file diff --git "a/docs/Autoware\344\270\212\346\211\213/\345\237\272\344\272\216LiDAR\347\232\204\346\204\237\347\237\245.md" "b/docs/Autoware\344\270\212\346\211\213/\345\237\272\344\272\216LiDAR\347\232\204\346\204\237\347\237\245.md" new file mode 100644 index 0000000..c3fac3b --- /dev/null +++ "b/docs/Autoware\344\270\212\346\211\213/\345\237\272\344\272\216LiDAR\347\232\204\346\204\237\347\237\245.md" @@ -0,0 +1,85 @@ +# 基于LiDAR的感知 + +## Overview +![lidar_based_perception_1](./images/lidar_based_perception_1.jpg) + +1. LiDAR的点云被[LiDAR CenterPoint](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/lidar_centerpoint)接收,进行点云目标检测,获取目标的分类、位置、尺寸信息,输出[DetectedObjects](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_perception_msgs/msg/DetectedObjects.idl) +2. [Multi Object Tracker](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/multi_object_tracker)接收到[DetectedObjects](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_perception_msgs/msg/DetectedObjects.idl),目标进行追踪,获取目标的分类、位置、尺寸、速度、加速度信息,输出[TrackedObjects](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_perception_msgs/msg/TrackedObjects.idl) +3. [Map Based Prediction](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/map_based_prediction)接收[TrackedObjects](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_perception_msgs/msg/TrackedObjects.idl),通过[地图信息](../地图/lanelet2%E5%9C%B0%E5%9B%BE.md)对轨迹进行预测,输出[PredictedObjects](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_perception_msgs/msg/PredictedObjects.idl) + +## How To Use + +### 启动感知 +[启动Autoware](./%E5%90%AF%E5%8A%A8autoware.md) + +### LiDAR CenterPoint +![lidar_based_perception_2](./images/lidar_based_perception_2.png) + +通过[CenterPoint](https://github.com/tianweiy/CenterPoint)对点云进行检测,可以看到蓝色框中的`CAR`物体 + +#### 输入Topic的 +|**topic**|**类型**|**描述**| +|---------|-------|--------| +|/sensing/lidar/concatenated/pointcloud|sensor_msgs/msg/PointCloud2|实时点云数据| + +#### 输出Topic的 +|**topic**|**类型**|**描述**| +|---------|-------|--------| +|/perception/object_recognition/detection/centerpoint/objects|[autoware_auto_perception_msgs/msg/DetectedObjects](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_perception_msgs/msg/DetectedObjects.idl)|检测到的objects| + + +### Multi Object Tracker +![lidar_based_perception_3](./images/lidar_based_perception_3.png) +通过`Data Association`与`EKF Tracker`对objects进行多帧目标关联,EKF进行追踪,追踪到的物体被赋予了一个`uuid`,运行的速度通过图中的红线进行可视化 + +#### Data Association +将多帧感知结果的数据连接,转换为`Min Cost Max Flow问题`,通过[mussp](https://github.com/yu-lab-vt/muSSP)来进行求解,获取多帧感知结果之间的关系 +#### EKF Tracker +通过不同的分类选择不同的模型来对感知结果进行追踪,提高追踪的稳定性与精度 + +#### 输入Topic的 +|**topic**|**类型**|**描述**| +|---------|-------|--------| +|/perception/object_recognition/detection/centerpoint/objects|[autoware_auto_perception_msgs::msg::DetectedObjects](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_perception_msgs/msg/DetectedObjects.idl)|检测到的objects| + +#### 输出Topic的 +|**topic**|**类型**|**描述**| +|---------|-------|--------| +|/perception/object_recognition/tracking/objects|[autoware_auto_perception_msgs/msg/TrackedObjects](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_perception_msgs/msg/TrackedObjects.idl)|追踪到的object| + +### Map Based Prediction +![lidar_based_perception_4](./images/lidar_based_perception_4.png) +根据地图和追踪到的物体进行物体未来轨迹的预测,提高[路径规划](./%E5%9F%BA%E4%BA%8Elanelet2%E5%9C%B0%E5%9B%BE%E7%9A%84%E5%85%A8%E5%B1%80%E8%B7%AF%E5%BE%84%E8%A7%84%E5%88%92.md)的安全性和稳定性。 + +#### 移除老的object数据 + +储存障碍物的时间序列数据,包括障碍物的位置、速度、还有时间信息,来预测一定时间内物体是否需要变道 + +#### 获取当前的车道并且更新object数据 + +检测车辆是否需要变道、是向左变道还是向右变道 + +#### 生成object预测的参考轨迹 + +根据object是否需要变道、向左变道还是向右变道,再基于地图,生成object的预测参考轨迹 + +#### 输入Topic的 +|**topic**|**类型**|**描述**| +|---------|-------|--------| +|/perception/object_recognition/tracking/objects|[autoware_auto_perception_msgs/msg/TrackedObjects](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_perception_msgs/msg/TrackedObjects.idl)|追踪到的object| +|/map/vector_map|autoware_auto_mapping_msgs/msg/HADMapBin|矢量地图(lanelet2)| + +#### 输出Topic的 +|**topic**|**类型**|**描述**| +|---------|-------|--------| +|/perception/object_recognition/objects|[autoware_auto_perception_msgs::msg::PredictedObjects](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_perception_msgs/msg/PredictedObjects.idl)|有预测轨迹的objects| + +## 参考资料 + +- [autoware_auto_perception_msgs](https://github.com/tier4/autoware_auto_msgs/tree/tier4/main/autoware_auto_perception_msgs/msg) +- [lidar centerpoint in Autoware](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/lidar_centerpoint) +- [CenterPoint](https://github.com/tianweiy/CenterPoint) +- [multi object tracker in Autoware](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/multi_object_tracker) +- [muSSP](https://github.com/yu-lab-vt/muSSP) +- [map based prediction](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/map_based_prediction) + diff --git "a/docs/Autoware\344\270\212\346\211\213/\345\237\272\344\272\216lanelet2\345\234\260\345\233\276\347\232\204\345\205\250\345\261\200\350\267\257\345\276\204\350\247\204\345\210\222.md" "b/docs/Autoware\344\270\212\346\211\213/\345\237\272\344\272\216lanelet2\345\234\260\345\233\276\347\232\204\345\205\250\345\261\200\350\267\257\345\276\204\350\247\204\345\210\222.md" new file mode 100644 index 0000000..72dd36b --- /dev/null +++ "b/docs/Autoware\344\270\212\346\211\213/\345\237\272\344\272\216lanelet2\345\234\260\345\233\276\347\232\204\345\205\250\345\261\200\350\267\257\345\276\204\350\247\204\345\210\222.md" @@ -0,0 +1 @@ +# 基于lanelet2地图的全局路径规划 \ No newline at end of file diff --git "a/docs/Autoware\344\270\212\346\211\213/\345\244\232\344\274\240\346\204\237\345\231\250\350\236\215\345\220\210\345\256\232\344\275\215.md" "b/docs/Autoware\344\270\212\346\211\213/\345\244\232\344\274\240\346\204\237\345\231\250\350\236\215\345\220\210\345\256\232\344\275\215.md" new file mode 100644 index 0000000..74f1ef8 --- /dev/null +++ "b/docs/Autoware\344\270\212\346\211\213/\345\244\232\344\274\240\346\204\237\345\231\250\350\236\215\345\220\210\345\256\232\344\275\215.md" @@ -0,0 +1,29 @@ +# 多传感器融合定位 + +## Overview +![multi_sensor_localization](./images/multi_sensor_localization.jpg) + +1. 需要将底盘反馈轮速与IMU的角速度融合,输出`base_link`坐标系下的`TwistWithCovarianceStamped` +2. 使用点云地图与LiDAR点云进行匹配,输出`map`坐标系下的`PoseWithCovarianceStamped` +3. 将融合后的`TwistWithCovarianceStamped`与点云地图的`PoseWithCovarianceStamped`作为输入,通过EKF进行滤波,获得高频与平滑的定位信息 +4. 将融合后的`PoseWithCovarianceStamped`作为点云匹配的初始值 + +## 输入数据 +|**topic**|**类型**|**描述**| +|-------------------|---------------------------|---------------------| +|/map/pointcloud_map|sensor_msgs/msg/PointCloud2|点云地图| +|/localization/util/downsample/pointcloud|sensor_msgs/msg/PointCloud2|降采样实时点云| +|/sensing/vehicle_velocity_converter/twist_with_covariance|geometry_msgs/msg/TwistCovarianceStamped|底盘轮速反馈,提供线速度| +|/sensing/imu/imu_data|sensor_msgs/msg/Imu|Imu数据,提供角速度| + +## 输出数据 +|**topic**|**类型**|**描述**| +|-------------------|---------------------------|---------------------| +|/localization/kinematic_state|nav_msgs/msg/Odometry|融合后Odometry数据| +|/localization/pose_with_covariance/geometry_msgs/msg/PoseWithConvarianceStamped|融合后的pose数据| + +## 融合定位demo +![localization_demo](./images/localization_demo.gif) + +## 参考资料 +[https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/localization/](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/localization/) \ No newline at end of file diff --git "a/docs/Autoware\344\270\212\346\211\213/\350\207\252\345\212\250\346\263\212\350\275\246.md" "b/docs/Autoware\344\270\212\346\211\213/\350\207\252\345\212\250\346\263\212\350\275\246.md" new file mode 100644 index 0000000..a0a8270 --- /dev/null +++ "b/docs/Autoware\344\270\212\346\211\213/\350\207\252\345\212\250\346\263\212\350\275\246.md" @@ -0,0 +1,75 @@ +# 自动泊车 + +## Overview +![parking_architecture](./images/parking_architecture.jpg) + +### How TO Use + +1. 需要准备lanelet2地图,在地图中绘制`parking_lot`的`polygon`,绘制lanelet2地图参考[lanelet2地图](../%E5%9C%B0%E5%9B%BE/lanelet2%E5%9C%B0%E5%9B%BE.md) +2. 当车辆位置在`parking_lot`内时,规划器将`scenario`切换至`Parking`模式,这时`costmap_generator`和`freespace_planner`开始工作 +3. `costmap_generator`生成`occupancy_grid`作为`freespace_planner`的代价地图 +4. `freespace_planner`通过代价图来进行路径搜索与规划 +5. `trajectory`最终传递到[轨迹跟踪模块](./%E8%BD%A8%E8%BF%B9%E8%B7%9F%E8%B8%AA.md)生成控制指令 + +## Costmap Generator +如下图所示,车辆在`parking_lot`(蓝色框内淡黄色多边形)区域内,设定好`goal_pose`(绿色框内坐标轴),其中还有`objects`(红色框)。 +![costmap_generator_1](./images/costmap_generator_1.jpg) + +在`parking_lot`内设定好目标后,可以可视化`occupancy_grip`代价地图,可行驶区域代价较小,为灰色,被障碍物占用的区域代价较高,为黑色。可以看到,与`parking_lot`有重叠部分的`lanelet`也被考虑进`occupancy_grip`的计算中,这是因为车辆执行自动驾驶任务时,可能会经过[lane_driving的车道内行驶](./%E8%BD%A6%E9%81%93%E5%86%85%E8%A1%8C%E9%A9%B6.md)才能到达`parking_lot`,为避免地图中间的空隙,所以需要将`lanelet`与`parking_lot`通过重叠的方式连接。 +![costmap_generator_3](./images/costmap_generator_3.png) + +### 关键参数 + +|**名称**|**描述**|**默认值**| +|-------|-------|----------| +|grid_min_value|costmap的损失最小值|0.0| +|grid_max_value|costmap的损失最大值|1.0| +|grid_resolution|costmap的分辨率|0.2(m)| +|grid_length_x|costmap的长|70.0(m)| +|grid_length_y|costmap的宽|70.0(m)| +|grid_position_x|costmap的初始位置x坐标(相对车辆)|0.0(m)| +|grid_position_y|costmap的初始位置y坐标(相对车辆)|0.0(m)| +|maximum_lidar_height_thres|点云相对激光雷达的最大高度|0.3(m)| +|minimum_lidar_height_thres|点云相对激光雷达的最小高度|-2.2(m)| +|expand_rectangle_size|拓展object的尺寸大小|1.0(m)| + +## Freespace Planner +获取到车辆位置`initial_pose`与`goal_pose`,通过[A*](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/freespace_planning_algorithms)规划出一条可行的轨迹,让车辆能够到达`goal_pose`。 + +因为`freespace planner`有可能会产生揉车的重叠轨迹,[控制器](./%E8%BD%A8%E8%BF%B9%E8%B7%9F%E8%B8%AA.md)不能够处理这种轨迹,所以`freespace planner`将揉车轨迹进行分段处理,保证`控制器`的正常运行。 +![costmap_generator_2](./images/costmap_generator_2.png) + +### 关键参数 +#### 节点参数 + +| 参数名称 | 描述 | 默认值 | +| ---------------------------- | ------------------------------| --------- | +| `vehicle_shape_margin_m` | 碰撞边界 | | +| `waypoints_velocity` | 规划的轨迹线速度 | 5.0(km/h) | +| `th_arrived_distance_m` | 判断是否到达终点的阈值 | 1.0(m) | +| `th_stopped_time_sec` | 判断车辆是否停止的判定时间 | 1.0(s) | +| `th_stopped_velocity_mps` | 判断车辆是否停止的速度阈值 | 0.01(m/s) | +| `th_course_out_distance_m` | 判断车辆是否偏离轨迹的距离阈值 | 1.0(m) | +| `replan_when_obstacle_found` | 当有障碍物在轨迹上是否重新规划轨迹 | true | +| `replan_when_course_out` | 当车辆偏离轨迹是否重新规划任务 | true | + +#### planner参数 + +| 参数名称 | 描述 | 默认值 | +| ------------------------- | -------------------------- | ---------- | +| `time_limit` | 规划运行的时间,避免规划器阻塞 | 30000.0(s) | +| `minimum_turning_radius` | 机器人最小转弯半径 |9.0(m) | +| `maximum_turning_radius` | 机器人最大转弯半径 |9.0(m) | +| `theta_size` | 将航向角离散化的数量 |144 | +| `lateral_goal_range` | 目标位置的横向距离范围 | 0.5 | +| `longitudinal_goal_range` | 目标位置的纵向距离范围 | 2.0 | +| `angle_goal_range` | 目标位置的偏航角范围 | 6.0(deg) | +| `curve_weight` | 轨迹曲线的损失权重 | 1.2 | +| `reverse_weight` | 反向轨迹的损失权重 | 2.0 | +| `obstacle_threshold` | 判定grid为障碍物的cost阈值 | 100 | + +## 参考资料 +- [planning design](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/) +- [costmap generator](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/costmap_generator) +- [freespace planner](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/freespace_planner) +- [freespace planner algorithm](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/freespace_planning_algorithms) diff --git "a/docs/Autoware\344\270\212\346\211\213/\350\275\246\350\276\206\346\216\245\345\217\243.md" "b/docs/Autoware\344\270\212\346\211\213/\350\275\246\350\276\206\346\216\245\345\217\243.md" new file mode 100644 index 0000000..ec18660 --- /dev/null +++ "b/docs/Autoware\344\270\212\346\211\213/\350\275\246\350\276\206\346\216\245\345\217\243.md" @@ -0,0 +1,341 @@ +# Pix底盘接口 + +## Overview + +[Pixmoving](https://www.pixmoving.com)的[线控](https://en.wikipedia.org/wiki/Drive_by_wire)底盘,具有自动驾驶接入能力. 我们已经设计了对接[Autoware.universe](https://github.com/autowarefoundation/autoware.universe)的接口。 + +### 注意 +> 源代码请参考[pix_driver](https://github.com/pixmoving-moveit/pix_driver) + +> 在你使用接口之前,请先确保[ros2_socketcan](https://github.com/autowarefoundation/ros2_socketcan/tree/1.1.0)在你的工作空间,并已经启动。 +## 角色 + +Pix底盘接口有以下3个主要功能: + +- **在CAN frames和pix_hooke_driver_msgs之间翻译** +- **将Autoware的控制指令换完成为pix_hooke_driver_msgs** +- **将pix_hooke_driver_msgs内的车辆状态转换为Autoware messages** + +## 软件设计 +![PixChassisInterfaceDesign](./images/pix_chassis_interface_design.jpg) + +## Control Command Node + +### 输入 + +#### **Control Command Node的输入** + +| Input | Topic(Data Type) | Explanation | +| --------------- | ------------------------------------------------------------------ | ----------- | +| autonomous driving to vehicle drive control| `/pix_hooke/a2v_drivectrl_130`
([pix_hooke_driver_msgs/msg/A2vDriveCtrl](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/A2vDriveCtrl.msg)) | [A2vDriveCtrl](#a2vdrivectrl) | +| autonomous driving to vehicle brake control|`/pix_hooke/a2v_brakectrl_131`
([pix_hooke_driver_msgs/msg/A2vBrakeCtrl](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/A2vBrakeCtrl.msg)) | [A2vBrakeCtrl](#a2vbrakectrl) | +| autonomous driving to vehicle steering control |`/pix_hooke/a2v_steerctrl_132`
([pix_hooke_driver_msgs/msg/A2vSteerCtrl](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/A2vSteerCtrl.msg)) | [A2vSteerCtrl](#a2vsteerctrl) | +| autonomous driving to vehicle control|`/pix_hooke/a2v_vehiclectrl_133`
([pix_hooke_driver_msgs/msg/A2vVehicleCtrl](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/A2vVehicleCtrl.msg)) | [A2vVehicleCtrl](#a2vvehiclectrl) | +| autonomous driving to vehicle motor control|`/pix_hooke/a2v_wheelctrl_135`
([pix_hooke_driver_msgs/msg/A2vWheelCtrl](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/A2vWheelCtrl.msg)) | [A2vWheelCtrl](#a2vwheelctrl) | + +#### A2vDriveCtrl +**下表为`A2vDriveCtrl(self-driving to vehicle drive control)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| acu_chassis_driver_en_ctrl | std_msgs/int8 | 使能/失能底盘纵向加速控制 `{0: 'ACU_CHASSISDRIVERENCTRL_DISABLE', 1: 'ACU_CHASSISDRIVERENCTRL_ENABLE'}` | +| acu_chassis_driver_mode_ctrl | std_msgs/int8 | 目标纵向控制模式 `{0: 'ACU_CHASSISDRIVERMODECTRL_SPEED_CTRL_MODE', 1: 'ACU_CHASSISDRIVERMODECTRL_THROTTLE_CTRL_MODE', 2: 'ACU_CHASSISDRIVERMODECTRL_RESERVE', 3: 'ACU_CHASSISDRIVERMODECTRL_RESERVE'}` | +| acu_chassis_gear_ctrl | std_msgs/int8 | 目标档位 `{0: 'ACU_CHASSISGEARCTRL_DEFAULT_N', 1: 'ACU_CHASSISGEARCTRL_D', 2: 'ACU_CHASSISGEARCTRL_N', 3: 'ACU_CHASSISGEARCTRL_R'}` | +| acu_chassis_speed_ctrl | std_msgs/float32 | 目标速度 [m/s] | +| acu_chassis_throttle_pdl_target | std_msgs/float32 | 目标加速踏板开度 `0.0-100.0` | + +#### A2vBrakeCtrl +**下表为`A2vBrakeCtrl(self-driving to vehicle brake control)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| acu_chassis_brake_en | std_msgs/int8 | 使能/失能底盘刹车控制 `0: 'ACU_CHASSISBRAKEEN_DISABLE', 1: 'ACU_CHASSISBRAKEEN_ENABLE'` | +| acu_chassis_aeb_ctrl | std_msgs/int8 | 使能/失能AEB `0: 'ACU_CHASSISAEBCTRL_DISABLE', 1: 'ACU_CHASSISAEBCTRL_ENABLE'`| +| acu_chassis_brake_pdl_target | std_msgs/float32 | 目标刹车踏板开度 `0.0-100.0`| +| acu_chassis_epb_ctrl | std_msgs/int8 |驻车控制 `0: 'ACU_CHASSISEPBCTRL_DEFAULT', 1: 'ACU_CHASSISEPBCTRL_BRAKE', 2: 'ACU_CHASSISEPBCTRL_RELEASE'`| + +#### A2vSteerCtrl +**下表为`A2vSteerCtrl(self-driving to vehicle steering control)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| acu_chassis_steer_en_ctrl | std_msgs/int8 | 使能/失能横向/转向控制 `{0: 'ACU_CHASSISSTEERENCTRL_DISABLE', 1: 'ACU_CHASSISSTEERENCTRL_ENABLE'}` | +| acu_chassis_steer_mode_ctrl | std_msgs/int8 | 转向模式 `{0: 'ACU_CHASSISSTEERMODECTRL_FRONT_ACKERMAN', 1: 'ACU_CHASSISSTEERMODECTRL_SAME_FRONT_AND_BACK', 2: 'ACU_CHASSISSTEERMODECTRL_FRONT_DIFFERENT_BACK', 3: 'ACU_CHASSISSTEERMODECTRL_BACK_ACKRMAN', 4: 'ACU_CHASSISSTEERMODECTRL_FRONT_BACK'}` | +| acu_chassis_steer_angle_target | std_msgs/int32 | 目标转向角, `-500-500 从左至右`。 当`ACU_ChassisSteerModeCtrl=ACU_CHASSISSTEERMODECTRL_FRONT_BACK`时, `ACU_ChassisSteerAngleTarget`智能控制前转向| +| acu_chassis_steer_angle_rear_target | std_msgs/int32 |后轮目标转向脚`-500-500`。 只有当`ACU_ChassisSteerModeCtrl=ACU_CHASSISSTEERMODECTRL_FRONT_BACK`起作用| +| acu_chassis_steer_angle_speed_ctrl | std_msgs/float32 |目标转向角速度`0-500` | + +#### A2vVehicleCtrl +**下表为`A2vVehicleCtrl(self-driving to vehicle Vehicle Control)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| acu_vehicle_pos_lamp_ctrl | std_msgs/int8 | 示廓灯控制 `{0: 'ACU_VEHICLEPOSLAMPCTRL_OFF', 1: 'ACU_VEHICLEPOSLAMPCTRL_ON'}`| +| acu_vehicle_head_lamp_ctrl | std_msgs/int8 | 头灯控制 `{0: 'ACU_VEHICLEHEADLAMPCTRL_OFF', 1: 'ACU_VEHICLEHEADLAMPCTRL_ON'}`| +| acu_vehicle_left_lamp_ctrl | std_msgs/int8 | 左转向灯控制 `{0: 'ACU_VEHICLELEFTLAMPCTRL_OFF', 1: 'ACU_VEHICLELEFTLAMPCTRL_ON'}`| +| acu_vehicle_right_lamp_ctrl | std_msgs/int8 | 右转向灯控制 `{0: 'ACU_VEHICLERIGHTLAMPCTRL_OFF', 1: 'ACU_VEHICLERIGHTLAMPCTRL_ON'}`| +| acu_vehicl_high_beam_ctrl | std_msgs/int8 | 前大灯控制 `{0: 'ACU_VEHICLEHIGHBEAMCTRL_OFF', 1: 'ACU_VEHICLEHIGHBEAMCTRL_ON'}`| +| acu_vehicle_fog_lamp_ctrl | std_msgs/int8 | 雾灯控制 `{0: 'ACU_VEHICLEFOGLAMPCTRL_OFF', 1: 'ACU_VEHICLEFOGLAMPCTRL_ON'}`| +| acu_vehicle_body_light_crtl| std_msgs/int8| 车体灯控制 `{0: 'ACU_VEHICLEBODYLIGHTCTRL_OFF', 1: 'ACU_VEHICLEBODYLIGHTCTRL_ON'}`| +| acu_vehicle_read_light_crtl| std_msgs/int8| 阅读灯控制(保留) `{0: 'ACU_VEHICLEREADLIGHTCTRL_OFF', 1: 'ACU_VEHICLEREADLIGHTCTRL_ON'}`| +| acu_vehicle_voice| std_msgs/int8| 车辆声音控制(保留) `{0: 'ACU_VEHICLEVOICE_OFF', 1: 'ACU_VEHICLEVOICE_TURN_LEFT', 2: 'ACU_VEHICLEVOICE_TURN_RIGHT', 3: 'ACU_VEHICLEVOICE_BACKWARD'}`| +| acu_vehicle_wipers_crtl | std_msgs/int8| 雨刮器控制(保留) `{0: 'ACU_VEHICLEWIPERSCTRL_OFF', 1: 'ACU_VEHICLEWIPERSCTRL_LOW', 2: 'ACU_VEHICLEWIPERSCTRL_MID', 3: 'ACU_VEHICLEWIPERSCTRL_HIGH'}`| +| acu_vehicle_door_crtl | std_msgs/int8| 车门控制(保留) `{0: 'ACU_VEHICLEDOORCTRL_DEFAULT', 1: 'ACU_VEHICLEDOORCTRL_CLOSE', 2: 'ACU_VEHICLEDOORCTRL_OPEN'}`| +| acu_vehicle_window_crtl| std_msgs/int8| 车窗控制(保留) `{0: 'ACU_VEHICLEWINDOWCTRL_DEFAULT', 1: 'ACU_VEHICLEWINDOWCTRL_CLOSE', 2: 'ACU_VEHICLEWINDOWCTRL_OPEN'}`| +| acu_chassis_speed_limite_mode | std_msgs/int8| 速度模式 `{0: 'ACU_CHASSISSPEEDLIMITEMODE_DEFAULT', 1: 'ACU_CHASSISSPEEDLIMITEMODE_LIMIT'}`| +| acu_chassis_speed_limite_val | std_msgs/int32| 限速控制 `m/s` | + +#### A2vWheelCtrl +**下表为`A2vWheelCtrl(self-driving to vehicle motor control)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| acu_motor_torque_lf_crtl | std_smgs/float32 | 左前电机扭矩控制 [Nm] `-200.0-200.0` | +| acu_motor_torque_rf_crtl | std_smgs/float32 | 右前点击扭矩控制 [Nm] `-200.0-200.0` | +| acu_motor_torque_lr_crtl | std_smgs/float32 | 左后点击扭矩控制 [Nm] `-200.0-200.0` | +| acu_motor_torque_rr_crtl | std_smgs/float32 | 右后点击扭矩控制 [Nm] `-200.0-200.0` | + + +### 输出 + +**`Control Command Node`输出[can_msgs/Frame](http://docs.ros.org/en/melodic/api/can_msgs/html/msg/Frame.html)至[Socket CAN Interface](https://github.com/autowarefoundation/ros2_socketcan/tree/1.1.0).** + + +| Output (to Socket CAN Interface) | Topic(Data Type) | Explanation | +| --------------- | ------------------------------------------------------------------ | ------------------------ | +| can frame | `/to_can_bus`
([can_msgs/msg/Frame](http://docs.ros.org/en/melodic/api/can_msgs/html/msg/Frame.html)) | CAN Frames控制信号 | + +## Report Parser Node +### 输入 +**`Report Parser Node`的输入是来自[Socket CAN Interface](https://github.com/autowarefoundation/ros2_socketcan/tree/1.1.0)的[can_msgs/Frame](http://docs.ros.org/en/melodic/api/can_msgs/html/msg/Frame.html)** + + +| Input (From Socket CAN Interface) | Topic(Data Type) | Explanation | +| --------------- | ------------------------------------------------------------------ | ------------------------ | +| can frame | `/from_can_bus`
([can_msgs/msg/Frame](http://docs.ros.org/en/melodic/api/can_msgs/html/msg/Frame.html)) | CAN Frames的反馈信号 | + +### 输出 + +**Report Parser Node的输出** + +| Input | Topic(Data Type) | Explanation | +| --------------- | ------------------------------------------------------------------ | ----------- | +| 车辆发送到自动驾驶的驾驶反馈 | `/pix_hooke/v2a_drivestafb`
([pix_hooke_driver_msgs/msg/V2aDriveStaFb](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/V2aDriveStaFb.msg)) | [V2aDriveStaFb](#v2adrivestafb) | +| 车辆发送到自动驾驶的刹车状态反馈 |`/pix_hooke/v2a_brakestafb`
([pix_hooke_driver_msgs/msg/V2aBrakeStaFb](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/V2aBrakeStaFb.msg)) | [V2aBrakeStaFb](#v2abrakestafb) | +| 车辆发送到自动驾驶的转向状态反馈 |`/pix_hooke/v2a_steerstafb`
([pix_hooke_driver_msgs/msg/V2aSteerStaFb](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/V2aSteerStaFb.msg)) | [V2aSteerStaFb](#v2asteerstafb) | +| 车辆发送到自动驾驶的车辆工作状态反馈 |`/pix_hooke/v2a_vehicleworkstafb`
([pix_hooke_driver_msgs/msg/V2aVehicleWorkStaFb](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/V2aVehicleWorkStaFb.msg)) | [V2aVehicleWorkStaFb](#v2avehicleworkstafb) | +| 车辆发送到自动驾驶的电池状态反馈 |`/pix_hooke/v2a_powerstafb`
([pix_hooke_driver_msgs/msg/V2aPowerStaFb](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/V2aPowerStaFb.msg)) | [V2aPowerStaFb](#v2apowerstafb) | +| 车辆发送到自动驾驶的车辆状态反馈 |`/pix_hooke/v2a_vehiclestafb`
([pix_hooke_driver_msgs/msg/V2aVehicleStaFb](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/V2aVehicleStaFb.msg)) | [V2aVehicleStaFb](#v2avehiclestafb) | +| 车辆发送到自动驾驶的错误状态反馈 |`/pix_hooke/v2a_vehiclefltsta`
([pix_hooke_driver_msgs/msg/V2aVehicleFltSta](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/V2aVehicleFltSta.msg)) | [V2aVehicleFltSta](#v2avehiclefltsta) | +| 车辆发送到自动驾驶的轮速反馈 |`/pix_hooke/v2a_chassiswheelrpmfb`
([pix_hooke_driver_msgs/msg/V2aChassisWheelRpmFb](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/V2aChassisWheelRpmFb.msg)) | [V2aChassisWheelRpmFb](#v2achassiswheelrpmfb) | +| 车辆发送到自动驾驶的胎压反馈 |`/pix_hooke/v2a_chassiswheeltirepressfb`
([pix_hooke_driver_msgs/msg/V2aChassisWheelTirePressFb](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/V2aChassisWheelTirePressFb.msg)) | [V2aChassisWheelTirePressFb](#v2achassiswheeltirepressfb) | +| 车辆发送到自动驾驶的车轮角度反馈 |`/pix_hooke/v2a_chassiswheelanglefb`
([pix_hooke_driver_msgs/msg/V2aChassisWheelAngleFb](https://github.com/pixmoving-moveit/pix_driver/blob/main/pix_hooke_driver_msgs/msg/V2aChassisWheelAngleFb.msg)) | [V2aChassisWheelAngleFb](#v2achassiswheelanglefb) | + +#### V2aDriveStaFb +**下表为`V2aDriveStaFb(vehicle to autonomous driving status feedback)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| vcu_chassis_driver_en_sta | std_msgs/int8 | 纵向控制使能反馈 `{0: 'VCU_CHASSISDRIVERENSTA_DISABLE', 1: 'VCU_CHASSISDRIVERENSTA_ENABLE'}` | +| vcu_chassis_diver_slopover | std_msgs/int8 | 纵向控制过载反馈 `{0: 'VCU_CHASSISDIVERSLOPOVER_NORMAL', 1: 'VCU_CHASSISDIVERSLOPOVER_OVER_SLOP'}` | +| vcu_chassis_driver_mode_sta | std_msgs/int8 | 纵向控制模式反馈{0: 'VCU_CHASSISDRIVERMODESTA_SPEED_CTRL_MODE', 1: 'VCU_CHASSISDRIVERMODESTA_THROTTLE_CTRL_MODE', 2: 'VCU_CHASSISDRIVERMODESTA_RESERVE', 3: 'VCU_CHASSISDRIVERMODESTA_RESERVE'}` | +| vcu_chassis_gear_fb | std_msgs/int8 | 档位反馈 `{0: 'VCU_CHASSISGEARFB_NO_USE', 1: 'VCU_CHASSISGEARFB_D', 2: 'VCU_CHASSISGEARFB_N', 3: 'VCU_CHASSISGEARFB_R'}` | +| vcu_chassis_speed_fb | std_msgs/float32 | 速度反馈 [m/s] `-50.0-50.0` | +| vcu_chassis_throttle_padl_fb | std_msgs/float32 | 加速踏板开度反馈 `0.0-100.0` | +| vcu_chassis_accceleration_fb | std_msgs/float32 | 加速度反馈 [m/s2] `-20.0-20.0` | + +#### V2aBrakeStaFb +**下表为`V2aBrakeStaFb(vehicle to autonomous driving braking status feedback)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| vcu_chassis_brake_en_sta | std_msgs/int8 | 刹车控制使能反馈 `{0: 'VCU_CHASSISBRAKEENSTA_DISABLE', 1: 'VCU_CHASSISBRAKEENSTA_ENABLE'}` | +| vcu_vehicle_brake_lamp_fb | std_msgs/int8 | 刹车灯状态反馈 `{0: 'VCU_VEHICLEBRAKELAMPFB_OFF', 1: 'VCU_VEHICLEBRAKELAMPFB_ON'}` | +| vcu_chassis_epb_fb | std_msgs/int8 | EPB状态反馈 `{0: 'VCU_CHASSISEPBFB_RELEASE', 1: 'VCU_CHASSISEPBFB_BRAKE', 2: 'VCU_CHASSISEPBFB_RELEASING', 3: 'VCU_CHASSISEPBFB_BRAKING'}` | +| vcu_chassis_brake_padl_fb | std_msgs/float32 | 刹车踏板开度反馈 `0-100` | +| vcu_aeb_en_sta_fb | std_msgs/int8 | AEB使能反馈 `{0: 'VCU_AEBENSTAFB_OFF', 1: 'VCU_AEBENSTAFB_ON'}` | +| vcu_aeb_trigger_sta_fb | std_msgs/int8 | AEB触发反馈 `{0: 'VCU_AEBTRIGGERSTAFB_OFF', 1: 'VCU_AEBTRIGGERSTAFB_AEB_TRIGGER'}` | + +#### V2aSteerStaFb +**下表为`V2aSteerStaFb(vehicle to autonomous driving steering status feedback)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| vcu_chassis_steer_en_sta | std_msgs/int8 | steering control enable status feedback `{0: 'VCU_CHASSISSTEERENSTA_DISABLE', 1: 'VCU_CHASSISSTEERENSTA_ENABLE'}` | +| vcu_chassis_steer_slopover | std_msgs/int8 | steering slop-over status feedback `{0: 'VCU_CHASSISSTEERSLOPOVER_NORMAL', 1: 'VCU_CHASSISSTEERSLOPOVER_OVER_SLOP'}` | +| vcu_chassis_steer_work_mode | std_msgs/int8 | steering work mode feedback `{0: 'VCU_CHASSISSTEERWORKMODE_MACHINE', 1: 'VCU_CHASSISSTEERWORKMODE_WIRE', 2: 'VCU_CHASSISSTEERWORKMODE_POWER'}` | +| vcu_chassis_steer_mode_fb | std_msgs/int8 | steering mode feedback `{0: 'VCU_CHASSISSTEERMODEFB_FRONT_ACKERMAN', 1: 'VCU_CHASSISSTEERMODEFB_SAME_FRONT_AND_BACK', 2: 'VCU_CHASSISSTEERMODEFB_FRONT_DIFFERENT_BACK', 3: 'VCU_CHASSISSTEERMODEFB_BACK_ACKRMAN', 4: 'VCU_CHASSISSTEERMODEFB_FRONT_BACK'}` | +| vcu_chassis_steer_angle_fb | std_msgs/int32 | steering angle of front steering wheel [deg] `-500-500` | +| vcu_chassis_steer_angle_rear_fb | std_msgs/int32 | steering angle of rear steering wheel [deg] `-500-500` | +| vcu_chassis_steer_angle_speed_fb | std_msgs/float32 | angular speed of steering wheel [deg/s] `0-500` | + +#### V2aVehicleWorkStaFb +**下表为`V2aVehicleWorkStaFb(vehicle to autonomous driving vehicle work status feedback)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| vcu_driving_mode_fb | std_msgs/int8 | VCU控制模式反馈 `{0: 'VCU_DRIVINGMODEFB_STANDBY', 1: 'VCU_DRIVINGMODEFB_SELF_DRIVING', 2: 'VCU_DRIVINGMODEFB_REMOTE', 3: 'VCU_DRIVINGMODEFB_MAN'}` | +| vcu_chassis_power_sta_fb | std_msgs/int8 | 车辆动力状态反馈 `{0: 'VCU_CHASSISPOWERSTAFB_INIT', 1: 'VCU_CHASSISPOWERSTAFB_ON_ACC', 2: 'VCU_CHASSISPOWERSTAFB_READY', 3: 'VCU_CHASSISPOWERSTAFB_OFF'}` | +| vcu_chassis_power_dc_sta | std_msgs/int8 | DC工作状态反馈 `{0: 'VCU_CHASSISPOWERDCSTA_OFF', 1: 'VCU_CHASSISPOWERDCSTA_ON', 2: 'VCU_CHASSISPOWERDCSTA_STANDBY'}` | +| vcu_chassis_speed_limited_mode_fb | std_msgs/int8 | 限速模式反馈 `{0: 'VCU_CHASSISSPEEDLIMITEDMODEFB_DEFAULT', 1: 'VCU_CHASSISSPEEDLIMITEDMODEFB_LIMIT'}` | +| vcu_chassis_power_limite_sta | std_msgs/int8 | 动力限制模式反馈 `{0: 'VCU_CHASSISPOWERLIMITESTA_DEFAULT', 1: 'VCU_CHASSISPOWERLIMITESTA_LIMIT'}` | +| vcu_sys_eco_mode | std_msgs/int8 | Eco模式反馈 `{0: 'VCU_SYSECOMODE_DEFAULT', 1: 'VCU_SYSECOMODE_ECO', 2: 'VCU_SYSECOMODE_SPORT'}` | +| vcu_chassis_speed_limited_val_fb | std_msgs/float32 | 限速反馈 [m/s] `0.0-50.0` | +| vcu_chassis_low_power_volt_sta | std_msgs/float32 | 低电量反馈 [V] `0-25` | +| vcu_chassis_e_stop_sta_fb | std_msgs/int8 | 急停状态反馈 `{0: 'VCU_CHASSISESTOPSTAFB_NO', 1: 'VCU_CHASSISESTOPSTAFB_CHASSIS_ESTOP', 2: 'VCU_CHASSISESTOPSTAFB_REMOTE_ESTOP', 3: 'VCU_CHASSISESTOPSTAFB_CHASSIS_ERR_ESTOP'}` | +| vcu_crash_front_sta | std_msgs/int8 | 前碰撞反馈 `{0: 'VCU_CRASHFRONTSTA_OFF', 1: 'VCU_CRASHFRONTSTA_COLLIDE'}` | +| vcu_crash_rear_sta | std_msgs/int8 | 后碰撞反馈 `{0: 'VCU_CRASHREARSTA_OFF', 1: 'VCU_CRASHREARSTA_COLLIDE'}` | +| vcu_crash_left_sta | std_msgs/int8 | 左碰撞反馈 `{0: 'VCU_CRASHLEFTSTA_OFF', 1: 'VCU_CRASHLEFTSTA_COLLIDE'}` | +| vcu_crash_right_sta | std_msgs/int8 | 右碰撞反馈 `{0: 'VCU_CRASHLEFTSTA_OFF', 1: 'VCU_CRASHLEFTSTA_COLLIDE'}` | +| vcu_life | std_msgs/int32 | 报文计数周期 `0-255` | +| vcu_check_sum | std_msgs/int32 | check sum | + +#### V2aPowerStaFb +**下表为`V2aPowerStaFb(vehicle to autonomous driving power status feedback)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| vcu_chassis_bms_reserved_1 | std_msgs/int32 | 保留位 | +| vcu_chassis_power_charge_sta | std_msgs/int8 | 充电状态反馈 `{0: 'VCU_CHASSISPOWERCHARGESTA_NO_CHARGE', 1: 'VCU_CHASSISPOWERCHARGESTA_CHARGE', 2: 'VCU_CHASSISPOWERCHARGESTA_CHARGE_FULL'}` | +| vcu_chassis_power_charge_sock_sta | std_msgs/int8 | 充电接口状态反馈 `{0: 'VCU_CHASSISPOWERCHARGESOCKSTA_NO_CONNECT', 1: 'VCU_CHASSISPOWERCHARGESOCKSTA_CONNECT'}` | +| vcu_chassis_power_soc_fb | std_msgs/int32 | 电池SOC反馈 [%] `0-100`| +| vcu_chassis_power_volt_fb | std_msgs/float32 | 电池电压反馈 [V] `0.0-1000.0` | +| vcu_chassis_power_curr_fb | std_msgs/float32 | 电池电流反馈 [A] `-1000.0-1000.0` | +| vcu_chassis_bms_max_temp | std_msgs/int32 | BMS最大温度反馈 [°C] `-40-80`| +| vcu_chassis_bms_reserved_2 | std_msgs/int32 | 保留位 | + +#### V2aVehicleStaFb +**下表为`V2aVehicleStaFb(vehicle to autonomous driving vehicle status feedback)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| vcu_vehicle_pos_lamp_fb | std_msgs/int8 | 示廓灯反馈 `{0: 'VCU_VEHICLEPOSLAMPFB_OFF', 1: 'VCU_VEHICLEPOSLAMPFB_ON'}` | +| vcu_vehicle_head_lamp_fb | std_msgs/int8 | 头灯反馈 `{0: 'VCU_VEHICLEHEADLAMPFB_OFF', 1: 'VCU_VEHICLEHEADLAMPFB_ON'}` | +| vcu_vehicle_left_lamp_fb | std_msgs/int8 | 左转向灯反馈 `{0: 'VCU_VEHICLELEFTLAMPFB_OFF', 1: 'VCU_VEHICLELEFTLAMPFB_ON'}` | +| vcu_vehicle_right_lamp_fb | std_msgs/int8 | 右转向灯反馈 `{0: 'VCU_VEHICLERIGHTLAMPFB_OFF', 1: 'VCU_VEHICLERIGHTLAMPFB_ON'}` | +| vcu_vehicle_high_beam_fb | std_msgs/int8 | 前大灯反馈 `{0: 'VCU_VEHICLEHIGHBEAMFB_OFF', 1: 'VCU_VEHICLEHIGHBEAMFB_ON'}` | +| vcu_vehicle_fog_lamp_fb | std_msgs/int8 | 雾灯反馈 `{0: 'VCU_VEHICLEFOGLAMPFB_OFF', 1: 'VCU_VEHICLEFOGLAMPFB_ON'}` | +| vcu_vehicle_hazard_war_lamp_fb | std_msgs/int8 | 紧急状态灯反馈 `{0: 'VCU_VEHICLEHAZARDWARLAMPFB_OFF', 1: 'VCU_VEHICLEHAZARDWARLAMPFB_ON'}` | +| vcu_vehicle_body_lamp_fb | std_msgs/int8 | 车体灯反馈 `{0: 'VCU_VEHICLEBODYLAMPFB_OFF', 1: 'VCU_VEHICLEBODYLAMPFB_ON'}` | +| vcu_vehicle_read_lamp_fb | std_msgs/int8 | 阅读灯反馈 `{0: 'VCU_VEHICLEREADLAMPFB_OFF', 1: 'VCU_VEHICLEREADLAMPFB_ON'}` | +| acu_vehicle_window_fb | std_msgs/int8 | 车窗状态反馈 `{0: 'ACU_VEHICLEWINDOWFB_INVALID', 1: 'ACU_VEHICLEWINDOWFB_OPENING', 2: 'ACU_VEHICLEWINDOWFB_CLOSING', 3: 'ACU_VEHICLEWINDOWFB_OPEN_INPLACE', 4: 'ACU_VEHICLEWINDOWFB_CLOSE_INPLACE', 5: 'ACU_VEHICLEWINDOWFB_OPEN_TIMEOUT', 6: 'ACU_VEHICLEWINDOWFB_CLOSE_TIMEOUT'}` | +| vcu_vehicle_door_sta_fb | std_msgs/int8 | 车门状态反馈 `{0: 'VCU_VEHICLEDOORSTAFB_INVALID', 1: 'VCU_VEHICLEDOORSTAFB_OPENING', 2: 'VCU_VEHICLEDOORSTAFB_CLOSING', 3: 'VCU_VEHICLEDOORSTAFB_OPEN_INPLACE', 4: 'VCU_VEHICLEDOORSTAFB_CLOSE_INPLACE', 5: 'VCU_VEHICLEDOORSTAFB_OPEN_TIMEOUT', 6: 'VCU_VEHICLEDOORSTAFB_CLOSE_TIMEOUT'}` | +| vcu_vehicle_wipers_sta_fb | std_msgs/int8 | 雨刮器状态反馈 `{0: 'VCU_VEHICLEWIPERSSTAFB_OFF', 1: 'VCU_VEHICLEWIPERSSTAFB_LOW', 2: 'VCU_VEHICLEWIPERSSTAFB_MID', 3: 'VCU_VEHICLEWIPERSSTAFB_HIGH'}` | +| vcu_vehicle_safety_belt_1 | std_msgs/int8 | 安全带1反馈 `{0: 'VCU_VEHICLESAFETYBELT1_NO', 1: 'VCU_VEHICLESAFETYBELT1_SIT', 2: 'VCU_VEHICLESAFETYBELT1_SAFETYBELT', 3: 'VCU_VEHICLESAFETYBELT1_UNKNOW_SENSOR_ERROR'}` | +| vcu_vehicle_safety_belt_2 | std_msgs/int8 | 安全带2反馈 `{0: 'VCU_VEHICLESAFETYBELT2_NO', 1: 'VCU_VEHICLESAFETYBELT2_SIT', 2: 'VCU_VEHICLESAFETYBELT2_SAFETYBELT', 3: 'VCU_VEHICLESAFETYBELT2_UNKNOW_SENSOR_ERROR'}` | +| vcu_vehicle_safety_belt_3 | std_msgs/int8 | 安全带3反馈 `{0: 'VCU_VEHICLESAFETYBELT3_NO', 1: 'VCU_VEHICLESAFETYBELT3_SIT', 2: 'VCU_VEHICLESAFETYBELT3_SAFETYBELT', 3: 'VCU_VEHICLESAFETYBELT3_UNKNOW_SENSOR_ERROR'}` | +| vcu_vehicle_safety_belt_4 | std_msgs/int8 | 安全带4反馈 `{0: 'VCU_VEHICLESAFETYBELT4_NO', 1: 'VCU_VEHICLESAFETYBELT4_SIT', 2: 'VCU_VEHICLESAFETYBELT4_SAFETYBELT', 3: 'VCU_VEHICLESAFETYBELT4_UNKNOW_SENSOR_ERROR'}` | + +#### V2aVehicleFltSta +**下表为`V2aVehicleFltSta(vehicle to autonomous driving vehicle fault feedback)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| vcu_sys_motor_over_temp_sta | std_msgs/int8 | 电机高温状态反馈 `{0: 'VCU_SYSMOTOROVERTEMPSTA_NORMAL', 1: 'VCU_SYSMOTOROVERTEMPSTA_OVER_TEMP'}` | +| vcu_sys_bms_over_temp_sta | std_msgs/int8 | BMS高温状态反馈 `{0: 'VCU_SYSBMSOVERTEMPSTA_NORMAL', 1: 'VCU_SYSBMSOVERTEMPSTA_OVER_TEMP'}` | +| vcu_sys_brake_over_temp_sta | std_msgs/int8 | 制动系统高温状态反馈 `{0: 'VCU_SYSBRAKEOVERTEMPSTA_NORMAL', 1: 'VCU_SYSBRAKEOVERTEMPSTA_OVER_TEMP'}` | +| vcu_sys_steer_over_temp_sta | std_msgs/int8 | 转向系统高温状态反馈 `{0: 'VCU_SYSSTEEROVERTEMPSTA_NORMAL', 1: 'VCU_SYSSTEEROVERTEMPSTA_OVER_TEMP'}` | +| vcu_sys_under_volt | std_msgs/int8 | 电池低电压反馈 `{0: 'VCU_SYSUNDERVOLT_NORMAL', 1: 'VCU_SYSUNDERVOLT_UNDER_VOLT'}` | +| vcu_sys_flt | std_msgs/int8 | 系统错误 `{0: 'VCU_SYSFLT_NORMAL', 1: 'VCU_SYSFLT_FAULT_LEVEL_1', 2: 'VCU_SYSFLT_FAULT_LEVEL_2', 3: 'VCU_SYSFLT_FAULT_LEVEL_3', 4: 'VCU_SYSFLT_FAULT_LEVEL_4'}` | +| vcu_sys_brake_flt | std_msgs/int8 | 制动系统错误 `{0: 'VCU_SYSBRAKEFLT_NORMAL', 1: 'VCU_SYSBRAKEFLT_FAULT_LEVEL_1', 2: 'VCU_SYSBRAKEFLT_FAULT_LEVEL_2', 3: 'VCU_SYSBRAKEFLT_FAULT_LEVEL_3', 4: 'VCU_SYSBRAKEFLT_FAULT_LEVEL_4'}` | +| vcu_sys_parking_flt | std_msgs/int8 | 驻车错误 `{0: 'VCU_SYSPARKINGFLT_NORMAL', 1: 'VCU_SYSPARKINGFLT_FAULT_LEVEL_1', 2: 'VCU_SYSPARKINGFLT_FAULT_LEVEL_2', 3: 'VCU_SYSPARKINGFLT_FAULT_LEVEL_3', 4: 'VCU_SYSPARKINGFLT_FAULT_LEVEL_4'}` | +| vcu_sys_steer_front_flt | std_msgs/int8 | 前转向系统错误 `{0: 'VCU_SYSSTEERFRONTFLT_NORMAL', 1: 'VCU_SYSSTEERFRONTFLT_FAULT_LEVEL_1', 2: 'VCU_SYSSTEERFRONTFLT_FAULT_LEVEL_2', 3: 'VCU_SYSSTEERFRONTFLT_FAULT_LEVEL_3', 4: 'VCU_SYSSTEERFRONTFLT_FAULT_LEVEL_4'}` | +| vcu_sys_steer_back_flt | std_msgs/int8 | 后转向系统错误 `{0: 'VCU_SYSSTEERBACKFLT_NORMAL', 1: 'VCU_SYSSTEERBACKFLT_FAULT_LEVEL_1', 2: 'VCU_SYSSTEERBACKFLT_FAULT_LEVEL_2', 3: 'VCU_SYSSTEERBACKFLT_FAULT_LEVEL_3', 4: 'VCU_SYSSTEERBACKFLT_FAULT_LEVEL_4'}` | +| vcu_sys_motor_lf_flt | std_msgs/int8 | 左前电机错误 `{0: 'VCU_SYSMOTORLFFLT_NORMAL', 1: 'VCU_SYSMOTORLFFLT_FAULT_LEVEL_1', 2: 'VCU_SYSMOTORLFFLT_FAULT_LEVEL_2', 3: 'VCU_SYSMOTORLFFLT_FAULT_LEVEL_3', 4: 'VCU_SYSMOTORLFFLT_FAULT_LEVEL_4'}` | +| vcu_sys_motor_rf_flt | std_msgs/int8 | 右前电机错误 `{0: 'VCU_SYSMOTORRFFLT_NORMAL', 1: 'VCU_SYSMOTORRFFLT_FAULT_LEVEL_1', 2: 'VCU_SYSMOTORRFFLT_FAULT_LEVEL_2', 3: 'VCU_SYSMOTORRFFLT_FAULT_LEVEL_3', 4: 'VCU_SYSMOTORRFFLT_FAULT_LEVEL_4'}` | +| vcu_sys_motor_lr_flt | std_msgs/int8 | 左后电机错误 `{0: 'VCU_SYSMOTORLRFLT_NORMAL', 1: 'VCU_SYSMOTORLRFLT_FAULT_LEVEL_1', 2: 'VCU_SYSMOTORLRFLT_FAULT_LEVEL_2', 3: 'VCU_SYSMOTORLRFLT_FAULT_LEVEL_3', 4: 'VCU_SYSMOTORLRFLT_FAULT_LEVEL_4'}` | +| vcu_sys_motor_rr_flt | std_msgs/int8 | 右后电机错误 `{0: 'VCU_SYSMOTORRRFLT_NORMAL', 1: 'VCU_SYSMOTORRRFLT_FAULT_LEVEL_1', 2: 'VCU_SYSMOTORRRFLT_FAULT_LEVEL_2', 3: 'VCU_SYSMOTORRRFLT_FAULT_LEVEL_3', 4: 'VCU_SYSMOTORRRFLT_FAULT_LEVEL_4'}`| +| vcu_sys_bms_flt | std_msgs/int8 | BMS错误 `{0: 'VCU_SYSBMSFLT_NORMAL', 1: 'VCU_SYSBMSFLT_FAULT_LEVEL_1', 2: 'VCU_SYSBMSFLT_FAULT_LEVEL_2', 3: 'VCU_SYSBMSFLT_FAULT_LEVEL_3', 4: 'VCU_SYSBMSFLT_FAULT_LEVEL_4'}`| +| vcu_sys_dc_flt | std_msgs/int8 | DC系统错误 `{0: 'VCU_SYSDCFLT_NORMAL', 1: 'VCU_SYSDCFLT_FAULT_LEVEL_1', 2: 'VCU_SYSDCFLT_FAULT_LEVEL_2', 3: 'VCU_SYSDCFLT_FAULT_LEVEL_3', 4: 'VCU_SYSDCFLT_FAULT_LEVEL_4'}` | + +#### V2aChassisWheelRpmFb +**下表为`V2aChassisWheelRpmFb(vehicle to autonomous driving vehicle wheel speed feedback)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| vcu_chassis_wheel_rpm_lf | std_msgs/int32 | 左前电机转速 [rpm] `-2000-2000` | +| vcu_chassis_wheel_rpm_rf | std_msgs/int32 | 右前电机转速 [rpm] `-2000-2000` | +| vcu_chassis_wheel_rpm_lr | std_msgs/int32 | 左后电机转速 [rpm] `-2000-2000` | +| vcu_chassis_wheel_rpm_rr | std_msgs/int32 | 右后电机转速 [rpm] `-2000-2000` | + +#### V2aChassisWheelTirePressFb +**下表为`V2aChassisWheelTirePressFb(vehicle to autonomous driving tire pressure feedback)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| vcu_chassis_wheel_tire_press_lf | std_msgs/float32 | 左前胎压 [bar] `0.0-20.0` | +| vcu_chassis_wheel_tire_press_rf | std_msgs/float32 | 右前胎压 [bar] `0.0-20.0` | +| vcu_chassis_wheel_tire_press_lr | std_msgs/float32 | 左后胎压 [bar] `0.0-20.0` | +| vcu_chassis_wheel_tire_press_rr | std_msgs/float32 | 右后胎压 [bar] `0.0-20.0` | + +#### V2aChassisWheelAngleFb +**下表为`V2aChassisWheelAngleFb(vehicle to autonomous driving steering wheel angle feedback)`的详细介绍** + +| Content | Data Type | Explanation | +| ----------------------- | ---------------- | ----------- | +| header | std_msgs/Header | header | +| vcu_chassis_wheel_angle_lf | std_msgs/float32 | 左前转向角 [deg] `-90|90` | +| vcu_chassis_wheel_angle_rf | std_msgs/float32 | 右前转向角 [deg] `-90|90` | +| vcu_chassis_wheel_angle_lr | std_msgs/float32 | 左后转向角 [deg] `-90|90` | +| vcu_chassis_wheel_angle_rr | std_msgs/float32 | 右后转向角 [deg] `-90|90` | + +## Control Converter Node +### 输入 + +| 输入(来自Autoware和底盘反馈) | Topic(Data Type) | Explanation | +| --------------- | ------------------------------------------------------------------ | ------------------------ | +| raw vehicle command | `/control/command/actuation_cmd`
([tier4_vehicle_msgs/msg/ActuationCommandStamped](https://github.com/tier4/tier4_autoware_msgs/blob/tier4/universe/tier4_vehicle_msgs/msg/ActuationCommandStamped.msg)) | 原始控制指令,包括油门、刹车踏板和转向角 | +| gear command | `/control/command/gear_cmd`
([autoware_auto_vehicle_msgs/msg/GearCommand]()) | 来自[Autoware Shift Decider](https://github.com/tier4/autoware.universe/tree/tier4/main/control/shift_decider)的档位命令 | +| drive status feedback | `/pix_hooke/v2a_drivestafb`
([V2aDriveStaFb](#the-detailed-contents-in-v2adrivestafbvehicle-to-autonomous-driving-status-feedback-are-as-follows)) | 当需要换挡时查看档位反馈,如果与目标档位不一致时将速度设为0| + +### 输出 + +| 输出 (发送至[Control Command Node](#control-command-node)) | Topic(Data Type) | Explanation | +| --------------- | ------------------------------------------------------------------ | ----------- | +| 自动驾驶发送到车辆的加速命令| `/pix_hooke/a2v_drivectrl_130`
([A2vDriveCtrl](#the-detailed-contents-in-a2vdrivectrlself-driving-to-vehicle-drive-control-are-as-follows)) | | +| 自动驾驶发送到车辆的制动控制|`/pix_hooke/a2v_brakectrl_131`
([A2vBrakeCtrl](#the-detailed-contents-in-a2vbrakectrlself-driving-to-vehicle-brake-control-are-as-follows)) | | +| 自动驾驶发送到车辆的转向控制 |`/pix_hooke/a2v_steerctrl_132`
([A2vSteerCtrl](#the-detailed-contents-in-a2vsteerctrlself-driving-to-vehicle-steering-control-are-as-follows)) | | +| 自动驾驶发送到车辆的灯光等控制 | `/pix_hooke/a2v_vehiclectrl_133`
([A2vVehicleCtrl](#the-detailed-contents-in-a2vvehiclectrlself-driving-to-vehicle-vehicle-control-are-as-follows)) | | + +## Report Converter Node +### 输入 + +| 输入 (来自[Report Parser Node](#report-parser-node) ) | Topic(Data Type) | Explanation | +| --------------- | ------------------------------------------------------------------ | ----------- | +| 车辆发送到自动驾驶的加速状态反馈 | `/pix_hooke/v2a_drivestafb`
([pix_hooke_driver_msgs::msg::V2aDriveStaFb](#the-detailed-contents-in-v2adrivestafbvehicle-to-autonomous-driving-status-feedback-are-as-follows)) | | +| 车辆发送到自动驾驶的制动状态反馈 | `/pix_hooke/v2a_brakestafb`
([pix_hooke_driver_msgs/msg/V2aBrakeStaFb](#the-detailed-contents-in-v2abrakestafbvehicle-to-autonomous-driving-braking-status-feedback-are-as-follows)) | | +| 车辆发送到自动驾驶的转向状态反馈 |`/pix_hooke/v2a_steerstafb`
([pix_hooke_driver_msgs/msg/V2aSteerStaFb](#the-detailed-contents-in-v2asteerstafbvehicle-to-autonomous-driving-steering-status-feedback-are-as-follows)) | | +| 车辆发送到自动驾驶的车辆工作状态反馈 |`/pix_hooke/v2a_vehicleworkstafb`
([pix_hooke_driver_msgs::msg::V2aVehicleWorkStaFb](#the-detailed-contents-in-v2avehicleworkstafbvehicle-to-autonomous-driving-vehicle-work-status-feedback-are-as-follows)) | | +| 车辆发送到自动驾驶的车辆状态反馈 |`/pix_hooke/v2a_vehiclestafb`
([pix_hooke_driver_msgs::msg::V2aVehicleStaFb](#the-detailed-contents-in-v2avehiclestafbvehicle-to-autonomous-driving-vehicle-status-feedback-are-as-follows)) | | + +### 输出 + +| 输出 (发送至Autoware) | Topic(Data Type) | Explanation | +| --------------- | ---------------- | ---------- | +| 控制模式状态 | `/vehicle/status/control_mode`
([autoware_auto_vehicle_msgs/msg/ControlModeReport](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_vehicle_msgs/msg/ControlModeReport.idl)) | 反馈给Autoware的车辆控制模式状态 | +| 速度状态 | `/vehicle/status/velocity_status`
([autoware_auto_vehicle_msgs/msg/ControlModeReport](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_vehicle_msgs/msg/VelocityReport.idl)) | 反馈给Autoware的车辆横向与纵向速度 [m/s] | +| 转向状态 | `/vehicle/status/steering_status`
([autoware_auto_vehicle_msgs/msg/SteeringReport](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_vehicle_msgs/msg/SteeringReport.idl)) | 反馈给Autoware的车辆转向角 [rad] | +| 档位状态 | `/vehicle/status/gear_status`
([autoware_auto_vehicle_msgs/msg/GearReport](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_vehicle_msgs/msg/GearReport.idl)) | 反馈给Autoware的车辆档位状态 [-] | +| 转向灯信号状态 | `/vehicle/status/turn_indicators_status`
([autoware_auto_vehicle_msgs/msg/TurnIndicatorsReport](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_vehicle_msgs/msg/TurnIndicatorsReport.idl)) | 反馈给Autoware的转向灯信号状态 [-]| +| 紧急灯光状态 | `/vehicle/status/hazard_lights_status`
([autoware_auto_vehicle_msgs::msg::HazardLightsReport](https://github.com/tier4/autoware_auto_msgs/blob/tier4/main/autoware_auto_vehicle_msgs/msg/HazardLightsReport.idl)) | 反馈给Autoware的紧急灯光状态 [-] | +| 执行状态 | `/vehicle/status/actuation_status`
[tier4_vehicle_msgs/msg/ActuationStatusStamped](https://github.com/tier4/tier4_autoware_msgs/blob/tier4/universe/tier4_vehicle_msgs/msg/ActuationStatusStamped.msg) | 为了[车辆动力学标定](https://github.com/autowarefoundation/autoware.universe/tree/main/vehicle/accel_brake_map_calibrator/accel_brake_map_calibrator)反馈给Autoware的车辆加速踏板、制动踏板和转向状态 [0-100]| + +## 参考资料 +- [pix_driver](https://github.com/pixmoving-moveit/pix_driver) +- [tier4_autoware_msgs/tier4_vehicle_msgs](https://github.com/tier4/tier4_autoware_msgs/tree/tier4/universe/tier4_vehicle_msgs) +- [autoware_auto_msgs](https://github.com/tier4/autoware_auto_msgs) +- [ros2_socketcan](https://github.com/autowarefoundation/ros2_socketcan/tree/1.1.0) diff --git "a/docs/Autoware\344\270\212\346\211\213/\350\275\246\351\201\223\345\206\205\350\241\214\351\251\266.md" "b/docs/Autoware\344\270\212\346\211\213/\350\275\246\351\201\223\345\206\205\350\241\214\351\251\266.md" new file mode 100644 index 0000000..f786e84 --- /dev/null +++ "b/docs/Autoware\344\270\212\346\211\213/\350\275\246\351\201\223\345\206\205\350\241\214\351\251\266.md" @@ -0,0 +1,70 @@ +# 车道内行驶 +## 概述 + +本教程介绍如何使用Autoware实现车辆的车道驾驶功能,内容包括:车道内行驶的整体流程,相关的指令操作,以及调试参数的方法,仿真运行效果展示。 + +## 整体流程 +车道内行驶的整体流程如下图所示。 +![lane_driving](./images/lane_driving.png) + +> * 该功能需要在具有车道信息的lanlet地图中进行,因此,请使用lanlet2地图绘制工具进行地图绘制,具体绘制方法请参考[lanelet2地图](../地图/lanelet2地图.md)。 +> * 若需要在实车内进行使用,请确保车辆的激光雷达,摄像头和GNSS能够正常工作,具体的硬件配置请参考[LiDAR安装](../硬件安装/LiDAR安装.md)、[camera安装](../硬件安装/camera安装.md)、[GNSS安装](../硬件安装/GNSS安装.md)。 + +涉及到车道内行驶的功能模块,主要包括:任务规划(mission_planner),行为规划(behavior_path_planner、behavior_velocity_planner),运动规划(obstacle_avoidance_planner、obstacle_veocity_limit、obstacle_stop_planner) + +**mission_planner** :通过接收车辆的初始位置,目标终点以及lanelet2地图数据,规划出一条到达目标终点的行驶线路(Route) +**behavior_path_planner** : 在接收到任务规划输出的线路后,结合车辆的传感器数据和道路交通状况,生成车辆的行驶路径(Path),划分车辆的可行驶区域以及车辆的转向信息。 +**behavior_velocity_planner** : 获取到行驶路径后,进一步根据交通规则,重新计算行驶路径上的每一个路径点的速度 +**obstacle_avoidance_planner** : 在接收到行为规划输出的路径后,根据当前车辆自身的传感器和周围的障碍物信息,规划出一条无碰撞的行驶轨迹(Trajectory) +**obstacle_velocity_limit** : 进一步对轨迹的速度进行优化。比如:优化过后的轨迹会降低在弯道行驶过程中的速度 +**obstacle_stop_planner** : 该模块根据周围的障碍信息和车辆状态,实现车辆的停车,减速通过,或者自适应巡航等功能 +**scenario_selector** : 选择不同的场景选择相应的轨迹,autoware中的场景分为:lane_driving和freespace。由于我们只考虑lane_driving场景下,因此可以忽略该模块 +**motion_velocity_optimizer** : 对输出轨迹进行速度平滑,下发至控制模块 + +主要订阅话题 + +| 输入 | 话题名称(数据类型) | 说明 | +| ------------------------------- | ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- | +| 目标终点 | `/planning/mission_planning/goal`
(geometry_msgs::PoseStamped) | 由用户指定,通过UI界面或者指令的方式进行下发得到 | +| 车辆初始点 | `/initialpose`
(geometry_msgs::PoseWithCovarianceStamped) | 由用户指定,通过UI界面或者指令的方式进行下发得到 | +| 里程计 | `/localization/kinematic_state`
(_nav_msgs/msg/Odometry_) | 这包括了车辆的位姿和速度信息,它用于预测未来的轨迹,以便与其他对象进行碰撞检测 | +| lanelet2地图 | `/map/vector_map`
(autoware_auto_mapping_msgs/msg/HADMapBin_) | 这包括关于环境的所有静态信息,例如: | +| 动态障碍物 | `/perception/object_recognition/objects`
(autoware_auto_perception_msgs/msg/PredictedObjects) | 由感知模块通过分析点云(激光雷达),图像(摄像头)等传感器数据得到, | +| 交通灯识别结果 | `/perception/traffic_light_recognition/traffic_signals`
(autoware_auto_perception_msgs/msg/TrafficSignalArray) | 由感知模块通过分析图像(摄像头)数据得到的 | + +主要发布话题 + +| 输出 | 话题(数据类型) | 说明 | +| ------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| 输出轨迹 | `/planning/scenario_planning/trajectory`
(_autoware_auto_planning_msgs/msg/Trajectory_) | 轨迹是一组包含了位姿,速度和加速度的序列,它需要由控制模块来执行,要求轨迹必须平滑,满足车辆运动学要求(能够被控制器所执行) | +| 转向灯信号 | `/planning/turn_indicators_cmd`
(_autoware_auto_vehicle_msgs/msg/TurnIndicatorsCommand_) | 这是用于控制车辆转向灯的输出。规划模块需要确保转向灯将根据规划结果而打开 | | + + +## 快速上手 +本节将介绍如何通过界面操作或指令下发的方式实现Autoware的车道内行驶功能 +> 注意:下面的将使用autoware官方提供的地图文件和车辆仿真模型。若用户使用自己绘制的地图或车辆模型,请根据自己的实际情况进行修改。 +1. 启动Autoware仿真程序,执行以下指令: +```bash +$ ros2 launch autoware_launch planning_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-planning vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit +``` +![启动planning_simulator](./images/lane_driving_startup_planning_simulator.gif) +需要注意,上面参数map_path需要填写地图文件的具体位置。当前例子中`$HOME/autoware_map/sample-map-planning`表示地图实际存放在home目录下的autoware_map文件夹,其地图文件名是sample-map-planning。 +2. 在RVIZ界面中设定车辆的起始点位置以及需要到达目标终点,车辆会根据目标点的位置,进行路径规划,生成车辆的运动轨迹。 +![选择初始点和目标终点](./images/lane_driving_select_init_goal_pose.gif) +需要注意:目标终点的选取方向需要与地图上的车道点一致,否则会导致路径规划失败。下面的例子中,目标终点方向与车道线不一致,因此路径规划失败。 +![选择反向目标终点](./images/lane_driving_select_init_goal_pose_failed_opposite_direction.gif) +3. 在RVIZ界面中,选择`AutowareStatePanel`面板中,点击`AUTO`,车辆会开始自动行驶。 +![点击AUTO按钮](./images/lane_driving_click_auto_button.gif) +或者使用以下指令 +```bash +$ ros2 topic pub -1 /autoware/engage autoware_auto_vehicle_msgs/msg/Engage engage:\ true +``` +需要注意:在实车测试的时候,根据所处环境的变化,车辆初始化过程不会简单顺利,在Localization一栏中会出现`UNINITIALIZED`的字样,表示初始化定位未成功,此时`AUTO`不可点击,一般来说,等待一会即可,但若长时间仍未能成功,请检查传感器是否正常工作。 +4. 添加移动障碍物,观察车辆的行驶效果(以行人为例)。 +![添加移动障碍物](./images/lane_driving_set_obstcle.gif) +设置移动障碍物(以行人为例) +![设置移动障碍物](./images/lane_driving_set_obstacle.png) + +## 调试参数 +本节将介绍如何通过修改规划模块中的配置文件,来调整车辆的行驶效果 +**待完善** diff --git "a/docs/Autoware\344\270\212\346\211\213/\350\275\250\350\277\271\350\267\237\350\270\252.md" "b/docs/Autoware\344\270\212\346\211\213/\350\275\250\350\277\271\350\267\237\350\270\252.md" new file mode 100644 index 0000000..3c3d320 --- /dev/null +++ "b/docs/Autoware\344\270\212\346\211\213/\350\275\250\350\277\271\350\267\237\350\270\252.md" @@ -0,0 +1,458 @@ + +# 轨迹跟踪 +> 本文档将介绍轨迹跟踪模块的文件结构,各通讯节点之间的数据交互,以及启动文件和算法的参数配置。 +## 概述 +轨迹跟踪模块是Autoware中的核心模块,它负责将轨迹规划模块下发的轨迹点作为参考轨迹,通过横向和纵向控制器,实现车辆在轨迹上的跟踪。 + +## 文件结构 +轨迹跟踪模块位于[autoware.universe/control](https://github.com/autowarefoundation/autoware.universe/tree/main/control),结构如下: + +|文件目录 | 简要说明 +|----------------------------------|------------------------------------------------------------------------------------------------------------------------ +|autonomous_emergency_braking | 自动紧急制动(AEB),防止预测轨迹(由横向控制器提供)与障碍物发生碰撞 +|control_performance_analysis | 控制性能分析,分析轨迹跟踪控制模块的跟踪性能并监控车辆的行驶状态 +|external_cmd_selector | 外部命令选择器,根据输入指令与当前模式,切换车辆模式(遥控模式/自动驾驶模式) +|joy_controller | 手柄控制器,将遥控器消息转换为autoware所需要车辆控制命令(例如:转向角,档位,转向信号,启动键等) +|mpc_lateral_controller | mpc横向控制器,线性模型预测控制(MPC)算法的实现。它将生成横向控制指令(转向角和转向速率)来跟踪路径,并使用车辆模型来模拟控制命令产生的轨迹。 +|obstacle_collision_checker | 障碍物碰撞检查器,检查由横向控制器生成预测轨迹的对障碍物碰撞检测,并在发现碰撞时发布诊断错误 +|operation_mode_transition_manager | 操作模式转换管理器,负责管理 Autoware 系统的不同操作模式。可能的模式是:`Autonomous`,`Local`,`Remote`,'`Stop`', +|pid_longitudinal_controller | PID纵向控制器,将Planner模块下发轨迹点速度作为参考速度,使用PID算法计算车辆加速度控制信号,以实现在通过目标轨迹时达到指定的目标速度。 +|pure_pursuit | 纯追踪横向控制器,纯跟踪(pure_pursuit)算法的实现,它将生成横向控制指令(转向角和转向速率)来跟踪路径。 +|shift_decider | 档位决策器,根据有跟踪控制器输出的控制指令来确定档位大小 +|trajectory_follower_base | 轨迹跟踪控制器接口,为`trajectory_follower_node`提供横向和纵向的控制器提供统一规范的接口 +|trajectory_follower_node | 轨迹跟踪控制器节点,它是在派生自`trajectory_follower_base`的控制器类中实现的功能节点,生成控制指令去跟踪参考轨迹 +|vehicle_cmd_gate | 车辆命令油门,从紧急处理程序、计划模块、外部控制器获取信息并向车辆发送消息的包 + + +## 数据交互 +#### 话题订阅 +|话题名称 | 消息类型 | 订阅节点 +|----------------------------------------------------------|--------------------------------------------------------|---------------------------------------------- +|/autoware/state | autoware_auto_system_msgs/msg/AutowareState | shift_decider +|/control/command/control_cmd | autoware_auto_control_msgs/msg/AckermannControlCommand | operation_mode_transition_manager +|/control/gate_mode_cmd | tier4_control_msgs/msgs/GateMode | vehicle_cmd_gate +|/control/shift_decider/gear_cmd | autoware_auto_vehicle_msgs/msg/GearCommand | vehicle_cmd_gate +|/control/trajectory_follower/control_cmd | autoware_auto_control_msgs/msg/AckermannControlCommand | shift_decider +|/control/trajectory_follower/lateral/predicted_trajectory | autoware_auto_planning_msgs/msg/Trajectory | autonomous_emergency_braking
lane_departure_checker
obstacle_collision_checker
+|/control/vehicle_cmd_gate/operation_mode | autoware_adapi_v1_msgs/msg/OperationModeState | operation_mode_transition_manager +|/external/selected/control_cmd | autoware_auto_control_msgs/msg/AckermannControlCommand | vehicle_cmd_gate +|/external/selected/hazard_lights_cmd | autoware_auto_vehicle_msgs/msg/HazardLightsCommand | vehicle_cmd_gate +|/external/selected/gear_cmd | autoware_auto_vehicle_msgs/msg/GearCommand | vehicle_cmd_gate +|/external/selected/heartbeat | tier4_external_api_msgs/msg/Heartbeat | vehicle_cmd_gate +|/localization/acceleration | geometry_msgs/msgs/AccelWithCovarianceStamped | trajectory_follower_node
vehicle_cmd_gate +|/localization/kinematic_state | nav_msgs/msgs/Odometry | autonomous_emergency_braking
lane_departure_checker
obstacle_collision_checker
operation_mode_transition_manager
trajectory_follower_node
vehicle_cmd_gate +|/map/vector_map | autoware_auto_mapping_msgs/msg/HADMapBin | lane_departure_checker
obstacle_collision_checker +|/perception/obstacle_segmentation/pointcloud | sensor_msgs/msg/PointCloud2 | autonomous_emergency_braking
obstacle_collision_checker +|/planning/hazard_lights_cmd | autoware_auto_vehicle_msgs/msg/HazardLightsCommand | vehicle_cmd_gate +|/planning/mission_planning/route | autoware_auto_planning_msgs/msg/LaneletRoute | lane_departure_checker
obstacle_collision_checker +|/planning/scenario_planning/trajectory | autoware_auto_planning_msgs/msg/Trajectory | trajectory_follower_node
obstacle_collision_checker
operation_mode_transition_manager
lane_departure_checker +|/planning/turn_indicators_cmd | autoware_auto_vehicle_msgs/msg/TurnIndicatorsCommand | vehicle_cmd_gate +|/sensing/imu/imu_data | sensor_msgs/msg/Imu | autonomous_emergency_braking +|/system/emergency/control_cmd | autoware_auto_control_msgs/msg/AckermannControlCommand | vehicle_cmd_gate +|/system/emergency/gear_cmd | autoware_auto_vehicle_msgs/msg/GearCommand | vehicle_cmd_gate +|/system/emergency/hazard_lights_cmd | autoware_auto_vehicle_msgs/msg/HazardLightsCommand | vehicle_cmd_gate +|/system/fail_safe/mrm_state | autoware_adpi_v1_msgs/msgs/MrmState | vehicle_cmd_gate +|/system/operation_mode/state | autoware_adpi_v1_msgs/msgs/OperationModeState | vehicle_cmd_gate
trajectory_follower_node +|/vehicle/status/control_mode | autoware_auto_vehicle_msgs/msg/ControlMoedReport | operation_mode_transition_manager +|/vehicle/status/gear_status | autoware_auto_vehicle_msgs/msg/GearReport | vehicle_cmd_gate +|/vehicle/status/steering_status | autoware_auto_vehicle_msgs/msgs/SteeringReport | operation_mode_transition_manager
trajectory_follower_node
vehicle_cmd_gate
+|/vehicle/status/velocity_status | autoware_auto_vehicle_msgs/msgs/VelocityReport | autonomous_emergency_braking + + + +#### 话题发布 +|话题名称 | 消息类型 | 发布节点 +|----------------------------------------------------------|--------------------------------------------------------|---------------------------------------------- +|/api/autoware/get/engage | autoware_auto_vehicle_msgs/msg/Engage | vehicle_cmd_gate +|/api/autoware/get/emergency | autoware_auto_vehicle_msgs/msg/Emergency | vehicle_cmd_gate +|/control/command/emergency_cmd |tire4_vehicle_msgs/msg/VehicleEmergencyStamped | vehicle_cmd_gate +|/control/command/control_cmd | autoware_auto_control_msgs/msg/AckermannControlCommand | vehicle_cmd_gate +|/control/command/gear_cmd |autoware_auto_vehicle_msgs/msg/GearCommand | vehicle_cmd_gate +|/control/command/turn_indicators_cmd |autoware_auto_vehicle_msgs/msg/TurnIndicatorsCommand | vehicle_cmd_gate +|/control/command/hazard_lights_cmd | autoware_auto_vehicle_msgs/msg/HazardLightsCommand | vehicle_cmd_gate +|/control/current_gate_mode |tire4_control_msgs/msg/GateMode | vehicle_cmd_gate +|/control/shift_decider/gear_cmd |autoware_auto_vehicle_msgs/msg/GearCommand | shift_decider +|/control/trajectory_follower/control_cmd |autoware_auto_control_msgs/msg/AckermannControlCommand | trajectory_follower_node +|/control/trajectory_follower/lateral/predicted_trajectory |autoware_auto_planning_msgs/msg/Trajectory | trajectory_follower_node +|/control/trajectory_follower/lateral/diagnostic |tier4_debug_msgs/Float32MultiArrayStamped | trajectory_follower_node +|/control/trajectory_follower/longitudinal/slope_angle |tier4_debug_msgs/Float32MultiArrayStamped | trajectory_follower_node +|/control/trajectory_follower/longitudinal/diagnostic |tier4_debug_msgs/Float32MultiArrayStamped | trajectory_follower_node +|/control/vehicle_cmd_gate/operation_mode | autoware_adapi_v1_msgs/msgs/OperationModeState | vehicle_cmd_gate + +## 参数配置 +该模块各节点的配置文件位置:[autoware_launch/config/control](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/control) +>注意:autoware.universe/control/*/config具有与autoware_launch/config/control相同的配置文件,但默认是从autoware_launch/config/control加载的 + +#### 关键配置参数 +|参数名称 |参数类型| 参数描述 | 可选值 +|----------------------------------|--------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------- +|lateral_controller_mode | string | 在[启动时](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/launch/components/tier4_control_component.launch.xml),加载指定的横向跟踪控制器 | `mpc`(默认),`pure_pursuit` +|mpc_weight_steering_input | double | 在[mpc](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml)中表示转向输入权重,当权重增大,转向更平稳,但会使得车辆与参考轨迹之间的状态误差增大 | 0~inf +|mpc_weight_lat_error | double | 在[mpc](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml)中表示横向误差权重,当权重越大,车辆更贴近参考轨迹,但容易发生振荡 | 0~inf +|mpc_weight_heading_error | double | 在[mpc](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml)中表示航向误差权重,当权重越大,车辆与轨迹平行度更高,但可能会使得横向误差收敛速度降低 | 0~inf +|mpc_weight_terminal_lat_error | double | 在[mpc](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml)中表示末端处的横向误差,当权重越大,车辆末端终点的横向误差更小,但可能影响行使过程的稳定性 | 0~inf +|mpc_weight_terminal_heading_error | double | 在[mpc](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml)中表示末端处的航向误差,当权重越大,车辆末端终点的航向误差更小,但可能影响行使过程的稳定性 | 0~inf +|mpc_prediction_horizon | double | 在[mpc](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml)中表示预测时间窗口,该参数越大,车辆的预测时间越长,提高跟踪性能,但计算量会增大 | 0~inf 单位为秒 +|mpc_prediction_dt | double | 在[mpc](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml)中表示预测时间间隔,该参数越小,车辆的预测时间间隔越小,提高跟踪性能,但计算量会增大 | 0~inf 单位为秒 +|kp | double | 在[pid](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/control/trajectory_follower/longitudinal/pid.param.yaml)中表示纵向误差的权重,该参数越大,误差越小,但过大会使得电机输出过大,需要合理设置范围 | 0~inf +|ki | double | 在[pid](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/control/trajectory_follower/longitudinal/pid.param.yaml)中表示纵向累积误差的权重,该参数会使得纵向误差越来越小,需要合理设置范围 | 0~inf +|kd | double | 在[pid](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/control/trajectory_follower/longitudinal/pid.param.yaml)中表示纵向误差的变化率权重,该参数可以减少纵向误差的的振荡,需要合理设置范围 | 0~inf + +#### 详细配置参数 +关于各节点详细参数配置,如下所示: + +|节点名称 | 文件位置 | +|--------|---------| +|autonomous_emergency_braking | +|control_performance_analysis | +|joy_controller | +|lane_departure_checker | +|mpc_lateral_controller | +|obstacle_collision_checker | +|operation_mode_transition_manager | +|pid_longitudinal_controller | +|pure_pursuit | None +|shift_decider | None +|vehicle_cmd_gate | + + +## 四轮转向车辆运动学模型 +具备四轮转向结构的车辆比一般常见的前轮转向结构的车辆更灵活,与同尺寸前轮转向结构的车辆相比,具有更小的转向半径,这意味着它能在更狭小的空间进行移动或转向。在高速道路行驶时,具备四轮转向结构的车辆可以通过调整后轮的转向,使车辆获得更大的转弯半径以提高车身的稳定性 +### 基于笛卡尔坐标系的四轮转向运动学模型 + +![four-wheel-steering-model](images/four-wheel-steering-model.png) + +根据上图所示,$A$ 、$B$、$C$分别表示前后轮中心以及车辆重心。$V$表示车辆的速度,$\ell_f$、$\ell_r$ +表示前轮和后轮分别到车辆重心的距离,$\delta_f$、$\delta_r$表示分别前轮转角与后轮转角。$\psi$表示车辆航向角,$\beta$表示车辆侧偏角。$O$表示车辆的旋转中心,$R$表示车辆的旋转半径。 +将车辆当前速度$V$沿全局坐标系的方向进行分解,记为$\dot{X}$和$\dot{Y}$,其中$\dot{X}$表示车辆的沿全局坐标方向下的速度,$\dot{Y}$表示车辆沿全局坐标方向下的速度,那么有: + +
+\[ +\begin{align} +\dot{X}=V \cos(\psi+\beta) \\ +\dot{Y}=V \sin(\psi+\beta) +\end{align} +\tag{1.1} +\] +
+ +根据正弦定理,在$\angle OCA$中有: +$$ +\frac{\sin \left(\delta_f-\beta\right)}{\ell_f}=\frac{\sin \left(\frac{\pi}{2}-\delta_f\right)}{R} \tag{1.2} +$$ + + +同理,在$\angle OCB$中有: +$$ +\frac{\sin \left(\beta-\delta_r\right)}{\ell_r}=\frac{\sin \left(\frac{\pi}{2}+\delta_r\right)}{R} \tag{1.3} +$$ + +根据积化和差公式对式(1.2)展开,有: +$$ +\frac{\sin(\delta_f) \cos(\beta) - \cos(\delta_f) \sin(\beta)}{\ell_f} = \frac{\cos(\delta_f)}{R} \tag{1.4} +$$ + +同理,对式(1.3)展开,有: +$$ +\frac{\sin(\beta) \cos(\delta_r) - \cos(\beta) \sin(\delta_r)}{\ell_r} = \frac{\cos(\delta_r)}{R} \tag{1.5} +$$ + +对等式(1.4)两边同时乘以 $\frac{\ell_f}{\cos(\delta_f)}$ 有: +$$ +\tan(\delta_f) \cos(\beta) - \sin(\beta) = \frac{\ell_f}{R} \tag{1.6} +$$ + +对等式(1.5)两边同时乘以 $\frac{\ell_r}{\cos(\delta_r)}$ 有: +$$ +\sin(\beta) - \cos(\beta) \tan(\delta_r) = \frac{\ell_r}{R} \tag{1.7} +$$ + +等式(1.6)与(1.7)相加,有: +$$ +\cos(\beta)(\tan(\delta_f) - \tan(\delta_r)) = \frac{\ell_f + \ell_r}{R} \tag{1.8} +$$ + +当车辆低速行驶时,车辆的角速度表示如下: +$$ +\dot{\psi} =\frac{V}{R} \tag{1.9} +$$ + +联合等式(1.8)和(1.9),有: +$$ +\dot{\psi} = \frac{V\cos(\beta)}{\ell_f + \ell_r} (\tan(\delta_f) - \tan(\delta_r)) \tag{1.10} +$$ + +那么车辆的运动学方程可以表示为: + +
+\[ +\begin{aligned} +\dot{X} & =V \cos (\psi+\beta) \\ +\dot{Y} & =V \sin (\psi+\beta) \\ +\dot{\psi} & =\frac{V \cos (\beta)}{\ell_f+\ell_r}\left(\tan \left(\delta_f\right)-\tan \left(\delta_r\right)\right) +\end{aligned} \tag{1.11} +\] +
+ + +其中,$\dot{X}$、$\dot{Y}$、$\dot{\psi}$分别表示车辆在全局坐标系下的沿$X$轴、$Y$轴方向的速度和航向角速度。 +假设前后轮转向满足同角异向运动形式,即:当车辆发生转向时,前后轮的转角大小相等,方向相反。进一步地,当车辆在低速行驶时,几乎忽略侧滑角对车辆运动的影响,那么有$\beta=0$,此时车辆的航向角与车辆的前进方向一致,基于以上假设,关于式$(1.11)$的车辆运动学方程可以简化为: + +
+\[ +\begin{align*} +\dot{X} & =V \cos (\psi) \\ +\dot{Y} & =V \sin (\psi) \\ +\dot{\psi} & =\frac{2 V \tan \left(\delta_f\right)}{\ell_f+\ell_r} +\end{align*} \tag*{1.12} +\] +
+ +### 基于道路坐标系的四轮转向运动学模型 +从前面的模型推导中不难看出,车辆运动状态的描述依赖于坐标系本身。当车辆行驶在道路时,我们更希望使用基于道路坐标来描述车辆运动状态。 + +![base_on_path_coordinate_of_four_wheel_steering_model](images/base_on_path_coordinate_of_four_wheel_steering_model.png) +根据上图所示, $e_{ra}$表示车辆到道路的横向距离,$\theta$表示车辆在全局坐标下的航向角,$v$表示车辆当前速度,$\delta$表示车辆的转向角。$\left(c_x,c_y\right)$表示车辆在道路下的投影点(即车辆在道路下的最近点),$\theta_p$表示该投影点的切线与全局坐标系的$x$轴的夹角。$s$表示道路的起点到投影点的距离,我们将使用$\kappa(s)$表示道路投影点的曲率。 +车辆在道路投影点的曲率可以表述为: +$$ +\kappa(s)=\frac{d\theta_p}{ds} \tag{2.1} +$$ +将投影点沿切线方向与其垂直方向建立坐标系,其垂直方向到车辆的距离记为车辆相对于道路坐标下的横向距离$e_{ra}$。其中,车辆相对道路坐标下的旋转角$\theta_{e}$可以表示为: +$$ +\theta_e = \theta - \theta_p \tag{2.2} +$$ + +因此,车辆的在道路坐标下的状态变量可以用 $\begin{bmatrix} s & e_{ra} & \theta_e \end{bmatrix} ^ \mathrm{T}$ 来表示。 + +根据式$(2.1)$,求$\theta_p$关于时间$t$的导数,有: +$$ +\dot{\theta}_p=\kappa(s)\dot{s} \tag{2.3} +$$ + +由文献[2]的分析可知: + +
+\[ +\dot{s}=v{\rm{cos}}(\theta_e)+\dot{\theta}_pe_{ra} \tag{2.4} +\] +
+ +将式(2.3)代入式(2.4),整理得: +$$ +\dot{s}=\frac{v\rm{cos}(\theta_e)}{1-e_{ra}\kappa(s)} \tag{2.5} +$$ + +那么,车辆在frenet坐标系下的横向速度可以表示为: + +
+\[ +\dot{e}_{ra}= v_{x_{car}} - v_{x_{traj}} \tag{2.6} +\] +
+ +$v_{x_{car}}$表示为车辆在frenet坐标系下的横向速度,$v_{x_{traj}}$表示为(参考轨迹)投影点在frenet坐标下的横向速度,由于投影点在(frenet坐标下)垂直方向的速度为0。即:$v_{x_{traj}}=0$,即: + +
+\[ +\dot{e}_{ra}=v{\rm{sin}}(\theta_e) \tag{2.7} +\] +
+ +根据式子(2.2)可知,车辆相对于道路的旋转角速度为: +$$ +\dot{\theta}_e=\dot{\theta}-\dot{\theta}_p \tag{2.8} +$$ + +由式子(1.12)可知,$\dot{\theta}=\frac{2 v \tan \left(\delta_f\right)}{L},$由文献[2]可知,$\dot{\theta}_p=\frac{ v \kappa(s){\rm{cos}}(\theta_e)}{1-e_{ra}\kappa(s)}$,将其代入到式(2.8)有: + +
+\[ +\dot{\theta}_e=\frac{2 v \tan \left(\delta_f\right)}{L}-\frac{ v \kappa(s){\rm{cos}}(\theta_e)}{1-e_{ra}\kappa(s)} \tag{2.9} +\] +
+ +联立上述公式就可以得到四轮转向的车辆运行学模型在道路坐标系下的方程为: + +
+\[ +\left[ \begin{array}{c} \dot{s} \\ \dot{e}_{ra} \\ \dot{\theta}_e \end{array} \right] =\left[ \begin{array}{c} \frac{v\rm{cos}(\theta_e)}{1-e_{ra}\kappa(s)} \\ {v \rm{sin}(\theta_e)} \\ \frac{2 v \rm{tan}(\delta)}{L} - \frac{v \kappa(s)\rm{cos}(\theta_e)}{1-e_{ra}\kappa(s)} \end{array} \right]\tag{2.10} +\] +
+ +## 控制算法 +在Autoware.core/universe中,车辆控制分为横向控制与纵向控制。通过对控制问题的解耦,降低算法复杂度以满足控制性能的要求。纵向控制用于车辆速度的加减速。横向控制则用于车辆的转向控制。 + +## 基于道路坐标系下车辆纵向控制算法 +待完善 + +## 基于道路坐标系下车辆横向控制算法 +目前,车辆的横向控制算法基本分为三类: + 1. 基于几何的横向控制算法,如:Pure Pursuit,Stanley + 2. 基于模型的横向控制算法,如:LQR,MPC + 3. 基于机器学习的横向控制算法,如:强化学习,深度学习 + +在Autoware.core/universe中,提供了两种横向控制算法,分别是Pure Pursuit以及MPC,用户可以根据自己的需求选择合适的算法。 + +### MPC算法 +模型预测控制(MPC)算法,该算法的基本思想是通过对目标对象建立数学模型,然后利用模型的预测系统在某一未来时间段内的表现来进行优化控制,通过求解优化问题的最优解来获得当前的最佳输出。 + +> 下面章节的内容是对mpc算法基本思想的概括与总结,可能与Autoware.core/universe中的mpc算法的代码实现存在差异,后面会对相关内容进行补充 +#### 选择控制变量 +由于参考轨迹已知,因此投影点处的角速度$\dot{\theta}_p=v_{y_{traj}}k(s)$,$v_{y_{traj}}$是投影点在参考轨迹处的纵向速度,$k(s)$表示参考轨迹在投影点处的曲率。结合式(1.12),式(2.3),式(2.7)和式(2.8),可以得到: + + +
+\[ +\left[ \begin{array}{c} \dot{e}_{ra} \\ \dot{\theta}_e \end{array} \right]= \left[ \begin{array}{c} v\rm{sin}(\theta_e) \\ \frac{2v \tan(\delta)}{L} - v_{ref}k(s) \end{array} \right] \tag{3.1} +\] +
+ +记状态变量$x=\begin{bmatrix}e_{ra} \\ \theta_e \end{bmatrix}$,输入变量$u=\delta$,则状态方程可以表示为: +$$ +\dot{x}=f(x,u) \tag{3.2} +$$ + +#### 运动模型线性化 +假设车辆在跟踪过程中,车辆在道路投影点的附近。通过对模型在投影点处进行一阶泰勒展开来线性化,得到: +$$ +\dot{x}=f(x_{ref},u_{ref})+\frac{\partial f(x,u)}{\partial x}(x-x_{ref})+\frac{\partial f(x,u)}{\partial u}(u-u_{ref}) + \tag{3.3} +$$ + +其中 + +
+\[ +\frac{\partial f(x,u)}{\partial x} = \begin{bmatrix} 0 & vcos \theta_{e}\\ 0 & 0 \end{bmatrix}, \frac{\partial f(x,u)}{\partial u} = \begin{bmatrix} 0 \\ \frac{2v}{Lcos^2 \delta} \end{bmatrix} \tag{3.14} +\] +
+ +进一步,记$A=\frac{\partial f(x,u)}{\partial x}$,$B=\frac{\partial f(x,u)}{\partial u}$,则有: +$$ +\dot{x}=f(x_{ref},u_{ref})+A(x-x_{ref})+B(u-u_{ref}) \tag{3.5} +$$ + +至此,我们得到四轮转向车辆的运动学线性状态方程。 + +#### 构建误差模型 +我们可以在参考点处构建误差状态方程,即: + +
+\[ +\begin{align*} +\dot{x}-\dot{x}_{ref} &= f(x_{ref},u_{ref})+A(x-x_{ref})+B(u-u_{ref}) - f(x_{ref},u_{ref}) \\ +\dot{\bar{x}} &= A\bar{x} +B\bar{u} +\end{align*} \tag{3.6} +\] +
+ +其中,$\dot{\bar{x}}=\dot{x}-\dot{x}_{ref}$,$\bar{x} = x-x_{ref}$,$\bar{u} = u-u_{ref}$ + +#### 误差模型离散化 +对式子(3.6)进行离散化,我们可以得到: + +
+\[ +\bar{x}_{k+1}-\bar{x}_k = A\bar{x}_k + B\bar{u}_k \tag{3.7} +\] +
+ +整理得: +$$ +\bar{x}_{k+1} = (I+AT)\bar{x}_k+BT\bar{u}_k \tag{3.8} +$$ + +记:$\bar{A}=(I+AT)$,$\bar{B}=BT$,则有: +$$ +\bar{x}_{k+1}=\bar{A}\bar{x}_k+\bar{B}\bar{u}_k \tag{3.9} +$$ + +#### 模型预测 +由于我们的目标是预测车辆在未来的状态,因此我们需要对模型进行预测。假设预测未来n步的状态,则有: + +
+\[ +\begin{bmatrix} \bar{x}_0 \\ \bar{x}_1 \\ \bar{x}_2 \\ \bar{x}_3 \\ \vdots \\ \bar{x}_n\end{bmatrix} = \begin{bmatrix}I \\ \bar{A} \\\bar{A}^2 \\\bar{A}^3 \\\vdots\\\bar{A}^n \\\end{bmatrix}\bar{x}_0 + \begin{bmatrix}0 & 0 & 0 & \cdots & 0 \\ \bar{B} & 0 & 0 & \cdots & 0\\\bar{A}\bar{B} & \bar{B} & 0 & \cdots & 0\\\bar{A}^2\bar{B} & \bar{A}\bar{B} & \bar{B} & \cdots & 0\\\vdots & \vdots & \vdots & \ddots & \vdots\\\bar{A}^{n-1}\bar{B} & \bar{A}^{n-2}\bar{B} & \bar{A}^{n-3}\bar{B} & \cdots & \bar{B}\end{bmatrix}\begin{bmatrix} \bar{u}_0 \\ \bar{u}_1 \\ \bar{u}_2 \\ \vdots \\ \bar{u}_{n-1}\end{bmatrix} \tag{3.10} +\] +
+ +简记为: +$$ +\tilde{X}=\tilde{A}\bar{x}_0+\tilde{B}\tilde{U} \tag{3.11} +$$ + + + +#### 构建带约束的二次规划问题 +我们的目标是通过构建一个最小化函数,在满足一定的物理约束下,使得当前的状态序列$\bar{x}_{i},i\in[0,n]$与期望的状态序列$\bar{x}_{i_{ref}},i\in[0,n]$的误差以及预测输入$\bar{u}_j,j\in[0,n-1]$最小。 +
+\[ +J = min\sum_{i=0}^{n-1}((\bar{x}_i-\bar{x}_{i_{ref}})^\mathrm{T}Q(\bar{x}_i-\bar{x}_{i_{ref}}) + \bar{u}_{i}^\mathrm{T}R\bar{u}_{i}) + (\bar{x}_n-\bar{x}_{n_{ref}})^\mathrm{T}F(\bar{x}_n-\bar{x}_{n_{ref}}) \tag{3.12} +\] +
+ +由于$\bar{x}_i$表示误差状态,不难看出,期望的误差状态$\bar{x}_{i_{ref}}=0$。整理得: +
+\[ +J =\text{min} \begin{bmatrix} \bar{x}_0 \\ \bar{x}_1 \\ \bar{x}_2 \\ \bar{x}_3 \\ \vdots \\ \bar{x}_n \end{bmatrix}^T \begin{bmatrix} Q & 0 & 0 & 0 & \cdots & 0\\ 0 & Q & 0 & 0 & \cdots & 0 \\ 0 & 0 & Q & 0 & \cdots & 0 \\ 0 & 0 & 0 & Q & \cdots & 0 \\ \vdots & \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & 0 & \cdots & F \end{bmatrix} \begin{bmatrix} \bar{x}_0 \\ \bar{x}_1 \\ \bar{x}_2 \\ \bar{x}_3 \\ \vdots \\ \bar{x}_n \end{bmatrix} + \begin{bmatrix} \bar{u}_0 \\ \bar{u}_1 \\ \bar{u}_2 \\ \vdots \\ \bar{u}_{n-1} \end{bmatrix}^T \begin{bmatrix} R & 0 & 0 & \cdots & 0 \\ 0 & R & 0 & \cdots & 0 \\ 0 & 0 & R & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & R\end{bmatrix} \begin{bmatrix} \bar{u}_0 \\ \bar{u}_1 \\ \bar{u}_2 \\ \vdots \\ \bar{u}_{n-1} \end{bmatrix} \tag{3.13} +\] +
+ +简记为: + +
+\[ +\begin{align*} +J = \text{min} \quad & \mathbf{\tilde{X}}^\top \mathbf{\tilde{Q}} \mathbf{\tilde{X}} + \mathbf{\tilde{U}}^\top \mathbf{\tilde{R}} \mathbf{\tilde{U}} +\end{align*} \tag{3.14} +\] +
+ +现将式(3.14)转化为如下的标准形式: + +$$ +\begin{align*} +\text{minimize} \quad & \frac{1}{2} \mathbf{x}^\top \mathbf{H} \mathbf{x} + \mathbf{c}^\top \mathbf{x} \\ +\text{subject to} \quad & \mathbf{A} \mathbf{x} \leq \mathbf{b} \\ +& \mathbf{G} \mathbf{x} = \mathbf{h} +\end{align*} +$$ + +将式(3.11)代入到式(3.14)中并展开,有: + +
+\[ +\begin{align*} +J &= \text{min} \quad \mathbf{\bar{x}_0^\top\tilde{A}^\top \tilde{Q} \tilde{A}\bar{x}_0 +\tilde{U}^\top\tilde{B}^\top \tilde{Q} \tilde{B}\tilde{U} + \bar{x}_0^\top\tilde{A}^\top \tilde{Q} \tilde{B}\tilde{U} + \tilde{U}^\top\tilde{B}^\top \tilde{Q} \tilde{A}\bar{x}_0 + \tilde{U}^\top\tilde{R}\tilde{U}} +\end{align*} \tag{3.15} +\] +
+ +其中,$\bar{x}_0^\top\tilde{A}^\top \tilde{Q} \tilde{A}\bar{x}_0$只与初始状态有关,因此可以看作常数$C$,$\tilde{U}^\top\tilde{B}^\top \tilde{Q} \tilde{A}\bar{x}_0$是$\bar{x}_0^\top\tilde{A}^\top \tilde{Q} \tilde{B}\tilde{U}$的转置,而且是1xn维向量,两者相加的结果是$2\bar{x}_0^\top\tilde{A}^\top\tilde{Q}\tilde{B}\tilde{U}$。综上所述,整理得: + +
+\[ +\begin{align*} +J &= \text{min} \quad \mathbf{ \frac{1}{2} \tilde{U}^\top (\tilde{B}^\top \tilde{Q} \tilde{B} + \tilde{R}) \tilde{U} + \bar{x}_0^\top\tilde{A}^\top\tilde{Q}\tilde{B}\tilde{U}} +\end{align*} \tag{3.16} +\] +
+ +其中,$H=\tilde{B}^\top \tilde{Q} \tilde{B} + \tilde{R}$,$c^\top=\bar{x}_0^\top\tilde{A}^\top\tilde{Q}\tilde{B}$ +对预测输入增加不等式约束,那么有: + +
+\[ +\begin{aligned} +&min \quad \frac{1}{2} \tilde{U}^\top (\tilde{B}^\top \tilde{Q} \tilde{B} + \tilde{R}) \tilde{U} + \bar{x}_0^\top\tilde{A}^\top\tilde{Q}\tilde{B}\tilde{U} \\ +&s.t. \quad \tilde{U}_{min} \leq \tilde{U} \leq \tilde{U}_{max} +\end{aligned} \tag{3.17} +\] +
+ +利用求解器对式(3.17)进行求解,得到的最优解直接作为车辆的控制信号下发到车辆控制单元中,实现车辆的横向控制。 + + +## 参考资料 +[1]: Rajamani, Rajesh. Vehicle dynamics and control. Springer Science & Business Media, 2011. +[2]: A. De Luca, G.Oriolo, and C. Samson. Feedback control of anonholonomic car-like robot. InRobot MotionPlanning and Control, pages 171–249. 1998 \ No newline at end of file diff --git a/docs/images/lanelet2-map.jpg b/docs/images/lanelet2-map.jpg new file mode 100644 index 0000000..5517223 Binary files /dev/null and b/docs/images/lanelet2-map.jpg differ diff --git a/docs/images/pixkit-architecture.jpg b/docs/images/pixkit-architecture.jpg new file mode 100644 index 0000000..e583c4c Binary files /dev/null and b/docs/images/pixkit-architecture.jpg differ diff --git a/docs/images/pointcloud-map.jpg b/docs/images/pointcloud-map.jpg new file mode 100644 index 0000000..9acbd80 Binary files /dev/null and b/docs/images/pointcloud-map.jpg differ diff --git a/docs/images/qr-code.png b/docs/images/qr-code.png new file mode 100644 index 0000000..8c839ea Binary files /dev/null and b/docs/images/qr-code.png differ diff --git a/docs/images/remote-controller.jpg b/docs/images/remote-controller.jpg new file mode 100644 index 0000000..a7c7feb Binary files /dev/null and b/docs/images/remote-controller.jpg differ diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..7bccc13 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,139 @@ + + +# PIXKIT开源自动驾驶开发教学套件 +## Pixmoving Inc + +### Who Are We +[PIX Moving](http://www.pixmoving.city)选择从零开始打造全新产业生态,由来自“中国、意大利、印度、日本、巴基斯坦、美国”等全球6个国家的近200名喜欢冒险的天才组成。我们从研发自动驾驶“滑板底盘”开始,因为它是铺平智能汽车规模化应用的基石,也是未来城市的基础设施。同时,PIX自主开发了屡获殊荣的大型金属3D打印系统、无模具成型系统、复合材料成型技术,结合PIX独有的车辆参数化设计算法,成功减少了60%的汽车零部件及装配工作,让产品开发者能够使用PIX滑板底盘及工具快速完成产品开发及制造。PIX被汽车产业誉为下一代汽车制造的灯塔工厂,并成为数字工业巨头Autodesk公司全球创新合作伙伴。 + +## PIXKIT +![pixkit-architecture](./images/pixkit-architecture.jpg) + +- 提供一站式自动驾驶开发解决方案,为客户提供0-1的自动驾驶开发平台 +- 为客户完成计算平台、线控底盘、传感器与自动驾驶系统的集成,让客户专注于算法开发 +- 提供地图与传感器标定工具链,降低开发门槛 +- 开源所有源代码并提供详细的文档,让开发更得心应手 +- 持续更新、迭代软件与算法,保持技术前沿 +- 得益于ROS/Autoware的社区资源,为开发提供源源不断动力 +- 提供不同ODD示例,将Autoware拓展到不同场景(后续提供支持) + +### 硬件构成 + +#### 1.[纯电开源Pix Ultra-Skateboard线控底盘](http://www.pixmoving.city/?page_id=673) +![pix-chassis](./images/pix-chassis.jpg) +#### 2.传感器套件及模块化支架 +![pixkit-sensors](./images/pixkit-sensors.jpg) +#### 3.底盘工业遥控器 +![remote-controller](./images/remote-controller.jpg) + +### 自动驾驶开发工具链 +#### 传感器标定 +- [camera内参标定](./%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A0%87%E5%AE%9A/camera%E5%86%85%E5%8F%82%E6%A0%87%E5%AE%9A.md) +````yaml +image_width: 1920 +image_height: 1080 +camera_name: trafficlight +camera_matrix: + rows: 3 + cols: 3 + data: [1010.2744 , 0. , 941.65588, + 0. , 1008.70001, 517.61131, + 0. , 0. , 1. ] +distortion_model: plumb_bob +distortion_coefficients: + rows: 1 + cols: 5 + data: [-0.336502, 0.091380, -0.001975, 0.000444, 0.000000] +rectification_matrix: + rows: 3 + cols: 3 + data: [1., 0., 0., + 0., 1., 0., + 0., 0., 1.] +projection_matrix: + rows: 3 + cols: 4 + data: [723.01111, 0. , 947.26543, 0. , + 0. , 895.51398, 508.08632, 0. , + 0. , 0. , 1. , 0. ] +```` +- [LiDAR-camera外参标定](./%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A0%87%E5%AE%9A/LiDAR-camera%E6%A0%87%E5%AE%9A.md) +```yaml +rs162camera: + x: 0.5789871 + y: -0.08247789 + z: -0.3453706 + roll: -1.55877693 + pitch: 0.00713767 + yaw: -1.55820481 +``` +![camera-lidar-calibration](./%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A0%87%E5%AE%9A/image/lidar2camera/cali_result.jpg) +- [IMU标定](./%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A0%87%E5%AE%9A/IMU%E6%A0%87%E5%AE%9A.md) +```yaml +Gyr: + unit: " rad/s" + avg-axis: + gyr_n: 1.5059072284923697e-03 + gyr_w: 4.3430855283551206e-05 + x-axis: + gyr_n: 1.6901233770452774e-03 + gyr_w: 5.0850707578827144e-05 + y-axis: + gyr_n: 1.3392742394140514e-03 + gyr_w: 3.7654685426892668e-05 + z-axis: + gyr_n: 1.4883240690177805e-03 + gyr_w: 4.1787172844933785e-05 +Acc: + unit: " m/s^2" + avg-axis: + acc_n: 5.9215155351791055e-03 + acc_w: 1.3379378640306186e-04 + x-axis: + acc_n: 6.0017230453598448e-03 + acc_w: 1.0726720420556991e-04 + y-axis: + acc_n: 6.7689914243794181e-03 + acc_w: 1.6961241589651517e-04 + z-axis: + acc_n: 4.9938321357980535e-03 + acc_w: 1.2450173910710051e-04 +``` + +#### 高精度地图制作 +- [点云地图](./%E5%9C%B0%E5%9B%BE/%E7%82%B9%E4%BA%91%E5%9C%B0%E5%9B%BE.md) +![pointcloud-map](./images/pointcloud-map.jpg) +- [Lanelet2地图](./%E5%9C%B0%E5%9B%BE/lanelet2%E5%9C%B0%E5%9B%BE.md) +![lanelet2-map](./images/lanelet2-map.jpg) + +### 自动驾驶软硬件文档支持 +- [硬件集成](./%E7%A1%AC%E4%BB%B6%E5%AE%89%E8%A3%85/index.md) +- [pix底盘使用手册](./pix%E5%BA%95%E7%9B%98%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C/index.md) +- [传感器标定](./%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A0%87%E5%AE%9A/camera%E5%86%85%E5%8F%82%E6%A0%87%E5%AE%9A.md) +- [地图制作](./%E5%9C%B0%E5%9B%BE/index.md) +- [Autoware教学](./Autoware%E4%B8%8A%E6%89%8B/%E5%90%AF%E5%8A%A8autoware.md) + +## 联系我们 +对PIX或我们所提供的产品感兴趣?请随时与我们取得联系。 +PIX 期待与全球跨领域的企业、组织、先行者们建立合作,共同致力于汽车产业与城市的创新变革。 + +- 生态合作: +- 商务合作: +- 媒体报道: +- 获得更多关于产品的信息: + +![qr-code](./images/qr-code.png) \ No newline at end of file diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/.pages" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/.pages" new file mode 100644 index 0000000..b284f0e --- /dev/null +++ "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/.pages" @@ -0,0 +1,10 @@ +nav: + - Overview: index.md + - 产品介绍: 产品介绍.md + - 使用与开发: 使用与开发.md + - 车辆安全机制: 车辆安全机制.md + - 底盘性能参数: 底盘性能参数.md + - 常见问题处理: 常见问题处理.md + - 日常维护与注意事项: 日常维护与注意事项.md + - 售后与技术支持: 售后与技术支持.md + \ No newline at end of file diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/3d-model.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/3d-model.png" new file mode 100644 index 0000000..64ffef3 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/3d-model.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/bolt.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/bolt.png" new file mode 100644 index 0000000..7c6f786 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/bolt.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/bumper.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/bumper.png" new file mode 100644 index 0000000..c1bdb01 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/bumper.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/charging-port.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/charging-port.png" new file mode 100644 index 0000000..cefba4c Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/charging-port.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/chassis-dimension.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/chassis-dimension.png" new file mode 100644 index 0000000..fedc23b Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/chassis-dimension.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/chassis-overview.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/chassis-overview.png" new file mode 100644 index 0000000..5147bc9 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/chassis-overview.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/chassis.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/chassis.png" new file mode 100644 index 0000000..be87901 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/chassis.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/connection-ports.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/connection-ports.png" new file mode 100644 index 0000000..e45e2d1 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/connection-ports.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/display-panel-1.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/display-panel-1.png" new file mode 100644 index 0000000..47776a7 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/display-panel-1.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/display-panel-2.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/display-panel-2.png" new file mode 100644 index 0000000..a2d80c8 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/display-panel-2.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/display-panel-3.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/display-panel-3.png" new file mode 100644 index 0000000..65d9d54 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/display-panel-3.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/display-panel-4.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/display-panel-4.png" new file mode 100644 index 0000000..d45ccab Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/display-panel-4.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/emergency-brake-on-chassis.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/emergency-brake-on-chassis.png" new file mode 100644 index 0000000..8e037a9 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/emergency-brake-on-chassis.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/emergency-brake-on-remote.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/emergency-brake-on-remote.png" new file mode 100644 index 0000000..6173c5c Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/emergency-brake-on-remote.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/lights.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/lights.png" new file mode 100644 index 0000000..d38a63b Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/lights.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/mount-point.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/mount-point.png" new file mode 100644 index 0000000..94c4b1f Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/mount-point.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/pixloop.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/pixloop.png" new file mode 100644 index 0000000..3708001 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/pixloop.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/power-switch.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/power-switch.png" new file mode 100644 index 0000000..ecab825 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/power-switch.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/product-list.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/product-list.png" new file mode 100644 index 0000000..8474282 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/product-list.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/remote-control-2.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/remote-control-2.png" new file mode 100644 index 0000000..6d913d0 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/remote-control-2.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/remote-control.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/remote-control.png" new file mode 100644 index 0000000..29e29f1 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/remote-control.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/remote-self-driving.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/remote-self-driving.png" new file mode 100644 index 0000000..abb49d8 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/remote-self-driving.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/safty-guard.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/safty-guard.png" new file mode 100644 index 0000000..65b0742 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/safty-guard.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/self-driving-port.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/self-driving-port.png" new file mode 100644 index 0000000..a915d73 Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/self-driving-port.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/steer-mode.png" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/steer-mode.png" new file mode 100644 index 0000000..b471c4a Binary files /dev/null and "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/images/steer-mode.png" differ diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/index.md" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/index.md" new file mode 100644 index 0000000..e0c5d5b --- /dev/null +++ "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/index.md" @@ -0,0 +1,34 @@ +# pix底盘使用手册 + +![pixloop](./images/pixloop.png) + +## PIXLOOP线控底盘HOOKE用户使用说明书 + +![chassis](./images/chassis.png) + +## 前言 + +非常感谢您选择我们 PIX 的产品,您的认可和满意是我们最大的动力。 + +PIXLOOP-HOOKE 线控底盘是PIX Moving 为工程师打造的一款纯线控底盘,针对园区内 L4级低速自动驾驶提供的线控底盘。该底盘采用了全新的转向模式和新的驱动方式。整车电力由一块72V的动力电池和一个12V免维护铅酸电池共同提供。全车采用高强度钢材搭建。通过遥控器可以轻松控制底盘的转向与动力,同时 PIXLOOP 底盘可自行搭载自动驾驶系统。本文将以HOOKE4轮4驱版本详细介绍底盘每一个功能的同时让你能快速使用本产品 。 + +1. 本手册在印刷时已尽可能的包含各项功能介绍和使用说明。但由于产品功能不断完善、设计变更等,仍可能与您购买的产品有不符之处。由于产品更新,本手册与实际产品在颜色、外观等方面可能有所偏差,请以实际产品为准。 + +2. 为保护用户的合法权益,请您在使用本产品前务必仔细阅读我们随附本产品提供的说明书。套件提供商保留对上述文档进行更新的权利。请您使用前务必认真阅读此说明书并按照说明书操作本产品。 + +3. 本产品不适合未满18周岁及其他不具备完全民事行为能力的人士使用,请您避免上述人士接触本产品,在有上述人士出现的场合操作时请您格外注意。 + +4. 一旦开始使用本产品,即视为您已阅读、理解、认可和接受本产品的说明书、免责声明的全部条款和内容。使用者承诺对自已的行为及因此而产生的所有后果负责。 + +5. 在使用本产品的过程中,请您务必严格遵守并执行包括但不限于说明书里的要求。对于违反说明书所提示的使用行为或不可抗因素导致的一切人身伤害、事故、财产损失、法律纠纷,及其他一切造成利益冲突的不利事件,均由用户自己承担相关责任和损失,产品提供商将不承担任何责任。 + +6. 用户使用本产品直接或间接发生的任何违反法律规定的行为,套件提供商将不承担任何责任。 + +## 目录 +- [产品介绍](./%E4%BA%A7%E5%93%81%E4%BB%8B%E7%BB%8D.md) +- [使用与开发](./%E4%BD%BF%E7%94%A8%E4%B8%8E%E5%BC%80%E5%8F%91.md) +- [车辆安全机制](./%E8%BD%A6%E8%BE%86%E5%AE%89%E5%85%A8%E6%9C%BA%E5%88%B6.md) +- [底盘性能参数](./%E5%BA%95%E7%9B%98%E6%80%A7%E8%83%BD%E5%8F%82%E6%95%B0.md) +- [常见问题处理](./%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E5%A4%84%E7%90%86.md) +- [日常维护与注意事项](./%E6%97%A5%E5%B8%B8%E7%BB%B4%E6%8A%A4%E4%B8%8E%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md) +- [售后与技术支持](./%E5%94%AE%E5%90%8E%E4%B8%8E%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81.md) \ No newline at end of file diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\344\272\247\345\223\201\344\273\213\347\273\215.md" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\344\272\247\345\223\201\344\273\213\347\273\215.md" new file mode 100644 index 0000000..748a4aa --- /dev/null +++ "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\344\272\247\345\223\201\344\273\213\347\273\215.md" @@ -0,0 +1,192 @@ +# 产品介绍 + +## 1 产品清单 + +![](./images/product-list.png) + +## 2 基本功能 + +底盘通过无线遥控器与底盘本体连接,通过无线遥控器或者其他CAN通讯控制系统可以对底盘进行基本控制,也可以部署自动驾驶后实现自动驾驶功能,其中包括: + +- 四轮独立运动控制(后驱,四驱,高级功能下可开放四轮独立控制和差速转向模式) + +- 底盘挡位切换(进档,退档,空挡) + +- 两种转向模式(前轮阿克曼转向模式,四轮转向模式) + +- 底盘电子驻车控制/液压制动控制 + +- 底盘制动控制 + +- 多种电压平台供电功能 + +- 自动驾驶/遥控驾驶切换 + +- 低速行车模式 + +- 高级自动驾驶开发等 + +## 3 产品概述 + +PIXLOOP底盘主体承重结构采用高强度钢装配而成,表面盖板为喷涂铝板。车轮悬架部分采用专业冲压加工方式成型,设计过程采用有限元分析,充分满足车辆运动控制和不同场景因素带来的各种冲击和挑战。表面成形盖板可提供高强度机械性能还兼具美观。底盘车身采用互通箱体式结构设计,为底盘设备安装和后期扩展提供相对较大的空间冗余。 + + + +![](./images/chassis-overview.png) + +### 3.1 开关接口 + + 底盘开关以及开放接口示意图如下: + +![](./images/connection-ports.png) + +#### 急停 + +车身急停开关按压后触发,触发立即生效,底盘失去动力,转向灯“双闪”,底盘进入驻车状态。按照图示右旋即可解除急停状态。 + +#### CAN A + +自动驾驶CAN,用于接收命令和反馈底盘信息,位于车身后部检修板下和底盘表面,一共两处。 + +#### OBD + + 故障检修口,用于底盘检修。 + +#### 电源接口 + +24V电源接口,提供额定300W24V直流电源;12V额定500W直流电源,提供两种类型多个12V直流电源接口。对应线束上标注有电压标识。 + +### 3.2 灯光指示 + +底盘提供了车辆基本的灯光系统,与传统车辆相比,包含前大灯,前后转向灯,制动灯。 + +![](./images/lights.png) + +#### 前大灯 + +底盘大灯由遥控器拨动开关控制。底盘打开时,当拨动开关位于下位时,大灯处于蓝色微亮状态;当拨动开关位于上位时,大灯处于常亮状态,灯光颜色白色;同时大灯提供系统开发接口,满足二次大灯控制策略开发。 + +#### 转向灯 + +底盘转向灯为标准转向状态灯,前后左右转向灯规格相同。默认情况下转向灯为自动控制,且同时提供系统开发接口。底盘触发急停或失联时四个转向灯持续“双闪”。 + +#### 刹车灯 + +底盘刹车灯位于车身尾部,又叫尾灯。当系统开机后尾灯保持持续点亮状态,刹车时候高亮。同时尾灯提供系统开发接口,满足二次尾灯控制策略开发。 + +### 3.3 无线遥控器 + +无线遥控器是与PIX底盘连接的基本操控器,所有底盘基本控制都能在无线遥控器运行情况下实现对底盘的控制,也是非车身控制之外权限最高的底盘控制接口。 + +| 遥控器频段 | 443MHz | 接收机通讯接口 | CAN 接口 | +| -------- | ------------ | -------- | ------------- | +| 遥控器供电方式 | 3×1.5V 五号干电池 | 遥控器显示器 | LCD 显示屏 | +| 接收机供电 | 12-24V DC 供电 | 通讯距离 | 150M(视周围环境而定) | + +![](./images/remote-control.png) + +操作面板集成多种开关,分别包含遥控器摇杆×2;两段拨动开关×3;按钮×4;旋钮开关×4,功能介绍如下: + +![](./images/remote-control-2.png) + +| 编号/No | 按键名称/Name | 编号/No | 按键名称/Name | +| ----- | --------------------------- | ----- | ------------------------------ | +| 1 | 遥控开关Power Switch | 8 | 转向推杆 Sterring Control | +| 2 | 加速Throttling/制动Brakeing推杆 | 9 | 动力控制模式Motor Control Selection | +| 3 | 挡位切换 D N R | 10 | 低速模式开关 Speed Limit | +| 4 | 大灯开关 Headlights | 11 | 四驱切换开关 Drive Mode | +| 5 | 驻车开关 Handbrake | 12 | 急停按钮 Emergency Stop | +| 6 | 控制模式 Remote/Self-driving | 13 | 显示页面切换 Display Switch | +| 7 | 转向模式Sterring Mode Selection | 14 | 遥控器锁定 Lock | + +#### 电源开关 + +电源开关为遥控器上电开关。 + +#### 加速/制动推杆 + +此摇杆控制车辆油门信号与制动信号,油门控制和制动控制都为 0-1024 级单向摇杆控制,上推该摇杆实现底盘加速操作,下推实现底盘电子制动操作。 + +#### 挡位切换D N R + +该旋钮控制车辆挡位切换,提供 D,N,R 三种挡位模式。 + +- D 档:前进挡位,推动油门时车辆向前运动 + +- N 档:空挡位同时为泊车挡位,推动油门时车辆无动作响应 + +- R 档:倒退挡位,推动油门时车辆向后运动 + +#### 驻车开关 + +为两段拨动开关,可控制电子驻车。拨动开关处于上位为关闭停机驻车功能。拨动开关处于下位为启动停机驻车功能 + +控制模式 Remote/Self-driving + +该按钮可切换底盘控制模式。往下拨按钮切换为自动驾驶模式,往上拨动按钮退出自动驾驶模式切换为人工遥控模式。 + +#### 转向模式 + +该旋钮控制车辆转向模式切换,提供提供常规转向模式、前后异向转向模式、前后同向转向模式三种转向模式。 + +![](./images/steer-mode.png) + +#### 转向推杆 + +此摇杆控制车辆转向信号, 转向控制为 -1024至+1024 级双向摇杆控制。向左拨动摇杆底盘实现左转,向右拨动摇杆底盘实现右转。 + +#### 动力控制模式 + +车辆支持扭矩控制方法,扭矩控制模式下,遥控器输出的是扭矩值,即电机的驱动力的大小。 + +#### 低速模式开关 + +该按钮可启动低速模式。低速模式主要是为了防止操作者在不熟悉操作方式时产生速度过快发生危险的情况。在速度控制模式下,限速5km/h。油门模式下,当速度大于4km/h时,底盘会限制请求的扭矩,超过5km/h时请求扭矩会减小为0。若在下坡,由于重力作用,速度可能会超过5km/h。 + +#### 四驱切换开关 + +电机驱动两驱和四驱切换。 + +#### 急停按钮 + +控制车辆急停。按下急停开关按钮底盘启动紧急停止,右旋急停开关按钮为释放紧急停止功能。 + +> 注:急停开关仅在紧急情况下使用。请勿将急停开关按钮长期处于按下状态 + +#### 显示页面切换 + +遥控器主要有两个页面,可以通过遥控上Display Switch切换。第一显示屏主要显示操作指令和车辆基本状态, 第二显示界面主要显示车辆里程、系统具体故障和遥控器信号强度(信号强度由0-255代表由弱到强)。 + +#### 遥控器锁定 + +遥控器锁定后不可操作。 + +#### 显示面板介绍 + +遥控器有两个主页面,可以通过遥控上Display Switch切换。第一显示屏主要显示操作指令和车辆基本状态,详细的介绍如下图。 + +![](./images/display-panel-1.png) + +第二显示界面主要显示车辆里程、系统具体故障和遥控器信号强度,详细的介绍如下图(信号强度由0-255代表由弱到强)。 + +![](./images/display-panel-2.png) + + 此外,遥控器还有提示界面,用于遥控器的故障信号显示。 + +![](./images/display-panel-3.png) + +#### 遥控器安全操作提示 + +1. 遥控器开启和关闭时需保证各键位处于关闭状态,即驻车、空挡、遥控接管,无油门; + +2. 进入遥控模式后,请勿一次性将油门推到最大,以免发生危险,应慢慢推动油门控制方向验 证各键位是否正常工作; + +3. 在空旷环境遥控器使用范围保证在50米; + +4. 停车后保证车辆驻车、空挡状态,避免在坡道停车; + +5. 出于安全考虑,任何人在使用遥控器前需仔细阅读遥控器相关说明,切勿将遥控器交给不熟悉相关操作的人员使用,以免发生危险; + +6. 遥控器失联后底盘触发安全保护机制,急停驻车; + +7. 为了您的安全,在进入自动驾驶模式前,请务必提前熟悉遥控器的各项操作,尤其关于急停功能的使用,请在每次进入自动驾驶模式前进行遥控操作确认。为了您的安全,我们已在工控机与底层协议层定义了遥控器的绝对优先权,即平台移动的任何状态下(请在每次运行前确保遥控器电量充足),只要遥控器上电且处于遥控器接管状态,平台即进入人工接管模式,为您的安全测试保驾护航。 \ No newline at end of file diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\344\275\277\347\224\250\344\270\216\345\274\200\345\217\221.md" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\344\275\277\347\224\250\344\270\216\345\274\200\345\217\221.md" new file mode 100644 index 0000000..ae36d86 --- /dev/null +++ "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\344\275\277\347\224\250\344\270\216\345\274\200\345\217\221.md" @@ -0,0 +1,95 @@ +# 使用与开发 + +## 1 遥控底盘 + +### 1.1 底盘开机 + +1. 打开车身尾部检修盖板 + +2. 按下底盘电源开关,底盘进入初始化和自检,大约需要5S,自检完成后启动。 + +![](./images/power-switch.png) + +> 提示:开关自带指示灯,开关打开指示灯呈红色,底盘关闭指示灯熄灭。 + +### 1.2 连接遥控器 + +旋转无线遥控器电源开关至ON档,开启遥控器开关,并处于遥控接管模式,拨杆处于驻车、空挡,左右摇杆处于中间位置状态,使遥控器上电,进入遥控接管模式。启动成功后遥控器页面显示如下: + +![](./images/display-panel-4.png) + +> 提示:如果出现异常,请检查车身急停和和遥控器按钮,参照常见问题处理,确认无误后再进行下一步。 + +### 1.3 底盘关机 + +确保车辆停放正确后,将遥控器的驻车按钮启动,关闭遥控器电源按钮,按下底盘电源按键,确保车辆下电。 + +## 2 充电 + +充电环境应保持干燥通风,车辆及充电设备周围2米范围内不能有可燃物,按照以下步骤充电: + +1. 关闭底盘电源 +2. 连接便携式充电机与底盘充电插座 +3. 连接220V电源 + +![](./images/charging-port.png) + +#### 指示灯的状态 + +- 红色和绿色交替闪烁(间隔一秒),电池没有连接,未能检测到电池; + +- 红色指示灯每秒闪烁一次 风机转动, 电池容量<80%; + +- 黄灯/(绿灯)指示灯每一秒闪烁一次 电池电量≥80% + +- 绿色指示灯常亮(关机)电池电量= 100% + +1. 当充电机指示灯为绿灯常亮说明充电完成 + +2. 拔下充电机电源接头 + +3. 拔下充电机充电口接头 + +## 3 开发使用 + +### 3.1 快速搭载自定义上装 + +#### 预留安装点 + +硬件安装点,底盘提供便捷的硬件安装点,客户可以依据布置的安装点快速简易的安装支架和设备,示例如下: + +![](./images/mount-point.png) + +连接推荐采用以下规格安装连接材料: + +弹片螺母/Shrapnel nut,参考规格为欧标20M5,安装导槽/The installation guide,导槽规格为欧标2040型材,螺栓/Bolt,参考规格为M5×10 + +![](./images/bolt.png) + +#### 底盘边界模型 + +模型包含cgr和3dxml两个格式,是消参格式,客户可以用目前主流的3D工程软件打开,包括不限于达索CATIA、UG、Autodesk。CGR CATIA打开需要以插入形式打开。 + +注意此文件不可随意传播,部分部件和实物有差异,仅可作为参考。 + +![](./images/3d-model.png) + +### 3.2 自动驾驶应用 + +- 底盘为自动驾驶实施提供自动驾驶常用电源,专用CAN接口,标准底盘开放自动驾驶协议和对应DBC文件。 + +- 电源接口输出额定功率累计值为12V500W,24V300W,接口类型参考“产品概述—开关接口。 + +- 提供两个自动驾驶专用CAN接口,插件型号DB9,CAN2.0B通讯,属于底盘CAN-A。 + +- 提供标准底盘自动驾驶CAN协议和对应DBC文件。 + +![](./images/self-driving-port.png) + +> 打开自动驾驶时,需要在遥控上切换自动驾驶模式。 + +![](./images/remote-self-driving.png) + +### 3.3 高级权限(选配) + +支持分布式驱动研发,实现高级运动控制,灯光控制接口开放,高级驾驶接口是为需要研究底盘动力学模型和需要根据自己实际应用去优化动力学模型的控制接口。启用高级模式后,可以绕开VCU的主要控制算法和逻辑,直接下达指令到各个运动执行机构。此项需要在采购时下单开放权限,常规车辆不具备此功能。 \ No newline at end of file diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\345\224\256\345\220\216\344\270\216\346\212\200\346\234\257\346\224\257\346\214\201.md" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\345\224\256\345\220\216\344\270\216\346\212\200\346\234\257\346\224\257\346\214\201.md" new file mode 100644 index 0000000..0bcce7f --- /dev/null +++ "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\345\224\256\345\220\216\344\270\216\346\212\200\346\234\257\346\224\257\346\214\201.md" @@ -0,0 +1,26 @@ +# 售后与技术支持 + +1. 本公司保证所提供货物质量合格。 + +2. 为保证您的使用,我们提供7×24小时服务:我们的客户服务工程师为您供全年365天、全天24小时的支持,快速响应您的服务请求,并与正确的部门一起为您提供支持。我们通过系统化的服务平台记录和跟踪您的服务请求,确保它们得到及时有效的处理。 + +3. 远程技术支持(质量问题,无论何时何地您的产品遇到突发或紧急情况,我们的技术支持工程师会通过可靠的网络连接,远程快速识别故障并提供解决方案,最大限度减少产品使用中断。 + +4. 设备除非由于重大质量问题导致无法使用,否则一经出售不得退货。对于已经验收的产品,在质保期内出现产品质量问题或损坏(非人为损坏)的,经本公司检验并确认确属产品质量问题的,本公司给予维修或更换,并承担相关费用。 + +5. 如果对产品是否存在质量问题产生争议的,可将争议产品交由中立、合法、专业的第三方检测机构进行检测(该检测机构必须先由双方共同确认)检测费用由提交方预交,最终由检测结果不利方承担。 + +6. 产品超过质保期后造成的损坏或非因产品质量问题造成的损坏等,若需要维修,本公司有权进行评估并收取相应费用。 + +7. 若需要进行二次开发部分涉及软件开发、电气电路、机械结构等,需改变原有出厂配置原貌或对控制系统底层调试引起的非产品承诺技术指标,不归属为原产品质量问题。本公司可给予相关积极配合协助,但不承担事故责任。 + + + +> **附加声明:** + +1. 本产品中自研软硬件产品的所有知识产权不随产品销售发生任何转让。 + +2. 未经翰凯斯授权,不得将有关产品的保密信息全部或部分透露给任何第三方。 + +3. 若有上述违反知识产权保护的行为,翰凯斯将有权要求立即停止该侵权行并依法追究其刑事及民事责任,追偿经济损失。 + diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206.md" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206.md" new file mode 100644 index 0000000..933c5aa --- /dev/null +++ "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206.md" @@ -0,0 +1,45 @@ +# 常见问题处理FAQ + +本节整理了各种底盘常见问题处理方法,若根据此文档未能解决,请联系相关技术人员。 + +**Q:底盘无法驱动,遥控器无任何报警。** + +A:第一步:检查动力电池电量是否充足;第二步:检查所有急停开关是否弹出;第三步:确认手刹是否关闭;第四步:确认是否在遥控模式下;第五步:确认刹车是否回位正常,检查车辆是否能推动;第六步:检查电机控制器高压供电是否正常;第七步:检查保险盒里电机控制器唤醒电源继电器是否正常。 + +**Q:底盘无法开机。** + +A:第一步:检查所有急停开关是否弹出;第二步:检查12V蓄电池是否亏电;第三步:检查各个保险盒保险丝是否正常;第四步:检查低压保险盒是否有电;第五步:检查VCU供电是否正常;第六步:检查CAN总线是否存在短路、断路。 + +**Q:遥控器显示SOC=0%。** + +A:第一步:查看遥控器是否有其他报警,若有,对照附录1《遥控器故障码分析及处理建议》处理;第二步:检查底盘动力电池电量,给底盘充电;第三步:检查12V蓄电池是否亏电,亏电会导致动力电池无法输出,建议给蓄电池补电;第四步:检查各个保险盒保险丝是否正常,线路是否有短路、断路;第五步:读取底盘CAN报文,查看是否能读取到782报文,联系技术协助处理。 + +**Q:底盘无法充电。** + +A:第一步:确认充电顺序,先插充电枪,再插220V市电;第二步:检查总开关(旋钮开关,若有)是否打开,总开关关闭无法充电;第三步:查看充电器指示灯状态,确认充电状态(红灯慢闪充电中,绿灯常亮充电完成);第四步:检查充电线路,是否有短路、断路;第五步:读取底盘报文,查看是否能读取到782报文,联系技术协助处理。 + +**Q:底盘转向失效。** + +A:第一步:检查遥控器是否有报警,按照对应故障码处理;第二步:检查手刹、制动是否正常,确认低压供电正常;第三步:检查12V蓄电池是否亏电;第四步:检查保险盒,确认是否有保险丝烧断;第五步:检查转向电机继电器,确认是否烧坏,可交叉验证。 + +**Q:底盘制动失效** + +A:第一步:检查遥控器是否有报警,按照对应故障码处理;第二步:检查手刹、转向是否正常,确认低压供电正常;第三步:检查12V蓄电池是否亏电;第四步:检查保险盒,确认是否有保险丝烧断;第五步:检查制动继电器,确认是否烧坏,可交叉验证。 + +**Q:底盘手刹失效** + +A:第一步:检查遥控器是否有报警,按照对应故障码处理;第二步:检查制动、转向是否正常,确认低压供电正常;第三步:检查12V蓄电池是否亏电;第四步:检查保险盒,确认是否有保险丝烧断;第五步:检查手刹继电器,确认是否烧坏,可交叉验证。 + +**Q:CAN口通信异常** + +A:第一步:检查遥控器是否有报警,确认底盘其他各项功能正常,VCU正常工作;第二步:用万用表电压挡分别测量CAN口的2和7口,负极接底盘外壳,正常情况下,2口电压低,约2.25V,7口电压高,约2.75V,若电压正常,请检查自行接的另一端CAN口接头;第三步:若电压异常,沿着CAN线检查线路,确认是否有短路或断路。 + +**Q:遥控器启动异常处理** + +A:整车上电成功后遥控车显示屏中下端会显示Ready,反之上电失败,车辆进入Ready后,观察Ready上方是否有三角感叹号。如果无,驾驶者可以进行驾驶操作。如果出现说明车辆存在故障,需要按Display Switch按钮,把显示切换当第二界面,查看具体系统故障。进一步排查详细故障需要把通过OBD接口连接到相系统的CAN网络中读取详细的故障代码,排除故障后车辆才能整车驾驶。 + +**以下为遥控器故障码分析及处理建议** + +![](https://tcs.teambition.net/storage/312s0384be5a35826ab4e8f8ba5e2c8c1df5?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTY4MjU1NTg2MSwiaWF0IjoxNjgxOTUxMDYxLCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzMxMnMwMzg0YmU1YTM1ODI2YWI0ZThmOGJhNWUyYzhjMWRmNSJ9.2PfuJnFKXiQBrTQQ06VVkBqJp_bXgnP-mPPWEqOVHW4&download=image.png "") + +![](https://tcs.teambition.net/storage/312s9d4a79966e45846bef3bbdd429392b3b?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTY4MjU1NTg2MSwiaWF0IjoxNjgxOTUxMDYxLCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzMxMnM5ZDRhNzk5NjZlNDU4NDZiZWYzYmJkZDQyOTM5MmIzYiJ9.3cNbh-h_dIiGPbcljvKb0HKZjH-WRn8JFaOH5PDlwNs&download=image.png "") diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\345\272\225\347\233\230\346\200\247\350\203\275\345\217\202\346\225\260.md" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\345\272\225\347\233\230\346\200\247\350\203\275\345\217\202\346\225\260.md" new file mode 100644 index 0000000..5e79b83 --- /dev/null +++ "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\345\272\225\347\233\230\346\200\247\350\203\275\345\217\202\346\225\260.md" @@ -0,0 +1,112 @@ +# 底盘性能参数 + +## 1 车身整体参数 + +| 外形尺寸(mm) | 2510×1700×646 | +| ------------------- | ------------- | +| 轴距 (mm) | 1900 | +| 前/后轮距 (mm) | 1465/1465 | +| 前/后悬 (mm) | 237/237 | +| 最小离地间隙 (mm)(满载) | 175/170 | +| 最小转弯半径(m) | 3月6日 | +| 整备质量 (kg) | 450/420 | +| 最大允许载质量 (kg) | 500/400 | +| 满载质量 (kg) | 950/820 | +| 常规车速 (Km/h) | ≤40 | +| 最高车速 (Km/h) 空载 | 60/55 | +| 最大爬坡度(%)空载 | 30/20 | +| 加速时间 (s)(0-30Km) 空载 | 4.5/9 | +| 内/外轮转角 (°) | 30/27 | +| 悬挂类型 | 前后双叉臂独立悬挂 | +| 防护等级 | IP56 | +| 悬架弹簧行程 (mm) 满载 | 30±3 | +| 车架材质 | 高强度钢 | +| 驱动形式 | 四轮驱动 | +| 续航里程 (Km) 空载 | 90 | + +## 2 转向系统参数 + +转向系统主要由转向供电系统,转向机总成和转向机控制器组成。转向机供电由12VDC 标准车载系统提供,转向机和控制器均符合量产车规级标准。 + +| 额定功率 (KW) | 0.5 | +| ------------- | ----------- | +| 额定扭矩 (N.M) | 4.5 | +| 额定转速 (r/min) | 1050 | +| 工作电压 (V) | 10.8~14 | +| 方向机转向范围 (°) | ±450 | +| 转向结构 | 线控电动转向 | +| 转向类型 | 阿克曼转向 | +| 转向形式 | 四轮/楔形转向 | +| 工作温度 (℃) | -40~105 | +| 通讯速度 (kps) | 500 | +| 转向精度 (°) | 1 | +| 响应时间 (ms) | ≤150 | +| 转向拉杆最大输出力 (N) | 10000 | +| 通讯协议 | CAN2.0B | +| 稳态误差 (°) | ±1 | +| 超调量 (°) | ≤15 | +| 控制方式 | 目标方向盘转角和角速度 | +| 前束 (mm) | 5 | + +## 3 制动系统参数 + +制动系统和传统的汽车制动系统相比,减少了人工制动相关执行机构,全车制动均采用电 子控制方式完成。制动系统主要组成部分包括:制动供电系统,制动液压油管回路,刹车碟与电子卡钳。除了液压制动,整车还提供电子驻车功能。 + +| 行车制动类型 | 线控液压制动 | +| ------------- | ------- | +| 驻车制动类型 | 电子驻车系统 | +| 超调量 (Mpa) | 0.5 | +| 制动器型式 | 盘式 | +| 电机类型 | 永磁无刷电机 | +| 额定功率 (KW) | 0.45 | +| 额定扭矩 (N.M) | 2.3 | +| 额定转速 (r/min) | 1700 | +| 工作电压 (V) | 9~14 | +| 响应时间 (ms) | ≤200 | +| 通讯协议 | CAN2.0B | +| 最大制动压力(Mpa) | 7 | +| 最大压力建压时间 (ms) | ≤300ms | +| 控制方式 | 目标压力闭环 | + +## 4 动力系统参数 + +动力系统主要由 72VDC 供电电池,动力电池配电箱,轮毂电机,轮毂电机控制器,整车控制系统与连接线束组成。动力系统参数如下。 + +| 额定功率 (KW) | 4×3/2×3 | +| ------------ | ----------------- | +| 额定扭矩 (N.M) | 4×126/2×126 | +| 额定转速 (r/min) | 230 | +| 峰值功率 (KW) | 4×3.8/2×3.8 | +| 峰值扭矩 (N.M) | 4×180 | +| 峰值转速 (r/min) | 550 | +| 额定电压 (V) | 72V | +| 冷却方式 | 风冷 | +| 控速精度 (km/h) | 0.1 | +| 电机尺寸 (mm) | ø280 | +| 响应速度 (ms) | ≤200ms | +| 稳态误差 (km/h) | 0.2 | +| 通讯协议 | CAN2.0B | +| 驱动电机类型 | 永磁直流无刷电机 | +| 超调量 (km/h) | 0.4 | +| 控制方式 | 加速踏板开度(扭矩控制、转速控制) | + +## 5 供电系统参数 + +全车动力系统供电均由72V动力电池提供,同时还为12VDC 设备供电提供实时电压转换供电,整车平台除DC/DC和动力系统其他部分设备均采用12V 电压平台供电,12V 电压平台为本车基本设备供电平台。 + +| 动力电池类型 | 三元锂电 | +| ---------------------- | -------- | +| 电池系统额定电压 (V) | 72 | +| 电池系统额定容量 (AH) | 100/150 | +| 电池系统能量 (kW.h) | 7.2/10.8 | +| 电池系统最大输出功率 (KW) (≤60S) | 25 | +| 动力电池过放保护方式 | BMS | +| 动力电池过充保护方式 | BMS | +| 充电方式 | 交流慢充 | +| 充电时间(h) | 6 | +| 冷却方式 | 自然冷却 | +| 低压启动电源 | 12V铅酸蓄电池 | + +## 6 外形尺寸图 + +![](./images/chassis-dimension.png) diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\346\227\245\345\270\270\347\273\264\346\212\244\344\270\216\346\263\250\346\204\217\344\272\213\351\241\271.md" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\346\227\245\345\270\270\347\273\264\346\212\244\344\270\216\346\263\250\346\204\217\344\272\213\351\241\271.md" new file mode 100644 index 0000000..721f02c --- /dev/null +++ "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\346\227\245\345\270\270\347\273\264\346\212\244\344\270\216\346\263\250\346\204\217\344\272\213\351\241\271.md" @@ -0,0 +1,141 @@ +# 日常维护与注意事项 + +## 1 底盘使用提示 + +车辆运行时应该注意保护周围人员安全同时保护底盘避免受到伤害,运行底盘时应该保证底盘周围环境安全。应该遵循以下安全运行指导: + +![](./images/safty-guard.png) + +- 底盘周围禁止人员围观; + +- 底盘运行道路通畅; + +- 避免雨天使用底盘; + +- 避免-10℃环境下使用底盘; + +- 禁止小孩在底盘周围逗留玩耍; + +- 禁止在坡度大于20°的地方使用底盘; + +- 禁止搭载超过底盘最大负重的货物; + +- 避免将底盘停放于坡度较大的位置; + +- 避免人员站在底盘轴线; + +- 在非紧急情况下,请勿将急停开关按钮长期处于按下状态。 + +## 2 电池使用注意 + +> ### 警告 !Warning + +- 电池使用时警告及注意事项(Notice and warning items using the battery) 为防止电池可能发生泄漏,发热、爆炸,请注意以下预防措施: In order to prevent the battery leaking, getting hot and exploding, pleas e pay attention to preventing measure as following: + +- 严禁将电池浸入海水或水中,保存不用时,应放置于阴凉干燥的环境中; Never throw the battery into water, keep it under dry, shady and cool circumstance when not use. + +- 禁止将电池在热高温源旁,如火、加热器等使用和留置; Never keep the battery beside high temperature source examples: fire, heating machine,ect. + +- 充电时请选用锂离子电池专用充电器; Please use the stated charger when charging. + +- 严禁颠倒正负极使用电池; Never upside down the positive and negative. + +- 严禁将电池直接插入电源插座; Never cut the battery in socket directly + +- 禁止将电池丢于火或加热器中; Never throw the battery into fire or heating machine. + +- 禁止用金属直接连接电池正负极短路; Never connect the positive and negative of battery with metal. + +- 禁止将电池与金属,如发夹、项链等一起运输或贮存; Never ship or store the battery together with metal + +- 禁止敲击或抛掷、踩踏电池等; Never knock, throw or trample the battery. + +- 禁止直接焊接电池和用钉子或其它利器刺穿电池; Never cut through the battery with nail or other edge tool. + +- 禁止在强静电和强磁场的地方使用,否则易破坏电池安全保护装置,带来不安全的隐患。 Never use the battery under strong static and strong magnetic field, otherwise it will destroy the protecting device + +- 若电池发生泄露,电解液进入眼睛,请不要揉擦,应用清水冲洗眼睛,并立即送医治疗,否则会伤 害眼睛。If battery leaked, the electrolyte get into eyes, please don’t knead, please wash eyes by water and send to hospital. Otherwise it will hurt eyes + +- 如果电池发出异味,发热、变色、变形或使用、贮存、充电过程中出现任何异常,立即将电池 从装置或充电器中移离并停用。 If battery emit peculiar smell, heating, distortion or appear any unconventionality during using, storage or charging process, please take it out from device or charge and stop using. + +- 如果电极弄脏,使用前应用干布抹净,否则可能会导致接触不良功能失效。 If the pole was duty, please clear it before using. + +- 废弃之电池应用绝缘纸包住电极,以防起火、爆炸。 Please encase the pole with insulating paper when you want to abandon the battery to prevent exploding and getting into fire. + +- 充电器: + +- 请勿将充电机放置在雨淋位置!Do not place the charger in the rain position! + +- 本机内有高压部件,请勿擅自拆解充电机!There has high voltage components, do not dismantle the charger without authorization! + +- 请勿阻塞充电机进风和出风口!Do not block the charger air inlet and air outlet! + +- 蓄电池电压与充电机标称电压必须相符!The battery voltage must match the nominal voltage of the charger! + +- 移动充电机时,请断开电源线和充电插头。Disconnect the power cord and the charging plug while moving the charger. + +- 如有疑问,可致电公司,我公司将竭诚为您服务。If you have any questions, you can call the company, and our company will serve you wholeheartedly。 + +## 3 停放维护Parking Maintenance + +> 长时间不使用底盘时,请按照以下建议操作: + +**1. 车辆停稳拉手刹** 车辆停放场地需为平坦场地(禁止将车辆长时间停放在坡道上,如因车辆故障等原因必须将车辆停放在坡道上时,必须用三角挡块或者石块等坚硬物体挡在车轮下坡方向防止溜车),车辆停稳后应拉起驻车制动手柄。 + +**2. 做好防雨防潮防尘** 底盘电器件不能接触雨水、灰尘,车辆停放时要做好防雨,接口处做好防尘和绝缘。 + +**3. 12V蓄电池下电** 长时间停放车辆时请将12V小电池下电-将电源负级从电池上卸下并做绝缘处理。 + +**4. 防锈** 用湿毛巾、毛刷等工具将车辆擦拭干净,必要的地方涂防锈油,进行日常例行保养。 + +**5. 远离火源和低低温**当气温低于 0 ℃度时,应将车辆停入室内,以免低温导致底盘无法启动。 + + + +#### 长时间不使用底盘需要启动底盘时,使用前请做一下操作: + +1. 检查电池电量是否满足使用要求。 + +2. 检查各油管接头有无漏油情况。 + +3. 检查蓄电池电极柱导线是否拧紧,其它导线有无松脱。 + +4. 检查轮胎气压(2.6-2.8bar)、转向、制动功能是否正常。 + +5. 检查灯光等信号装置是否正常。 + +6. 当发现悬架、制动、转向或连接处卡涩、锈蚀时应使用适量润滑油润滑。 + +7. 检查电池电量,当车辆电池电量过低时应及时充电。 + +8. 充电环境应保持干燥通风,车辆及充电设备周围2米范围内不能有可燃物。 + +9. 检查中所发现的问题,应在车辆运行前进行排除。 + +## 4 定期保养建议 + +对底盘定期进行保养,有助于减少底盘零部件故障,延长底盘使用寿命。 + +- 结构外观 + +关机清理底盘上的灰尘、污渍,防止进入内部腐蚀元器件;检查底盘车体结构,漆面正常无脱落、螺栓锁紧无松动、线束正常无断裂;给转向球头、悬架摆臂衬套、摆臂固定座等活动部位涂抹润滑脂;检查底盘引出给上装的线束,确保无破损、断裂等故障。 + +- 转向系统 + +检查转向拉杆螺母锁紧无松动、转向节臂紧固牢靠无松动;测试转向能正常转到最大角度,松开摇杆后自动顺畅返回中位;测试转向过程无异响,响应灵敏、顺畅。 + +- 刹车系统 + +检查刹车卡钳无漏油,油管无破损、断裂;检查确认刹车油壶油量充足,建议一至两年更换一次刹车油;检查确认刹车盘无变形、破裂,刹车片消耗未到安全线;测试刹车功能正常,刹车无异响,松开刹车后驱动无摩擦、阻力。 + +- 驱动系统 + +检查轮毂和轮胎外观无破损、变形,轮毂电机安装螺母紧固无松动;检查轮胎气压充足,轮胎花纹磨损未到安全线;测试电机转动顺畅无异响,每个轮子都正常转动。 + +- 手刹系统 + +检查手刹卡钳安装紧固无松动,钢丝绳紧固无松脱;测试手刹松放正常,卡钳卡紧、回位正常;给卡钳活动弹簧部位涂抹润滑脂。 + +- 遥控器 + +关机清理遥控器灰尘、污渍;检查遥控器电量,电量不足及时更换电池;检查遥控器摇杆、按键、拨杆,确保拨杆拨动、按键按压功能正常。 \ No newline at end of file diff --git "a/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\350\275\246\350\276\206\345\256\211\345\205\250\346\234\272\345\210\266.md" "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\350\275\246\350\276\206\345\256\211\345\205\250\346\234\272\345\210\266.md" new file mode 100644 index 0000000..f5b31ce --- /dev/null +++ "b/docs/pix\345\272\225\347\233\230\344\275\277\347\224\250\346\211\213\345\206\214/\350\275\246\350\276\206\345\256\211\345\205\250\346\234\272\345\210\266.md" @@ -0,0 +1,33 @@ +# 车辆安全机制 + +## 1 车辆遥控防误触 + +为保证车辆行驶安全,遥控器加速推杆设置误操作机制,即在猛推加速推杆时底盘不动作,防止车辆急速“窜出”。 + +> 注意:安全起见,遥控驾驶车辆时车辆请确保车辆前方和后方10M内无行人和障碍物,并时刻注意危险情况,随时做好接管准备,正常测试建议遥控器专人负责。 + +## 2 碰撞传感器(选配) + +标准底盘在车体前舱和后舱标配预留了防撞条线束接口。 + +选配防撞条的车辆前后分别有一条防撞条,能够感应防撞条与车体间的压力从而判断是否发生了碰撞,碰撞传感器最小触发力≤50N,触发后车辆立即进入紧急制动状态,车辆进入紧急制动模式,车辆会以最大刹车力进行制动,此模式下车辆无法移动,且无法控制。车辆与碰撞物体脱离接触或者防撞条形变恢复(内部开关断开连接),可解除紧急制动状态。 + +![](./images/bumper.png) + +## 3 遥控器急停 + +- 当车辆遇到紧急情况时按下遥控器中间急停按钮启动底盘紧急停止,驻车制动,遥控器界面将会显示“ESTOP! ”。 + +- 右旋急停按钮为释放紧急停止功能。急停后车辆转向灯双闪,尾灯强亮,解除急停恢复。 + +![](./images/emergency-brake-on-remote.png) + +## 4 车身急停开关 + +急停开关作用是给车辆提供紧急停车信号,该按键位于车身左侧。 + +- 按下车身急停开关,触发紧急制动,车辆进入紧急制动状态,车辆会以最大刹车力进行制动。 + +- 急停后车辆转向灯双闪,尾灯强亮,解除急停恢复。在紧急制动状态下,车辆挡位为空挡,油门驱动无效。将急停按钮顺时针旋起即解除紧急制动状态。 + +![](./images/emergency-brake-on-chassis.png) diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/.pages" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/.pages" new file mode 100644 index 0000000..4717b9c --- /dev/null +++ "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/.pages" @@ -0,0 +1,9 @@ +nav: + - Overview: index.md + - 标定工具安装.md + - camera内参标定.md + - LiDAR-camera标定.md + - IMU标定.md + - LiDAR-IMU标定.md + - LiDAR-LiDAR标定.md + \ No newline at end of file diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/IMU\346\240\207\345\256\232.md" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/IMU\346\240\207\345\256\232.md" new file mode 100644 index 0000000..9433a8d --- /dev/null +++ "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/IMU\346\240\207\345\256\232.md" @@ -0,0 +1,141 @@ +# IMU标定 + +## 概要 + +IMU(惯性测量单元)是自主驾驶汽车中重要的传感器之一,可以测量车辆在三维空间中的加速度和角速度信息。为了保证自主驾驶汽车的精确控制和定位,需要对IMU进行内参标定。内参标定的目的是精确定量测量设备的误差参数,包括加速度计和陀螺仪的偏置、比例因子、非正交性等参数。通过内参标定可以提高IMU的精度,从而提高自主驾驶汽车的定位精度和控制精度。 + +## 前提条件 +- 完成了[标定工具安装](./%E6%A0%87%E5%AE%9A%E5%B7%A5%E5%85%B7%E5%AE%89%E8%A3%85.md) +- 准备硬件: + - [华测CHC® CGI-410](https://www.huace.cn/product/product_show/467) +- 数据类型: `sensor_msgs/msg/Imu` +- 数据要求: 只录制`angular_velocity`和`linear_acceleration`即可 + +> 满足`数据要求时,其他传感器ros2bag数据,也可以进行imu标定` + +## 开始标定 +> 注意点:保持工控机没有运行其他ros程序,防止占用传感器 + + +### step-1: 配置`华测CHC® CGI-410`,并检测组合导航是否联通工控机 +1. 打开`google_chrome`浏览器 +2. 输入网址:`192.168.1.110`,输入用户名`admin`和密码`password` +3. 依次点击:`I/O设置` -> `TCP Server/NTRIP Caster4` -> 断开 -> 连接 +![](./image/IMU_calibration/configuration_CGI410_02.gif) +4. `GPCHC`设置成`100Hz`,其他设置成`关闭` +![](./image/IMU_calibration/configuration_CGI410_03.jpg) +5. 打开终端输入:`nc 192.168.1.110 9904`确定组合导航是否联通工控机 + + +### step-2: 录制imu数据准备 +- 录制时间:2个小时 +- 水平地面,车辆静止放置 +- 启动传感器 + +```shell +source pix/pit-kit/Autoware/install/setup.bash +ros2 launch pixkit_sensor_kit_launch sensing.launch.xml +``` +![](./image/IMU_calibration/start_sensing.gif) + +- 开始录制 +```shell +# 工作路径是标定工具根目录 +cd collect_script/ros2bag_collect_script/ +./collect_ros2bag.sh imu.yaml +cd - +``` +![](./image/IMU_calibration/start_collect.gif) + +- 录制成功标志 + +``` +ros2 bag info ros2bag/imu_latest_ros2bag +``` +> 检查录制时间`Duration`是否是大于`2hr`(2个小时)[8802.282/3600=2.45h] + +> 检查`Count`和[Duration乘以频率计算结果]是否相差不多:表示数据没有丢失过多 + +> - imu频率为100hz`8802.282*100=880228.2` + +![](./image/IMU_calibration/check_ros2bag.jpg) + + +### step-3: 启动标定程序脚本 + +- 把启动的传感器程序停止 + +> 输入`ros2 topic list`, 只剩下两个话题表示没有ROS节点在运行 + +![](./image/rosnode_skip.jpg) + +- 运行标定脚本 + +```shell +./calibration_script/imu_intrinsic/run_imu_cali.sh +``` +![](./image/IMU_calibration/imu_cali.gif) + +### step-4:成功标志 +```shell +# 有结果输出 +cat ./calibration_script/imu_intrinsic/output/output_imu_intrinsic.yaml +``` +![](./image/IMU_calibration/result.jpg) + + +### 标定结果 +>imu内参标定文件参数对应关系 + +|xsens_imu_param.yaml | param.yaml | +|---- | ---- | +|`gyr_n`|`imuGyrNoise`| +|`gyr_w`|`imuGyrBiasN`| +|`acc_n`|`imuAccNoise`| +|`acc_w`|`imuAccBiasN`| + + +sensor_calibration_tool/shared_folder/pix_data/imu/result/xsens_imu_param.yaml +``` +Gyr: + unit: " rad/s" + avg-axis: + gyr_n: 1.5059072284923697e-03 + gyr_w: 4.3430855283551206e-05 + x-axis: + gyr_n: 1.6901233770452774e-03 + gyr_w: 5.0850707578827144e-05 + y-axis: + gyr_n: 1.3392742394140514e-03 + gyr_w: 3.7654685426892668e-05 + z-axis: + gyr_n: 1.4883240690177805e-03 + gyr_w: 4.1787172844933785e-05 +Acc: + unit: " m/s^2" + avg-axis: + acc_n: 5.9215155351791055e-03 + acc_w: 1.3379378640306186e-04 + x-axis: + acc_n: 6.0017230453598448e-03 + acc_w: 1.0726720420556991e-04 + y-axis: + acc_n: 6.7689914243794181e-03 + acc_w: 1.6961241589651517e-04 + z-axis: + acc_n: 4.9938321357980535e-03 + acc_w: 1.2450173910710051e-04 +``` + +calibration_script/imu_intrinsic/config/param.yaml +``` +# IMU Settings +imuAccNoise: 5.9215155351791055e-03 +imuGyrNoise: 1.5059072284923697e-03 +imuAccBiasN: 1.3379378640306186e-04 +imuGyrBiasN: 4.3430855283551206e-05 +``` + + +## NEXT +现在,您已经完成`camera内参标定`,[LiDAR-IMU标定](./LiDAR-IMU%E6%A0%87%E5%AE%9A.md) \ No newline at end of file diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/LiDAR-IMU\346\240\207\345\256\232.md" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/LiDAR-IMU\346\240\207\345\256\232.md" new file mode 100644 index 0000000..a8da22f --- /dev/null +++ "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/LiDAR-IMU\346\240\207\345\256\232.md" @@ -0,0 +1,104 @@ +# LiDAR-IMU标定 +## 概要 +LiDAR-IMU标定(LiDAR-IMU Calibration)是将激光雷达(LiDAR)和惯性测量单元(IMU)的数据进行配准的过程,其目的是使两个传感器的数据在时间和空间上相互对齐。这样可以解决传感器之间时间和空间误差带来的问题,从而提高SLAM、定位、建图等应用的精度和稳定性。 + +LiDAR和IMU是机器人领域中常用的传感器。LiDAR主要用于获取环境的三维点云数据,而IMU则可以测量机器人的姿态(包括角度和角速度)。通过将两个传感器的数据进行标定,可以精确地确定它们之间的相对位置、姿态和时序关系,从而实现更准确、更稳定的机器人定位、导航和建图。 + +在标定过程中,需要采集一组已知姿态下的数据(如旋转和平移),并对数据进行处理以确定两个传感器之间的相对姿态和时间偏差。这个过程需要进行多项计算和优化,通常使用标定板等工具来辅助完成。 + +需要注意的是,不同的LiDAR和IMU可能存在不同的误差和噪声特性,因此标定过程需要根据具体的传感器进行调整和优化,以达到最佳的效果 + +## 前提条件 +- 完成了[标定工具安装](./%E6%A0%87%E5%AE%9A%E5%B7%A5%E5%85%B7%E5%AE%89%E8%A3%85.md) +- 完成了[GNSS安装->设备校准](./../%E7%A1%AC%E4%BB%B6%E5%AE%89%E8%A3%85/GNSS%E5%AE%89%E8%A3%85.md) +- 准备硬件: + - [华测CHC® CGI-410](https://www.huace.cn/product/product_show/467) + - 顶部激光雷达[RS-Helios-16P] +![](./image/lidar2imu/gnss_status.jpg) + + +## 开始标定 + +### step-1: 采集数据 +- 启动传感器 +```shell +source pix/pit-kit/Autoware/install/setup.bash +ros2 launch pixkit_sensor_kit_launch sensing.launch.xml +``` +![](./image/IMU_calibration/start_sensing.gif) + +- 开始录制 + +```shell +cd collect_script/ros2bag_collect_script/ +./collect_ros2bag.sh gnss_lidar.yaml +cd - +``` + +- 录制成功标志 + +> 录制要求: +> - 车辆走8字,走三圈 +> - 录制时,不要有动态物体移动 + +![](./image/lidar2imu/collect_data2.gif) + +```shell +ros2 bag info ros2bag/gnss_lidar_latest_ros2bag +``` + +> 检查`Count`和[Duration乘以频率]是否相差不多:表示数据没有丢失过多 + +> - gnss频率为50hz--82.776*50=4138.8 +> - lidar频率为10hz--82.776*10=827.76 + +![](./image/lidar2imu/check_ros2bag.jpg) + +### step-2: 处理数据 +- 开始处理 +``` +./collect_script/data_collectscript/lidar_imu_data.sh +``` +![](./image/lidar2imu/start_collect.gif) + +- 处理数据成功标志 + +查看终端打印结果, `number=[864]`表示在`ros2bag/gnss_lidar/lidar_top`文件夹中,产生了`864`张PCD文件 +![](./image/lidar2imu/result.jpg) + + +### step-3: 开始标定 + +> 鼠标单击移动视角 + +> 鼠标双击旋转视角 + +![](./image/lidar2imu/start_cali.gif) + +#### 外参调节 +| 按钮 | 说明 | +| --- | --- | +| +x degree | 调节翻滚角 | +| +y degree | 调节俯仰角 | +| +z degree | 调节偏航角 | +| +x trans | 调节x轴位移 | +| +y trans | 调节y轴位移 | +| +z trans | 调节z轴位移 | + +![](./image/lidar2imu/start_cali1.gif) + +#### 成功标志 + +```shell +cat ./calibration_script/lidar2imu/output/sensors_calibration.yaml +``` +![](./image/lidar2imu/result1.jpg) + + +## NEXT +现在,您已经完成`LiDAR-IMU标定`,接下来可以开始[LiDAR-LiDAR标定](./LiDAR-camera%E6%A0%87%E5%AE%9A.md) + +## 常见问题 +### Q1: 执行`step-3: 开始标定`GUI界面闪退 +- 问题原因: 在`step-1: 采集数据`步骤采集的数据有问题 +- 解决方法: 重新执行`step-1: 采集数据` \ No newline at end of file diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/LiDAR-LiDAR\346\240\207\345\256\232.md" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/LiDAR-LiDAR\346\240\207\345\256\232.md" new file mode 100644 index 0000000..5705404 --- /dev/null +++ "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/LiDAR-LiDAR\346\240\207\345\256\232.md" @@ -0,0 +1,37 @@ +# LiDAR-LiDAR标定 + +## 概述 +## 前提条件 +- 完成了[标定工具安装](./%E6%A0%87%E5%AE%9A%E5%B7%A5%E5%85%B7%E5%AE%89%E8%A3%85.md) +- 准备硬件: + - 顶部激光雷达[RS-Helios-16P] + - 车头补盲雷达[RS-Bpearl] + +## 开始标定 +### step-1: 选择标定场地 +- 1.8m X 0.9m 木板 准备两块 +- 两块木板放置,两个lidar的共视区域 +- 两块木板放置,成120度夹角放置 +![](./image/lidar2lidar/object_of_reference.jpg) + +> 如果没有这样的两块木板,选择一个墙角作为参照物也可以 + +### step-2: 启动标定程序 + +```shell +./calibration_script/lidar2lidar/run_lidar2lidar.sh +``` +![](./image/lidar2lidar/lidar2lidar.gif) + +### step-3: 检查标定结果 + +> 观察rviz2,当白色点云和彩色点云,[左视图|右视图|俯视图|正视图]完全重合时标定结束 + +> - 白色点云: 是顶部雷达 +> - 彩色点云: 是车头补盲雷达 + +![](./image/lidar2lidar/lidar2lidar.jpg) + + + + diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/LiDAR-camera\346\240\207\345\256\232.md" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/LiDAR-camera\346\240\207\345\256\232.md" new file mode 100644 index 0000000..a11d2eb --- /dev/null +++ "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/LiDAR-camera\346\240\207\345\256\232.md" @@ -0,0 +1,156 @@ +# LiDAR-camera标定 + +## 概要 + +激光雷达到相机的标定的作用是将激光雷达的3D点云数据和相机的2D图像数据进行配准,从而实现对物体的三维感知。通过激光雷达和相机的标定,可以确定它们之间的相对位置和姿态,以及它们之间的转换矩阵,从而能够将激光雷达采集的三维点云数据映射到相机图像中,将相机采集的图像信息转化为三维坐标信息。这对于自动驾驶、机器人视觉等应用非常重要,可以实现对环境的精确感知和理解。 + +## 本章目标 + +- 理解外参标定 +- 掌握激光雷达到相机的标定技巧 +- 标定出合格的外参 + +## 标定车辆 +- hook + - 顶部激光雷达[RS-Helios-16P] + - 车头相机[SG2-OX03CC-5200-GMSL2F-H120] + +## 前提条件 + +- 完成了[camera内参标定](./camera%E5%86%85%E5%8F%82%E6%A0%87%E5%AE%9A.md) +- 寻找合适的标定场景 + - 摄像头的图像中有轿车 + - 摄像头的图像中有电线杆 + - 摄像头的图像中有带窗户的墙面 + +![](./image/lidar2camera/cali_result.jpg) + +## 开始标定 + +### step-1: 采集标定数据 +#### 开始采集 +```shell +# 工作路径是标定工具根目录 +./collect_script/data_collect_script/pcd_png_extractor.sh +``` +![](./image/collect_data/pcd_png.gif) + +#### 检查采集的数据是否采集成功 +```shell +ll -h ros2bag/pcd_png_data +``` +> 会看见latest.pcd和latest.png两个文件,查看时间是最近产生的 +![](./image/collect_data/pcd_png1.jpg) + +```shell +nautilus ros2bag/pcd_png_data/ +``` + +> 会看见latest.pcd和latest.png两个文件,点击打开latest.png图片,查看图片是否异常 +![](./image/lidar2camera/check.png) + + +### step-2: 启动标定程序 +#### 文件结构 +![](./image/lidar2camera/file_structure.jpg) + +|脚本|说明|备注 +| ---- | ---- | ---- | +|lidar2camera.sh | 标定程序启动脚本 | 无 | +|lidar2camera.yaml | 标定程序配置文件 | 标定程序的输入参数 | +|parser.py|生成sensors_calibration.yaml文件|生成autoware可用的参数文件| +|input|标定原始数据|标定程序需要的原始数据| +|input/output_camera-intrinsic.json| 相机内参文件| 完成了[camera内参标定](./camera%E5%86%85%E5%8F%82%E6%A0%87%E5%AE%9A.md)输出文件| +|input/top_center_lidar-to-center_camera-extrinsic.json|外参初始文件|默认即可| +|output/sensors_calibration.yaml|外参数文件|用于autoware可用的参数文件| +|output/example.jpg|标定输出示例结果| | +|output/example.txt|标定输出示例结果| | + + +#### calibration_script/lidar2camera/lidar2camera.yaml + +![](./image/lidar2camera/configuration_file.jpg) + +|参数名称|参数作用| 来源 | +| ---- | ---- | --- | +|pcd_path|标定程序需要的输入图片路径| ros2bag/pcd_png_data/latest.pcd | +|png_path|标定程序需要的输入点云路径| ros2bag/pcd_png_data/latest.png | +|camera_intrinsic_filename|标定程序需要的输入点云路径| calibration_script/camera_intrinsic/output/output_camera-intrinsic.json | +|lidar2camera_extrinsic_filename|标定程序需要的输入点云路径| 默认即可 | + +### 复制标定原始数据到input文件夹 +|复制文件| +| -- | +|ros2bag/pcd_png_data/latest.pcd > calibration_script/lidar2camera/input/latest.pcd| +|ros2bag/pcd_png_data/latest.png > calibration_script/lidar2camera/input/latest.png| +|calibration_script/camera_intrinsic/output/output_camera-intrinsic.json > calibration_script/lidar2camera/input/output_camera-intrinsic.json| + +### 启动标定 +```shell +./calibration_script/lidar2camera/lidar2camera.sh +``` +![](./image/lidar2camera/lidar2camra1.gif) +![](./image/lidar2camera/lidar2camera2.gif) + + +### step-3: 参数配置 +![](./image/lidar2camera/cali_result.jpg) +可以看到图中,电线杆,车辆牌子,窗口的点云都对齐的,这就是一个标定好的结果,想要到达这样的结果,需要调节参数到达这样的标定效果,需要点击程序按钮进行微调 + +#### 外参调节 +| 按钮 | 说明 | +| --- | --- | +| +x degree | 调节翻滚角 | +| +y degree | 调节俯仰角 | +| +z degree | 调节偏航角 | +| +x trans | 调节x轴位移 | +| +y trans | 调节y轴位移 | +| +z trans | 调节z轴位移 | + +#### 相机内参调节 +| 按钮 | 说明 | +| --- | --- | +| \+ fy | 相机内参默认即可 | +| \+ fx | 相机内参默认即可 | + +Intensity Color: LiDAR强度是记录激光束返回强度的参数,可以看见点云在不同材质下的强度 + +Overlap Filter: 消除深度在0.4m以内的重叠激光雷达点。 + +deg step t step fxfy scale: 这三个按钮可以更改每次单击或键盘输入的调整步长 -- 默认即可 + +point size: 调整投影图像中激光雷达点的大小。 + +Reset: 单击此按钮以重置所有手动调整,恢复最初参数。 + +Save Image: 当标定结束后,单击此按钮,则默认情况下将校准图像、外参和内参矩阵存储在`./calibration_script/lidar2camera/output`文件夹下 + +> 当标定完成时,先点击`Save Image`按钮,在点击`图像化界面的关闭按钮` +![](./image/lidar2camera/reslut.jpg) + +### step-4: 验证标定结果 +- 把标定结果填入参数配置文件 + - 文件1:`~/pix/pit-kit/Autoware/install/individual_params/share/individual_params/config/default/pixkit_sensor_kit/sensors_calibration.yaml` + - 文件2:`~/pix/pit-kit/Autoware/install/pixkit_sensor_kit_description/share/pixkit_sensor_kit_description/config/sensors_calibration.yaml` + - 标定结果:`calibration_script/lidar2camera/output/sensors_calibration.yaml` + +第一步:备份`文件2`和`文件2` + +第二步:把`标定结果`,填写到`文件2`和`文件2`里 + +- 启动模拟查看 +```shell +./calibration_script/lidar2camera/inspect/autoware_sim.sh +``` +![](./image/lidar2camera/result.jpg) +![](./image/lidar2camera/result2.gif) + + +## NEXT +现在,您已经完成`LiDAR-camera标定`,接下来可以开始[IMU标定](./IMU%E6%A0%87%E5%AE%9A.md) + +## 常见问题 +### Q1: 执行`step-1: 采集标定数据` -> `检查采集的数据是否采集成功`时,图片显示异常,如下图 +![](./image/lidar2camera/q1.jpg) +- 数据采集失败 +- 解决:在工控机上,重新插拔相机的USB接口,在次采集 diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/camera\345\206\205\345\217\202\346\240\207\345\256\232.md" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/camera\345\206\205\345\217\202\346\240\207\345\256\232.md" new file mode 100644 index 0000000..85606b8 --- /dev/null +++ "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/camera\345\206\205\345\217\202\346\240\207\345\256\232.md" @@ -0,0 +1,82 @@ +# camera内参标定 + +## 概要 +相机内参标定是计算机视觉中的一项重要任务,它的作用是确定相机的内部参数,例如相机的焦距、光心、畸变等参数。这些内部参数是相机成像的关键因素,可以影响图像的质量和几何形状。 + +内参标定可以通过拍摄一系列已知物体(例如棋盘格)的图像来完成。通过分析这些图像,可以推导出相机的内参参数,并将其保存为相机标定参数的形式。一旦知道了相机的内参参数,就可以对图像进行校正,消除畸变并纠正图像的几何形状。这可以使计算机视觉算法更加准确地分析和理解图像。 + +相机内参标定在许多计算机视觉应用中都是必要的。例如,三维重建、目标跟踪、虚拟现实等领域都需要准确的相机参数。此外,内参标定也是机器人视觉和自主驾驶汽车等领域的重要任务。 + +## 前提条件 +- 完成了[标定工具安装](./%E6%A0%87%E5%AE%9A%E5%B7%A5%E5%85%B7%E5%AE%89%E8%A3%85.md) +- 准备标定板 + - 8x11 角点 + - 小方块 0.05m X 0.05mX + - 材质:漫反射铝型材 +![](./image/camera_intrinsic/camera_intrinsic_start2.png) + +## 开始标定 +> 确保没有其他程序占用摄像头,可以工控机重启后执行以下步骤 + +### step-1: 检测摄像头是否联通工控机 +```shell +# 打开Ubuntu自带摄像头软件`cheese` +cheese +``` +> 可能因为摄像头图像色彩空间与软件默认色彩空间不同,所以产生颜色错误,不影响后续操作 + +![](./image/camera_intrinsic/camera_intrinsic_start1.gif) + +### step-2: 启动标定程序 +> 关闭cheese软件,防止摄像头被占用 +```shell +./calibration_script/camera_intrinsic/run_usb_cam.sh +``` +![](./image/camera_intrinsic/camera_intrinsic_start2.gif) + +### step-3: 标定过程 + +> 标定熟练的情况下,基本2-3分钟标定完成 + +| 参数 | 说明 | 按钮 | 说明 | +| ---- | ---- | ---- | ---- | +| X |相机的光心在图像平面上的位置X轴|CALIBRATE|标定按钮,点击后开始标定| +| Y |相机的光心在图像平面上的位置Y轴|SAVE |保存按钮,点击后保存标定结果| +| Size |像素尺寸的缩放因子 |COMMIT |提交按钮,点击后标定程序退出| +| SKew |表示图像平面的非垂直倾斜角度 | | | + +> 标定过程时间越长,点击三个按钮后,程序计算时间越长,所以点击后,等待程序即可,不要重复点击 + +- `X`参数标定:通过左右移动标定板 +- `Y`参数标定:通过上下移动标定板 +- `Size`参数标定:通过靠近摄像头时,上下翻转标定板 +- `SKew`参数标定:通过上下左右翻转标定板 +![](./image/camera_intrinsic/camera_intrinsic_start3.gif) + +- CALIBRATE按钮: + - X-Y-Size-Skew四个参数达标后,按钮从灰色变为绿色,表示可以点击 + - 点击后,开始计算标定结果,成功标志-终端输出结果 +- SAVE按钮: + - 点击CALIBRATE按钮,终端输出后,按钮从灰色变为绿色,表示可以点击 + - 点击后,保存标定结果,成功标志-终端输出结果 +- COMMIT按钮: + - 点击CALIBRATE按钮,终端输出后,按钮从灰色变为绿色,表示可以点击 + - 点击后,成功标志-终端输出结果,程序GUI界面退出[如果没有退出,在终端界面按下ctrl+c结束即可] + +![](./image/camera_intrinsic/camera_intrinsic_start6.jpg) + + + +### step-4: 标定成功验证 + +> 会输出内参文件`output_camera-intrinsic.json`,查看时间是最近产生的 + +> 注意:可以复制,但请不要移动或删除该文件 + +```shell +ll -h ./calibration_script/camera_intrinsic/output +``` +![](./image/camera_intrinsic/result.png) + +## NEXT +现在,您已经完成`camera内参标定`,接下来可以开始[LiDAR-camera标定](./LiDAR-camera%E6%A0%87%E5%AE%9A.md) \ No newline at end of file diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/IMU_calibration1.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/IMU_calibration1.jpg" new file mode 100644 index 0000000..1e175d6 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/IMU_calibration1.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/check_ros2bag.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/check_ros2bag.jpg" new file mode 100644 index 0000000..e38e277 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/check_ros2bag.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/configuration_CGI410_01.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/configuration_CGI410_01.jpg" new file mode 100644 index 0000000..2da5609 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/configuration_CGI410_01.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/configuration_CGI410_02.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/configuration_CGI410_02.gif" new file mode 100644 index 0000000..1a6e251 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/configuration_CGI410_02.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/configuration_CGI410_03.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/configuration_CGI410_03.jpg" new file mode 100644 index 0000000..216fe67 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/configuration_CGI410_03.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/imu_cali.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/imu_cali.gif" new file mode 100644 index 0000000..1e0011f Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/imu_cali.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/result.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/result.jpg" new file mode 100644 index 0000000..451774a Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/result.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/start_collect.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/start_collect.gif" new file mode 100644 index 0000000..a7cc4df Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/start_collect.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/start_sensing.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/start_sensing.gif" new file mode 100644 index 0000000..ef8eb6a Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/IMU_calibration/start_sensing.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/Xnip2023-04-14_16-27-15.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/Xnip2023-04-14_16-27-15.jpg" new file mode 100644 index 0000000..4aa43ff Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/Xnip2023-04-14_16-27-15.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic.jpg" new file mode 100644 index 0000000..16d1239 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start1.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start1.gif" new file mode 100644 index 0000000..c62b576 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start1.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start2.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start2.gif" new file mode 100644 index 0000000..1d9def6 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start2.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start2.png" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start2.png" new file mode 100644 index 0000000..d4296e0 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start2.png" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start3.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start3.gif" new file mode 100644 index 0000000..2a847bb Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start3.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start4.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start4.jpg" new file mode 100644 index 0000000..3cbefd2 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start4.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start6.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start6.jpg" new file mode 100644 index 0000000..bd25144 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_start6.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_test.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_test.gif" new file mode 100644 index 0000000..408e258 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/camera_intrinsic_test.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/result.png" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/result.png" new file mode 100644 index 0000000..1036e75 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/camera_intrinsic/result.png" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/collect_data/pcd_png.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/collect_data/pcd_png.gif" new file mode 100644 index 0000000..cb4ac5b Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/collect_data/pcd_png.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/collect_data/pcd_png1.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/collect_data/pcd_png1.jpg" new file mode 100644 index 0000000..3822f69 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/collect_data/pcd_png1.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/install/SensorsCalibration_lidar2camera.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/install/SensorsCalibration_lidar2camera.jpg" new file mode 100644 index 0000000..17e6640 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/install/SensorsCalibration_lidar2camera.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/install/SensorsCalibration_lidar2imu.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/install/SensorsCalibration_lidar2imu.jpg" new file mode 100644 index 0000000..384e5fa Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/install/SensorsCalibration_lidar2imu.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/install/ros2package_calibration_ws.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/install/ros2package_calibration_ws.jpg" new file mode 100644 index 0000000..b1baa6f Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/install/ros2package_calibration_ws.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/install/run_lidar2camera.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/install/run_lidar2camera.jpg" new file mode 100644 index 0000000..49533d6 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/install/run_lidar2camera.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/20210118203641873.png" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/20210118203641873.png" new file mode 100644 index 0000000..c92fa2f Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/20210118203641873.png" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/cali_result.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/cali_result.jpg" new file mode 100644 index 0000000..aa53b37 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/cali_result.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/check.png" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/check.png" new file mode 100644 index 0000000..e042d1a Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/check.png" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/configuration_file.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/configuration_file.jpg" new file mode 100644 index 0000000..bf231df Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/configuration_file.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/file_structure.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/file_structure.jpg" new file mode 100644 index 0000000..d72c98d Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/file_structure.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/lidar2camera2.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/lidar2camera2.gif" new file mode 100644 index 0000000..43b8e6a Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/lidar2camera2.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/lidar2camera3.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/lidar2camera3.gif" new file mode 100644 index 0000000..9631bfb Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/lidar2camera3.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/lidar2camra1.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/lidar2camra1.gif" new file mode 100644 index 0000000..4098e2c Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/lidar2camra1.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/q1.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/q1.jpg" new file mode 100644 index 0000000..feb6774 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/q1.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/reslut.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/reslut.jpg" new file mode 100644 index 0000000..400ea2a Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/reslut.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/result.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/result.jpg" new file mode 100644 index 0000000..bbdfd5e Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/result.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/result2.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/result2.gif" new file mode 100644 index 0000000..6a132cb Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2camera/result2.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/check_ros2bag.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/check_ros2bag.jpg" new file mode 100644 index 0000000..9265f72 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/check_ros2bag.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/collect_data1.png" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/collect_data1.png" new file mode 100644 index 0000000..5b9f6d6 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/collect_data1.png" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/collect_data2.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/collect_data2.gif" new file mode 100644 index 0000000..ed14788 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/collect_data2.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/gnss_status.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/gnss_status.jpg" new file mode 100644 index 0000000..274be0c Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/gnss_status.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/lidar_imu_data.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/lidar_imu_data.gif" new file mode 100644 index 0000000..dab370b Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/lidar_imu_data.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/result.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/result.jpg" new file mode 100644 index 0000000..f4772dd Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/result.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/result1.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/result1.jpg" new file mode 100644 index 0000000..f999072 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/result1.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/start_cali.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/start_cali.gif" new file mode 100644 index 0000000..7ddb86d Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/start_cali.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/start_cali1.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/start_cali1.gif" new file mode 100644 index 0000000..75aa183 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/start_cali1.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/start_collect.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/start_collect.gif" new file mode 100644 index 0000000..89909c4 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2imu/start_collect.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2lidar/lidar2lidar.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2lidar/lidar2lidar.gif" new file mode 100644 index 0000000..c1245fa Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2lidar/lidar2lidar.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2lidar/lidar2lidar.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2lidar/lidar2lidar.jpg" new file mode 100644 index 0000000..759e98b Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2lidar/lidar2lidar.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2lidar/object_of_reference.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2lidar/object_of_reference.jpg" new file mode 100644 index 0000000..7c6c3e0 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/lidar2lidar/object_of_reference.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/rosnode_skip.gif" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/rosnode_skip.gif" new file mode 100644 index 0000000..389a4d8 Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/rosnode_skip.gif" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/rosnode_skip.jpg" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/rosnode_skip.jpg" new file mode 100644 index 0000000..a87910e Binary files /dev/null and "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/image/rosnode_skip.jpg" differ diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/index.md" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/index.md" new file mode 100644 index 0000000..9a4c50a --- /dev/null +++ "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/index.md" @@ -0,0 +1,43 @@ +# 传感器标定介绍 + +## 概述 +在自动驾驶系统中,传感器标定是一个非常关键的过程,对于确保自动驾驶系统的安全和性能至关重要。自动驾驶系统通常需要多种传感器来获取车辆周围的环境信息,包括摄像头、激光雷达、毫米波雷达等。这些传感器的标定可以帮助自动驾驶系统准确地感知和理解车辆周围的环境。 + +具体来说,传感器标定在自动驾驶系统中的作用包括: + +1. 精确定位:通过标定,可以准确地确定不同传感器之间的位置、朝向和相对距离,从而实现更精确的定位和导航。 +2. 优化障碍物检测:标定可以帮助自动驾驶系统准确地感知和理解车辆周围的障碍物,从而避免与其他车辆或物体发生碰撞。 +3. 提高车道保持能力:标定可以提高自动驾驶系统的车道保持能力,使车辆能够更加准确地识别和跟踪车道。 +4. 改进预测能力:标定可以提高自动驾驶系统的预测能力,使其能够更加准确地预测其他车辆和行人的行动和意图,从而提高车辆的安全性和驾驶体验。 + + +## 传感器标定内容 + +- [相机内参标定](./camera%E5%86%85%E5%8F%82%E6%A0%87%E5%AE%9A.md) +- [激光雷达到相机的外参标定](./LiDAR-camera%E6%A0%87%E5%AE%9A.md) +- [IMU标定](./IMU%E6%A0%87%E5%AE%9A.md) +- [LiDAR-IMU标定](./LiDAR-IMU%E6%A0%87%E5%AE%9A.md) + +## 传感器硬件 + +- lidar + - [RS-Helios-16P](https://www.robosense.cn/rslidar/RS-Helios) +- camera + - [森云SG2-OX03CC-5200-GMSL2F-H120](https://www.sensing-world.com/productinfo/913484.html) +- 组合导航 + - [华测CHC® CGI-410](https://www.huace.cn/product/product_show/467) + +## NEXT +现在,您已经完成`传感器标定介绍`,接下来可以开始: + +- [标定工具的安装](./%E6%A0%87%E5%AE%9A%E5%B7%A5%E5%85%B7%E5%AE%89%E8%A3%85.md) + +## 引用 + +- [SensorsCalibration](https://github.com/PJLab-ADG/SensorsCalibration) +- [image_pipeline](https://github.com/ros-perception/image_pipeline) +- [calibration_tools](https://github.com/autocore-ai/calibration_tools) +- [camera_calibration](https://navigation.ros.org/tutorials/docs/camera_calibration.html) +- [imu_utils](https://github.com/gaowenliang/imu_utils) +- [code_utils](https://github.com/gaowenliang/code_utils) + diff --git "a/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/\346\240\207\345\256\232\345\267\245\345\205\267\345\256\211\350\243\205.md" "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/\346\240\207\345\256\232\345\267\245\345\205\267\345\256\211\350\243\205.md" new file mode 100644 index 0000000..1593c38 --- /dev/null +++ "b/docs/\344\274\240\346\204\237\345\231\250\346\240\207\345\256\232/\346\240\207\345\256\232\345\267\245\345\205\267\345\256\211\350\243\205.md" @@ -0,0 +1,123 @@ +# 标定工具集合安装 + +> 购买pixkit的用户,已帮您完成此步骤,请直接开始[camera内参标定](./camera%E5%86%85%E5%8F%82%E6%A0%87%E5%AE%9A.md) + +## 概要 + +- ros2采集功能包 +- ros2标定功能包 +- 标定可执行文件 + +## 前提条件 + +- ubuntu22.04 +- Linux kernel == 5.19.0-40-generic +- ROS2:Humble +- [autoware](https://github.com/pixmoving-moveit/Autoware/tree/feature/pixkit_sensors) + + +## 安装部署 + +### step-1: clone代码仓库 + +```shell +git clone -b ros2-calibration-tools https://github.com/pixmoving-moveit/sensor_calibration_tool.git +cd sensor_calibration_tool +mkdir sensors_calibration_tool +vcs import sensors_calibration_tool < sensors_calibration_tool.repos --recursive +``` + +### step-2: 安装依赖 + +- 安装依赖[apt install] + +```shell +# 相机内参标定工具 +sudo apt install ros-$ROS_DISTRO-camera-calibration-parsers +sudo apt install ros-$ROS_DISTRO-camera-info-manager +sudo apt install ros-$ROS_DISTRO-launch-testing-ament-cmake + +# imu内参标定 +sudo apt-get install libdw-dev + +# Ceres +sudo apt-get install libgoogle-glog-dev libatlas-base-dev libeigen3-dev libsuitesparse-dev + +sudo apt-get install libgoogle-glog-dev +sudo apt-get install libpcl-dev pcl-tools + +``` + +- 安装依赖[源码编译] + - [Ceres Solver](https://ceres-solver.googlesource.com/ceres-solver) + - [gflags](https://github.com/gflags/gflags) + - [jsoncpp](https://github.com/open-source-parsers/jsoncpp) + - [Pangolin](https://github.com/stevenlovegrove/Pangolin/tree/v0.6) -- branch==v0.6 + - [fast_gicp](https://github.com/SMRT-AIST/fast_gicp) + + +### step-3: 开始编译 + +| 标定名称 | 标定程序 | 程序地址 | +| ---- | ---- | ---- | +| lidar2camera | 激光雷达到相机标定可执行程序 | /sensors_calibration_tool/SensorsCalibration/lidar2camera/manual_calib/ | +|lidar2imu|激光雷达到IMU标定可执行程序|sensors_calibration_tool/SensorsCalibration/lidar2imu/manual_calib/ | +|calibration_ws|相机内参和lidar2lidar标定可执行程序|sensors_calibration_tool/calibration_ws/ | + +#### 编译命令 + +``` shell +./cali_build.sh [参数] +# 以下为脚本参数 +# hlep 帮助文档 +# calibration_ws +# - 标定数据采集工具包 +# - imu内参标定功能包 +# - camera内参标定功能包 +# - lidar2lidar内参标定功能包 +# lidar2camera +# lidar2imu +``` + +#### lidar2camera编译 + +```shell +./cali_build.shlidar2camera +``` +![](./image/install/SensorsCalibration_lidar2camera.jpg) + +#### lidar2imu编译 + +```shell +./cali_build.shlidar2imu +``` +![](./image/install/SensorsCalibration_lidar2imu.jpg) + +#### calibration_ws编译 + +```shell +./cali_build.shcalibration_ws +``` +> 成功标志:编译过程中没有任何爆红,即是成功标志 +ros2package_calibration_ws +![](./image/install/.jpg) + + + +### step-4:成功标志 +#### 验证[激光雷达到相机](#lidar2camera编译)和[激光雷达到IMU](#lidar2imu编译)标定程序是否编译成功 + +```shell +# 执行指令,如下图输出 +cd ./sensors_calibration_tool/SensorsCalibration/lidar2camera/manual_calib/ +./bin/run_lidar2camera data/0.png data/0.pcd data/center_camera-intrinsic.json data/top_center_lidar-to-center_camera-extrinsic.json +cd - +``` +![](./image/install/run_lidar2camera.jpg) + +## NEXT +现在,您已经完成`标定工具安装`,接下来可以开始: + +- [camera内参标定](./camera%E5%86%85%E5%8F%82%E6%A0%87%E5%AE%9A.md) + + diff --git "a/docs/\345\234\260\345\233\276/.pages" "b/docs/\345\234\260\345\233\276/.pages" new file mode 100644 index 0000000..9c14443 --- /dev/null +++ "b/docs/\345\234\260\345\233\276/.pages" @@ -0,0 +1,4 @@ +nav: + - Overview: index.md + - 点云地图.md + - lanelet2地图.md \ No newline at end of file diff --git "a/docs/\345\234\260\345\233\276/images/change_lanelet_width_1.jpg" "b/docs/\345\234\260\345\233\276/images/change_lanelet_width_1.jpg" new file mode 100644 index 0000000..97b4ae0 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/change_lanelet_width_1.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/change_lanelet_width_2.jpg" "b/docs/\345\234\260\345\233\276/images/change_lanelet_width_2.jpg" new file mode 100644 index 0000000..c111a37 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/change_lanelet_width_2.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/change_lanelet_width_3.png" "b/docs/\345\234\260\345\233\276/images/change_lanelet_width_3.png" new file mode 100644 index 0000000..cd2afa7 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/change_lanelet_width_3.png" differ diff --git "a/docs/\345\234\260\345\233\276/images/change_lanelet_width_4.jpg" "b/docs/\345\234\260\345\233\276/images/change_lanelet_width_4.jpg" new file mode 100644 index 0000000..b059ac9 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/change_lanelet_width_4.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/create_lanelet2_map_2.jpg" "b/docs/\345\234\260\345\233\276/images/create_lanelet2_map_2.jpg" new file mode 100644 index 0000000..36be0ef Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/create_lanelet2_map_2.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/create_lanelet_map.jpg" "b/docs/\345\234\260\345\233\276/images/create_lanelet_map.jpg" new file mode 100644 index 0000000..3bfe21e Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/create_lanelet_map.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/draw_lanelet_1.jpg" "b/docs/\345\234\260\345\233\276/images/draw_lanelet_1.jpg" new file mode 100644 index 0000000..6c2f2c9 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/draw_lanelet_1.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/draw_lanelet_2.jpg" "b/docs/\345\234\260\345\233\276/images/draw_lanelet_2.jpg" new file mode 100644 index 0000000..e0a603a Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/draw_lanelet_2.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/draw_lanelet_3.jpg" "b/docs/\345\234\260\345\233\276/images/draw_lanelet_3.jpg" new file mode 100644 index 0000000..6612ca6 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/draw_lanelet_3.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/draw_parking_lot_1.jpg" "b/docs/\345\234\260\345\233\276/images/draw_parking_lot_1.jpg" new file mode 100644 index 0000000..a36b8ad Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/draw_parking_lot_1.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/draw_parking_lot_2.jpg" "b/docs/\345\234\260\345\233\276/images/draw_parking_lot_2.jpg" new file mode 100644 index 0000000..62d5e0d Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/draw_parking_lot_2.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/draw_parking_lot_3.jpg" "b/docs/\345\234\260\345\233\276/images/draw_parking_lot_3.jpg" new file mode 100644 index 0000000..763f877 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/draw_parking_lot_3.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/draw_trafficlight_1.jpg" "b/docs/\345\234\260\345\233\276/images/draw_trafficlight_1.jpg" new file mode 100644 index 0000000..dc4f118 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/draw_trafficlight_1.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/draw_trafficlight_2.jpg" "b/docs/\345\234\260\345\233\276/images/draw_trafficlight_2.jpg" new file mode 100644 index 0000000..424ff4f Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/draw_trafficlight_2.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/draw_trafficlight_3.jpg" "b/docs/\345\234\260\345\233\276/images/draw_trafficlight_3.jpg" new file mode 100644 index 0000000..7c55951 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/draw_trafficlight_3.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/draw_trafficlight_4.jpg" "b/docs/\345\234\260\345\233\276/images/draw_trafficlight_4.jpg" new file mode 100644 index 0000000..f1e7ed2 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/draw_trafficlight_4.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/draw_trafficlight_5.jpg" "b/docs/\345\234\260\345\233\276/images/draw_trafficlight_5.jpg" new file mode 100644 index 0000000..b86d898 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/draw_trafficlight_5.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/draw_trafficlight_6.jpg" "b/docs/\345\234\260\345\233\276/images/draw_trafficlight_6.jpg" new file mode 100644 index 0000000..f7287d0 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/draw_trafficlight_6.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/find_driable_area.png" "b/docs/\345\234\260\345\233\276/images/find_driable_area.png" new file mode 100644 index 0000000..41cbb77 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/find_driable_area.png" differ diff --git "a/docs/\345\234\260\345\233\276/images/gps-params.jpg" "b/docs/\345\234\260\345\233\276/images/gps-params.jpg" new file mode 100644 index 0000000..6e632ba Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/gps-params.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/import_pcd_1.jpg" "b/docs/\345\234\260\345\233\276/images/import_pcd_1.jpg" new file mode 100644 index 0000000..4fae651 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/import_pcd_1.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/import_pcd_2.jpg" "b/docs/\345\234\260\345\233\276/images/import_pcd_2.jpg" new file mode 100644 index 0000000..95f20b4 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/import_pcd_2.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/import_pcd_3.jpg" "b/docs/\345\234\260\345\233\276/images/import_pcd_3.jpg" new file mode 100644 index 0000000..987e4cd Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/import_pcd_3.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/import_pcd_4.jpg" "b/docs/\345\234\260\345\233\276/images/import_pcd_4.jpg" new file mode 100644 index 0000000..45ae5bc Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/import_pcd_4.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/imu-extrinsics.jpg" "b/docs/\345\234\260\345\233\276/images/imu-extrinsics.jpg" new file mode 100644 index 0000000..54f745f Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/imu-extrinsics.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/imu-intrinsics.jpg" "b/docs/\345\234\260\345\233\276/images/imu-intrinsics.jpg" new file mode 100644 index 0000000..114b523 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/imu-intrinsics.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/lanelet2_example_image.png" "b/docs/\345\234\260\345\233\276/images/lanelet2_example_image.png" new file mode 100644 index 0000000..c43cf7a Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/lanelet2_example_image.png" differ diff --git "a/docs/\345\234\260\345\233\276/images/lanelet2_primitives.jpg" "b/docs/\345\234\260\345\233\276/images/lanelet2_primitives.jpg" new file mode 100644 index 0000000..5d232f1 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/lanelet2_primitives.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/lidar-params.jpg" "b/docs/\345\234\260\345\233\276/images/lidar-params.jpg" new file mode 100644 index 0000000..20a766f Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/lidar-params.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/lio-sam-6axis.jpg" "b/docs/\345\234\260\345\233\276/images/lio-sam-6axis.jpg" new file mode 100644 index 0000000..77cf3f9 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/lio-sam-6axis.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/lio-sam-topic.jpg" "b/docs/\345\234\260\345\233\276/images/lio-sam-topic.jpg" new file mode 100644 index 0000000..cf7a720 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/lio-sam-topic.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/lio-sam.jpg" "b/docs/\345\234\260\345\233\276/images/lio-sam.jpg" new file mode 100644 index 0000000..a7515c4 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/lio-sam.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/map-origin.jpg" "b/docs/\345\234\260\345\233\276/images/map-origin.jpg" new file mode 100644 index 0000000..da410ae Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/map-origin.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/select_lanelet_tool.jpg" "b/docs/\345\234\260\345\233\276/images/select_lanelet_tool.jpg" new file mode 100644 index 0000000..e6565cc Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/select_lanelet_tool.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/images/vector_map_builder.jpg" "b/docs/\345\234\260\345\233\276/images/vector_map_builder.jpg" new file mode 100644 index 0000000..91fbd61 Binary files /dev/null and "b/docs/\345\234\260\345\233\276/images/vector_map_builder.jpg" differ diff --git "a/docs/\345\234\260\345\233\276/index.md" "b/docs/\345\234\260\345\233\276/index.md" new file mode 100644 index 0000000..7b5eeff --- /dev/null +++ "b/docs/\345\234\260\345\233\276/index.md" @@ -0,0 +1,6 @@ +# 地图 +自动驾驶地图包含点云地图与矢量地图,辅助自动驾驶车辆完成定位、导航、感知、决策、控制等功能。 + +## 点云地图与矢量地图的制作方式 +- [点云地图](./%E7%82%B9%E4%BA%91%E5%9C%B0%E5%9B%BE.md) +- [Lanelet2地图](./lanelet2%E5%9C%B0%E5%9B%BE.md) \ No newline at end of file diff --git "a/docs/\345\234\260\345\233\276/lanelet2\345\234\260\345\233\276.md" "b/docs/\345\234\260\345\233\276/lanelet2\345\234\260\345\233\276.md" new file mode 100644 index 0000000..722b290 --- /dev/null +++ "b/docs/\345\234\260\345\233\276/lanelet2\345\234\260\345\233\276.md" @@ -0,0 +1,199 @@ +# Lanelet2地图 +## Overview + +[Lanelet2](https://github.com/fzi-forschungszentrum-informatik/Lanelet2)是一个处理自动驾驶地图数据的C++库,在设计Lanelet2之初,其就被用于高效地处理面向复杂交通场景的高精度地图数据。灵活性与可拓展性作为Lanelet2的核心原则,使其能够处理未来地图的新特性。 + +![lanelet2_example_image](./images/lanelet2_example_image.png) + +## Lanelet2的基本元素 +lanelet2地图由一些基本单元组成,基础单元由`node/point`、`linestring`、`polygon`、`lanelet`、`area`、`regulatory element`组成。 +![lanelet2_primitives](./images/lanelet2_primitives.jpg) +### node +node由一个唯一的id、经纬度高度与笛卡尔坐标系的坐标组成,并具有扩展能力,通过设置tag中的k来增加新特性,通过设置v来设置新特性的值。 +```xml + + + + + + +``` +上面的例子为一个`node`,其`id`为1,`local_x`为x坐标,`local_y`为y坐标,`ele`为高度。用于组成linestring、area基本结构。 +### area +area由一个唯一的id、一系列有序顶点的node_id,area类型与是否是area的标识,并具有扩展能力,通过设置tag中的k来增加新特性,通过设置v来设置新特性的值。 +```xml + + + + + + + + +``` +上例中,`area_id`为`88`,按顺序引用`node`的id分别为`17`,`12`,`13`,`15`,`16`,`area`为`yes`。 + + +### linestring +Linestring由一系列有序的node_id、linestring类型与拓展类型组成,并具有扩展能力,通过设置tag中的k来增加新特性,通过设置v来设置新特性的值。 +```xml + + + + + + + + +``` +上例中,Linestring的id为”3”,按顺序引用node “1””2””8””10”,linestring的类型为”line_thin”,可选的linestring类型与子类型参考下表。 + +| **type** | **subtype** | **description** | **lane change?** | +|----------|-------------|-----------------|------------------| +|line_thin | solid | a solid lane marking | no | +|line_thin | solid_solid | a double solid lane marking | no | +|line_thin | dashed | a dashed lane marking | yes | +|line_thin | dashed_solid | a marking that is dashed on the left and solid on the right | left->right: yes | +|line_thin | solid_dashed | the other way around | right->left: yes | +|line_thick | same as above for thin | | | +|curbstone | high | a curbstone that is to high for a vehicle to drive over | no | +|curbstone | low | curb that is low and can be driven for a vehicle | no | +|virtual | - | a non-physical lane boundary, intended mainly for intersections | no | +|road_border | - | the end of the road. | no | + +### polygon +polygon由一条linestring组成,并具有扩展能力,通过设置tag中的k来增加新特性,通过设置v来设置新特性的值。 +```xml + + + + +``` +### lanelet +lanelet由左右两个linestring组成,引用的regulatory element与lanelet的类型组成,并具有扩展能力,通过设置tag中的k来增加新特性,通过设置v来设置新特性的值。 +```xml + + + + + + + + + + + + +``` +上例中,Lanelet的ID为`48`,lane的左、右边界分别引用`id`为`47`为`44`的`Linestring`,`centerline`引用id为`80`的`linestring`;`regulatory_element`引用`id`为`89`与`100`的`regulatory_elemen`;`type`为`lanelet`,`subtype`为`road`,`speed_limit`为`10`km/h,`location`为`urban`,`one_way`为`yes`。lanelet可选的tag参考下表。 + +| **subtype** | **location** | **description** | **Inferred Participants** | **Speed limit** | +|-------------|--------------|----------------------------------|------------------|------------------| +| **road** | **urban** | A part of a road in urban region | All vehicles and bikes | City speed limit | +| **road** | **nonurban** | A part of a road in nonurban region | All vehicles and bikes | Nonurban speed limit | +| **highway** | **urban** | A part of a highway in urban region | All vehicles | Urban highway limit | +| **highway** | **nonurban** | A part of a highway in nonurban region | All vehicles | Nonurban highway limit | +| **play_street** | **-** | A part of a play street | Vehicles, bikes, pedestrians | play street speed limit | +| **emergency_lane** | **-** | Lane for emergency vehicles | Emergency vehicles | Average emergency vehicle speed | +| **bus_lane** | **urban** | Lane for buses | Bus, Emergency, Taxi | City speed limit | +| **bus_lane** | **nonurban** | Lane for buses | Bus, Emergency, Taxi | Nonurban speed limit | +| **bicycle_lane** | **-** | A lane that is usable only for bikes | Bikes | Average bike speed | +| **exit** | **urban** | Exit area of a house or garage that crosses the crosswalk | Vehicles, bikes, pedestrians | Urban speed limit | +| **walkway** | **-** | A part of a way for pedestrians | Pedestrians | Average pedestrian walking speed | +| **shared_walkway** | **-** | A way shared by bikes and pedestrians | Bikes, Pedestrians | Average bike/pedestrian speed | +| **crosswalk** | **-** | A part of a crosswalk | Pedestrians | Average pedestrian walking speed | +| **stairs** | **-** | Well ... stairs | Pedestrians | Average pedestrian walking speed | + +### regulatory element +regulatory element由一系列的linestring与regulatory elemenet的类型组成,并具有扩展能力,通过设置tag中的k来增加新特性,通过设置v来设置新特性的值。 +```xml + + + + + + + +``` +上例中,`regulatory_element`的`id`为`100`;引用`id`为`95`的`linestring`作为交通灯的参考线;引用`id`为`92`的`linestring`作为停止线;引用`id`为`95`的`linestring`作为灯泡;`type`为`regulatory_element`,`subtype`为`traffic_light`。`regulatory_element`的`subtype`见下表. + +| **subtype** | **description** | +|-------------|----------------------------------| +|traffic_sign|交通信号标志| +|traffic_light|交通信号灯| +|speed_limit|限速标志| + +## lanelet2地图制作 + +### 画图工具 +使用[TierIv Inc.](https://tier4.jp/en/)开发的[Vector Map Builder](https://tools.tier4.jp/feature/vector_map_builder_ll2/)工具进行制作。 +![vector_map_builder](./images/vector_map_builder.jpg) + +### 导入点云地图 +制作地图之前,首先需要导入点云地图,作为矢量地图几何特征的参考。[点云地图制作方法](./%E7%82%B9%E4%BA%91%E5%9C%B0%E5%9B%BE.md) + +1. 点击`file`-`Import PCD` +![import_pcd_1](./images/import_pcd_1.jpg) + +2. 点击`browser`选取PCD文件 +![import_pcd_2](./images/import_pcd_2.jpg) + +3. 选去好PCD文件后点击`import` +![import_pcd_3](./images/import_pcd_3.jpg) + +4. 可以看到地图可视化框中导入了点云地图 +![import_pcd_4](./images/import_pcd_4.jpg) + +### 创建lanelet2地图 +1. 点击`create`菜单,`create_lanelet2Map` +![create_lanelet2_map](./images/create_lanelet_map.jpg) +![create_lanelet2_map_2](./images/create_lanelet2_map_2.jpg) + +### 编辑lanelet +1. 找到道路,可以看到两侧路沿间的可行驶区域 +![find_driable_area](./images/find_driable_area.png) +2. 点击上方菜单内`lanelet`按钮进入`lanelet编辑模式` +![select_lanelet_tool](./images/select_lanelet_tool.jpg) +3. 单击地图上的可行驶区域选择`lanelet`的初始点 +![draw_lanelet_1](./images/draw_lanelet_1.jpg) +4. 移动鼠标选择下一个`lanelet`节点,在弯道的部分可以多选择一些节点以确保弯道的平滑 +![draw_lanelet_2](./images/draw_lanelet_2.jpg) +5. 取消选择`lanelet`按钮退出`lanelet编辑模式` +![draw_lanelet_3](./images/draw_lanelet_3.jpg) +6. 修改lanelet宽度 +- 可以选择右侧`Action`内的`Change Lanelet Width`进行修改 +![change_lanelet2_width_1](./images/change_lanelet_width_1.jpg) +![change_lanelet2_width_2](./images/change_lanelet_width_2.jpg) +- 可以点击`node`进行三维的移动改变lanelet的宽度 +![change_lanelet2_width_3](./images/change_lanelet_width_3.png) +![change_lanelet2_width_4](./images/change_lanelet_width_4.jpg) + +### 编辑parking_lot(停车场) +parking_lot在自动驾驶车辆进入泊车模式时会将`parking_lot`转换成为 +1. 找到停车场区域,选择`linestring`描绘停车场区域 +![draw_parking_lot_1](./images/draw_parking_lot_1.jpg) +2. 取消`linestring`绘制工具勾选,点击右侧`Change to Polygon`按钮,将`linestring`转换成为`polygon` +![draw_parking_lot_2](./images/draw_parking_lot_2.jpg) +3. 在右侧属性编辑栏将`type`属性设置为`parking_lot` +![draw_parking_lot_3](./images/draw_parking_lot_3.jpg) + +### 编辑trafficlight(交通信号灯) +1. 选择一条`lanelet`,选择上方工具栏的`trafficlight`工具 +![draw_trafficlight_1](./images/draw_trafficlight_1.jpg) +2. 点击这条`lanelet`,就会生成一条`type`为`stop_line`的`linestring`,一条`type`为`traffic_light`的`linestring`,一条`type`为`light_bulbs`的`linestring`;可以移动这些这些组件的位置,但是`traffic_light`的方向不能够改变,因为在交通信号灯检测过程中,`traffic_light`方向是作为过滤的考虑因素。 +![draw_trafficlight_3](./images/draw_trafficlight_3.jpg) +3. 将`traffic_light`的`sub_type`设置为`red_yellow_green`,其中有一个`key`为`height`,代表为以这条`traffic_light`的`linestring`为长,`height`为宽的矩形作为交通信号灯的粗ROI,所以可以适当调整`height`的值。 +![draw_trafficlight_4](./images//draw_trafficlight_4.jpg) +4. 增加`light_bulbs`的一个名为`traffic_light_id`的`optional_tag`,其值设置为`traffic_light`这条`linestring`的id。 +![draw_trafficlight_6](./images/draw_trafficlight_6.jpg) +5. 调整`light_bulbs`的颜色,点击某一个灯泡,就能够在右侧属性编辑栏设置`color`为`read`、`green`、`yellow`。 +![draw_trafficlight_5](./images/draw_trafficlight_5.jpg) + +## lanelet2地图示例 +[lanelet2地图示例下载](https://drive.google.com/file/d/1499_nsbUbIeturZaDj7jhUownh5fvXHd/view?usp=sharing) + +## 参考资料 + - [https://www.autoware.org/_files/ugd/984e93_9978752488284f4ab6853f83a0c044bc.pdf?index=true](https://www.autoware.org/_files/ugd/984e93_9978752488284f4ab6853f83a0c044bc.pdf?index=true) + - [https://github.com/fzi-forschungszentrum-informatik/Lanelet2](https://github.com/fzi-forschungszentrum-informatik/Lanelet2) + - [https://tools.tier4.jp/feature/vector_map_builder_ll2/](https://tools.tier4.jp/feature/vector_map_builder_ll2/) + - [https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/components/planning/#lanelet2-map](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/components/planning/#lanelet2-map) \ No newline at end of file diff --git "a/docs/\345\234\260\345\233\276/\347\202\271\344\272\221\345\234\260\345\233\276.md" "b/docs/\345\234\260\345\233\276/\347\202\271\344\272\221\345\234\260\345\233\276.md" new file mode 100644 index 0000000..00389ed --- /dev/null +++ "b/docs/\345\234\260\345\233\276/\347\202\271\344\272\221\345\234\260\345\233\276.md" @@ -0,0 +1,220 @@ +# 点云地图制作 +## LIO-SAM-6AXIS +![lio-sam-6axis](./images/lio-sam.jpg) + +### prerequest +- Ubuntu 22.04 +- ROS2 Humble + +### step-1: 构建建图工作空间 +创建工作空间 +```shell +mkdir ~/mapping_ws +cd ~/mapping_ws +mkdir src +cd src +``` + +### step-2 clone仓库 +```shell +git clone https://github.com/pixmoving-moveit/LIO-SAM-ROS2-PIXKIT # clone 仓库代码 +``` + +### step-3 安装依赖 +```shell +sudo apt install ros-humble-perception-pcl \ + ros-humble-pcl-msgs \ + ros-humble-vision-opencv \ + ros-humble-xacro +# Add GTSAM-PPA +sudo add-apt-repository ppa:borglab/gtsam-release-4.1 +sudo apt install libgtsam-dev libgtsam-unstable-dev +``` + +### step-4 编译package +```shell +cd ~/mapping_ws +colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release +``` +### step-5 标定传感器 +在建图之前,需要准备好你的IMU的内参,还有LiDAR与IMU的外参 + +- [标定IMU内参](../%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A0%87%E5%AE%9A/IMU%E6%A0%87%E5%AE%9A.md) +- [标定LiDAR与IMU外参](../%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A0%87%E5%AE%9A/LiDAR-IMU%E6%A0%87%E5%AE%9A.md) + +### step-6 修改配置文件 +launch文件 +```python3 +import os +from ament_index_python.packages import get_package_share_directory +from launch import LaunchDescription +from launch.actions import DeclareLaunchArgument +from launch.substitutions import LaunchConfiguration, Command +from launch_ros.actions import Node + + +def generate_launch_description(): + + share_dir = get_package_share_directory('lio_sam') + parameter_file = LaunchConfiguration('params_file') + xacro_path = os.path.join(share_dir, 'config', 'robot.urdf.xacro') + rviz_config_file = os.path.join(share_dir, 'config', 'rviz2.rviz') + + params_declare = DeclareLaunchArgument( + 'params_file', + default_value=os.path.join( + share_dir, 'config', 'params_rs16.yaml'), + description='FPath to the ROS2 parameters file to use.') + + print("urdf_file_name : {}".format(xacro_path)) + + return LaunchDescription([ + params_declare, + Node( + package='tf2_ros', + executable='static_transform_publisher', + arguments='0.0 0.0 0.0 0.0 0.0 0.0 map odom'.split(' '), + parameters=[parameter_file], + output='screen' + ), + Node( + package='robot_state_publisher', + executable='robot_state_publisher', + name='robot_state_publisher', + output='screen', + parameters=[{ + 'robot_description': Command(['xacro', ' ', xacro_path]) + }] + ), + Node( + package='lio_sam', + executable='lio_sam_imuPreintegration', + name='lio_sam_imuPreintegration', + parameters=[parameter_file], + output='screen' + ), + Node( + package='lio_sam', + executable='lio_sam_imageProjection', + name='lio_sam_imageProjection', + parameters=[parameter_file], + output='screen' + ), + Node( + package='lio_sam', + executable='lio_sam_featureExtraction', + name='lio_sam_featureExtraction', + parameters=[parameter_file], + output='screen' + ), + Node( + package='lio_sam', + executable='lio_sam_mapOptimization', + name='lio_sam_mapOptimization', + parameters=[parameter_file], + output='screen' + ), + Node( + package='lio_sam', + executable='lio_sam_simpleGpsOdom', + name='lio_sam_simpleGpsOdom', + parameters=[parameter_file], + output='screen' + ), + Node( + package='rviz2', + executable='rviz2', + name='rviz2', + arguments=['-d', rviz_config_file], + output='screen' + ) + ]) + +``` +需要根据launch文件修改对应的参数文件,以上述的launch文件为例,使用的参数文件是`params_rs16.yaml`,所以应该在这个文件中修改相关参数 + +- 需要修改为你的传感器配置的msg +![lio-sam-topic](./images/lio-sam-topic.jpg) + +|**参数**|**msg 类型**|**描述**| +|--|--|--| +|pointCloudTopic|sensor_msgs/Pointcloud2|LiDAR点云的topic| +|imuTopic|sensor_msgs/Imu|IMU的topic| +|odomTopic|nav_msgs/Odometry|IMU里程计topic,不需要修改| +|gpsTopic|nav_msgs/NavSatFix|gnss的定位topic| + +- 如果使用GNSS进行方位初始化,需要将`useImuHeadingInitialization`设为`true` +![gps-params](./images/gps-params.jpg) + +- LiDAR参数 +![lidar-params](./images/lidar-params.jpg) + +|**参数**|**描述**| +|--|--| +|sensor|LiDAR的类型,可选`velodyne`, `ouster`, `livox`, `robosense`| +|N_SCAN|点云通道数,16线激光雷达即为16| +|Horizon_SCAN|LiDAR的横向分辨率,(Velodyne:1800, Ouster:512,1024,2048, Livox Horizon: 4000)| +|downsampleRate|下采样率,让N_SCAN/downsampleRate=16| +|lidarMinRange|最小点云距离,默认为1.5| +|lidarMaxRange|最大点云距离,默认为1000.0| + +- IMU内参,参考[IMU标定](../%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A0%87%E5%AE%9A/IMU%E6%A0%87%E5%AE%9A.md)获取IMU内参 + +![IMU intrinsics](./images/imu-intrinsics.jpg) + +|**参数**|**描述**| +|--|--| +|imuAccNoise|3轴加速度计白噪声均值 (m/s^s)| +|imuGyrNoise|3轴陀螺白噪声均值 (rad/s)| +|imuAccBiasN|3轴加速度计零偏均值 (m/s^s)| +|imuGyrBiasN|3轴陀螺零偏均值 (rad/s)| +|imuGravity|当地重力加速度 (m/s^2)| +|imuRPYWeight|角度权重,默认0.01| + +- IMU外参,参考[LiDAR与IMU外参标定](../%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A0%87%E5%AE%9A/LiDAR-IMU%E6%A0%87%E5%AE%9A.md) + +> IMU外参,可以使用[LiDAR与IMU外参标定],也可以使用卷尺手动量取(坐标系为右手法则) +> 当手动量取时: +> - extrinsicTrans:卷尺手动量取 +> - extrinsicRot: 单位矩阵即可 + + +![IMU extrinsics](./images/imu-extrinsics.jpg) + +|**参数**|**描述**| +|--|--| +|extrinsicTrans|平移矩阵| +|extrinsicRot|旋转矩阵| + +### step-8: 运行建图程序 +运行建图launch文件 +```shell +ros2 launch lio_sam run.launch.py +``` +播放rosbag +```shell +ros2 bag play --clock -r 3.0 -s sqlite3 [your_ros2_bag] +``` + +### step-7: 保存地图 +```shell +ros2 service call /lio_sam/save_map lio_sam/srv/SaveMap "{resolution: 0.2, destination: [Absolute path to store your map]}" +``` +保存好地图之后能够在地图文件夹内看到以下文件 + +|**name**|**描述**| +|--|--| +|GlobalMap.pcd|点云地图,如果使用GNSS的话方向已经转换至ENU方向| + +你能够看到点云地图的原点WGS84坐标,用于GNSS定位 +![map-origin](./images/map-origin.jpg) +> 建议把终端里的信息保存下来,方便用于GNSS定位时使用 + +## 引用 +- [LIO_SAM](https://github.com/TixiaoShan/LIO-SAM) + +- [LIO_SAM_6AXIS](https://github.com/JokerJohn/LIO_SAM_6AXIS) + +- [LIO-SAM-ROS2-PIXKIT](https://github.com/pixmoving-moveit/LIO-SAM-ROS2-PIXKIT) + +- [creating maps for Autoware](https://autowarefoundation.github.io/autoware-documentation/pr-335/how-to-guides/creating-maps-for-autoware/open-source-slam/fast-lio-lc/) \ No newline at end of file diff --git "a/docs/\346\224\257\346\214\201/.pages" "b/docs/\346\224\257\346\214\201/.pages" new file mode 100644 index 0000000..abf8ca2 --- /dev/null +++ "b/docs/\346\224\257\346\214\201/.pages" @@ -0,0 +1,3 @@ +nav: + - index.md + - 备份刷写系统 \ No newline at end of file diff --git "a/docs/\346\224\257\346\214\201/index.md" "b/docs/\346\224\257\346\214\201/index.md" new file mode 100644 index 0000000..73e1f33 --- /dev/null +++ "b/docs/\346\224\257\346\214\201/index.md" @@ -0,0 +1 @@ +# 支持 \ No newline at end of file diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/.pages" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/.pages" new file mode 100644 index 0000000..ae49b41 --- /dev/null +++ "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/.pages" @@ -0,0 +1,4 @@ +nav: + - 备份系统镜像.md + - 刷写系统镜像.md + \ No newline at end of file diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/0.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/0.png" new file mode 100644 index 0000000..055c84c Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/0.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/10.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/10.png" new file mode 100644 index 0000000..5da2275 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/10.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/11.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/11.png" new file mode 100644 index 0000000..c9e19d6 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/11.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/12.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/12.png" new file mode 100644 index 0000000..60b7a46 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/12.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/15.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/15.png" new file mode 100644 index 0000000..3c97604 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/15.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/16.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/16.png" new file mode 100644 index 0000000..cba8b27 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/16.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/19.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/19.png" new file mode 100644 index 0000000..ffb7c0a Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/19.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/20.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/20.png" new file mode 100644 index 0000000..ae74d72 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/20.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/21.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/21.png" new file mode 100644 index 0000000..b5876e3 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/21.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/23.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/23.png" new file mode 100644 index 0000000..4925388 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/23.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/24.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/24.png" new file mode 100644 index 0000000..c0eaf4a Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/24.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/25.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/25.png" new file mode 100644 index 0000000..797fd89 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/25.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/26.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/26.png" new file mode 100644 index 0000000..c57ded7 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/26.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/35.jpg" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/35.jpg" new file mode 100644 index 0000000..fb39785 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/35.jpg" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/36.jpg" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/36.jpg" new file mode 100644 index 0000000..266ae53 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/36.jpg" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/37.jpg" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/37.jpg" new file mode 100644 index 0000000..5ba3165 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/37.jpg" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/38.jpg" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/38.jpg" new file mode 100644 index 0000000..6615fbd Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/38.jpg" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/5.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/5.png" new file mode 100644 index 0000000..fd892dc Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/5.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/6.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/6.png" new file mode 100644 index 0000000..8d1330a Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/6.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/63.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/63.png" new file mode 100644 index 0000000..cc8cdd2 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/63.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/720q90g.jpg" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/720q90g.jpg" new file mode 100644 index 0000000..1152250 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/720q90g.jpg" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/76AE.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/76AE.png" new file mode 100644 index 0000000..8df1b54 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/76AE.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/8.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/8.png" new file mode 100644 index 0000000..813687c Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/8.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/9.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/9.png" new file mode 100644 index 0000000..b9bf228 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/9.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/94D879.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/94D879.png" new file mode 100644 index 0000000..78b220e Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/94D879.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/D2.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/D2.png" new file mode 100644 index 0000000..faaa070 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/D2.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/DC2EF.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/DC2EF.png" new file mode 100644 index 0000000..257046d Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/DC2EF.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/E.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/E.png" new file mode 100644 index 0000000..91f9450 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/E.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/E09png.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/E09png.png" new file mode 100644 index 0000000..fcf601e Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/E09png.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/f.jpg" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/f.jpg" new file mode 100644 index 0000000..06b6659 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/f.jpg" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/g.jpg" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/g.jpg" new file mode 100644 index 0000000..401a431 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/g.jpg" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/hh.jpg" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/hh.jpg" new file mode 100644 index 0000000..7503a7c Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/hh.jpg" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/k.jpg" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/k.jpg" new file mode 100644 index 0000000..e864bfb Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/k.jpg" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/l.jpg" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/l.jpg" new file mode 100644 index 0000000..453db28 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/l.jpg" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/l9.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/l9.png" new file mode 100644 index 0000000..883fc53 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/l9.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/lQLPJwDCetAopwbNBD3NCGmwBeApK3fykssEPgo_EcB8AQ_2153_1085.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/lQLPJwDCetAopwbNBD3NCGmwBeApK3fykssEPgo_EcB8AQ_2153_1085.png" new file mode 100644 index 0000000..5520c22 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/lQLPJwDCetAopwbNBD3NCGmwBeApK3fykssEPgo_EcB8AQ_2153_1085.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/lQLPJwdL8ziBiAbNBG_NCAewb7ZWChcktagEPgo_GcCyAQ_2055_1135.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/lQLPJwdL8ziBiAbNBG_NCAewb7ZWChcktagEPgo_GcCyAQ_2055_1135.png" new file mode 100644 index 0000000..b0d9806 Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/lQLPJwdL8ziBiAbNBG_NCAewb7ZWChcktagEPgo_GcCyAQ_2055_1135.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/lQLPJwospArGKAbNBG7NCEqwTvJWVkqz2FsEPgo_GgCFAQ_2122_1134.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/lQLPJwospArGKAbNBG7NCEqwTvJWVkqz2FsEPgo_GgCFAQ_2122_1134.png" new file mode 100644 index 0000000..02494da Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/lQLPJwospArGKAbNBG7NCEqwTvJWVkqz2FsEPgo_GgCFAQ_2122_1134.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/lQLPJxg-PV4fxwbNA9LNB96wmYiJD_NNRXUEPgo_EcB8AA_2014_978.png" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/lQLPJxg-PV4fxwbNA9LNB96wmYiJD_NNRXUEPgo_EcB8AA_2014_978.png" new file mode 100644 index 0000000..fd892dc Binary files /dev/null and "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/images/lQLPJxg-PV4fxwbNA9LNB96wmYiJD_NNRXUEPgo_EcB8AA_2014_978.png" differ diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/\345\210\267\345\206\231\347\263\273\347\273\237\351\225\234\345\203\217.md" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/\345\210\267\345\206\231\347\263\273\347\273\237\351\225\234\345\203\217.md" new file mode 100644 index 0000000..5fdcdd1 --- /dev/null +++ "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/\345\210\267\345\206\231\347\263\273\347\273\237\351\225\234\345\203\217.md" @@ -0,0 +1,66 @@ +# 刷写系统镜像 + +> 基本原则:将系统备份好的镜像文件刷写到工控机 + +> 声明:当工控机系统被破坏、缺失文件导致无法运行自动驾驶或在黑屏导致无法进入系统时,可以用U盘来还原工控机系统恢复出场设置。 + +## 前提条件 + +- [再生龙启动U盘制作](https://clonezilla.nchc.org.tw/clonezilla-live/liveusb.php#windows-method-b) +- [备份系统镜像](./%E5%A4%87%E4%BB%BD%E7%B3%BB%E7%BB%9F%E9%95%9C%E5%83%8F.md) + +## 根据以下步骤 + +### step-1:插入`再生龙启动U盘`,开机按住F12(可以使用有线键盘操作),进入刷机启动界面 +![alt](images/lQLPJwDCetAopwbNBD3NCGmwBeApK3fykssEPgo_EcB8AQ_2153_1085.png) +### step-2:使用`再生龙启动U盘`还原镜像时选择第二个选项 + +> 系统的最初镜像已附带在U盘里,选择使用U盘里的镜像刷写还原 + +![alt](images/12.png) +### step-3:选择中文界面 +![alt](images/lQLPJwdL8ziBiAbNBG_NCAewb7ZWChcktagEPgo_GcCyAQ_2055_1135.png) +### step-4:默认键盘 +![alt](images/5.png) +### step-5:使用再生龙 +![alt](images/8.png) +### step-6:镜像文件来自U盘 +![alt](images/6.png) +### step-7:已读取到镜像分区 +![alt](images/35.jpg) +### step-8:ctrl+c + +> 等待出现硬盘信息(如下图),才能按下`ctrl+c` + +![alt](images/l9.png) +### step-9:选择插入时U盘 +![alt](images/36.jpg) +### step-10:选择U盘里的镜像文件 +![alt](images/15.png) +### step-11:默认第一个选项 +![alt](images/16.png) +### step-12:选择第三个选项,用于把U盘的镜像还原到工控机 +![alt](images/37.jpg) +### step-13:选择需要还原的镜像名 +![alt](images/38.jpg) +### step-14:系统盘位置 +![alt](images/23.png) +### step-15:默认选择还原前检查 +![alt](images/24.png) +### step-16:可以选择直接关机(poweroff) +![alt](images/25.png) +### step-17:读取镜像 +![alt](images/26.png) +### step-18:输入 y +![alt](images/20.png) +### step-19:等待刷机(10分钟左右) +![alt](images/21.png) + +### step-20:系统自动关机——已完成刷写 + + +**注意事项**: 此U盘建议仅用于还原镜像,不要做任何修改、添加或者保存其他文件,以免破坏启动盘的环境。 + +## 参考资料 +[Clonezilla 再生龍](https://clonezilla.nchc.org.tw/intro/) +[还原镜像视频](https://www.youtube.com/watch?v=YEFt2LPSYMk) \ No newline at end of file diff --git "a/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/\345\244\207\344\273\275\347\263\273\347\273\237\351\225\234\345\203\217.md" "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/\345\244\207\344\273\275\347\263\273\347\273\237\351\225\234\345\203\217.md" new file mode 100644 index 0000000..2ba626f --- /dev/null +++ "b/docs/\346\224\257\346\214\201/\345\244\207\344\273\275\345\210\267\345\206\231\347\263\273\347\273\237/\345\244\207\344\273\275\347\263\273\347\273\237\351\225\234\345\203\217.md" @@ -0,0 +1,68 @@ +# 备份系统镜像 + +> 基本原则:将工控机系统制作镜像,用户需要提供一个超过100G的硬盘 + +> 声明:避免用户在工控机里安装其他的驱动或在软件时破坏系统配置导致无法运行自动驾驶及启动驱动,可以通过备份的镜像来还原最初系统(系统的最初镜像已附带在U盘里)。用户也可以备份自己的系统镜像,可以用硬盘来保存工控机镜像。 + +## 前提条件 + +- [再生龙启动U盘制作](https://clonezilla.nchc.org.tw/clonezilla-live/liveusb.php#windows-method-b) + +## 根据以下几个步骤 +### step-1:插入`再生龙启动U盘`,开机按住F12(可以使用有线键盘操作),进入刷机启动界面 +![alt](images/lQLPJwDCetAopwbNBD3NCGmwBeApK3fykssEPgo_EcB8AQ_2153_1085.png) +### step-2:使用一个新的`100G以上的移动硬盘`或者`100G以上的U盘`作为`镜像文件存储盘` + +> 系统的出厂镜像已附带在`再生龙启动U盘`里,用户需要备份镜像,则需要重新准备一个`100G以上的移动硬盘`或者`100G以上的U盘` + +![alt](images/lQLPJwospArGKAbNBG7NCEqwTvJWVkqz2FsEPgo_GgCFAQ_2122_1134.png) +### step-3:选择中文界面 +![alt](images/lQLPJwdL8ziBiAbNBG_NCAewb7ZWChcktagEPgo_GcCyAQ_2055_1135.png) +### step-4:默认键盘 +![alt](images/5.png) +### step-5:使用再生龙 +![alt](images/8.png) +### step-6:保存镜像文件至移动硬盘 +![alt](images/6.png) +### step-7:使用挂载设备时选择第一个 +![alt](images/10.png) +### step-8:插入硬盘 +![alt](images/0.png) +### step-9:ctrl+c + +> 等待出现硬盘信息(如下图),才能按下`ctrl+c` + +![alt](images/l9.png) +### step-10:刚才挂载的硬盘 +![alt](images/E.png) +### step-11:默认选择 +![alt](images/E09png.png) +### step-12:选择要保存的文件名 +![alt](images/63.png) +### step-13:选择Done +![alt](images/D2.png) +### step-14:默认选择 +![alt](images/76AE.png) +### step-15:储存本机镜像 +![alt](images/94D879.png) +### step-16:文件命名 +![alt](images/DC2EF.png) +### step-17:以zip方式压缩储存 +![alt](images/720q90g.jpg) +### step-18:默认 +![alt](images/hh.jpg) +### step-19:默认 +![alt](images/f.jpg) +### step-20:默认 +![alt](images/g.jpg) +### step-21:执行完选择选择poweroff +![alt](images/k.jpg) +### step-22:开始拷贝 +![alt](images/l.jpg) +### step-23:等待完成自动关机 + +**注意事项**: U盘作为启动盘,需要保存自己镜像时候需要用户提供硬盘,不要在U盘上做任何修改、添加或者保存其他文件,以免破坏启动盘的环境。 + +## 参考资料 +[Clonezilla 再生龍](https://clonezilla.nchc.org.tw/intro/) +[制作再生龙镜像视频](https://www.youtube.com/watch?v=8-7w5zwD9M4) \ No newline at end of file diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/.pages" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/.pages" new file mode 100644 index 0000000..aabc72c --- /dev/null +++ "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/.pages" @@ -0,0 +1,7 @@ +nav: + - Overview: index.md + - IPC安装.md + - LiDAR安装.md + - camera安装.md + - GNSS安装.md + - 超声波雷达安装.md \ No newline at end of file diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/GNSS\345\256\211\350\243\205.md" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/GNSS\345\256\211\350\243\205.md" new file mode 100644 index 0000000..029058e --- /dev/null +++ "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/GNSS\345\256\211\350\243\205.md" @@ -0,0 +1,81 @@ +# GNSS安装 +## 硬件安装 +## 设备接线 + +## 硬件参数配置 +### 设备信息检测 +- 天线和电缆的安装完成后,给接收机上电开机,当接收机启动后,可以使用 WiFi 来访问、配置和监视接收机,不需要连接到接收器的线缆。请遵循以下步骤,通过 WiFi 从网页开始。 +- 打开电脑 WiFi,搜索名为 GNSS-XXXXXXX 的无线网络(其中 XXXXXXX 代表你的接收器的 SN 号,可以在主机设备上查看到),然后建立连接,密码是 12345678;打开浏览器,在地址栏输入 192.168.200.1,弹出登陆界面,账号:admin,密码:password;如果选中“记住我”选项,那么浏览器将会记住您下次登录时输入的登录账户和密码 +**注意**:不要用火狐浏览器打开,否则参数不能修改成功。 + ![avatar](./image/gnss_picture/1.png) +- 界面显示为中文,右上角可切换成英文和俄语 + ![avatar](./image/gnss_picture/Snipaste_2023-04-21_13-59-12.png) +- 点击“固件升级”,在弹出的对话框中选择本地固件升级包,点击定即可自动升级 + +> 默认不操作此步骤,当有“固件升级”需求时在操作 + ![avatar](./image/gnss_picture/Snipaste_2023-04-21_14-25-40.png) +- 点击“接收机注册”,通过注册软件提供的注册码进行注册后,使接收机在当前的注册期限中才能正常的使用,收到设备后联系PIX同事注册 + +> 默认不操作此步骤,当有“接收机过期提示时”提示时在操作 + ![avatar](./image/gnss_picture/Snipaste_2023-04-21_14-50-59.png) + +- 确定有线网络IP地址192.168.1.110(出厂IP,切勿修改) + +> 默认不修改IP,当有“修改IP”需求时在操作 + ![avatar](./image/gnss_picture/Snipaste_2023-04-21_14-52-58.png) + + +### 参数适配 +#### 车辆参数设置 + +> 购买PIXKIT套件,不需要`车辆参数设置`,出厂已经设置完毕 + +![avatar](./image/gnss_picture/Snipaste_2023-04-21_17-09-07.png) + +- 使用天线数:后天线接设备GNSS1为定位天线,前天线接设备GNSS2为定向天线; +- 工作模式:为移动机器人,选择低速模式; +- 惯导到车辆坐标系夹角:标准安装,参数均为0; +- `定位天线到后轮中心杆臂`:以定位天线为原点坐标,分别为 xyz,左右方向为 x(右正左负),前后方向为 y(前正后负),上下方向为 z(上正下负),单位为m。例如:天线在后轮中心的左边 0.3 米(一般放在车子中心线,则为 0),前面 0.5 米,上面 1 米,输入值则为 0.3,-0.5,-1; +- GNSS 定向基线与车辆坐标系夹角:标准安装,参数均为0; +- `惯导到GNSS定位天线杆臂`:以惯导设备为原点坐标,分别为 xyz,左右方向为 x(右正左负),前后方向为 y(前正后负),上下方向为 z(上正下负),单位为 m,定位天线在设备的右前上,则x,y,z均为正值; +- 里程计轮速精度(km/h)/转角精度(deg)和里程计延迟:默认值均为0; +- `轮距`:客户根据收到车辆进行测量填写。 +完成配置后点击保存即可。 + +![](./image/gnss_picture/parameter.jpg) +![](./image/gnss_picture/Coordinate_System.jpg) + +1. `轮距`: 图中`D`长度,车尾两轮中心的距离 +2. `惯导到GNSS定位天线杆臂`: 把`主机单元`看成坐标系原点,`定位天线`看成一个点,`定位天线`这个点在`主机单元`这个坐标系下的x,y,z值,比如(E, -A, F) +3. `定位天线到后轮中心杆臂`: 把`定位天线`看成坐标系原点,`后轴中心`看成一个点,`后轴中心`这个点在`定位天线`这个坐标系下的x,y,z值。 + + + + +#### RTK账号登录 + +- 进入到IO 配置界面,选择“RTK 客户端”,点击“连接”,连接协议可以选择 NTRIP/TCP/APIS协议,输入账号密码等相关信息后,最后点击“确定”。 + ![avatar](./image/gnss_picture/Snipaste_2023-04-21_17-15-11.png) + +**注意1**:获取源列表时,一定要注意右下角弹出源列表获取成功,否则RTK登录失败,检查是否给设备供网。 + +**注意2**:CGI-410支持国外差分,但必须保证基站播发的是标准的RTCM语句,国内外统一支持卫星:GPS,北斗,伽利略,格洛纳斯,准天顶。 + +#### 设备校准 +实车操作:INS模式先是卫导,然后初始化,最后组合惯导,车辆一定要开到户外,且周围较为空旷,无高大遮挡建筑物,车辆前后移动,**8**字形移动,前后转圈行驶,大概需要二十分钟左右方可校准成功,如果INS模式一直没变化,请检查RTK账号是否登录成功。 +- 惯导状态1:INS模式为卫导; + ![avatar](./image/gnss_picture/Snipaste_2023-04-21_17-36-06.png) +- 惯导状态2:INS模式为初始化; + ![avatar](./image/gnss_picture/Snipaste_2023-04-21_17-36-52.png) +- 惯导准态3:INS模式为组合惯导状态,组合信息为GNSS | MIU + ![avatar](./image/gnss_picture/Snipaste_2023-04-21_17-37-29.png) +**注意**:标定半小时,INS模式初始化,GNSS模式一直不出现RTK稳定解定位定向,请查设备RTK是否正常,臂杆值是否正确,定位天线(后天线是否接设备GNSS1),定向天线(前天线是否接设备GNSS2)。如果设备是安装在整车项目,不方便检查,请检查惯导状态中的姿态信息中的航向度数,手机打指南针,与车的行驶方向一直,查看度数是是否一直,10度以内偏差正常,如果超过180度偏差,则线束接反,请将GNSS1,与GNSS2接口位置调换。 + +#### 数据输出 +- 输出格式TCP:通过RJ45输出数据到主机设备,组合导航数据分别输出:GPCHC 50HZ,GPGGA 50HZ,其他数据均为关闭,保存数据; + ![avatar](./image/gnss_picture/Snipaste_2023-04-21_18-09-17.png) + ![avatar](./image/gnss_picture/input.png) +- 启动工控机,Ctrl+Alt+t打开终端,nc 192.168.1.110 9904,有数据输出表示TCP通讯成功; + ![avatar](./image/gnss_picture/Snipaste_2023-04-23_14-20-52.png) +- 如需使用其他参数请参考CGI-410使用手册。 + [CGI-410使用手册](./image/CGI-410.pdf) diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/IPC\345\256\211\350\243\205.md" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/IPC\345\256\211\350\243\205.md" new file mode 100644 index 0000000..5d756d9 --- /dev/null +++ "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/IPC\345\256\211\350\243\205.md" @@ -0,0 +1,49 @@ +# IPC安装 +## 硬件安装 +## 设备接线 +## 硬件参数检查 +- 接线完成后,点击开机按钮,稍等几秒即可登入界面 + ![avatar](./image/IPC_picture/Snipaste_2023-04-28_13-59-54.png) +- Ctrl+Alt+t 启动终端:用户名:pixkit,用户名密码:pixmoving +- 检查主机静态IP:192.168.1.102,如果不是,请修改静态IP地址,否则传感器数据传输异常 + ![avatar](./image/IPC_picture/Snipaste_2023-04-28_14-05-45.png) +- 设置主机静态IP:打开网络设置,选择设置端口,点击IPV4,根据图片修改ip,网关,子网掩码,DNS,完成后点击右上角应用。 + ![avatar](./image/IPC_picture/Snipaste_2023-05-18_12-28-11.png) + +Ctrl+Alt+t 启动终端,ifconfig检测是否修改成功 + ![avatar](./image/IPC_picture/ifconfig.png) + +> 网口位置对应关系 + ![](./image/IPC_picture/network_port_position.jpg) +注意:该图片仅供参考,如果收到工控机与图片不符,请忽略此图片。 + +- 检查底盘can数据 +```shell +candump can0 +``` +终端输出数据正常 + ![avatar](./image/IPC_picture/Snipaste_2023-04-28_14-23-43.png) + +- 检查激光雷达:RS-Helios-16P ;192.168.1.200 +```shell +ping 192.168.1.200 +``` +终端输出数据正常 + ![avatar](./image/IPC_picture/Snipaste_2023-04-28_14-19-14.png) + +- 检查组合惯导:CGI-410 ;192.168.1.110 +```shell +ping 192.168.1.110 +``` +终端输出数据正常 + ![avatar](./image/IPC_picture/Snipaste_2023-04-28_14-20-42.png) + +- 如果适配的有路由器及物联网卡,请检查是否能正常上网 +```shell +ping baidu.com +``` +终端输出数据正常 + ![avatar](./image/IPC_picture/Snipaste_2023-04-28_14-28-24.png) +**注意1**:需要根据路由器IP地址,设置主机IP,方可正常上网。 + +**注意2**:如果传感器参数不能正常输出,请点击相应硬件安装文档,根据操作文档检查线束连接。 diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/LiDAR\345\256\211\350\243\205.md" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/LiDAR\345\256\211\350\243\205.md" new file mode 100644 index 0000000..983bfd0 --- /dev/null +++ "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/LiDAR\345\256\211\350\243\205.md" @@ -0,0 +1,51 @@ +# LiDAR安装 +## 硬件安装 +## 设备接线 +## 硬件参数配置 + +### 设备信息检测 + +- 雷达型号:RS-Helios-16P +- RSView可视化软件使用 +- 点击下载:[RS-Helios-16p资料](https://www.robosense.ai/resources-81) +- 根据操作文档设置雷达IP地址,出厂IP:192.168.1.200(切勿修改) + +#### rviz2 可视化显示 +- 打开工控机,Ctrl+Alt+t 启动终端,进入该路径 + ![avatar](./image/lidar_picture/souce.png) + +```shell +source install/setup.bash + +ros2 run rslidar_sdk rslidar_sdk_node +``` +- 启动ros2 驱动 + ![avatar](./image/lidar_picture/1.png) + +- 启动rviz2 查看点云数据,修改Fixed Frame :rs16,增加点云话题 + ![avatar](./image/lidar_picture/Snipaste_2023-04-24_14-49-26.png) + ![avatar](./image/lidar_picture/topic.png) + +- 启动顺序 + ![avatar](./image/lidar_picture/Snipaste_2023-04-24_14-50-15.png) + +#### RSview软件 + +**注意**:RSview是速腾官方软件,使用方法建议按照RS官方文档操作,此处作为参考,官方软件更新迭代,操作界面或有不同。 + +- 启动设备:带RJ45网口Window系统笔记本电脑 +- 设置笔记本IPV4IP地址:192.168.1.102 + ![avatar](./image/lidar_picture/Snipaste_2023-04-24_10-43-45.png) +- 关闭系统防火墙 + ![avatar](./image/lidar_picture/Snipaste_2023-04-24_10-44-43.png) +- 启动RSview软件(根据雷达型号下载相应软件) + ![avatar](./image/lidar_picture/Snipaste_2023-04-24_10-42-27.png) +- 点击雷达标志,查看点云数据是否正常 + ![avatar](./image/lidar_picture/Snipaste_2023-04-24_10-48-44.png) + ![avatar](./image/lidar_picture/Snipaste_2023-04-24_10-49-49.png) + ![avatar](./image/lidar_picture/Snipaste_2023-04-24_11-21-33.png) +- 支持Web查看设备信息,更新固件,修改IP,打开浏览器,输入192.168.1.200即可 + ![avatar](./image/lidar_picture/Snipaste_2023-04-24_11-01-47.png) + + + diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/camera\345\256\211\350\243\205.md" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/camera\345\256\211\350\243\205.md" new file mode 100644 index 0000000..077f4b1 --- /dev/null +++ "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/camera\345\256\211\350\243\205.md" @@ -0,0 +1,24 @@ +# camera安装 +## 硬件安装 +## 设备接线 +## 硬件启动 +- 打开工控机,Ctrl+Alt+t 启动终端 +```shell +source ~/pix/pit-kit/Autoware/install/setup.bash +ros2 launch pixkit_sensor_kit_launch camera_launch.py +``` +- 启动相机驱动 + ![avatar](./image/camera_picture/Snipaste_2023-04-24_16-25-22.png) +- 查看话题数据 +```shell +ros2 topic list +``` +重新打开一个终端 + ![avatar](./image/camera_picture/Snipaste_2023-04-24_16-26-17.png) +- rqt工具包查看 +```shell +ros2 run rqt_image_view rqt_image_view +``` +在终端输入指令回车,会自动弹出可视化界面 + ![avatar](./image/camera_picture/Snipaste_2023-04-24_16-28-52.png) +**注意**:如果不能输出话题列表或查看可视化图像,请检查线束,或查看ros驱动是否启动成功。 \ No newline at end of file diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/CGI-410.pdf" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/CGI-410.pdf" new file mode 100644 index 0000000..88517f0 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/CGI-410.pdf" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/F40-16TR7B\350\266\205\345\243\260\346\263\242\344\274\240\346\204\237\345\231\250.pdf" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/F40-16TR7B\350\266\205\345\243\260\346\263\242\344\274\240\346\204\237\345\231\250.pdf" new file mode 100644 index 0000000..52a99bf Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/F40-16TR7B\350\266\205\345\243\260\346\263\242\344\274\240\346\204\237\345\231\250.pdf" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_13-59-54.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_13-59-54.png" new file mode 100644 index 0000000..05a78e6 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_13-59-54.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-05-45.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-05-45.png" new file mode 100644 index 0000000..3b4456f Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-05-45.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-19-14.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-19-14.png" new file mode 100644 index 0000000..0db32a1 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-19-14.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-20-42.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-20-42.png" new file mode 100644 index 0000000..a49decf Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-20-42.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-23-43.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-23-43.png" new file mode 100644 index 0000000..1ee4b9c Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-23-43.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-28-24.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-28-24.png" new file mode 100644 index 0000000..8d94b2c Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-04-28_14-28-24.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-05-18_12-28-11.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-05-18_12-28-11.png" new file mode 100644 index 0000000..85c09bd Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/Snipaste_2023-05-18_12-28-11.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/ifconfig.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/ifconfig.png" new file mode 100644 index 0000000..6d101f2 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/ifconfig.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/kit3.0\350\207\252\345\212\250\351\251\276\351\251\266\347\241\254\344\273\266\347\272\277\350\267\257.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/kit3.0\350\207\252\345\212\250\351\251\276\351\251\266\347\241\254\344\273\266\347\272\277\350\267\257.png" new file mode 100644 index 0000000..19cc76e Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/kit3.0\350\207\252\345\212\250\351\251\276\351\251\266\347\241\254\344\273\266\347\272\277\350\267\257.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/network_port_position.jpg" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/network_port_position.jpg" new file mode 100644 index 0000000..8863e0d Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/IPC_picture/network_port_position.jpg" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/camera_picture/Snipaste_2023-04-24_16-25-22.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/camera_picture/Snipaste_2023-04-24_16-25-22.png" new file mode 100644 index 0000000..0b701d2 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/camera_picture/Snipaste_2023-04-24_16-25-22.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/camera_picture/Snipaste_2023-04-24_16-26-17.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/camera_picture/Snipaste_2023-04-24_16-26-17.png" new file mode 100644 index 0000000..36433ce Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/camera_picture/Snipaste_2023-04-24_16-26-17.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/camera_picture/Snipaste_2023-04-24_16-28-52.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/camera_picture/Snipaste_2023-04-24_16-28-52.png" new file mode 100644 index 0000000..2cf8a1a Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/camera_picture/Snipaste_2023-04-24_16-28-52.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/1.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/1.png" new file mode 100644 index 0000000..96cc0f7 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/1.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Coordinate_System.jpg" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Coordinate_System.jpg" new file mode 100644 index 0000000..d876416 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Coordinate_System.jpg" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_13-59-12.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_13-59-12.png" new file mode 100644 index 0000000..dfeecc0 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_13-59-12.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_14-25-40.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_14-25-40.png" new file mode 100644 index 0000000..3805bea Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_14-25-40.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_14-50-59.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_14-50-59.png" new file mode 100644 index 0000000..2125448 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_14-50-59.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_14-52-58.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_14-52-58.png" new file mode 100644 index 0000000..5e07441 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_14-52-58.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_16-18-34.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_16-18-34.png" new file mode 100644 index 0000000..ff9a87f Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_16-18-34.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-09-07.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-09-07.png" new file mode 100644 index 0000000..323337e Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-09-07.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-15-11.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-15-11.png" new file mode 100644 index 0000000..ce01c8e Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-15-11.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-36-06.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-36-06.png" new file mode 100644 index 0000000..aae2821 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-36-06.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-36-52.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-36-52.png" new file mode 100644 index 0000000..83ca49d Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-36-52.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-37-29.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-37-29.png" new file mode 100644 index 0000000..1b3abf3 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_17-37-29.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_18-09-17.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_18-09-17.png" new file mode 100644 index 0000000..4622a7d Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-21_18-09-17.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-23_14-20-52.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-23_14-20-52.png" new file mode 100644 index 0000000..c013b5c Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/Snipaste_2023-04-23_14-20-52.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/input.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/input.png" new file mode 100644 index 0000000..edfc650 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/input.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/parameter.jpg" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/parameter.jpg" new file mode 100644 index 0000000..6958a96 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/gnss_picture/parameter.jpg" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/1.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/1.png" new file mode 100644 index 0000000..6baccb8 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/1.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-42-27.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-42-27.png" new file mode 100644 index 0000000..55bbb9e Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-42-27.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-43-45.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-43-45.png" new file mode 100644 index 0000000..0681aca Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-43-45.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-44-43.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-44-43.png" new file mode 100644 index 0000000..8b97691 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-44-43.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-48-44.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-48-44.png" new file mode 100644 index 0000000..d77d446 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-48-44.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-49-49.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-49-49.png" new file mode 100644 index 0000000..f5472df Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_10-49-49.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_11-01-47.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_11-01-47.png" new file mode 100644 index 0000000..a301577 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_11-01-47.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_11-21-33.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_11-21-33.png" new file mode 100644 index 0000000..e1bce95 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_11-21-33.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_14-49-26.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_14-49-26.png" new file mode 100644 index 0000000..1f8e9b0 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_14-49-26.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_14-50-15.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_14-50-15.png" new file mode 100644 index 0000000..14457fe Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/Snipaste_2023-04-24_14-50-15.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/souce.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/souce.png" new file mode 100644 index 0000000..f042910 Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/souce.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/topic.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/topic.png" new file mode 100644 index 0000000..62f605d Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/lidar_picture/topic.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/ultrasonic_picture/Snipaste_2023-04-28_15-10-40.png" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/ultrasonic_picture/Snipaste_2023-04-28_15-10-40.png" new file mode 100644 index 0000000..9deca9f Binary files /dev/null and "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/image/ultrasonic_picture/Snipaste_2023-04-28_15-10-40.png" differ diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/index.md" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/index.md" new file mode 100644 index 0000000..e36bfc1 --- /dev/null +++ "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/index.md" @@ -0,0 +1,9 @@ +# 硬件安装 +- 硬件安装线路接线图 + ![avatar](./image/IPC_picture/kit3.0自动驾驶硬件线路.png) +## 目录 +- [IPC安装](./IPC%E5%AE%89%E8%A3%85.md) +- [LiDAR安装](./LiDAR%E5%AE%89%E8%A3%85.md) +- [camera](./camera%E5%AE%89%E8%A3%85.md) +- [GNSS安装](./GNSS%E5%AE%89%E8%A3%85.md) +- [超声波雷达安装](./%E8%B6%85%E5%A3%B0%E6%B3%A2%E9%9B%B7%E8%BE%BE%E5%AE%89%E8%A3%85.md) \ No newline at end of file diff --git "a/docs/\347\241\254\344\273\266\345\256\211\350\243\205/\350\266\205\345\243\260\346\263\242\351\233\267\350\276\276\345\256\211\350\243\205.md" "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/\350\266\205\345\243\260\346\263\242\351\233\267\350\276\276\345\256\211\350\243\205.md" new file mode 100644 index 0000000..b61a2f6 --- /dev/null +++ "b/docs/\347\241\254\344\273\266\345\256\211\350\243\205/\350\266\205\345\243\260\346\263\242\351\233\267\350\276\276\345\256\211\350\243\205.md" @@ -0,0 +1,15 @@ +# 超声波雷达安装 +## 硬件安装 +## 设备接线 +## 硬件参数检查 +- 已经完成硬件安装 +- 启动终端 + ![avatar](./image/ultrasonic_picture/Snipaste_2023-04-28_15-10-40.png) +```shell +激活超声波:while true; do cansend can0 601#b91fff; sleep 0.5; done +查看1-4号探头数据:candump can0,611:7ff +查看5-8号探头数据:candump can0,612:7ff +查看9-12号探头数据:candump can0,613:7ff +``` +- 参考文档 +[F40-16TR7B超声波传感器CAN使用文档](./image/F40-16TR7B超声波传感器.pdf) diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..99dcafd --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,43 @@ +site_name: Pixkit Documentation +theme: + name: material + features: + - navigation.instant + - navigation.tabs + - navigation.tabs.sticky + - navigation.path + - navigation.top + favicon: assets/images/pixmoving.png + icon: + repo: fontawesome/brands/github + language: en + palette: + - scheme: default + primary: white + toggle: + icon: material/weather-sunny + name: Switch to dark mode + - scheme: slate + primary: grey + toggle: + icon: material/weather-night + name: Switch to light mode +markdown_extensions: + - pymdownx.arithmatex: + generic: true +extra: + version: + provider: mike + +extra_javascript: + - javascripts/mathjax.js + - https://polyfill.io/v3/polyfill.min.js?features=es6 + - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js +plugins: + - awesome-pages + - macros + - mkdocs-video + - search +site_url: https://autowarefoundation.github.io/autoware-documentation +# repo_url: https://github.com/pixmoving-moveit/pixkit-documentation +repo_url: https://github.com/pixmoving-moveit \ No newline at end of file