ๅบไบ็บฟๆฟๅ ไธ่งๆต้ๅ็็ๆก้ข็บง 3D ๆซๆ็ณป็ป
้่ฟๆญฅ่ฟ็ตๆบ้ฉฑๅจ็ซ็ด็บฟๆฟๅ ็ปๆซๆ่ฝดๆ่ฝฌ๏ผ็ฎๆ ็ฉ้ๆญขๆพ็ฝฎ๏ผ็ปๅ USB ๆๅๅคดไธๆฟๅ ไธ่งๆต้๏ผๅฎๆถ้ๅปบ็ฉไฝไธ็ปด็นไบใ
- โจ ๅ่ฝ็นๆง
- ๐๏ธ ็ณป็ปๆถๆ
- ๐ฉ ็กฌไปถ็ปๆ
- ๐ฆ ่ฝฏไปถไพ่ต
- ๐ ็ฎๅฝ็ปๆ
- ๐จ ๆๅปบๆนๆณ
- ๐ ๆ ๅฎๆต็จ
- ๐ ไฝฟ็จๆนๆณ
- โ๏ธ ้ ็ฝฎๆไปถ่ฏดๆ
- โ๏ธ ็นไบๆฅ็
- ๐ก ไธฒๅฃๅ่ฎฎ็ฎไป
- ๐ ๅผๆบๅ่ฎฎ
| ๅ่ฝ | ่ฏดๆ |
|---|---|
| ๐ฏ ็บฟๆฟๅ ไธญๅฟๆๅ | ็ปฟ่ฒ้้้ๅฟๆณ๏ผGravity Center Method๏ผ๏ผๆฏๆไบๅ็ด ็ฒพๅบฆ๏ผๅฏๆฉๅฑไธบ Steger ็ฎๆณ |
| ๐ ็บฟ้ขไบคไผ 3D ้ๅปบ | ๅบไบ็ธๆบๅ ๅใๅคๅไธๅจๆๆฟๅ ๅนณ้ขๆน็จ๏ผๅจ็ธๆบๅๆ ็ณปไธ่ฟๅ 3D ็น |
| ๐ง ๅ จๆต็จๆ ๅฎๅทฅๅ ท | ๆฃ็ๆ ผๅ
ๅๆ ๅฎ + ๆฟๅ
ๅนณ้ขๅคๅๆ ๅฎ๏ผไธ้ฎๅๅ
ฅ config.yaml |
| ๐ป ็กฌไปถ / ไปฟ็ๅๆจกๅผ | --simulate ๆ ๅฟๅฏ่ฑ็ฆป็กฌไปถๅจ็บฏ่ฝฏไปถ็ฏๅขไธญ่ฐ่ฏ |
| ๐ฅ๏ธ ๅฎๆถๅ่งๅพๆพ็คบ | OpenCV 2D ๆฟๅ ๆ ่ฎฐ็ชๅฃ + PCL 3D ็นไบๅฎๆถ็้ฟ๏ผๅฏ้๏ผ |
| ๐พ PCD ็นไบไฟๅญ | ๆซๆ็ปๆๅ่ชๅจไฟๅญไธบๆ ๅ .pcd ๆไปถ |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ไธปๆบ (PC/Linux) โ
โ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ Serial โ โ Camera โ โ Viewer โ โ
โ โ Comm โ โ Capture โ โ (2D + 3D) โ โ
โ โโโโโโฌโโโโโโ โโโโโโโโฌโโโโโโโโ โโโโโโโโฌโโโโโโโ โ
โ โ โ โ โ
โ โโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโ โ
โ โ main.cpp (ๆซๆไธปๅพช็ฏ) โ โ
โ โ 1. ็บฟๆฟๅ
่ๆ่ฝฌไธๆญฅ๏ผ็ฎๆ ็ฉ้ๆญขๆพ็ฝฎ๏ผ โ โ
โ โ 2. ่ทๅๅป็ธๅๅธง โ โ
โ โ 3. LaserExtractor โ 2D ไบๅ็ด ไธญๅฟ็น โ โ
โ โ 4. Reconstructor โ 3D ็นไบๅ็ โ โ
โ โ 5. Viewer ๅฎๆถๆธฒๆ & ็ดฏ็งฏ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ไธฒๅฃ (115200 baud)
โโโโโโโโโโผโโโโโโโโโ
โ STM32 ๆงๅถๆฟ โ
โ ๆญฅ่ฟ็ตๆบ้ฉฑๅจ โ
โ ๆฟๅ
ๅผๅ
ณๆงๅถ โ
โโโโโโโโโโโโโโโโโโโ
ๆ ธๅฟๆฐๅญฆๆจกๅ๏ผ็บฟ้ขไบคไผ๏ผ๏ผ
| ็ปไปถ | ่งๆ ผ / ่ฏดๆ |
|---|---|
| ๐ท USB ๆๅๅคด | 640ร480๏ผๆฏๆๅ ณ้ญ่ชๅจๆๅ ๏ผๆๅ ๅบๅฎๆๅฉไบๆฟๅ ๆๅ๏ผ |
| ๐ด ็บฟๆฟๅ ๅจ | 532 nm ็ปฟ่ฒ็บฟๆฟๅ ๏ผๆฒฟ็ฎๆ ็ฉไฝๅ็ดๆๅฐ |
| ๐๏ธ STM32 ๆงๅถๆฟ | ้่ฟไธฒๅฃๆฅๆถๆญฅ่ฟๆไปค๏ผๆงๅถๆฟๅ ่ๆ่ฝฌไธๆฟๅ ๅผๅ ณ |
| โ๏ธ ๆญฅ่ฟ็ตๆบ + ๆ่ฝฌ่ | ๆฟๅ ๅจๅฎ่ฃ ไบๆ่ฝฌ่ไธ๏ผ้ป่ฎคๆญฅ่ฟ่ง 0.1125ยฐ๏ผๆซๆๅ่ง 60ยฐ๏ผๅฏๅจ้ ็ฝฎไธญ่ฐๆด๏ผ |
| ไพ่ต | ็ๆฌ่ฆๆฑ | ็จ้ |
|---|---|---|
| OpenCV | โฅ 4.0 | ๅพๅ้้ใๅป็ธๅใๆ ๅฎใๆพ็คบ |
| Eigen3 | โฅ 3.3 | ็ฉ้ต่ฟ็ฎใๅๆ ๅๆข |
| PCL | โฅ 1.12 (ๅฏ้) | 3D ็นไบๅฎๆถๅฏ่งๅไธ PCD ไฟๅญ |
| Open3D | โฅ 0.17 (Python) | ็ฆป็บฟ็นไบๆฅ็่ๆฌ |
| CMake | โฅ 3.15 | ๆๅปบ็ณป็ป |
| C++ ็ผ่ฏๅจ | ๆฏๆ C++17 | std::filesystem ็ญ็นๆง |
Note
PCL ไธบๅฏ้ไพ่ตใ่ฅๆชๅฎ่ฃ PCL๏ผ็ณป็ปไผ่ชๅจ็ฆ็จ 3D ๅฎๆถ็ชๅฃ๏ผ็นไบไปๅฏ้่ฟ Python ่ๆฌๆฅ็ใ
3D-Line-Laser-Scanner/
โโโ include/
โ โโโ algorithm/
โ โ โโโ laser_extractor.h # ๆฟๅ
ๆก็บนไธญๅฟๆๅๆฅๅฃ
โ โ โโโ reconstructor.h # ็บฟ้ขไบคไผ 3D ้ๅปบๆฅๅฃ
โ โโโ hardware/
โ โ โโโ camera_capture.h # USB ๆๅๅคด้้ไธๅป็ธๅๆฅๅฃ
โ โ โโโ serial_comm.h # STM32 ไธฒๅฃ้ไฟกๅ่ฎฎๆฅๅฃ
โ โโโ ui/
โ โโโ viewer.h # 2D/3D ๅฏ่งๅๆฅๅฃ
โโโ src/
โ โโโ algorithm/
โ โ โโโ laser_extractor.cpp
โ โ โโโ reconstructor.cpp
โ โโโ hardware/
โ โ โโโ camera_capture.cpp
โ โ โโโ serial_comm.cpp
โ โโโ ui/
โ โ โโโ viewer.cpp
โ โโโ main.cpp # ๆซๆไธป็จๅบๅ
ฅๅฃ
โโโ tools/
โ โโโ calibrator_main.cpp # ็ฌ็ซๆ ๅฎๅทฅๅ
ท
โโโ pcd_viewer.py # Python ็นไบๅฏ่งๅ่ๆฌ
โโโ config.yaml # ๆซๆๅๆฐไธๆ ๅฎ็ปๆ๏ผ่ฟ่กๅๅๅปบ๏ผ
# ๅ
้ไปๅบ
git clone https://github.com/cloudy440/3D-Line-Laser-Scanner.git
cd 3D-Line-Laser-Scanner
# ๅๅปบๆๅปบ็ฎๅฝๅนถ็ผ่ฏ
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --parallel็ผ่ฏๆๅๅๅฐ็ๆไธคไธชๅฏๆง่กๆไปถ๏ผ
| ๅฏๆง่กๆไปถ | ่ฏดๆ |
|---|---|
LineLaserScanner3D |
ไธปๆซๆ็จๅบ |
CalibratorTool |
ๆ ๅฎๅทฅๅ ท |
Important
้ฆๆฌกๆซๆๅ๏ผ้ไพๆฌกๅฎๆๅ ๅๆ ๅฎๅๅคๅๆ ๅฎใ
./CalibratorTool capture --camera 1 --outdir ./calib_images- ๆ Space ไฟๅญๅฝๅๅธง
- ๅปบ่ฎฎไปไธๅ่งๅบฆๆๆ 15โ20 ๅผ ๆฃ็ๆ ผๅพๅ
- ๆ Q / ESC ้ๅบ
./CalibratorTool calibrate \
--imgdir ./calib_images \
--board 9x6 \
--square 25.0| ๅๆฐ | ่ฏดๆ |
|---|---|
--board |
ๆฃ็ๆ ผๅ ่ง็นๆฐ๏ผๅร่ก๏ผ |
--square |
ๅๆ ผ่พน้ฟ๏ผmm๏ผ |
็ปๆๅๅ
ฅ config.yaml๏ผCamera_MatrixใDistortion_Coeffs๏ผใ
./CalibratorTool excapture --camera 1 --outdir ./excalib_imagesๅฐๆฃ็ๆ ผๆพ็ฝฎๅจๆฟๅ ๅนณ้ขๅ ๏ผๅผๅฏๆฟๅ ็บฟๅ้้ใ
./CalibratorTool excalib \
--imgdir ./excalib_images \
--board 9x6 \
--square 25.0 \
--dist 150| ๅๆฐ | ่ฏดๆ |
|---|---|
--dist |
ๆฃ็ๆ ผๅฐ่ฝฌๅฐไธญๅฟ็่ท็ฆป๏ผmm๏ผ |
็ปๆๆดๆฐ config.yaml๏ผT_CBใpi_R๏ผใ
./LineLaserScanner3Dไฝฟ็จ config.yaml ไธญ็้ป่ฎคไธฒๅฃๅๆๅๅคดๅๆฐใ
./LineLaserScanner3D --config /path/to/my_config.yaml./LineLaserScanner3D --simulate่ฑ็ฆปไธฒๅฃ่ฟๆฅ๏ผไปฅๅบๅฎๆญฅ่ง้ๅขๆจกๆ็ตๆบๆ่ฝฌ๏ผ็จไบ็ฎๆณ่ฐ่ฏใ
ๆซๆๆต็จ๏ผ
็จๅบๅฏๅจ โ ็งปๅจๅฐๆซๆ่ตท็น โ ้ๆญฅๆ่ฝฌ้้ โ ๅฎๆถ้ๅปบๆพ็คบ
โ ๆซๆๅฎๆๅคไฝ โ ไฟๅญ scan_result.pcd โ ๆไปปๆ้ฎ้ๅบ
config.yaml ็คบไพ๏ผๆ ๅฎๅทฅๅ
ทไผ่ชๅจ็ๆๅคง้จๅๅๆฐ๏ผ๏ผ
# โโ ไธฒๅฃไธๆๅๅคด โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Serial_Port: "COM10" # Windows: COMx | Linux: /dev/ttyUSBx
Serial_BaudRate: 115200
Camera_Index: 1
# โโ ๆซๆๅๆฐ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
StepAngle_Deg: 0.1125 # ๆฏๆญฅๆ่ฝฌ่งๅบฆ๏ผยฐ๏ผ
Scan_Half_Angle: 60.0 # ๆซๆๅ่ง๏ผยฐ๏ผ๏ผ่ๅด [-ฮธ, +ฮธ]
# โโ ็ธๆบๅ
ๅ๏ผ็ฑๆ ๅฎๅทฅๅ
ทๅๅ
ฅ๏ผโโโโโโโโโโโโโโโโโโโโโโโโ
Camera_Matrix: !!opencv-matrix
rows: 3
cols: 3
data: [ ... ]
Distortion_Coeffs: !!opencv-matrix
rows: 1
cols: 5
data: [ ... ]
# โโ ๅคๅไธๆฟๅ
ๅนณ้ข๏ผ็ฑๆ ๅฎๅทฅๅ
ทๅๅ
ฅ๏ผโโโโโโโโโโโโโโโโโโ
T_CB: !!opencv-matrix # ๅบๅบง โ ็ธๆบ้ฝๆฌกๅๆข๏ผ4ร4๏ผ
rows: 4
cols: 4
data: [ ... ]
LaserPlane_R: !!opencv-matrix # ่ฝฌๅญๅๆ ็ณปๆฟๅ
ๅนณ้ข [nx, ny, nz, d]
rows: 1
cols: 4
data: [ ... ]ๆซๆๅฎๆๅ๏ผไฝฟ็จ Python ่ๆฌๅฏ่งๅ .pcd ๆไปถ๏ผ
pip install open3d
python pcd_viewer.py้ป่ฎค่ฏปๅๅฝๅ็ฎๅฝไธ็
scan_result.pcdใๅฆ้ๆๅฎ่ทฏๅพ๏ผไฟฎๆน่ๆฌไธญ็ๆไปถๅๅณๅฏใ
ไธปๆบไธ STM32 ้่ฟ่ชๅฎไนๅธงๆ ผๅผ้ไฟก๏ผ
ๅธง็ปๆ๏ผ
| ๅญๆฎต | ๅคงๅฐ | ๅผ / ่ฏดๆ |
|---|---|---|
FRAME_HEAD |
2 ๅญ่ | 0xAA 0xBB |
CMD |
1 ๅญ่ | ๆไปค็ฑปๅ๏ผ่งไธ่กจ๏ผ |
DATA |
4 ๅญ่ | float ๆฐๆฎ๏ผๆญฅๆฐ / ่งๅบฆ๏ผ |
CRC16 |
2 ๅญ่ | ๆ ก้ช็ |
FRAME_TAIL |
2 ๅญ่ | 0xCC 0xDD |
ๆไปค้๏ผ
| ๆไปค | ๅผ | ่ฏดๆ |
|---|---|---|
CMD_STEP |
0x01 |
ๅๆญฅ่ฟ |
CMD_MOVE |
0x05 |
ๅคๆญฅ็งปๅจ |
CMD_LASER_ON |
0x03 |
ๆฟๅ ๅผ |
CMD_LASER_OFF |
0x04 |
ๆฟๅ ๅ ณ |
ๆฌ้กน็ฎๅบไบ MIT License ๅผๆบ๏ผๅ ่ฎธ่ช็ฑไฝฟ็จใไฟฎๆนไธๅๅ๏ผไฟ็ๅๅง็ๆๅฃฐๆๅณๅฏใ
MIT License
Copyright (c) 2025 cloudy440
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.