• ๊ธฐ์กด ํฌ์ŠคํŒ…์—์„œ armbian build๋ฅผ ์ด์šฉํ•ด์„œ ์‰ฝ๊ฒŒ 6.12 ์ปค๋„์„ ์‚ฌ์šฉ (์ด๋ฏธ preempt_rt ํŒจ์น˜๊ฐ€ ์ ์šฉ๋˜์–ด ์žˆ์Œ) ํ•ด์„œ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉ๊นŒ์ง€ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, armbian์˜ 6.12 ์ปค๋„์˜ ๊ฒฝ์šฐ, Orange Pi 5 Plus์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์ฃผ๋ณ€ํšŒ๋กœ (i2c, can, spi ๋“ฑ)์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ dtb๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์€ ๊ฐ€๋Šฅํ•˜๋˜, ์ตœ์ ํ™”๋˜์–ด ์žˆ๋‹ค๊ณ ๋Š” ๋ณด๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. armbian build์—์„œ๋Š” ์ด ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด ์ปค๋„์˜ BRANCH๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด๋†จ๋Š”๋ฐ, vendor์—์„œ ์ œ๊ณตํ•œ ์ปค๋„์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด BRANCH ์˜ต์…˜์— vendor๋ฅผ ์ ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. Orangi Pi 5 Plus์˜ vendor ์ปค๋„์€ 6.1 ๋ฒ„์ „์œผ๋กœ preempt_rt ์ปค๋„์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ์ˆ˜๋™์„ rt ํŒจ์น˜๋ฅผ ์ง„ํ–‰ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ์ด๋ฅผ ์œ„ํ•ด์„œ userpatches/kernel/rk35xx-vendor-6.1 ๋””๋ ‰ํ† ๋ฆฌ์— ์•„๋ž˜์™€ ๊ฐ™์ด ํŒจ์น˜ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ด ์ค๋‹ˆ๋‹ค. ์ด ํŒจ์น˜ ํŒŒ์ผ์€ kernel-config ๋ช…๋ น์„ ์ด์šฉํ•ด์„œ ๊ธฐ์กด https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/6.1 ์—์„œ ๋ฐ›์•„์˜จ rt ํŒจ์น˜ ํŒŒ์ผ์„ ์ ์šฉํ•œ ๊ฒƒ์œผ๋กœ, vendor ์ปค๋„์— ๋งž๊ฒŒ๋” ๋ช‡๊ฐ€์ง€๋ฅผ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ์ปค๋„์—์„œ ๋ช‡๊ฐ€์ง€ ์ˆ˜์ •ํ•œ๊ฒŒ ์žˆ์–ด์„œ rt ํŒจ์น˜๋ฅผ ๊ทธ๋ƒฅ ์ ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    https://gist.github.com/byeongkyu/7d9b999c310c3ef3852c6844b11e3191#file-patch-6-1-112-rt43-patch

    ์ด ํŒจ์น˜ ํŒŒ์ผ์„ ๋ฐ›์•„์„œ ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ณต์‚ฌํ•ด ๋„ฃ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    ๋˜, ์ปค๋„ ๋นŒ๋“œ ํ›„ ํŒจํ‚ค์ง• ๊ณผ์ •์—์„œ ์ปค๋„ ํŒŒ์ผ๋ช…๊ณผ์˜ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ lib/functions/compilation/kernel-debs.sh ํŒŒ์ผ์„ ์—ด์–ด์„œ,

    declare kernel_version_family="${kernel_version}-rt43-${BRANCH}-${LINUXFAMILY}"

    ์™€ ๊ฐ™์ด rt43 ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค๋‹ˆ๋‹ค.

    ์ด์ œ ๋นŒ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ ,

    $ ./compile.sh BOARD=orangepi5-plus BRANCH=vendor RELEASE=noble BUILD_DESKTOP=no BUILD_MINIMAL=no VENDOR=armbian-kft REVISION=25.8.2 CPUTHREADS=12 PACKAGE_LIST_BOARD="net-tools wireless-tools vim" build

    ๋‹ค์Œ์œผ๋กœ, kernel ์˜ต์…˜์„ ์„ค์ •ํ•ด์ฃผ๊ณ ,

    General setup  --->
        Preemption Model (Fully Preemptible Kernel (Real-Time))  --->
            (X) Fully Preemptible Kernel (Real-Time)
    
        -*- Control Group support  --->
            -*-   CPU controller  --->
                [ ]   Group scheduling for SCHED_RR/FIFO
    
    Kernel Features  ---> 
        Timer frequency (1000 HZ)  --->
            (X) 1000 HZ
    
    CPU Power Management  --->
        CPU Frequency scaling  --->
            Default CPUFreq governor (performance)  --->
                 (X) performance

    ๋นŒ๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋˜์–ด output/images ๋””๋ ‰ํ† ๋ฆฌ์—

    armbian-kft_25.8.2_Orangepi5-plus_noble_vendor_6.1.115.img

    ์™€ ๊ฐ™์ด ์ด๋ฏธ์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ด์ œ ์ด ์ด๋ฏธ์ง€๋ฅผ SD์นด๋“œ์— Write ํ•˜๊ณ , ๋ถ€ํŒ…์„ ์ง„ํ–‰ํ•˜๋ฉด.. ๋!.

  • ๊ธฐ๋ณธ Repository์— ์žˆ๋Š” ํŒจํ‚ค์ง€ ์ค‘ ํ•„์š”ํ•œ ๊ฒƒ๋“ค ๋จผ์ € ์„ค์น˜ํ•  ๋•Œ๋Š” PACKAGE_LIST_BOARD ์˜ต์…˜ ์‚ฌ์šฉ.

    $ ./compile.sh BOARD=orangepi5-plus BRANCH=current RELEASE=noble BUILD_DESKTOP=no BUILD_MINIMAL=no VENDOR=armbian-kft REVISION=25.8.2 CPUTHREADS=12 PACKAGE_LIST_BOARD="net-tools wireless-tools vim" build 

    ์ž„์˜์˜ repository ์ถ”๊ฐ€, ํŒจํ‚ค์ง€ ์„ค์น˜, ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์‹œ, userpatches/customize-image.sh ํŒŒ์ผ์„ ์ˆ˜์ •

    ain() {
            case $RELEASE in
                    stretch)
                            # your code here
                            # InstallOpenMediaVault # uncomment to get an OMV 4 image
                            ;;
                    buster)
                            # your code here
                            ;;
                    bullseye)
                            # your code here
                            ;;
                    bionic)
                            # your code here
                            ;;
                    focal)
                            # your code here
                            ;;
                    noble)
                            export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F\" '{print $4}')
                            curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb"
                            dpkg -i /tmp/ros2-apt-source.deb
                            apt update
                            apt install -y ros-dev-tools
                            apt install -y ros-jazzy-ros-base
                            apt install -y ros-jazzy-rmw-cyclonedds-cpp
                            ;;
            esac
    } # Main
    

    ์‚ฌ์šฉ์ž ๊ณ„์ •์„ ๋งŒ๋“ค๊ณ , ์ฒ˜์Œ ๋กœ๊ทธ์ธ ์‹œ ์ž‘์—… ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ, packages/bsp/common/usr/lib/armbian/armbian-firstlogin ํŒŒ์ผ ์ˆ˜์ •

    add_user() ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋‹ค์Œ์˜ ๊ตฌ๋ฌธ ์•„๋ž˜์— ์ ์ ˆํ•œ ๊ณณ์— ์ถ”๊ฐ€.

    add_user() {
    ...
             while [ -f "/root/.not_logged_in_yet" ]; do
    ...
                  if [[ "$first_input" == "$second_input" ]]; then
    ...
                            echo "source /opt/ros/jazzy/setup.bash" >> /home/"$RealUserName"/.bashrc
                            echo "export ROS_DOMAIN_ID=1" >> /home/"$RealUserName"/.bashrc
                            echo "export ROS_AUTOMATIC_DISCOVERY_RANGE=SYSTEM_DEFAULT" >> /home/"$RealUserName"/.bashrc
                            echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> /home/"$RealUserName"/.bashrc
                            echo "export _colcon_cd_root=/opt/ros/jazzy/" >> /home/"$RealUserName"/.bashrc
                            echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> /home/"$RealUserName"/.bashrc
                            echo "export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp" >> /home/"$RealUserName"/.bashrc
    ...

  • Orange Pi 5๋ฅผ ๋กœ๋ด‡์˜ ๋ฉ”์ธ ์ œ์–ด๊ธฐ๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, preempt_rt ํŒจ์น˜๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ ์ œ์ผ ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์€ Armbian build ํ”„๋ ˆ์ž„์›์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Armbian์€ ์‹ฑ๊ธ€๋ณด๋“œ ์ปดํ“จํ„ฐ์˜ ์‹œ์Šคํ…œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋ ˆ์ž„์›์œผ๋กœ, ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, SD์นด๋“œ ๋“ฑ์— ์‰ฝ๊ฒŒ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    ์ž์„ธํ•œ ์„ค๋ช…์€ https://www.armbian.com/ ์™€ https://docs.armbian.com/Developer-Guide_Overview/ ์ด๊ณณ์„ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    Armbian ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์œ„ํ•ด์„œ๋Š” Ubuntu (Docker ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ), WSL2 ํ™˜๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    ๋จผ์ € Ubuntu์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด armbian build software framework๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

    $ git clone https://github.com/armbian/build
    $ cd build  

    preempt_rt ์ปค๋„ ๋นŒ๋“œ๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ปค๋„ ์„ค์ • ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ 6.x ์ปค๋„ ์ดํ›„์—๋Š” RT ํŒจ์น˜๊ฐ€ ์ด๋ฏธ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๋”ฐ๋กœ patch ๋ช…๋ น์„ ์ด์šฉํ•ด์„œ ์ž‘์—…ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

    ์ปค๋„ ์„ค์ • ๋ฐ ๋นŒ๋“œ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    $ ./compile.sh BOARD=orangepi5-plus BRANCH=current RELEASE=noble BUILD_DESKTOP=no BUILD_MINIMAL=no VENDOR=armbian-kft REVISION=25.8.2 CPUTHREADS=12 build 

    ๋ช‡๊ฐ€์ง€ ์˜ต์…˜์— ๋Œ€ํ•ด ์„ค๋ช…์„ ๋ถ™์ด๋ฉด

    BRANCH: ์ปค๋„ ๋ฐ U-Boot์˜ ์‚ฌ์šฉ ๋ฒ„์ „์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. current๋ฅผ ์ถ”์ฒœ. (vendor, legacy, edge ์˜ต์…˜ ์„ ํƒ ๊ฐ€๋Šฅ)
    RELEASE: Ubuntu ๋ฒ„์ „ ์„ ํƒ ๊ฐ€๋Šฅ noble = 24.04
    BUILD_DESKTOP: gnome ๋“ฑ GUI Desktop ์—”์ง„ ์„ ํƒ ๊ฐ€๋Šฅ. no = CLI (Server)
    BUILD_MINIMAL: ์•„์ฃผ ์ตœ์†Œํ•œ์˜ CLI ํ™˜๊ฒฝ๋งŒ ๊ตฌ์„ฑ. no
    VENDOR: ์ƒ์„ฑ๋˜๋Š” ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„ ๊ตฌ์„ฑ
    REVISION: Armbian ๋ฆฌ๋น„์ „ ๋ฒ„์ „ ์‚ฌ์šฉ
    CPUTHREADS: ์ปค๋„ ๋นŒ๋“œ์‹œ ์‚ฌ์šฉ๋˜๋Š” CPU ์ฝ”์–ด ์ˆ˜ (์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ

    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, ํ•ด๋‹น๋˜๋Š” ์ปค๋„ ๋ฐ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋“ค์„ ๋‹ค์šด๋กœ๋“œ ํ•˜๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ํƒํ™”๋ฉด์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

    ์ปค๋„ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด (Show a kernel configuration menu before compliation)์„ ์„ ํƒ

    ๊ธฐ์กด preempt_rt ์„ค์ •ํ•  ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์˜ต์…˜์„ ์กฐ์ •ํ•ด์ค๋‹ˆ๋‹ค.

    General setup  --->
        Preemption Model (Fully Preemptible Kernel (Real-Time))  --->
            (X) Fully Preemptible Kernel (Real-Time)
    
    Kernel Features  ---> 
        Timer frequency (1000 HZ)  --->
            (X) 1000 HZ
    
    CPU Power Management  --->
        CPU Frequency scaling  --->
            Default CPUFreq governor (performance)  --->
                 (X) performance

    ์ €์žฅํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋ฉด, ์ปค๋„๋นŒ๋“œ๋ถ€ํ„ฐ ์ด๋ฏธ์ง€ ์ƒ์„ฑ๊นŒ์ง€ ํ•œ๋ฒˆ์— ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ์ตœ์ข… ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, output/images ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— armbian-kft_25.8.2_Orangepi5-plus_noble_current_6.12.58.img ์™€ ๊ฐ™์ด ์ด๋ฏธ์ง€ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ด ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ SD Card์— Writeํ•˜๊ณ  ๋ถ€ํŒ…ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • 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 ๋А๋ฆฐ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋.