JETSON_SENSOR_ACCESS - zero1ne-26/doc GitHub Wiki
Jetson Orin์ ๋ถ์ LiDARยท์นด๋ฉ๋ผ๋ฅผ ์๊ฒฉ์์ ๋ณด๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ํ์ํ ๊ฒ. ์ ์ ๊ฒฝ๋ก ์์ฒด๋ JETSON_SSH_ACCESS๋ฅผ ๋จผ์ ๋ณธ๋ค. ์ด ๋ฌธ์๋ ์ ์์ด ๋๋ค๋ ์ ์ ์์ ์์ํ๋ค.
์ด ๋ฌธ์์ ๊ฑฐ์ ๋ชจ๋ ๋ด์ฉ์ด ์ด ์ซ์์์ ๋์จ๋ค.
10 MB ์ ์ก์ 33.2์ด โ ์ฝ 0.30 MB/s (2.4 Mbps)
Jetson์ ZER01NE_WIFI(2.4 GHz)์ ๋ถ์ด ์๊ณ , ์ธ๋ถ์์๋ Tailscale๋ก๋ง ๋ฟ๋๋ค. ์ ํธ ์์ฒด๋ ๋ฉ์ฉกํ๋ค:
freq 2457 (2.4GHz) signal โ36 dBm tx bitrate 52 Mbit/s
์ ํธ โ36 dBm์ ์์ฃผ ์ข์ ๊ฐ์ธ๋ฐ ์คํจ ์ฒ๋ฆฌ๋์ PHY์ 5%๋ค. ์ ํ ๋ฌธ์ ๊ฐ ์๋๋ผ 2.4 GHz ํผ์ก ๋๋ ์ฌ๋ฌด์ค ์ ๋งํฌ ๋ณ๋ชฉ์ด๋ค. 5 GHz ๋์ญ์ด๋ ์ ์ ์ผ๋ก ์ฎ๊ธฐ์ง ์๋ ํ ์ด ์ ์ฝ์ ๊ทธ๋๋ก๋ค.
์ผ์๊ฐ ๋ง๋ค์ด๋ด๋ ์๊ณผ ๋น๊ตํ๋ฉด:
| ํ ํฝ | ๋์ญํญ | ๋งํฌ ๋๋น |
|---|---|---|
/camera/color/image_raw |
13.84 MB/s | 46๋ฐฐ ์ด๊ณผ |
/livox/lidar |
5.20 MB/s | 17๋ฐฐ ์ด๊ณผ |
/camera/color/image_raw/compressed |
1.49 MB/s | 5๋ฐฐ ์ด๊ณผ |
์ฆ ์ด๋ค ์ผ์ ํ ํฝ๋ ์๊ฒฉ์์ ์จ์ ํ ๋ ์ดํธ๋ก๋ ๋ชป ๋ฐ๋๋ค. ์ค์๊ฐ์ผ๋ก ๋ณด๋ ค๋ฉด ์ค์ฌ์ผ ํ๊ณ , ์ ์ฒด ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ฉด ๋ นํ ํ ์ฎ๊ฒจ์ผ ํ๋ค.
Jetson์์ ์์ ๋๋ ์๋น์ค๊ฐ ๋ฐํํ๋ค (livox-driver, realsense, foxglove-bridge, mosquitto).
| ํ ํฝ | ํ์ | ๋ ์ดํธ | ๋น๊ณ |
|---|---|---|---|
/livox/lidar |
PointCloud2 |
10 Hz | frame livox_frame, 19968 pts/msg |
/livox/imu |
Imu |
โ | |
/camera/color/image_raw |
Image |
14.9 Hz |
848ร480 rgb8, fx 614.31 |
/camera/color/image_raw/compressed |
CompressedImage |
14.9 Hz | 848ร480 JPEG q95 |
/camera/color/camera_info |
CameraInfo |
14.9 Hz | plumb_bob |
/camera/aligned_depth_to_color/image_raw |
Image |
13.8 Hz |
848ร480 16UC1 โ ๊น์ด๋ ์ด๊ฑธ ์จ๋ผ
|
/camera/aligned_depth_to_color/camera_info |
CameraInfo |
13.8 Hz | color ์ ๋์ผ intrinsics |
/camera/depth/image_rect_raw |
Image |
14.1 Hz | 640ร480 16UC1, fx 383.14 โ ์ ๋ ฌ ์ ๋จ, ์ฐ์ง ๋ง๋ผ |
/tf_static |
mapยทlivox_frameยทcamera_* ์ ๋ถ ํ ํธ๋ฆฌ (ยง1.1) |
/livox/lidar์ point field๋ x, y, z, intensity, tag, line, timestamp.
์ด์ ํ ๊ฒฝ๊ณ . 2026-09-05 ์ค์ ์ ๋ฐฐํฌํ dvlc ๋จ๋ ๊ฐ์ ๋ณ์ง์ด 198 mm ํ๋ ธ๋ค. ๊ฐ์ ๋ ์คํ ๊ฒ์ฆ์์ ๋๋ฌ๋ ์์ ํ๋ค. ๊ทธ ์ด์ ๊ฐ์ผ๋ก LiDARโ์ด๋ฏธ์ง ์ตํฉ์ ๋๋ฆฐ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ๋ค์ ๋ด์ผ ํ๋ค (์ค์ฐจ: 1 m์์ 90 px, 2 m์์ 45 px).
์ ๋ณธ ์์น์ ๊ทผ๊ฑฐ๋ Jetson์ ~/spot_extrinsic.yaml. ๋ฐฑ์
์ ~/spot_extrinsic.yaml.bak-20260905.
body = x ์ ๋ฐฉ, y ์ข, z ์. ์์ ์ ์๋ฉ์ด ์ค์ฌ์ด๊ณ ๊ธฐ๋ฆฝ ์ ์ง๋ฉด ์ 0.5087 m๋ค (body_T_gpe ์ค์ธก).
body -> livox_frame
xyz 0.304668878 -0.000000116 0.230026415
quat 0.0 0.104528463 0.0 0.994521895 # pitch down 12.0ยฐ
body -> camera_link # == camera_depth_optical_frame
xyz 0.379725244 0.017510534 0.096776966
quat 0.009310769 0.026752321 0.002583650 0.999595392
body -> camera_color_optical_frame
xyz 0.379381950 0.032434884 0.097408095
quat -0.508819740 0.516735369 -0.475408153 0.498070395
# ๊ดํ๊ท์ฝ ์ ๊ฑฐ ์: roll +1.776 pitch +2.971 yaw +0.891 deg
CAD๋ ์นด๋ฉ๋ผ ํ์ ์ ์ ๋ถ 0์ผ๋ก ๋์๋๋ฐ ํ๋ ธ๋ค. rollยทpitch๊ฐ ์ค์ ๋ก +1.78 / +2.97ยฐ๋ค. ๋ณ์ง์ CAD๊ฐ ๋ง๋ค.
| ํญ๋ชฉ | ์ํ | ๊ทผ๊ฑฐ |
|---|---|---|
body_T_livox rollยทpitchยทtz |
โ CAD ๋ง์ (0.25~0.36ยฐ, 25 mm) | ์ง๋ฉดํ๋ฉด 3ํ |
body_T_livox ๋ณ์ง |
โ CAD ๋ง์ | ์ค์ |
body_T_livox yaw |
โ CAD 0ยฐ ๋ง์ | LiDARโ์ด๋ฏธ์ง ํฌ์ ์ก์๊ฒ์ฌ |
body_T_camera rollยทpitch |
โ CAD ์๋. +1.78 / +2.97ยฐ | ์ง๋ฉดํ๋ฉด + dvlc ๊ต์ฐจ๊ฒ์ฆ |
body_T_camera ๋ณ์ง |
โ CAD ๋ง์ | ์ค์ + ํผ๋์ ์์ฐจ (x 18 mm, z 8 mm) |
body_T_camera yaw |
โ +0.891 ยฑ 0.3ยฐ | ํผ๋์ 3๋ฐฐ์น |
spot-extrinsic.service๊ฐ ๋ ๊ฐ๋ฅผ ๋ฐํํ๋ค. enabled ์ํ๋ผ ์ฌ๋ถํ
ํด๋ ์ ์ง๋๋ค.
body -> livox_frame
xyz 0.304668878 -0.000000116 0.230026415
quat 0.0 0.104528463 0.0 0.994521895
livox_frame -> camera_link
xyz 0.101120323 0.017510650 -0.114732533
quat 0.008989699 -0.077880401 0.003542737 0.996915883
body -- livox_frame -- camera_link --+-- camera_color_frame -- camera_color_optical_frame
+-- camera_depth_frame -- camera_depth_optical_frame
map -> livox_frame ์๋ฆฌํ์์๋ 2026-09-05 ์ ๊ฑฐํ๋ค (~/svc_livox.sh). ์ ๋ถ 0์ด๋ผ ์๋ฏธ๊ฐ ์์๊ณ , body๋ฅผ ๋ฃ์ผ๋ ค๋ฉด livox_frame์ ๋ถ๋ชจ๊ฐ ๋์ด ๋๋ฉด ์ ๋๋ค. map์ ์ฐธ์กฐํ๋ ๋
ธ๋ยท์ฝ๋๋ ์๋ค(์ ์ ํ์ธ).
body๋ ์ง๊ธ ์ ์ ๋ฃจํธ์ผ ๋ฟ์ด๋ค. ๋ก๋ด์ด ์์ง์ผ ๋์ body ์์ธ(odom -> body)๋ฅผ ๋ฐํํ๋ ๋ธ๋ฆฌ์ง๊ฐ ์์ง ์๋ค. ๊ทธ๋์ ๊ฑท๋ ๋ก๋ด์ bag์์๋ body๊ฐ ๊ณ ์ ์ผ๋ก ๋ณด์ธ๋ค. ๋ธ๋ฆฌ์ง๊ฐ ์๊ธฐ๋ฉดodom -- body -- livox_frame -- ...๋ก ์์ฐ์ค๋ฝ๊ฒ ํ์ฅ๋๋ค.
ํ์ธ:
ros2 run tf2_ros tf2_echo body camera_color_optical_frame -p 6
# xyz 0.379382 0.032435 0.097408
ros2 run tf2_ros tf2_echo livox_frame camera_color_optical_frame -p 6
# xyz 0.100653 0.032435 -0.114187 / rpy -80.969 1.568 -88.849 deg
โ ๏ธ livox_frame -> camera_color_optical_frame์ ์ง์ ๋ฐํํ์ง ์๋๋ค. RealSense ๋๋ผ์ด๋ฒ๊ฐ ์ด๋ฏธcamera_color_frame -> camera_color_optical_frame์ ๋ฐํํ๊ณ ์์ด์, ์ ๊ฒ์ ๋ ์๋ฉด optical frame์ ๋ถ๋ชจ๊ฐ ๋์ด ๋๊ณ TF ํธ๋ฆฌ๊ฐ ๊ฐ๋ผ์ง๋ค.
๋ฐฐํฌ TF๋ฅผ ๋ณ์งยทํ์ ๋ ๋ค ๊ต์ฒดํ๋ค. ์ด์ dvlc ๊ฐ์ ์ง์ ์ฐ์ง ์๊ณ , body ๊ธฐ์ค ์ค์ธก ๋ ๊ฐ๋ฅผ ํฉ์ฑํด ์ ๋ํ๋ค.
๋ณ์ง old 0.205696150 -0.137685857 -0.032145274
new 0.101120323 0.017510650 -0.114732533 (|ฮ| = 198 mm)
ํ์ old qxyzw 0.005522886 -0.077601178 0.029733257 0.996525709
new qxyzw 0.008989699 -0.077880401 0.003542737 0.996915883 (3.028ยฐ, ์ ๋ถ yaw)
dvlc ํ์ โ tilt๋ง ์ธ ๋งํ๋ค:
| ์ฑ๋ถ | ํ์ | ์ด๋ป๊ฒ ์์๋ |
|---|---|---|
| rollยทpitch (tilt) | โ ์ํธ, 0.68ยฐ | ์ง๋ฉดํ๋ฉด ๊ต์ฐจ๊ฒ์ฆ |
| yaw | โ 3.028ยฐ ์ค๋ฅ | LiDARโ์ด๋ฏธ์ง ํฌ์ ์ก์๊ฒ์ฌ |
| ๋ณ์ง | โ 198 mm ์ค๋ฅ | ์ค์ + CAD |
๊น์ด ๋ค์์ฑ์ด ๋ถ์กฑํ๋ฉด ๋ณ์ง๊ณผ ํ์ ์ด ์๋ก ์์๋๋ฉฐ ์๋ ดํ๋ ์ ํ์ ์คํจ๋ค. ์ฌํฌ์ ์์ฐจ๋ง ๋ณด๋ฉด ์ด๊ฒ ์ ๋๋ฌ๋๋ค.
์ด์ ๋ฌธ์์ ์ ํ ์๋ ยฑ10 cm / ยฑ2ยฐ๋ tilt์๋ง ํด๋นํ๋ค. yaw์ ๋ณ์ง์ ๊ทธ ๋ฒ์๋ฅผ ๋์๋ค.
๊ณ ์น๊ธฐ ์ LiDARโ์ด๋ฏธ์ง ํฌ์ ์ค์ฐจ: ๋ณ์ง๋ถ์ด 1 m์์ 90 px / 2 m 45 px / 5 m 18 px, ๊ฑฐ๊ธฐ์ yaw ์ค๋ฅ๊ฐ ๊ฑฐ๋ฆฌ ๋ฌด๊ด ์์ 32 px๋ฅผ ๋ํ๋ค.
์ง๋ฉดํ๋ฉด โ rollยทpitchยทtz 3 DOF
ํํํ ๋ฐ๋ฅ(๋ฐ๊ฒฝ 3 m ์ด์)์ ์ธ์ฐ๊ณ 12์ด ๋
นํ. Spot์ด ์ฃผ๋ body_T_gpe(๋ฐ๋ฐ๋ฅ ์ ์ด ๊ธฐ๋ฐ ์ง๋ฉด์ถ์ )์ ๋ฒ์ ยท๋์ด์ ๊ฐ ์ผ์์์ ํผํ
ํ ๋ฐ๋ฅ ํ๋ฉด์ ๋น๊ตํ๋ค.
- yawยทtxยทty๋ ์๋ฆฌ์ ์ ๋์จ๋ค โ ํ๋ฉด์ ์๊ธฐ ์๋ก ๋ฏธ๋๋ฌ์ง๋ ๊ฒ๊ณผ ๋ฒ์ ์ถ ํ์ ์ ๋ถ๋ณ์ด๋ค.
- ์นด๋ฉ๋ผ๋ ์ ๋ฉด 5 m ์ด์ ์ด๋ฆฐ ๋ฐ๋ฅ์ด ํ์ํ๋ค. ๋ฒฝ์ ๋ณด๋ฉด ๋ฒฝ ๋ฐ๋์ด ๋ฐ๋ฅ์ผ๋ก ์ค๋ถ๋ฅ๋ผ 3~6ยฐ์ฉ ํ๋ฆฐ ๋ต์ด ๋์จ๋ค (2026-09-05์ ์ค์ ๋ก ๊ฒช์๋ค).
- ๊ธฐ๋ฆฝ ํ๋ค๋ฆผ์ ๋ฌด์ ๊ฐ๋ฅ: 12์ด p-p roll 0.011ยฐ, pitch 0.013ยฐ, z 0.0 mm.
ํผ๋์ โ yaw
146 mm AprilTag 36h11์ ์ธ์์ ์ ๋ฐฉ 1.5~2.5 m, ์ง์ 0.9 m ๋ถ๊ทผ. Spot์ด body_T_tag๋ฅผ, RealSense๊ฐ ๊ฐ์ ํ๊ทธ๋ฅผ ๋ณธ๋ค.
- ๊น์ด๋ฅผ ์ฐ์ง ์๋๋ค. ํ๊ทธ ์ค์์ด ๊ฒ์์์ด๋ผ D435 IR ๊น์ด๊ฐ ํธํฅ๋๋ค. ์นด๋ฉ๋ผ ๊ด์ ๋ฐฉํฅ๊ณผ Spot์ด ์ค ํ๊ทธ ๋ฐฉํฅ๋ง ๋ง์ถฐ yaw 1 DOF๋ฅผ ํผ๋ค.
- ํ๊ทธ ์ค์ฌ์ ์ฝ๋ ํ๊ท ์ด ์๋๋ผ ๋๊ฐ์ ๊ต์ ์ ์ด๋ค (์ฌ์ ๋ถ๋ณ).
- ๋ ธ์ด์ฆ: ์นด๋ฉ๋ผ ๋ฐฉ์ std 0.016ยฐ / Spot ๋ฐฉ์ std 0.244ยฐ. Spot์ด ์ง๋ฐฐ์ ์ด๋ ๋ฐฐ์น๋ง๋ค 20~25ํ ํด๋งํด ํ๊ท ๋ธ๋ค.
- ๋ฐฐ์น์ ๋ฐฉ์๋ฅผ ๋๊ฒ ํฉ์ด์ผ yaw์ ty๊ฐ ๋ถ๋ฆฌ๋๋ค.
- ๋ฐ๋ฅ์ ๋์ด ํ๊ทธ๋ ๋ชป ์ด๋ค. ๊ฐ๊น์ด ๊ฐ๋ฉด ์๊ฐ์ด FOV๋ฅผ ๋ฒ์ด๋๊ณ , ๋ฉ์ด์ง๋ฉด ๋ฉ์ํด์ ธ ๋์ฝ๋ฉ์ด ์ ๋๋ค. ์ฑ๋ฆฝ ๊ตฌ๊ฐ์ด ์๋ค.
ํฌ์ ์ก์๊ฒ์ฌ โ LiDAR yaw
๋ ๊ฐ์ค(dvlc ํ์ / ํผ๋์ ์ ๋ ํ์ )๋ก LiDAR ์ ๊ตฌ๋ฆ์ ์ปฌ๋ฌ ์ด๋ฏธ์ง์ ๊ฐ๊ฐ ํฌ์ํด ๋น๊ตํ๋ค. ํ์ ์ค์ฐจ๋ ๊ฑฐ๋ฆฌ์ ๋ฌด๊ดํ ์์ ํ๊ฐ ์ค์ฐจ๋ผ 3ยฐ = 32 px๋ก ํญ์ ๋ณด์ธ๋ค. ๋ฐ์คยท์ผ์ด์ค์ ์์ง ์์ง์์ ์ด๋ ์ชฝ์ด ๋ฌผ์ฒด ๊ฒฝ๊ณ์ ๋ง๋์ง ๋ณด๋ฉด ๋๋ค.
- ๋ณ์ง์ ๋จผ์ ๊ณ ์ณ์ผ ์ ํจํ๋ค. ์๋๋ฉด ๋ณ์ง ์ค์ฐจ์ ๋ฌปํ ํ๋ณ์ด ์ ๋๋ค.
- ์คํฌ๋ฆฝํธ
scratchpad/proj_test.py, ๊ฒฐ๊ณผ ์ด๋ฏธ์ง~/Desktop/spot-calib/proj_check/
Jetson์ foxglove-bridge๊ฐ 0.0.0.0:8765๋ก ์์ ๋ ์๋ค. ๋ค๋ง ๋ธ๋ฆฟ์ง๋ ํ๋ฌธ ws://๋ผ https://app.foxglove.dev์์ ์ง์ ์ฐ๊ฒฐํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ mixed content๋ก ์ฐจ๋จํ๋ค.
SSH ํฐ๋๋ก ์ฐํํ๋ค. ๋ธ๋ผ์ฐ์ ๋ localhost๋ฅผ secure๋ก ์ทจ๊ธํ๋ฏ๋ก ์ฐจ๋จ๋์ง ์๋๋ค.
# ํฐ๋ฏธ๋ 1 โ ํฐ๋ (์์
๋๋๋ฉด Ctrl-C)
ssh -N -L 8765:127.0.0.1:8765 jetson-orin-spot๋ธ๋ผ์ฐ์ ์์:
https://app.foxglove.dev/?ds=foxglove-websocket&ds.url=ws://localhost:8765
| ํ ํฝ | ๊ฒฐ๊ณผ |
|---|---|
/camera/color/image_raw |
โ ์ฌ์ค์ ์ ์ง. ํ๋ ์์ด 0.92 MB๋ผ 3์ด์ ํ ์ฅ, ๋ธ๋ฆฟ์ง ์ก์ ํ์ ์ MB ์ ์ฒด โ ์ง์ฐ ํญ์ฆ |
/camera/color/image_raw/compressed |
โ ๋ณด์ธ๋ค. 15 Hz๋ ๋ชป ์ฑ์ฐ๊ณ ~3 fps๋ก ๋จ์ด์ง์ง๋ง ํ๋ฉด์ ๋์จ๋ค. ๋จ ๋งํฌ๋ฅผ ํฌํ์ํจ๋ค |
/livox/lidar |
โ ๋ณด์ธ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋๋ ๋๋ ์ค์ด์ง๋ง ํฌ์ธํธํด๋ผ์ฐ๋๋ ์ผ๋ถ๋ง ์๋ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ํฐ๊ฐ ๋ ๋๋ค |
3D ํจ๋ fixed frame์ map์ผ๋ก ๋๋ค (static TF๊ฐ ๊ทธ๊ฒ๋ฟ).
Foxglove๊ฐ ์ผ์ ธ ์์ผ๋ฉด ์ ๋งํฌ๋ฅผ ํต์งธ๋ก ๋จน๋๋ค. ์ค์ธก ์ฌ๋ก โ bag ์ ์ก ์ค์ Foxglove๊ฐ raw ์ด๋ฏธ์ง๋ฅผ ๊ตฌ๋ ํ๊ณ ์์๋๋:
Foxglove ์ฐ๊ฒฐ ์ค: rsync 0.073 MB/s
Foxglove ๋์ ํ: rsync 0.30 MB/s (4๋ฐฐ)
๋ฐ์ดํฐ ๋ฐ์ถยทrsyncยทbag ์ ์ก ์ค์๋ Foxglove๋ฅผ ๋๋ ๊ฒ ๋ง๋ค. 850 MB ๋ฐ์ ๋ 10๋ถ vs 40๋ถ ์ฐจ์ด๊ฐ ๋๋ค.
ํ ํฝ์ ์ถ์ํด์ ์๋ก ๋ฐํํ๋ ์์ ๋ ธ๋๋ฅผ ๋์ฐ๋ ๋ฐฉ๋ฒ์ด ์๋ค. Jetson ์์์ resize + JPEG ํ๋ฏ๋ก ๋งํฌ์๋ ์์ ๊ฒ๋ง ๋๊ฐ๋ค.
/camera/color/image_raw (๋ก์ปฌ์ด๋ผ ๊ณต์ง)
โ cv2 resize 424ร240, imencode q50, 5 Hz๋ก ๊ฐ์ถ
โ 12 KB/frame = 0.06 MB/s (compressed ๋๋น 25๋ฐฐ ์์)
๊ธฐ์กด ์๋น์ค๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๊ณ ํ ํฝ๋ง ์ถ๊ฐํ๋ ๋ฐฉ์์ด๋ผ ์์ ํ๋ค. ์์ ํ์ํ์ง๋ ์์์ ์ง๊ธ์ ์ ๋์๋จ๋ค. ํ์ํ๋ฉด ๋ง๋ค์ด ์ฐ๋ฉด ๋๋ค.
์ค์๊ฐ์ด ์ ๋๋ฉด ๋ นํํด์ ์ฎ๊ธด๋ค. ์ด๊ฑด ์๊ฐ๋ง ์ฐ๋ฉด ๋๋ฏ๋ก ํ์คํ๋ค.
์ ์ก์ rsync -az๋ฅผ ์ด๋ค. rgb8 raw ์ด๋ฏธ์ง๋ ์์ถ์ด ์ ๋จน์ด์ ์ฒด๊ฐ ์ฐจ์ด๊ฐ ํฌ๋ค โ 188 MB bag์ด ์ฝ 2๋ถ์ ๋ค์ด์๋ค (๋น์์ถ ์ถ์ 12๋ถ).
rsync -az --info=progress2 \
jetson-orin-spot:/home/zer01ne-spot/calib_bags/<์ด๋ฆ> ~/์ํ๋๊ฒฝ๋ก/direct_visual_lidar_calibration (koide3, MIT) ์ ์ฐ๊ธฐ ์ํ ์์ง ์ ์ฐจ๋ค.
ํ ๋ฒ ๋๋ ค์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ฏธ ๋ฐฐํฌํ๋ค (ยง1.1). ์ฌ๊ธฐ๋ถํฐ๋ ๊ฐ์ ๋ค์ ๋ฝ์์ผ ํ ๋๋ง ํ์ํ๋ค โ ์ผ์๋ฅผ ๋ค์ ๋ง์ดํธํ๊ฑฐ๋, ๋ ์ ํํ ๊ฐ์ด ํ์ํ ๋. ๊ทธ๋ฅ ์ฐ๋ ค๋ ๊ฒ๋ฟ์ด๋ฉด
/tf_static์ ์ด๋ฏธ ๋์ค๊ณ ์์ผ๋ ์ด ์ ์ ๊ฑด๋๋ด๋ค.
โ ๏ธ ์ด ์ ์ฐจ์ ๋ณ์ง ์ถ๋ ฅ์ ๋ฏฟ์ง ๋ง๋ผ. 2026-09-05 ๊ฒ์ฆ์์ dvlc ๋ณ์ง์ด 198 mm ํ๋ฆฐ ๊ฒ์ผ๋ก ๋๋ฌ๋ฌ๋ค(ยง1.1). ํ์ ์ 0.68ยฐ ์์์ ์ ํํ๋ค. ๊น์ด ๋ค์์ฑ์ด ๋ถ์กฑํ๋ฉด ๋ณ์ง๊ณผ ํ์ ์ด ์๋ก ์์๋๋ฉฐ ์๋ ดํ๋๋ฐ, ์ฌํฌ์ ์ค์ฐจ๋ง ๋ณด๋ฉด ์ด๊ฒ ์ ๋ณด์ธ๋ค.๋ค์ ๋๋ฆฐ๋ค๋ฉด ๋ฐ๋์:
- ๋ณ์ง์ CADยท์ค์๋ก ๋ ๋ฆฝ ๊ต์ฐจ๊ฒ์ฆํ๋ค (๋ ์ผ์ ํ์ฐ์ง ์ค์ฌ ์ฌ์ด ๊ฑฐ๋ฆฌ๋ฅผ ์ง์ ์ฐ๋ค)
- ์์ง ์์ธ์ ๊น์ด ๋ค์์ฑ์ ๋๋ฆฐ๋ค โ ๊ทผยท์คยท์๊ฑฐ๋ฆฌ๋ฅผ ๊ณ ๋ฃจ ์๋๋ค
- ํ์ ์ ์ง๋ฉดํ๋ฉด ๊ต์ฐจ๊ฒ์ฆ์ผ๋ก ํ์ธํ๋ค (ยง1.1 "์ด๋ป๊ฒ ์๋")
๋ ํผ๋ฐ์ค ๋ฐ์ดํฐ์
์ ์ด๋ฏธ์ง๋ฅผ 2 Hz๋ก ๊ธฐ๋กํ๋ค (15.65์ด bag์ points 157๊ฐ, image 30๊ฐ). 15 Hz๋ก ๋จ๋ฉด ์ฉ๋๋ง 7๋ฐฐ๊ฐ ๋๊ณ ์ด๋์ด ์๋ค. topic_tools๊ฐ Jetson์ ์ค์น๋์ด ์์ง ์์ ์ค๋กํ ๋
ธ๋๋ฅผ ๋ฐ๋ก ๋์ด๋ค.
Jetson์ ์ด๋ฏธ ์ฌ๋ ค๋ ๊ฒ:
~/calib_throttle.py /camera/color/image_raw 15Hz โ /calib/image 2Hz
+ /calib/camera_info ๋ฅผ ์ด๋ฏธ์ง์ ๊ฐ์ ์คํฌํ๋ก ๋๊ธฐ ๋ฐํ
~/record_calib.sh ์ค๋กํ ์ผ๊ณ โ ๋
นํ โ ๋๊ณ โ ๊ฒฐ๊ณผ ์ถ๋ ฅ
ssh jetson-orin-spot '~/record_calib.sh <์ง์ ๋ช
> 30'
rsync -az jetson-orin-spot:/home/zer01ne-spot/calib_bags/<์ง์ ๋ช
> ~/์ํ๋๊ฒฝ๋ก/ํ ์ง์ 30์ด ๊ธฐ์ค ์ฝ 190 MB, ์ ์ก ์ฝ 2๋ถ์ด๋ค.
๊ธฐ๋ก๋๋ ํ ํฝ์ ์
๋ฟ์ด๋ค. preprocess -a(์๋ ํ ํฝ ์ ํ)๊ฐ bag๋ง๋ค image/camera_info/points ๊ฐ 1๊ฐ๋ฅผ ์๊ตฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
/calib/image sensor_msgs/Image ~2 Hz
/calib/camera_info sensor_msgs/CameraInfo ~2 Hz
/livox/lidar PointCloud2 10 Hz
-
Spot ์ ์ง ์ํ๋ก 5~8์ง์ . MID-360์ non-repetitive scan์ด๋ผ ์ ์ง ๋์ ์ด ์ ๋ต์ด๋ค (
preprocess -d๋ถํ์) - ์ง์ ๋ง๋ค yaw 30~40ยฐ์ฉ ๋ณํ๋ฅผ ์ค๋ค. ํ์ ๊ด์ธก์ฑ์ด ์์ผ๋ฉด ํด๊ฐ ๊ตญ์ ์ต์ ์ ๋น ์ง๋ค
- ์ ๋ฆฌยท๋ชจ๋ํฐยท๊ดํ ๋ฐ๋ฅ์ ํผํ๋ค. ํ ์ค์ฒ ์๋ ๋ฒฝ๊ณผ ์ง๊ต ์ฃ์ง(๋ฌธํ, ๊ธฐ๋ฅ, ๋ฐ์ค)๊ฐ ์๋ ๊ณณ
- ์ต์ 1์ง์ ๋ง์ผ๋ก๋ ๊ณ์ฐ์ ๋์ง๋ง(single-shot ์ง์), ์ ํ๋๋ฅผ ์ํด ์ฌ๋ฌ ์ง์ ์ ๊ถ์ฅํ๋ค
direct_visual_lidar_calibration์ preprocess๋ IMU๋ฅผ ์ฝ์ง ์๋๋ค. /camera/imu๋ ๋กค๋ง์
ํฐ ๋ถ์์ฉ์ผ๋ก ๋ชฉ์ ์ด ๋ค๋ฅด๋ ๋ณ๋ bag์ ๋ด๋๋ค.
์๋ ์ด๊ธฐ๊ฐ ์ถ์ ์ SuperGlue๋ฅผ ์ฐ๋๋ฐ ์์ฉ ์ด์ฉ์ด ๊ธ์ง๋์ด ์๋ค. initial_guess_manual์ ์จ์ผ ํ๊ณ , ์ด๊ฑด GUI(Iridescence)๊ฐ ํ์ํ๋ฏ๋ก headless์ธ Jetson์ด ์๋๋ผ ์์
์ PC์์ ๋๋ฆฐ๋ค. ๋์์ ์ 3์ ์ด์ ํด๋ฆญํ๋ ๋ฐฉ์์ด๋ค.
๋ก์ปฌ ์ค์น๋ GTSAMยทCeresยทIridescence ๋น๋๊ฐ ํ์ํด์ ์ค๋ ๊ฑธ๋ฆฐ๋ค. ๊ณต์ ๋์ปค ์ด๋ฏธ์ง(koide3/direct_visual_lidar_calibration)๋ฅผ ์ฐ๋ ํธ์ด ๋น ๋ฅด๋ค.
์ฆ์ โ /camera/color/image_raw/compressed๊ฐ ๋น ๋ฉ์์ง(data: [])๋ง ๋ฐํํ๊ณ , ๊ตฌ๋
์๊ฐ ๋ถ์ ๋๋ง๋ค realsense ๋ก๊ทธ์ ์๋ฌ๊ฐ ์์์ก๋ค.
[CompressedPublisher]: OpenCV(4.8.0) alloc.cpp:73:
(-4:Insufficient memory) Failed to allocate 323193268964880 bytes
์์ธ โ ํ ํ๋ก์ธ์ค์ OpenCV ๋ ๋ฒ์ ์ด ๋์์ ๋ก๋๋๊ณ ์์๋ค.
librealsense2_camera.so (ros2_ws ๋ก์ปฌ ๋น๋) โ libopencv_core.so.408 (JetPack 4.8.0)
cv_bridge, compressed_image_transport (apt) โ libopencv_core.so.4.5d (Ubuntu 4.5.4)
realsense๊ฐ ๋จผ์ ๋ก๋๋๋ฏ๋ก cv::imencode ์ฌ๋ณผ์ด 4.8.0์ผ๋ก ํด์๋๋๋ฐ, ํ๋ฌ๊ทธ์ธ์ 4.5.4 ํค๋ ๊ธฐ์ค์ผ๋ก ์ปดํ์ผ๋์ด ์๋ค. cv::Mat ๋ ์ด์์์ด ๋ฌ๋ผ ์ฐ๋ ๊ธฐ ํฌ๊ธฐ๋ฅผ ์ฝ๊ณ ํ ๋น์ ์คํจํ๋ค.
์กฐ์น โ cv_bridge์ compressed_image_transport๋ฅผ ์ค์น๋ apt ๋ฒ์ ๊ณผ ๋์ผํ ํ๊ทธ๋ก ์์ค๋ฅผ ๋ฐ์ OpenCV 4.8.0์ผ๋ก ์ฌ๋น๋ํ๊ณ ์ค๋ฒ๋ ์ด์ ์ฌ๋ ธ๋ค. /opt/ros ์๋ณธ์ ๊ฑด๋๋ฆฌ์ง ์์๋ค.
cd ~/ros2_ws/src
git clone --branch humble https://github.com/ros-perception/vision_opencv.git
git clone --branch humble https://github.com/ros-perception/image_transport_plugins.git
cd vision_opencv && git checkout 3.2.1 # apt cv_bridge 3.2.1 ๊ณผ ์ผ์น
cd ../image_transport_plugins && git checkout 2.5.5 # apt 2.5.5 ์ ์ผ์น
cd ~/ros2_ws
colcon build --packages-select cv_bridge compressed_image_transport \
--cmake-args -DCMAKE_BUILD_TYPE=Release -DOpenCV_DIR=/usr/lib/cmake/opencv4
sudo systemctl restart realsensesvc_realsense.sh๊ฐ ์ด๋ฏธ ~/ros2_ws/install/setup.bash๋ฅผ sourceํ๋ฏ๋ก ์ฌ์์๋ง์ผ๋ก ์ ์ฉ๋๋ค.
์๋ณต์ด ํ์ํ๋ฉด ~/ros2_ws/install/{cv_bridge,compressed_image_transport}๋ฅผ ์ง์ฐ๊ณ realsense๋ฅผ ์ฌ์์ํ๋ค.
ros2_ws์์ ๋ค๋ฅธ ํจํค์ง๋ฅผ ์๋ก ๋น๋ํ ๋ ๊ฐ์ ํจ์ ์ ๋น ์ง ์ ์๋ค. apt๋ก ๊น๋ฆฐ ROS ๋ฐ์ด๋๋ฆฌ๋ Ubuntu OpenCV 4.5.4 ๊ธฐ์ค์ด๊ณ , ์ด ์ฅ๋น์ dev ํค๋๋ JetPack 4.8.0์ด๋ค. OpenCV๋ฅผ ์ฐ๋ ๋ ธ๋๋ฅผ ๋ก์ปฌ ๋น๋ํ๋ฉด ๋์ด ์์ธ๋ค.
camera.color.image_raw.jpeg_quality๋ฅผ ๋ฐ๊ฟ๋ ์ถ๋ ฅ ํฌ๊ธฐ๊ฐ ๊ทธ๋๋ก๋ค.
param 95 โ 99465 B
param 40 โ 97989 B
param 30 โ 100386 B (๊ตฌ๋
์ ๋์๋ค ๋ค์ ๋ถ์ฌ๋ ๋์ผ)
๊ฐ์ ํ๋ ์์ Jetson์์ cv2๋ก ์ง์ ์ธ์ฝ๋ฉํ๋ฉด q95 95.6 KB / q50 22.6 KB / q10 9.6 KB๊ฐ ๋์จ๋ค. ์ฆ ํ๋ฌ๊ทธ์ธ์ด ํญ์ q95๋ก ์ธ์ฝ๋ฉํ๊ณ ํ๋ผ๋ฏธํฐ๋ ์ ์ธ๋ง ๋์ด ์๋ค. compressed_image_transport 2.5.5 ์์ฒด ๋ฌธ์ ๋ก ๋ณด์ธ๋ค.
์๊ฒฉ ๋์ญํญ์ ์ค์ด๋ ค๋ฉด ์ด ํ๋ผ๋ฏธํฐ์ ๊ธฐ๋์ง ๋ง๊ณ ยง2์ ํ๋ฆฌ๋ทฐ ๋ ธ๋ ๋ฐฉ์์ ์ด๋ค.
LiDAR์ ์นด๋ฉ๋ผ๋ Jetson์ ์ง๊ฒฐ๋์ด ์์ด์ SPOT ๋ก๋ด ๋ณธ์ฒด๊ฐ ๊บผ์ ธ ์์ด๋ ์ ์ ๋์ํ๋ค. ์ค์ ๋ก ๋ก๋ด์ด 18์๊ฐ ๋๊ฒ ์๋ต ์๋ ์ํ์์๋ ๋ ์ผ์๋ ์ ์ ๋ฐํ ์ค์ด์๋ค.
๋ก๋ด ๋ณธ์ฒด ์ฐ๊ฒฐ์ด ๋๊ธฐ๋ฉด ์ด๋ ๊ฒ ๋ณด์ธ๋ค:
spot-state-ro ๋ก๊ทธ: ProxyConnectionError: The proxy on the robot could not be reached.
ip neigh dev eno1: 192.168.77.72 INCOMPLETE โ ARP ์๋ต ์์
INCOMPLETE๋ ๋ก๋ด์ด L2์์ ์์ ์ ๋ณด์ธ๋ค๋ ๋ป์ด๋ค. ์ํํธ์จ์ด๊ฐ ์๋๋ผ ์ ์ ๋๋ ์ด๋๋ท ์ฐ๊ฒฐ์ ํ์ธํด์ผ ํ๋ค. ์๋ธ๋ท์ 192.168.77.x์ด๊ณ Jetson์ด eno1์์ DHCP ์๋ฒ(spot-dhcp) ์ญํ ์ ํ๋ค.