Windows를 유지한 채 별도 HDD에 Ubuntu를 설치해 듀얼부팅 환경을 구성했다. 이후 `/dev/sda4: clean`에서 부팅이 멈췄지만, NVIDIA 그래픽 드라이버 문제임을 확인했다. `nomodeset`으로 부팅한 뒤 드라이버를 설치해 문제를 해결했다.
Ubuntu 22.04.5 LTS에서 Zsh, Oh My Zsh, Bullet Train을 설정하고 자동완성·문법 강조 플러그인을 추가했다. 이후 VS Code와 Node.js, npm을 설치해 개발 환경을 구성했다.
Ubuntu에서 Zsh 플러그인을 설치하고 Zsh를 기본 셸로 설정했다. 이후 Powerline 폰트와 VS Code를 설치하고, NVS를 이용해 Node.js LTS와 npm 개발 환경을 구축했다.
Ubuntu 22.04에 Docker Engine, Buildx, Compose를 설치하고 서비스와 컨테이너 실행을 확인했다. 이후 docker 그룹을 설정해 sudo 없이 Docker를 사용할 수 있도록 개발 환경을 구성했다.
Ubuntu 22.04에 Miniconda를 설치하고 Zsh와 연동했다. 이후 Python 3.10 기반 `test` 가상환경을 생성하고 활성화해 버전을 확인한 뒤, 환경을 종료하며 Conda 환경 구성을 완료했다.
Ubuntu 22.04에 PyCharm을 설치하고 초기 설정을 진행했다. 이후 기존에 구성한 Miniconda의 `test` 가상환경을 PyCharm의 Python Interpreter로 연결해 Python 개발 환경을 구축했다.
Ubuntu에서 TensorFlow 2.21.0을 설치하고 NVIDIA RTX 4070 GPU 인식 문제를 해결했다. CUDA·cuDNN 라이브러리와 환경변수를 설정한 뒤 MNIST 학습을 통해 GPU가 정상적으로 작동하는 것을 확인했다.
Ubuntu에서 TensorFlow 2.21.0과 RTX 4070 GPU 환경을 구성하고 CUDA·cuDNN 라이브러리 문제를 해결했다. 이후 TensorFlow 공식 MNIST 실습을 진행해 테스트 정확도 97.74%와 GPU 정상 작동을 확인했다.
TensorFlow Hub의 Faster R-CNN 모델을 활용해 식당 이미지의 객체를 탐지했다. 객체별 확률과 Bounding Box를 확인하고 NMS를 적용해 결과를 정리했으며, RTX 4070 GPU에서 추론이 정상적으로 실행되는 것을 확인했다.
TensorFlow 모델을 SavedModel로 저장하고 Docker 기반 TensorFlow Serving으로 서버에 배포했다. 이후 REST API와 Python requests를 이용해 MNIST 예측 요청을 보내고 숫자 5로 정상 예측되는 것을 확인했다.
TensorFlow Serving에서 MNIST 이미지를 여러 장 예측하고 Batch inference를 실습했다. 1000장 기준 개별 요청과 Batch 요청을 비교한 결과, 동일한 정확도 97.8%에서 Batch 방식이 약 6.36배 빠르게 처리되는 것을 확인했다.
TensorFlow Serving에서 MNIST 모델을 v1과 v2로 버전 관리하고, 두 모델을 동시에 서비스했다. 이후 API에서 특정 버전을 지정해 예측 결과를 비교하며 모델 버전 관리 기능을 확인했다.
TensorFlow Serving의 Server-side Batching을 실습했다. Batching 설정을 구성하고 여러 개의 개별 요청을 동시에 보내 서버가 요청을 묶어 처리하는 과정을 확인했다.
TensorFlow Serving의 구조와 주요 기능을 정리하고, 모델 배포부터 버전 관리 및 Batch 처리까지 전체 Serving 과정을 이해했다.
Ubuntu 환경에서 EdgeX Foundry를 Docker로 구성하고, 주요 서비스와 디바이스 연동 구조를 확인하며 IoT 데이터 처리 실습을 진행했다.
USB 카메라를 EdgeX에 연결하고 RTSP 스트리밍을 확인한 뒤, 이미지를 배열로 변환해 EdgeX Core Data와 Redis에 저장했다. 저장된 데이터를 복원해 원본과 픽셀 단위로 동일함을 확인했다.
Ubuntu EdgeX 실습을 통해 EdgeX Foundry의 기본 구조와 서비스를 구성하고, Docker 환경에서 IoT 디바이스 데이터를 수집·처리하는 과정을 실습했다.
EdgeX Foundry의 기본 구조와 주요 서비스를 살펴보고, Docker 환경에서 EdgeX를 실행하며 IoT 디바이스와 데이터를 연동하는 실습을 진행했다.
EdgeX와 TensorFlow Serving을 연결한 Object Detection Pipeline의 데이터 크기와 처리시간을 분석하고, 네트워크 환경에 따른 전체 처리시간 차이를 그래프로 비교했다.
ROS의 개념과 ROS 2가 등장한 배경을 학습하고, ROS의 핵심 구성인 통신(Plumbing), 개발 도구(Tools), 기능(Capabilities), 커뮤니티(Community)의 역할을 정리했다.
Ubuntu 22.04에 ROS 2 Humble을 설치하고 Workspace를 구성했다. 이후 Demo Node와 Turtlesim을 실행하고, `/turtle1/cmd_vel` 토픽을 통해 노드 간 통신과 RQt를 확인했다.
ROS 2의 Node, Topic, Service, Action 등 기본 통신 개념을 학습하고, ROS 2 CLI 명령어를 활용해 노드와 토픽 정보를 확인하는 실습을 진행했다.
Snapcraft와 LXD를 이용해 ROS 2 Humble Talker/Listener Snap 패키징을 시도하고, LXD의 NAT·iptables·패킷 흐름을 점검했다. 외부 네트워크 문제로 최종 Snap 패키지 생성에는 실패했다.
ROS 2 Talker/Listener를 Snap으로 패키징하고 LXD 네트워크 문제를 확인한 뒤 Snap 설치 및 실행에 성공했다. 또한 `ros2topic`을 추가하고 `/chatter` 토픽의 약 1Hz 발행을 확인했다.
Ubuntu 20.04에 ROS 1 Noetic과 TurtleBot3를 구성하고 Snap 패키징 환경을 구축했다. Core·Teleop 실행과 ROS Topic·TF를 확인하고 Navigation 문제를 분석했다.
ROS 2의 통신 구조와 DDS의 역할을 학습했다. ROS 1과 ROS 2의 통신 방식 차이를 비교하고, Dynamic Discovery, QoS, 보안 등 DDS의 주요 특징을 정리했다.
ROS 2의 DDS와 RMW 구조를 실습하며 Cyclone DDS와 Fast DDS를 변경해 통신을 확인했다. 또한 ROS_DOMAIN_ID와 QoS(BEST_EFFORT)를 설정하며 ROS 2 통신 방식을 이해했다.
ROS 2의 메시지 통신 방식인 Topic, Service, Action, Parameter의 구조와 특징을 정리했다. 각 방식의 용도와 데이터 전달 방식을 비교하며 노드 간 통신 구조를 이해했다.
TurtleSim에서 ROS 2 Topic 통신을 실습하고, `ros2 topic` 명령어로 Topic과 메시지를 확인했다. `/turtle1/cmd_vel`의 Twist 메시지를 통해 거북이 제어 과정을 확인했다.
ROS 2의 `rosbag`을 이용해 `/turtle1/cmd_vel` Topic 메시지를 약 93초간 28개 기록하고, `ros2 bag info`로 확인한 뒤 `ros2 bag play`로 재생해 TurtleSim 움직임을 재현했다.
ROS 2 인터페이스인 `msg`, `srv`, `action`의 구조와 역할을 정리했다. Topic·Service·Action에서 사용되는 데이터 형식과 `ros2 interface show`를 통한 확인 방법을 학습했다.
ROS 2 Service는 Client가 Server에 작업을 요청하고 응답을 받는 통신 방식이다. `ros2 service list`, `type`, `find`, `call` 명령어로 Service를 확인하고 직접 호출하는 실습을 진행했다.
ROS 2 Service를 활용해 TurtleSim을 직접 제어했다. `/clear`, `/spawn`, `/kill`, `/set_pen`, `/teleport_absolute`를 호출하며 화면 초기화, 거북이 생성·삭제, 펜 설정, 위치 이동을 실습했니다.
ROS 2 Action은 시간이 걸리는 작업에서 Goal을 전달하고, 진행 중 Feedback을 받으며, 완료 후 Result를 받는 통신 방식이다. Topic과 Service를 혼합해 구현하며 `.action` 인터페이스를 사용한다.
ROS 2 Action을 TurtleSim에서 실행하며 `Goal → Feedback → Result` 과정을 확인했다. `ros2 action` 명령어로 Action의 Client·Server 관계를 확인하고 회전 작업을 수행했다.
ROS 2의 Parameter 개념과 Parameter Server/Client 구조를 학습하고, YAML 설정 파일 활용과 `ros2 param list`를 통해 실행 중인 노드의 파라미터 목록을 확인했다.
ROS 2의 Parameter를 이용해 TurtleSim의 설정값을 조회·변경하고, `dump/load`를 통한 설정 관리와 `/parameter_events`를 이용한 변경 이벤트를 확인했다. 또한 정적으로 선언된 Parameter의 삭제가 불가능함을 확인했다.
ROS 2의 Topic, Service, Action의 통신 구조와 특징을 비교했다. Topic은 지속적인 데이터 전달, Service는 요청·응답, Action은 Goal·Feedback·Result를 통한 작업 처리에 사용된다.
ROS 2의 CLI, RQt, RViz, Gazebo를 정리했다. CLI는 명령어 기반 시스템 제어, RQt는 GUI 분석, RViz는 3D 시각화, Gazebo는 로봇 시뮬레이션에 활용된다.
RQt의 다양한 GUI 플러그인을 활용해 ROS 2의 노드, 토픽, 서비스, 데이터, 카메라 영상과 로그를 확인하고 직접 조작해보며 ROS 2 GUI 도구의 활용 방법을 익혔다.
ROS 2에서는 노드와 패키지 간 물리량의 일관된 해석을 위해 SI 단위와 유도 단위를 표준으로 사용한다. 길이는 m, 시간은 s, 각도는 rad, 속도는 m/s, 각속도는 rad/s로 표현한다.
ROS 2에서는 좌표계를 기준 프레임과 함께 표현하며, 위치와 방향을 통해 로봇의 상태와 공간적 관계를 나타낸다.