• ROS2์˜ ros2_control์—์„œ control_manager๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, preempt_rt ์ปค๋„ (soft realtime)์„ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋‹ค. ์ปค๋„ ๋นŒ๋“œ๋Š” ๋งค๋ฒˆ ํ•˜๊ณ  ์žˆ๊ธด ํ•œ๋ฐ, ์ผ๋‹จ์€ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด๋‘๋ฉด ๋‚˜์ค‘์—๋„ ์ฐพ๊ธฐ ์‰ฌ์šธ๋“ฏ ํ•˜์—ฌ ์ •๋ฆฌํ•จ. ์ปค๋„ ๋ฒ„์ „์€ ๊ทธ๋ƒฅ rt ํŒจ์น˜๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ ๋“ฏ.

    ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜

    $ sudo apt install build-essential libncurses-dev flex bison libssl-dev debhelper libelf-dev gawk

    ๋‹ค์Œ์œผ๋กœ ์ปค๋„ ์†Œ์Šค ๋ฐ RT ํŒจ์น˜ ํŒŒ์ผ์„ ๋ฐ›์•„์˜ด.

    $ wget https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.16.1.tar.gz
    $ wget https://www.kernel.org/pub/linux/kernel/projects/rt/6.16/patch-6.16-rt3.patch.xz

    ์••์ถ•์„ ํ’€๊ณ , ํŒจ์น˜ ์ ์šฉ

    $ tar zxf linux-6.16.1.tar.gz
    $ xz -d patch-6.16-rt3.patch.xz
    $ cd linux-6.16.1
    $ patch -p1 < ../patch-6.16-rt3.patch

    ๊ธฐ์กด config ํŒŒ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ

    $ cp /boot/config-`uname -r` .config

    ์ปค๋„ ์„ค์ •ํ•˜๊ธฐ

    $ make menuconfig

    ์ปค๋„ ์„ค์ •

        General setup  --->
            Preemption Model (Scheduler controlled preemption model)  --->
                (X) Scheduler controlled preemption model
            [*] Fully Preemptible Kernel (Real-Time) 
    
            Timers subsystem  --->
                Timer tick handling (Full dynticks system (tickless))  --->
                    (X) Full dynticks system (tickless)
                [*] High Resolution Timer Support
    
        Processor type and features  --->
            Timer frequency (1000 HZ)  --->
                (X) 1000 HZ
    
        Power management and ACPI options  --->
            CPU Frequency scaling  --->
                Default CPUFreq governor (performance)  --->
                    (X) performance          

    ์ €์žฅํ•˜๊ณ  ๋‚˜์™€์„œ,

    $ scripts/config --disable SYSTEM_TRUSTED_KEYS
    $ scripts/config --set-str CONFIG_SYSTEM_TRUSTED_KEYS ""
    $ scripts/config --disable SYSTEM_REVOCATION_KEYS
    $ scripts/config --set-str CONFIG_SYSTEM_REVOCATION_KEYS ""
    $ scripts/config --disable CONFIG_DEBUG_INFO_BTF
    
    $ scripts/config --disable GDB_SCRIPTS
    $ scripts/config --disable DEBUG_INFO
    $ scripts/config --disable DEBUG_INFO_SPLIT
    $ scripts/config --disable DEBUG_INFO_REDUCED
    $ scripts/config --disable DEBUG_INFO_COMPRESSED
    $ scripts/config --set-val DEBUG_INFO_NONE       y
    $ scripts/config --set-val DEBUG_INFO_DWARF5     n
    $ scripts/config --disable DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT

    ๋นŒ๋“œ ์‹œ์ž‘ (-j ๋‹ค์Œ ์ˆซ์ž๋Š” ์ปดํŒŒ์ผ์— ์‚ฌ์šฉ๋  ์ฝ”์–ด์˜ ์ˆ˜๋กœ, ๊ฐ์ž์˜ CPU ๊ฐฏ์ˆ˜์— ๋”ฐ๋ผ ์กฐ์ •ํ•ด์„œ ์‚ฌ์šฉ)

    $ make -j12 bindeb-pkg

    ๋Œ€๋žต 25~30๋ถ„ ์ •๋„ ๊ฑธ๋ฆฌ๋Š” ๋“ฏ.

    ์ปค๋„ ์„ค์น˜

    $ cd ..
    $ sudo dpkg -i linux-headers-6.16.1-rt3_6.16.1-5_amd64.deb linux-libc-dev_6.16.1-5_amd64.deb linux-image-6.16.1-rt3_6.16.1-5_amd64.deb

    ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ์žฌ๋ถ€ํŒ…ํ•ด์„œ uname -a ๋กœ ์ปค๋„ ๋ฒ„์ „ ํ™•์ธ.

    $ uname -a
    Linux byeongkyu-workpc 6.16.1-rt3 #5 SMP PREEMPT_RT Wed Aug 20 15:05:48 KST 2025 x86_64 x86_64 x86_64 GNU/Linux

    ์ฃผ์˜์‚ฌํ•ญ!! preempt_rt ์ปค๋„์˜ ๊ฒฝ์šฐ nvidia ๊ทธ๋ž˜ํ”ฝ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š์Œ.

    ํ•ด๊ฒฐ๋ฐฉ๋ฒ• (์—๋Ÿฌ๋‚œ ์ดํ›„์—)

    $ export IGNORE_PREEMPT_RT_PRESENCE=1
    $ sudo -E dkms install nvidia/580.65.06 -k 6.16.1-rt3
    $ sudo dpkg -i linux-headers-6.16.1-rt3_6.16.1-5_amd64.deb linux-libc-dev_6.16.1-5_amd64.deb linux-image-6.16.1-rt3_6.16.1-5_amd64.deb

    ์žฌ๋ถ€ํŒ… ์ดํ›„ cyclictest๋กœ ์„ฑ๋Šฅ ์ธก์ •

    ๋Œ€์ถฉ stress๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ์ตœ๋Œ€ latency๊ฐ€ 154us ์ •๋„๋กœ ๋‚˜์˜ค๋Š”๋“ฏ.

    ์‚ฌ์šฉ์ž ๊ณ„์ •์„ realtime ๊ทธ๋ฃน์— ์ถ”๊ฐ€ํ•ด์„œ sudo ๋ช…๋ น์—†์ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋“ฑ๋ก

    $ sudo addgroup realtime
    $ sudo usermod -a -G realtime $(whoami)

    ์ถ”๊ฐ€ ์„ค์ •

    $ sudo vi /etc/security/limits.conf
    
    @realtime soft rtprio 99
    @realtime soft priority 99
    @realtime soft memlock unlimited
    @realtime hard rtprio 99
    @realtime hard priority 99
    @realtime hard memlock unlimited
    

    ๋!

  • ๊ฐ„๋‹จํ•œ ๋กœ๋ด‡์ด๋‚˜ ๊ตฌ์กฐ๋ฌผ์„ ์ถœ๋ ฅํ•œ ์ดํ›„ ๋ณผํŠธ ๋“ฑ์„ ์ด์šฉํ•ด์„œ ์กฐ๋ฆฝํ•  ๊ฒฝ์šฐ, ๋‚˜์‚ฌ์‚ฐ์„ ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ช‡๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๊ณ , ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    1. ๋‚˜์‚ฌ์‚ฐ ์ถœ๋ ฅ

    ํ”„๋ฆฐํŒ…์„ ํ• ๋•Œ, ๊ตฌ๋ฉ์— ๋‚˜์‚ฌ์‚ฐ์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ํ”ผ์น˜๊ฐ€ ํฐ ๋‚˜์‚ฌ๋“ค์€ ์‰ฝ๊ฒŒ ํ”„๋ฆฐํŒ…์ด ๊ฐ€๋Šฅํ•˜๊ณ , ๋‚˜์‚ฌ์‚ฐ์ด ์ž˜ ์‚ด์•„์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”ผ์น˜๊ฐ€ ์ž‘์€ ๋‚˜์‚ฌ๋“ค์€ ํ”„๋ฆฐํŒ… ์ž์ฒด๊ฐ€ ์ž˜ ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (SLA ํ”„๋ฆฐํ„ฐ์˜ ๊ฒฝ์šฐ์—” ๊ฐ€๋Šฅํ•  ์ˆ˜ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.)

    2. ํƒญํผ ์‚ฌ์šฉ

    ๊ตฌ๋ฉ์„ ์ถœ๋ ฅํ•˜๊ณ , ํ•ด๋‹น ๊ตฌ๋ฉ์— ํƒญํผ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‚˜์‚ฌ์‚ฐ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ „๋™๊ณต๊ตฌ or ํ•ธ๋“œํƒญํผ๋ฅผ ์ด์šฉํ•ด์„œ ๋‚˜์‚ฌ์‚ฐ์„ ๋งŒ๋“ค์–ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „๋™ ๊ณต๊ตฌ ์‚ฌ์šฉ์˜ ๊ฒฝ์šฐ์—” ๋งˆ์ฐฐ์— ์˜ํ•ด์„œ, ์ธจ๋ ฅ๋ฌผ์ด ํƒญ์— ์—‰๊ฒจ ๋ถ™๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค๋งŒ, ์ฃผ์˜๋ฅผ ํ•˜๋ฉด ์‰ฝ๊ฒŒ ๋‚˜์‚ฌ์‚ฐ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฝค๋‚˜ ์•ˆ์ •์ ์ธ ๋‚˜์‚ฌ ์กฐ๋ฆฝ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•˜๋ฉด ๋‚˜์‚ฌ์‚ฐ์ด ๋ง๊ฐ€์งˆ ์—ผ๋ ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

    2. ํ—ฌ๋ฆฌ์ฝ”์ผ

    ์›๋ž˜์˜ ๊ตฌ๋ฉ๋ณด๋‹ค ํฌ๊ธฐ ๋šซ๊ณ , ํ—ฌ๋ฆฌ์ฝ”์ผ์„ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋“œ๋ฆด ์ž‘์—…์ด ํ•„์š”ํ•˜๊ณ , ํ—ฌ๋ฆฌ์ฝ”์ผ์ด ์‚ฝ์ž…๋  ์ˆ˜ ์žˆ๋Š” ๋‚˜์‚ฌ์‚ฐ์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์—์„ , ์œ„ ๋‚˜์‚ฌ์‚ฐ์„ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜ ํƒญ์„ ์ด์šฉํ•ด์„œ ๋‚˜์‚ฌ์‚ฐ์„ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „๋™ ๊ณต๊ตฌ ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅํ•˜๊ณ , ์ž˜ ์‚ฝ์ž…๋œ ํ—ฌ๋ฆฌ์ฝ”์ผ์˜ ๊ฒฝ์šฐ, ๊ธฐ๊ณ„์ ์ธ ์•ˆ์ •์„ฑ๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

    3. Threaded Insert

    ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ธ์„œํŠธ์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ์—ด or ์ดˆ์ŒํŒŒ์„ ์ด์šฉํ•ด์„œ ํ”„๋ฆฐํŒ… ์ถœ๋ ฅ๋ฌผ์„ ์‚ด์ง ๋…น์—ฌ์„œ ๊ณ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ตฌ๋ฉ ์ฃผ์œ„์— ๊ตฌ์กฐ๊ฐ€ ํŠผํŠผํ•œ ๊ฒฝ์šฐ์—” ํฐ ๋ฌด๋ฆฌ์—†์ด ์‚ฝ์ž…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค๋งŒ, ์–…์€ ๋ด‰ ํ˜•ํƒœ๋‚˜ ์–‡์€ ํŒ์žฌ์˜ ๊ฒฝ์šฐ, ์ธ์„œํŠธ ์‚ฝ์ž… ์‹œ ์ถœ๋ ฅ๋ฌผ์ด ๋ณ€ํ˜•๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ธ๋‘๊ธฐ ๋“ฑ์œผ๋กœ ๋ˆ„๋ฅด๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋•Œ ๋ˆ„๋ฅด๋Š” ์••๋ ฅ๊ณผ ์—ด์— ์˜ํ•ด์„œ ์ถœ๋ ฅ๋ฌผ ์ž์ฒด๊ฐ€ ํœ˜๊ฑฐ๋‚˜ ๋” ๋…น๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ์‚ฝ์ž…๋˜๋ฉด ์ˆ˜์ •์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , ์—ด์— ์˜ํ•ด ์ถœ๋ ฅ๋ฌผ์— ๊ณ ์ •๋˜๋ฏ€๋กœ, ์ƒ๋‹นํžˆ ํŠผํŠผํ•ฉ๋‹ˆ๋‹ค.

    4. Self Tapping Insert

    ๋‚˜์‚ฌ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜, ํŠน์ˆ˜ ๊ณต๊ตฌ๋“ฑ์„ ์ด์šฉํ•ด์„œ ๊ฐ•์ œ๋กœ ๋‚˜์‚ฌ์‚ฐ์„ ๋งŒ๋“ค์–ด ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์—ด์— ์˜ํ•œ ๋ณ€ํ˜•์€ ์—†๊ณ , ๋˜ ๋‚˜์‚ฌ ํฌ๊ธฐ๋ณ„๋กœ ํ•„์š”ํ•œ ๊ตฌ๋ฉ๋งŒ ๋งŒ๋“ค์–ด ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ „๋™ ๊ณต๊ตฌ๋“ฑ์„ ์ด์šฉํ•ด์„œ ์‰ฝ๊ฒŒ ์‚ฝ์ž…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ๊ตฌ์กฐ๋ฎฌ์ด ์•ฝํ•œ ๊ฒฝ์šฐ์—” ํ„ฐ์งˆ ๊ฐ€๋Šฅ์„ฑ์€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฝ์ž…๋œ ์ดํ›„์— ์—ฌ๋Ÿฌ๋ฒˆ ๋‚˜์‚ฌ๋ฅผ ํ’€๊ณ  ์กฐ์ด๊ฒŒ ๋˜๋ฉด, ํ•ด๋‹น ์ธ์„œํŠธ๊ฐ€ ๋ถ„๋ฆฌ๋  ์ˆ˜ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ธฐ์กด ์‚ฌ์šฉํ•˜๋˜ Prusa Mk3๊ฐ€ ์•„์ฃผ~~~ ์˜ค๋žœ๋งŒ์— ์ „์›์„ ์ผœ๋ณด๋‹ˆ, ์˜จ๋„์„ผ์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์„ผ์„œ๊ฐ€ ๋ถˆ๋Ÿ‰์ด๊ฑฐ๋‚˜, ์„ผ์„œ์— ์—ฐ๊ฒฐ๋œ ์„ ์ด ๋‹จ์„ ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ, ์›Œ๋‚™์— ์˜ค๋ž˜๋œ ๋…€์„์ด๊ณ  ์ƒ๋‹น๊ธฐ๊ฐ„ ๊ด€๋ฆฌ์—†์ด ๋ฐฉ์น˜๋œ ์ƒํƒœ๋ผ์„œ ๊ณผ๊ฐํžˆ ์†Œ์ƒ์„ ํฌ๊ธฐํ•˜๊ณ ….

    ์•ˆ๋…•~ ํ‘ธ๋ฃจ์‚ฌ์•ผ~~ ๊ทธ๋™์•ˆ ๊ณ ์ƒ ๋งŽ์•˜๋‹ค….

    ์ƒˆ๋กœ ๊ตฌ์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.!!

    ํšŒ์‚ฌ์—์„œ ์ด๋ฏธ Bambu Lab X1C๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ๋งŒ์กฑ๊ฐ์ด ์ƒ๋‹นํ•˜์˜€๊ธฐ์— ์ œ์กฐ์‚ฌ ์„ ์ •์€ ํฐ ๊ณ ๋ฏผ์ด ์—†์—ˆ๋Š”๋ฐ… X1C์™€ P1S๊ฐ„์— ์‚ด์ง ๊ณ ๋ฏผ์ด ๋“ค๋‹ค๊ฐ€ ๊ตณ์ด ๊ฐœ์ธ์ด ์‚ฌ์šฉํ•  ๋ชฉ์ ์— X1C๋Š” ์ข€ ์˜ค๋ฒ„์ธ๋“ฏํ•˜์—ฌ, P1S Combo๋กœ ๊ฒฐ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    ์˜ˆ์ „ Prusa Mk3๋ฅผ ๊ตฌ๋งคํ–ˆ์„ ๋•Œ, ์ž๊ฐ€ ์กฐ๋ฆฝํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ–ˆ์„๋•Œ ๊ตฌ๋งค ๊ฐ€๊ฒฉ์ด 100๋งŒ์› ์ดˆ๋ฐ˜์ด์—ˆ๋˜ ๊ฒƒ์œผ๋กœ ๊ธฐ์–ต์„ ํ•˜๋Š”๋ฐ, Bambu Lab ๊ธฐ๊ธฐ ๊ฐ€๊ฒฉ์ด AMS ํฌํ•จํ•ด์„œ 120๋งŒ์›์ธ๊ฑด… ํ … ์ข‹๋„ค์š”… ๋งˆ์นจ Bambu Lab Korea๊ฐ€ ์ƒ๊ธฐ๊ณ , ๊ตญ๋‚ด์—์„œ ๋ฐœ์†กํ•˜๋Š”์ง€๋ผ ๋„์ฐฉ์€ ์ฃผ๋ฌธ ํ›„ ํ•œ 2์ผ ๊ฑธ๋ ธ๋˜๋“ฏ ํ•˜๊ณ …

    ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ•„๋ผ๋ฉ˜ํŠธ๊ฐ€ PLA-CF์ธ์ง€๋ผ ์ถ”๊ฐ€๋กœ ๊ฒฝํ™”๊ฐ• ํ•ซ์—”๋“œ๋ฅผ ๊ตฌ๋งคํ•ด์„œ ๊ต์ฒดํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์นด๋ณธ์ด ํฌํ•จ๋œ ๋…€์„์ด๋ผ์„œ, ์• ์ดˆ์— ํ•ซ์—”๋“œ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š์œผ๋ฉด ์•„์˜ˆ ํ”„๋ฆฐํŠธ๋„ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    ์ฒ˜์Œ ํ”„๋ฆฐํŠธ ์‹œ ๋ฒ ๋“œ ๋ ˆ๋ฒจ๋ง์„ ์•ˆํ•œ ์ฑ„๋กœ (๊ธ‰ํ•œ ๋งˆ์Œ์—) ํ”„๋ฆฐํŠธ๋ฅผ ์‹œ๋„ํ–ˆ๋‹ค๊ฐ€ ๋ฒ ๋“œ ์‹œํŠธ์— ์‚ด์ง ์Šคํฌ๋ ˆ์น˜๋ฅผ ๋‚ธ ๊ฒƒ ์™ธ์—”… ์‚ฌ์šฉ๊ฐ์€ ์•„์ฃผ ๋งŒ์กฑ์Šค๋Ÿฝ๋‹ˆ๋‹ค. ์ตœ์‹  ํŽŒ์›จ์–ด ์—…๋ฐ์ดํŠธ ํ•˜๊ณ , ์ง„๋™ ๊ฐ์‡„ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ํŠœ๋‹์„ ํ•˜๋‹ˆ, ๋ฐฉ๋ฌธ์„ ์ž ๊ฐ€๋†“์œผ๋ฉด ์•„์˜ˆ ์†Œ๋ฆฌ๋„ ๋“ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตณ!!

  • IsaacSim 5.0์ด ๋ฆด๋ฆฌ์ฆˆ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/isaac-sim/IsaacSim ์•„์ง Preview Release ๋ฒ„์ „์ด๊ธด ํ•˜์ง€๋งŒ, Ubuntu 24.04์—์„œ ์‹คํ–‰์ด ๋œ๋‹ค๋Š” ์ ๊ณผ ๋ฌด์—‡๋ณด๋‹ค๋„ ROS2 Jazzy ๋ฒ„์ „์„ ์ง€์›ํ•œ๋‹ค๋Š”๊ฒŒ ์ €์—๊ฒ ๊ฐ€์žฅ ํฐ ์—…๋ฐ์ดํŠธ์ž…๋‹ˆ๋‹ค.

    ๊ธฐ์กด ์ „์ฒด ๋ฆด๋ฆฌ์ฆˆ๋œ ์••์ถ• ํŒŒ์ผ์„ ๋ฐ›์•„์„œ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์—์„œ, github์—์„œ ์†Œ์Šค๋ฅผ ๋ฐ›์•„ ์ง์ ‘ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์„ค์น˜ ๊ณผ์ •์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”ˆ์†Œ์Šค ๋ฒ„์ „์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ๋˜์–ด ์žˆ๊ณ , ์ฐจํ›„ ์ƒํƒœ๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•ด์„œ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•  ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.


    ์•„์ง๊นŒ์ง„ ๊ณต์‹ ๋ฌธ์„œ๋Š” ์—†์ง€๋งŒ, ์„ค์น˜ ๊ณผ์ • ์ค‘ CUDA ๋ฒ„์ „๊ณผ GCC ๋ฒ„์ „๊ฐ„์˜ ํ˜ธํ™˜์„ฑ์œผ๋กœ ์ธํ•ด ๋นŒ๋“œ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ ๋ฌธ๊ตฌ๋“ค์ด ์ญˆ์šฑ ๋‚˜์˜ต๋‹ˆ๋‹ค.

    /usr/include/stdlib.h(141): error: identifier "_Float32" is undefined

    ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ GCC ๋ฒ„์ „์„ ๋‚ฎ์ถ”๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ GCC 13.x ๋ฒ„์ „์ด NVCC์™€ ํ˜ธํ™˜์ด ๋˜์ง€ ์•Š์•„ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋กœ, Ubuntu 24.04์—์„œ๋Š” GCC 13.3.0์ด Default๋กœ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. NVCC์™€ ํ˜ธํ™˜๋˜๋Š” GCC ๋ฒ„์ „์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ GCC 12.3.0 ๋ฒ„์ „์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. Github์˜ ์ด์Šˆ์—์„œ ๋…ผ์˜๋œ ๋Œ€๋กœ, GCC 11 ๋ฒ„์ „์ด ๊ฐ€์žฅ ํ˜ธํ™˜์„ฑ์ด ์ข‹์€๊ฒƒ์œผ๋กœ ๋…ผ์˜๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ดˆ๊ธฐ ๋ฒ„์ „์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    $ gcc --version
    gcc-13 (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
    Copyright (C) 2023 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    GCC-11 ๋ฒ„์ „์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    $ sudo apt install gcc-11 g++-11
    
    $ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 30
    $ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 30
    
    $ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 30
    $ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 30
    
    $ sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
    $ sudo update-alternatives --set cc /usr/bin/gcc
    
    $ sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
    $ sudo update-alternatives --set c++ /usr/bin/g++

    ์œ„์™€ ๊ฐ™์ด ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋œ ๋‹ค์Œ, ๊ธฐ๋ณธ ๋ฒ„์ „์„ GCC 11์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    $ sudo update-alternatives --config gcc
    There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
    
      Selection    Path             Priority   Status
    ------------------------------------------------------------
      0            /usr/bin/gcc-12   30        auto mode
    * 1            /usr/bin/gcc-12   30        manual mode
      2            /usr/bin/gcc-13   30        manual mode
    
    Press <enter> to keep the current choice[*], or type selection number: 1
    $ sudo update-alternatives --config g++
    There are 2 choices for the alternative g++ (providing /usr/bin/g++).
    
      Selection    Path             Priority   Status
    ------------------------------------------------------------
      0            /usr/bin/g++-12   30        auto mode
    * 1            /usr/bin/g++-12   30        manual mode
      2            /usr/bin/g++-13   30        manual mode
    
    Press <enter> to keep the current choice[*], or type selection number: 1

    ์ด์ œ ํ„ฐ๋ฏธ๋„์—์„œ gcc ๋ฒ„์ „์„ ํ™•์ธํ•ด๋ด…๋‹ˆ๋‹ค.

    $ gcc --version
    Using built-in specs.
    COLLECT_GCC=gcc-11
    COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper
    OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
    OFFLOAD_TARGET_DEFAULT=1
    Target: x86_64-linux-gnu
    Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-9ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-ZcnBzW/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-ZcnBzW/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
    Thread model: posix
    Supported LTO compression algorithms: zlib zstd
    gcc version 11.4.0 (Ubuntu 11.4.0-9ubuntu1) 

    ์ด์ œ isaacsim์„ git repository์—์„œ clone ํ•˜๊ณ  ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ์œ„์™€ ๊ฐ™์ด ์˜๊ตฌ์ ์œผ๋กœ ๋ฒ„์ „์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ๋ณด๋‹ค๋Š”, ๋นŒ๋“œํ• ๋•Œ๋งŒ ์ž„์‹œ๋กœ ๋ฒ„์ „์„ ์ „ํ™˜ํ•˜๋Š”๊ฒƒ์„ ์ถ”์ฒœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    $ export NVCC_PREPEND_FLAGS="-ccbin $(which gcc-11)"; export CC=gcc-11; export CXX=g++-11
    $ ./build.sh -x

    ๋นŒ๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ...
    
    
    IsaacRobotAPI, IsaacLinkAPI, IsaacReferencePointAPI, IsaacJointAPI, IsaacSurfaceGripper, IsaacAttachmentPointAPI
    Loading Templates from /home/byeongkyu/.cache/packman/chk/usd.py311.manylinux_2_35_x86_64.stock.release/0.24.05.kit.6-gl.14415+d9efdd65/lib/usd/usd/resources/codegenTemplates
            unchanged /home/byeongkyu/isaacsim/source/extensions/isaacsim.robot.schema/robot_schema/plugInfo.json
    Generating Schematics:
                wrote /home/byeongkyu/isaacsim/source/extensions/isaacsim.robot.schema/robot_schema/generatedSchema.usda
    BUILD (RELEASE) SUCCEEDED (Took 216.14 seconds)
    

    ๋.!!

  • ์–ด์ œ ๊ฐ‘์ž๊ธฐ Pocket ์„œ๋น„์Šค๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค๋Š” ๋‚ด์šฉ์˜ ๋ฉ”์ผ์ด ์™”์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ Read-it-later ์„œ๋น„์Šค์ธ๋ฐ, ๊ฐ„๋‹จํžˆ ์›น๋งํฌ๋ฅผ ์ €์žฅํ•ด๋†“๊ณ  ๋ถ„๋ฅ˜ํ•˜๊ณ  ํ•„์š”ํ• ๋•Œ ์ฐพ์•„ ์ฝ์–ด๋ณผ ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. Bookmark (์ฆ๊ฒจ์ฐพ๊ธฐ)๋‚˜ Notion ๋“ฑ์—๋„ ๋งํฌ๋“ค์„ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ, ๋ชจ๋ฐ”์ผ๊ธฐ๊ธฐ, macOS, ์œˆ๋„์šฐ, Linux ๋“ฑ ๋‹ค์–‘ํ•œ OS๋ฅผ ์ง€์›ํ•˜๊ณ , ์•ฑ๋„ ์ง€์›ํ•˜๋Š” ์„œ๋น„์Šค์—ฌ์„œ ๋‚˜๋ฆ„ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค๋งŒ… ๋ชจ์งˆ๋ผ์žฌ๋‹จ์— ์ธ์ˆ˜๋œ ์ดํ›„์— ๋ˆ์ด ์•ˆ๋˜์„œ ๊ทธ๋Ÿฐ์ง€… ์„œ๋น„์Šค๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค๋‹ˆ ์•„์‰ฝ๋„ค์š”.

    ์œ ๋ฃŒ๋กœ๋„ ์‚ฌ์šฉํ•˜๋˜ ์„œ๋น„์Šค๋ผ์„œ, ํ™˜๋ถˆ์ด์•ผ ๋ญ ์•Œ์•„์„œ ํ•ด์ค€๋‹ค๋‹ˆ ๋ƒ…๋‘๊ณ .. ๋Œ€์•ˆ ์„œ๋น„์Šค๋ฅผ ์ฐพ์•„๋ดค์Šต๋‹ˆ๋‹ค.

    Reddit ๋“ฑ์—์„œ Raindrop.io ์„œ๋น„์Šค๋ฅผ ์ถ”์ฒœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    ์‚ดํŽด๋ณด๋‹ˆ, Pocket๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹ค์–‘ํ•œ OS๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ Pocket์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฑ์—… ๋ฐ›์•„ Import ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๋„ ์ง€์›ํ•˜๊ณ  ์žˆ๋„ค์š”.

    ์ผ๋‹จ Pocket ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ฒจ๋†“๊ณ  ๋ณด๊ณ  ์žˆ๋Š”๋ฐ, ๋ง ๊ทธ๋Œ€๋กœ ๋ถ๋งˆํฌ๋งŒ ๊ด€๋ฆฌํ•˜๋Š” ํˆด์ž…๋‹ˆ๋‹ค. ๋ฆฌ๋” ๊ธฐ๋Šฅ์€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์•„, ๋งค๋ฒˆ ํ•ด๋‹น ์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Pocket์—์„œ ๊ธฐ๋Šฅ์ด ํ›„ํ‡ดํ–ˆ๋„ค์š”.


    ๋‘๋ฒˆ์งธ๋กœ Readwise ์ž…๋‹ˆ๋‹ค.

    Pocket๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์›นํŽ˜์ด์ง€๋ฅผ ํด๋ฆฌํ•‘ํ•ด์„œ ๋ณด์—ฌ์ฃผ๊ธด ํ•ฉ๋‹ˆ๋‹ค๋งŒ, ํ์‡„์ ์ธ ์‚ฌ์ดํŠธ๋“ค์˜ ๊ธ€์€ ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. (ํŠนํžˆ ๊ตญ๋‚ด ๋‰ด์Šค ์‚ฌ์ดํŠธ๋“ค) ๊ทธ๋ž˜๋„ ๊ฐ€์žฅ Pocket๊ณผ ๊ทผ์ ‘ํ•œ ๊ธฐ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๊ธด ํ•ฉ๋‹ˆ๋‹ค๋งŒ… ๋ฌด์กฐ๊ฑด ์œ ๋ฃŒ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋‹จ์ ๋„ ์žˆ๋„ค์š”. (30์ผ ๋ฌด๋ฃŒ)


    ์ผ๋‹จ์€ Readwise๋กœ ์‚ฌ์šฉํ•ด๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

  • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ Docker ์„ค์น˜

    $ curl -fsSL https://get.docker.com -o get-docker.sh
    $ sudo sh get-docker.sh

    ์„ค์น˜ ์™„๋ฃŒ ํ›„

    $ sudo groupadd docker
    $ sudo usermod -aG docker $USER
    $ newgrp docker

    ์„ค์น˜ ํ™•์ธ

    $ docker run hello-world

    NVIDIA Container Toolkit ์„ค์น˜

    $ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
        && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
        sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
        sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list \
        && \
        sudo apt-get update

    Toolkit ์„ค์น˜

    $ sudo apt-get install -y nvidia-container-toolkit
    $ sudo systemctl restart docker

    Container Runtime ์„ค์ •

    $ sudo nvidia-ctk runtime configure --runtime=docker
    $sudo systemctl restart docker

    ์„ค์น˜ ํ™•์ธ

    $ docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

  • ๋กœ์ปฌ ๋„คํŠธ์›ŒํŠธ์— ์—ฌ๋Ÿฌ PC๋“ค์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ , ์ด PC๋“ค ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ, Time Stamp๊ฐ€ ๋™๊ธฐํ™” ๋  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ROS2์™€ ๊ฐ™์€ ๊ฒฝ์šฐ, Topic ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋“ค์ด ์ˆ˜์ง‘๋˜๋Š” ์ƒํ™ฉ์—์„œ ๊ฐ ๋ฉ”์‹œ์ง€๋“ค์˜ ์‹œ๊ฐ„ ๊ฐ’์ด ํ‹€๋ฆฌ๊ฒŒ ๋˜๋ฉด, ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒํ•˜๋Š” ์ฃผ์š” ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค.

    ์ด๋ฅผ ์œ„ํ•ด์„œ ์‹œ๊ฐ„ ๋™๊ธฐํ™”๋ฅผ ํ•˜์—ฌ์•ผ ๋˜๋Š”๋ฐ, ๊ฐ PC๋“ค์ด ์ธํ„ฐ๋„ท ๋ง์— ์—ฐ๊ฒฐ๋œ ์ƒํ™ฉ์ด๋ผ๋ฉด, ์ฃผ๊ธฐ์ ์œผ๋กœ ์™ธ๋ถ€ NTP ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์ธํ„ฐ๋„ท ์‹œ๊ฐ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ PC์˜ ์‹œ๊ฐ„์ด ๋งž์ถฐ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ (ํ์‡ ๋ง)์˜ ๊ฒฝ์šฐ ์ด๋ ‡๊ฒŒ ์™ธ๋ถ€ NTP ์„œ๋ฒ„์— ์ ‘์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ํŠน์ •PC ํ•˜๋‚˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‹œ๊ฐ„์„ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ, ์—ฐ๊ฒฐ๋œ PC์˜ ์‹œ๊ฐ„์„ ๋™๊ธฐํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    chrony๋Š” ๊ธฐ์กด ์‚ฌ์šฉ๋˜์—ˆ๋˜ ntp์˜ ๊ฐœ์„ ๋ฒ„์ „(?)์ž…๋‹ˆ๋‹ค.


    ๋จผ์ € ๊ธฐ์ค€์ด ๋  PC์—์„œ ์ž‘์—…์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

    chrony๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    $ sudo apt install chrony

    ๋‹ค์Œ์œผ๋กœ chrony.conf ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

    $ sudo vi /etc/chrony/chrony.conf

    ์„ค์ • ํŒŒ์ผ ๋‚ด์— ๋‹ค์Œ์˜ ๊ตฌ๋ฌธ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    pool ntp.ubuntu.com        iburst maxsources 4
    pool <๊ธฐ์ค€-PC-IP-์ฃผ์†Œ>      iburst maxsources 1
    pool 0.ubuntu.pool.ntp.org iburst maxsources 1
    pool 1.ubuntu.pool.ntp.org iburst maxsources 1
    pool 2.ubuntu.pool.ntp.org iburst maxsources 2
    
    ...
    
    local stratum 10
    allow 10.0.0.0/24   # 10.0.0.xx IP๋“ค์—๊ฒŒ๋งŒ ๋™๊ธฐํ™” ๊ธฐ๋Šฅ ํ—ˆ์šฉ

    ์ €์žฅํ•˜๊ณ  ๋‚˜์™€์„œ, chronyd, chrony ์„œ๋น„์Šค๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด์ค๋‹ˆ๋‹ค.

    $ sudo systemctl restart chronyd
    $ sudo systemctl restart chrony

    ๊ธฐ์ค€ PC์—์„œ ์ž‘์—…์€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.


    ๋‹ค์Œ์œผ๋กœ ๋™๊ธฐํ™” ๋Œ€์ƒ PC๋“ค์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ๋จผ์ € chrony ์„ค์น˜

    $ sudo apt install chrony

    ์„ค์ •ํŒŒ์ผ ์ˆ˜์ •

    $ sudo vi /etc/chrony/chrony.conf

    ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ ˆํผ๋Ÿฐ์Šค ์ฃผ์†Œ์— ๊ธฐ์ค€ PC์˜ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ด ์ค๋‹ˆ๋‹ค.

    #pool ntp.ubuntu.com        iburst maxsources 4
    #pool 0.ubuntu.pool.ntp.org iburst maxsources 1
    #pool 1.ubuntu.pool.ntp.org iburst maxsources 1
    #pool 2.ubuntu.pool.ntp.org iburst maxsources 2
    pool  10.0.0.10             iburst maxsources 1

    ์ €์žฅํ•˜๊ณ , chrony๋ฅผ ์žฌ์‹œ์ž‘ํ•ด์ค๋‹ˆ๋‹ค.

    $ sudo systemctl restart chrony

    ๊ฐ•์ œ๋กœ ๋™๊ธฐํ™” ๋ช…๋ น ์ˆ˜ํ–‰ – ๋ณดํ†ต์€ ๊ธฐ์ค€ PC์™€ ์‹œ๊ฐ„์„ ์ฒดํฌํ•ด์„œ ํŠน์ • ๋ฒ”์œ„๋งŒํผ ์ฐจ์ด๊ฐ€ ๋ฒŒ์–ด์ง€๋ฉด ๋™๊ธฐํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค๋งŒ, ์ผ๋‹จ์€ ๊ฐ•์ œ๋กœ ํ•œ๋ฒˆ ๋™๊ธฐํ™” ์ž‘์—…์„ ์ง„ํ–‰ํ•ด๋ด…๋‹ˆ๋‹ค.

    $ sudo chronyc -a makestep
    200 OK

    ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํ™•์ธํ•ด๋ด…๋‹ˆ๋‹ค.

    $ chronyc sources
    MS Name/IP address         Stratum Poll Reach LastRx Last sample
    ===============================================================================
    ^* _gateway                      4   6    77    32    -27us[ -384us] +/-   11ms

    ์ €์˜ ๊ฒฝ์šฐ์—”, ๊ธฐ์ค€PC์˜ ์ฃผ์†Œ๊ฐ€ gateway๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์–ด ์ €๋ ‡๊ฒŒ IP ์ฃผ์†Œ๋Œ€์‹  gateway๋ผ๊ณ  ํ‘œ์‹œ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋™๊ธฐํ™” ์ƒํƒœ๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    $ watch -n 0.5 chronyc tracking
    
    Reference ID    : 0A00000A (_gateway)
    Stratum         : 5
    Ref time (UTC)  : Fri Feb 14 00:26:30 2025
    System time     : 0.000031521 seconds slow of NTP time
    Last offset     : -0.000079722 seconds
    RMS offset      : 0.000119501 seconds
    Frequency       : 23.396 ppm slow
    Residual freq   : -0.139 ppm
    Skew            : 3.385 ppm
    Root delay      : 0.013619509 seconds
    Root dispersion : 0.004857286 seconds
    Update interval : 64.5 seconds
    Leap status     : Normal

    System time์„ ํ™•์ธํ•ด๋ณด๋ฉด ์•ฝ 0.000031521 ๋А๋ฆฐ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋.

  • ๋กœ๋ด‡ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ, ๋‚ด๋ถ€๋ง๊ณผ ์™ธ๋ถ€๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐ๋„ท๋ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์„ค๊ณ„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ๊ธฐ๊ธฐ๋“ค์€ ๋กœ์ปฌ๋ง์œผ๋กœ, ๋กœ๋ด‡์„ ์›๊ฒฉ์œผ๋กœ ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐ๋„ท๋ง์„ ๋”ฐ๋กœ ๋‘๋Š” ๊ฒฝ์šฐ์ธ๋ฐ, ๋ณดํ†ต 2๊ฐœ ์ด์ƒ์˜ ๋””๋ฐ”์ด์Šค or PC๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋Œ€๋žต ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…ํ•ด๋ณด๋ฉด,

    ์ด๋ ‡๊ฒŒ ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ, PC2์—์„œ๋Š” ์ธํ„ฐ๋„ท๋ง์— ์ ‘์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์™ธ๋ถ€๋ง์œผ๋กœ ์—ฐ๊ฒฐ์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ํ•  ๊ฒฝ์šฐ์— ์•ฝ๊ฐ„ ๋ถˆํŽธํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, iptables๋ฅผ ์ด์šฉํ•ด์„œ PC2์—์„œ PC1์„ ํ†ตํ•ด ์ธํ„ฐ๋„ท๋ง์ด ์ ‘์† ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ผ๋‹จ PC1์—์„œ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    $ sudo apt install iptables iptables-persistent

    ๋˜, IP ํฌ์›Œ๋“œ ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    $ sudo vi /etc/sysctrl.conf
    
    # 28th line uncomment
    net.ipv4.ip_forward=1

    ๋‹ค์Œ์œผ๋กœ iptables๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„์€ ์œ„ ๊ทธ๋ฆผ์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. (์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•˜์—ฌ ์“ฐ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค)

    $ sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
    $ sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
    $ sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT

    ์ด์ œ ์ด๊ฑธ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ , ๋‹ค์Œ ๋ถ€ํŒ… ํ›„์—๋„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    $ sudo netfilter-persistent save
    $ sudo netfilter-persistent reload

    ์ด์ œ PC1์—์„œ์˜ ์ž‘์—…์€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.


    ๋‹ค์Œ์œผ๋กœ PC2์—์„œ๋Š” IP ์„ค์ •๋งŒ ๋‹ค์‹œ ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋จผ์ € ํ˜„์žฌ ์ €์žฅ๋œ ์„ค์ • ์ด๋ฆ„์„ ํ™•์ธํ•ด๋ด…๋‹ˆ๋‹ค.

    $ nmcli connection show
    NAME                UUID                                  TYPE      DEVICE  
    Wired connection 1  fb960c33-6436-3331-b11b-174bfebacc62  ethernet  eth0    
    docker0             311a9d66-a3fe-4aeb-ac9c-665beb0a7e1f  bridge    docker0 
    

    ์ €์˜ ๊ฒฝ์šฐ์—” “Wired connection 1″์œผ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ด์ œ IP ์„ค์ •์„ ํ•ด์ค๋‹ˆ๋‹ค.

    $ sudo nmcli con modify "Wired connection 1"  ipv4.addresses 10.0.0.11/24
    $ sudo nmcli con modify "Wired connection 1"  ipv4.gateway 10.0.0.10
    $ sudo nmcli con modify "Wired connection 1"  ipv4.dns 8.8.8.8
    $ sudo nmcli con modify "Wired connection 1"  ipv4.method manual
    $ sudo nmcli con up "Wired connection 1"

    ์ด์ œ ์—ฐ๊ฒฐ์„ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๋ฉด…

    $ ping 8.8.8.8
    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_seq=1 ttl=51 time=43.7 ms
    64 bytes from 8.8.8.8: icmp_seq=2 ttl=51 time=41.3 ms

    ์™ธ๋ถ€๋ง์œผ๋กœ ์—ฐ๊ฒฐ์ด ์ž˜ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋.

  • ํ•˜์—ฌ๊ฐ„ ์ด Jetson ๊ฐœ๋ฐœ์ž ๋†ˆ๋“ค์€ ๋ญํ•˜๋‚˜ ์‰ฝ๊ฒŒ ๋„˜์–ด๊ฐ€๋Š” ๊ผด์„ ๋ชป๋ณด๋Š”๋“ฏ ํ•ฉ๋‹ˆ๋‹ค. Jetpack5์—์„œ Jetpack6์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š”๋ฐ๋„ ์‹œ๊ฐ„์ด ํ•œ์ฐธ์„ ๊ฑธ๋ฆฌ๋”๋งŒ, Jetpack6์— ์˜ฌ๋ผ๊ฐ€์„œ๋Š” Realsense ์นด๋ฉ”๋ผ๋“ค์ด ์ธ์‹ ์ด ์•ˆ๋˜๋Š” ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์›์ธ์€ ํ•ด๋‹น ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์•„์„œ์ด๊ณ , ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„  ์ปค๋„ ์†Œ์Šค๋ฅผ ๋ฐ›์•„ ํ•ด๋‹น ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์žฌ๋นŒ๋”ฉํ•ด์„œ ๋ณต์‚ฌํ•ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ํŠนํžˆ D435i์˜ ๊ฒฝ์šฐ IMU๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š”๋ฐ, ์ด IMU์˜ ์„ผ์„œ๋ฐ์ดํ„ฐ๋ฅผ USB HID ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•ด์„œ ๋ฐ›๋„๋ก ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๊ฐ€ hidraw๋ผ๋Š” ๋…€์„์ž…๋‹ˆ๋‹ค. (์•„๋งˆ IMU๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์ง€ ์•Š๋Š” ์‹œ๋ฆฌ์ฆˆ๋“ค์€ ์ž˜ ์ธ์‹๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ^^)

    ๋‹คํ–‰ํžˆ librealsense ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์ปค๋„ ๋ฐ ๋ชจ๋“ˆ์„ ํŽธํ•˜๊ฒŒ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž˜ ๋งŒ๋“ค์–ด๋†“์•„์„œ ๋นŒ๋“œ๊นŒ์ง€๋Š” ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    https://github.com/IntelRealSense/realsense_mipi_platform_driver/blob/dev/README_JP6.md

    $ git clone https://github.com/IntelRealSense/realsense_mipi_platform_driver.git -b dev
    $ cd realsense_mipi_platform_driver
    $ ./setup_workspace.sh 6.0
    $ ./apply_patches.sh apply 6.0
    $ ./build_all.sh 6.0

    ์œ ์˜ํ•ด์•ผ ํ•  ์ ์€ ํ˜„์žฌ๊นŒ์ง€๋Š” Jetpack 6.0 (rev2)๋งŒ ์ง€์›ํ•˜๊ณ  ์žˆ์–ด์„œ, ํ˜„์žฌ ์ตœ์‹ ๋ฒ„์ „์ธ 6.2์—์„œ๋Š” ์œ„ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , ์•„์ง๊นŒ์ง€ ์ง€์› ๋ฐฉ์•ˆ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Jetson Orin NX ๋ณด๋“œ์— SDK Manager๋ฅผ ์ด์šฉํ•ด ์„ค์น˜ํ•  ๋•Œ, Jetpack ๋ฒ„์ „์„ 6.0 (rev2)๋กœ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ์ด๋ ‡๊ฒŒ ๋นŒ๋“œ๋ฅผ ์™„๋ฃŒํ•˜๊ณ ,


    ๊ทธ ๋‹ค์Œ, ๋นŒ๋“œ๋œ ์ปค๋„ ๋ชจ๋“ˆ์„ Jetson ๋ณด๋“œ์— ๋ณต์‚ฌํ•˜์—ฌ ์ ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์œ„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ฌธ์„œ๋ฅผ ๋”ฐ๋ผ์„œ ์ง„ํ–‰ํ•˜๋ฉด, ๋“œ๋ผ์ด๋ฒ„์˜ ๋ฌธ์ œ์ธ์ง€ ๋ถ€ํŒ…์ด ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š๊ฑฐ๋‚˜, USB๊ฐ€ ๋จนํ†ต์ด ๋˜์–ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ์˜ ๊ณผ์ •๋งŒ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    $ cd realsense_mipi_platform_driver
    $ scp -r images/6.0/rootfs/lib/modules/5.15.136-tegra/extra <jetson-user-id>@<jetson-board-ip-address>:~/

    ๋‹ค์Œ์œผ๋กœ Jetson ๋ณด๋“œ์—์„œ๋Š”

    $ sudo cp -r ~/extra /lib/modules/$(uname -r)/
    $ cd /lib/modules/$(uname -r)/
    $ sudo rm -rf videodev.ko

    ๋‹ค์Œ์œผ๋กœ depmod ์„ค์ •ํŒŒ์ผ์— ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    $ sudo vi /etc/depmod.d/ubuntu.conf
    
    search updates boot built-in
    ์ด ๋ถ€๋ถ„์„
    search extra updates boot built-in
    ์œผ๋กœ ์ˆ˜์ •

    ๋‹ค์‹œ ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹คํ–‰ํ•˜๊ณ 

    $ sudo depmod

    ์žฌ๋ถ€ํŒ…ํ•œ ๋‹ค์Œ, Realsense ์นด๋ฉ”๋ผ๋ฅผ ๊ผฝ์•„์ฃผ๋ฉด ์ œ๋Œ€๋กœ ์ธ์‹์ด ๋˜๊ณ , ์ •์ƒ์ ์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    ๋.

  • Ubuntu 24.04๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์ž๋™์œผ๋กœ Nvidia ๊ทธ๋ž˜ํ”ฝ์นด๋“œ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์„ค์น˜๋œ๋‹ค. Nvidia์—์„œ ์ง์ ‘ ์ œ๊ณตํ•˜๋Š” Repository๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์‰ฝ๊ฒŒ ์ตœ์‹  ๋ฒ„์ „์˜ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋จผ์ € ํ˜„์žฌ ์„ค์น˜๋˜์–ด ์žˆ๋Š” ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

    $ sudo apt purge *nvidia*

    ๋‹ค์Œ์œผ๋กœ, Nvidia Repository์˜ ํ‚ค๋ฅผ ๋“ฑ๋ก ๋ฐ Repository ์ถ”๊ฐ€๋ฅผ ์œ„ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜ํ•œ๋‹ค.

    $ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
    $ sudo dpkg -i cuda-keyring_1.1-1_all.deb

    ์ด์ œ, apt๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ค์น˜ํ•œ๋‹ค. ์ด๋•Œ cuda๋ฅผ ์„ค์น˜ํ•˜๋ฉด ํ•ด๋‹น CUDA์˜ ๋ฒ„์ „์— ๋งž๊ฒŒ ์•ˆ์ •๋œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฐ™์ด ์„ค์น˜ํ•ด์ค€๋‹ค.

    $ sudo apt update
    $ sudo apt install cuda

    ๋งˆ์ง€๋ง‰์œผ๋กœ ๋…ธํŠธ๋ถ์˜ ๊ฒฝ์šฐ, prime-select ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด intel ๋Œ€์‹  nvidia ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํ•ญ์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ด์ค€๋‹ค.

    $ sudo prime-select nvidia

    ์žฌ๋ถ€ํŒ…ํ•˜๋ฉด ์™„๋ฃŒ.