Skip to content

About

Self-made simple line laser 3D scanner. PC-side code

Resources

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ”ฌ 3D Line Laser Scanner

ๅŸบไบŽ็บฟๆฟ€ๅ…‰ไธ‰่ง’ๆต‹้‡ๅŽŸ็†็š„ๆกŒ้ข็บง 3D ๆ‰ซๆ็ณป็ปŸ

้€š่ฟ‡ๆญฅ่ฟ›็”ตๆœบ้ฉฑๅŠจ็ซ–็›ด็บฟๆฟ€ๅ…‰็ป•ๆ‰ซๆ่ฝดๆ—‹่ฝฌ๏ผŒ็›ฎๆ ‡็‰ฉ้™ๆญขๆ”พ็ฝฎ๏ผŒ็ป“ๅˆ USB ๆ‘„ๅƒๅคดไธŽๆฟ€ๅ…‰ไธ‰่ง’ๆต‹้‡๏ผŒๅฎžๆ—ถ้‡ๅปบ็‰ฉไฝ“ไธ‰็ปด็‚นไบ‘ใ€‚

C++17 CMake OpenCV PCL License


๐Ÿ“– ็›ฎๅฝ•


โœจ ๅŠŸ่ƒฝ็‰นๆ€ง

ๅŠŸ่ƒฝ ่ฏดๆ˜Ž
๐ŸŽฏ ็บฟๆฟ€ๅ…‰ไธญๅฟƒๆๅ– ็ปฟ่‰ฒ้€š้“้‡ๅฟƒๆณ•๏ผˆ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 ๆŽงๅˆถๆฟ   โ”‚
โ”‚  ๆญฅ่ฟ›็”ตๆœบ้ฉฑๅŠจ    โ”‚
โ”‚  ๆฟ€ๅ…‰ๅผ€ๅ…ณๆŽงๅˆถ    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆ ธๅฟƒๆ•ฐๅญฆๆจกๅž‹๏ผˆ็บฟ้ขไบคไผš๏ผ‰๏ผš

$$ \text{ๅฐ„็บฟๆ–น็จ‹:} \quad P_c = \lambda \cdot K^{-1} \cdot [u,\ v,\ 1]^T $$ $$ \text{ๅŠจๆ€ๅนณ้ข:} \quad \pi_C(\theta) = (T_{CB} \cdot T_{BR}(\theta))^{-T} \cdot \pi_R $$ $$ \text{ไบคไผšๆฑ‚่งฃ:} \quad \lambda = -d_c ;/; (n_c^T \cdot K^{-1} \cdot p) $$


๐Ÿ”ฉ ็กฌไปถ็ป„ๆˆ

็ป„ไปถ ่ง„ๆ ผ / ่ฏดๆ˜Ž
๐Ÿ“ท 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

้ฆ–ๆฌกๆ‰ซๆๅ‰๏ผŒ้œ€ไพๆฌกๅฎŒๆˆๅ†…ๅ‚ๆ ‡ๅฎšๅ’Œๅค–ๅ‚ๆ ‡ๅฎšใ€‚

็ฌฌไธ€ๆญฅ๏ผš้‡‡้›†ๅ†…ๅ‚ๆ ‡ๅฎšๅ›พๅƒ๏ผˆๆจกๅผ A๏ผ‰

./CalibratorTool capture --camera 1 --outdir ./calib_images
  • ๆŒ‰ Space ไฟๅญ˜ๅฝ“ๅ‰ๅธง
  • ๅปบ่ฎฎไปŽไธๅŒ่ง’ๅบฆๆ‹ๆ‘„ 15โ€“20 ๅผ ๆฃ‹็›˜ๆ ผๅ›พๅƒ
  • ๆŒ‰ Q / ESC ้€€ๅ‡บ

็ฌฌไบŒๆญฅ๏ผš่ฎก็ฎ—็›ธๆœบๅ†…ๅ‚๏ผˆๆจกๅผ B๏ผ‰

./CalibratorTool calibrate \
    --imgdir ./calib_images \
    --board 9x6 \
    --square 25.0
ๅ‚ๆ•ฐ ่ฏดๆ˜Ž
--board ๆฃ‹็›˜ๆ ผๅ†…่ง’็‚นๆ•ฐ๏ผˆๅˆ—ร—่กŒ๏ผ‰
--square ๅ•ๆ ผ่พน้•ฟ๏ผˆmm๏ผ‰

็ป“ๆžœๅ†™ๅ…ฅ config.yaml๏ผˆCamera_Matrixใ€Distortion_Coeffs๏ผ‰ใ€‚

็ฌฌไธ‰ๆญฅ๏ผš้‡‡้›†ๅค–ๅ‚ๆ ‡ๅฎšๅ›พๅƒ๏ผˆๆจกๅผ C๏ผ‰

./CalibratorTool excapture --camera 1 --outdir ./excalib_images

ๅฐ†ๆฃ‹็›˜ๆ ผๆ”พ็ฝฎๅœจๆฟ€ๅ…‰ๅนณ้ขๅ†…๏ผŒๅผ€ๅฏๆฟ€ๅ…‰็บฟๅŽ้‡‡้›†ใ€‚

็ฌฌๅ››ๆญฅ๏ผš่ฎก็ฎ—ๅค–ๅ‚ไธŽๆฟ€ๅ…‰ๅนณ้ข๏ผˆๆจกๅผ D๏ผ‰

./CalibratorTool excalib \
    --imgdir ./excalib_images \
    --board 9x6 \
    --square 25.0 \
    --dist 150
ๅ‚ๆ•ฐ ่ฏดๆ˜Ž
--dist ๆฃ‹็›˜ๆ ผๅˆฐ่ฝฌๅฐไธญๅฟƒ็š„่ท็ฆป๏ผˆmm๏ผ‰

็ป“ๆžœๆ›ดๆ–ฐ config.yaml๏ผˆT_CBใ€pi_R๏ผ‰ใ€‚


๐Ÿš€ ไฝฟ็”จๆ–นๆณ•

็กฌไปถๆจกๅผ๏ผˆ่ฟžๆŽฅ STM32๏ผ‰

./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.

About

Self-made simple line laser 3D scanner. PC-side code

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages