Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

Wiredwisdom

OpenCR Setup 본문

Autonomous Driving/Turtlebot3

OpenCR Setup

Duke_Wisdom 2024. 7. 1. 16:57
$ sudo dpkg --add-architecture armhf
$ sudo apt-get update
$ sudo apt-get install libc6:armhf

 

dpkg :  Debian 기반 리눅스 배포판을 위한 패키지 관리 시스템

소프트웨어 패키지를 설치, 제거 및 관리하는 데 사용됩니다.

 

 

 


armhf  "ARM hard float"의 약자

 

하드웨어 부동 소수점 연산을 사용하는 ARM 아키텍처 프로세서를 위해 컴파일된 소프트웨어 패키지와 바이너리

성능: 하드웨어 부동 소수점 연산을 사용하므로 부동 소수점 계산을 더 빠르고 효율적으로 수행.

소프트웨어 호환성: armhf 패키지는 하드웨어 부동 소수점 연산을 지원하는 ARM 프로세서에서만 실행.


 

ARM 아키텍처, ARM(Advanced RISC Machine)

모바일 장치, 임베디드 시스템, 그리고 일부 서버 및 데스크탑 시스템에서 널리 사용되는 RISC(Reduced Instruction Set Computing) 기반의 프로세서 아키텍처.

 

Hard Float

ARM 프로세서의 하드웨어에서 부동 소수점 연산을 처리하는 방식

하드웨어 부동 소수점 유닛(FPU)이 있어서 부동 소수점 연산을 더 빠르고 효율적으로 처리할 수 있다.

이는 소프트웨어적으로 부동 소수점 연산을 처리하는 "soft float"와 대조된다.


 


libc6 (GNU C Library version 6)

 

Linux와 다른 Unix-like 운영체제에서 사용되는 표준 C 라이브러리의 여섯 번째 버전

"libc6"라는 이름은 주로 이 라이브러리의 패키지 이름으로 사용

 

표준 C 라이브러리 구현 : libc6는 ANSI C 표준 라이브러리 함수의 구현체를 제공.

여기에는 문자열 처리, 메모리 관리, 입출력, 수학 함수 등이 포함.

예: printf, scanf, malloc, free, memcpy, strlen 등.

 

시스템 호출 인터페이스 제공 : libc6는 운영체제의 커널과 사용자 공간 프로그램 간의 인터페이스를 제공.

시스템 호출을 통해 운영체제의 기능을 사용할 수 있도록 합니다.

예: 파일 열기(open), 읽기(read), 쓰기(write), 프로세스 생성(fork), 네트워크 통신(socket) 등.

 

다양한 기능 지원:

국제화 및 지역화: 다국어 지원 및 다양한 지역 설정을 처리

스레딩: POSIX 스레드를 지원하여 멀티스레드 프로그래밍을 가능

수학 연산: 고급 수학 함수와 유틸리티를 제공


기술적 세부 사항

 

버전: libc6의 버전 번호는 GNU C Library의 버전 번호와 일치합니다. 예를 들어, libc6 2.31은 glibc 2.31을 의미합니다.

호환성: libc6는 리눅스 커널과 밀접하게 연동되며, 대부분의 리눅스 응용 프로그램이 이 라이브러리를 사용합니다.

호환성 문제로 인해 시스템에서 libc6를 업그레이드할 때 주의가 필요합니다.

 

종속성과 중요성:

- 종속성: 수많은 응용 프로그램과 시스템 도구가 libc6에 의존하므로,

이를 제거하거나 비정상적으로 변경하면 시스템이 불안정해질 수 있습니다.

- 중요성: libc6는 리눅스 운영체제에서 핵심적인 역할을 하며,

대부분의 프로그램이 정상적으로 동작하기 위해 필수적인 라이브러리입니다.

 

업데이트와 관리:

- 업데이트: 보안 패치 및 성능 개선을 위해 정기적으로 업데이트됩니다. 시스템의 패키지 관리자를 통해 업데이트를 받을 수 있습니다.

- 관리: 일반적으로 시스템 관리자나 패키지 관리자가 관리하며, 사용자는 보통 직접 다루지 않습니다.

libc6는 리눅스 시스템의 필수적인 구성 요소로, 시스템의 안정성과 성능에 중요한 역할을 합니다.


 


GNU-C

 

표준 C 라이브러리 구현

glibc는 C 프로그래밍 언어의 표준 라이브러리 함수들을 제공합니다.

ANSI C 표준에 따라 설계되었으며, 많은 유틸리티 함수, 수학 함수, 문자열 처리 함수 등을 포함합니다.

예: printf, scanf, strcpy, strlen, malloc, free.

 

시스템 호출 인터페이스

glibc는 운영체제의 커널과 사용자 프로그램 간의 인터페이스를 제공합니다.

시스템 호출을 통해 파일 시스템, 프로세스 제어, 네트워크 기능 등을 사용할 수 있습니다.

예: open, read, write, fork, exec, socket.

 

국제화 및 지역화 지원

glibc는 다양한 언어와 지역 설정을 지원하여 다국어 프로그램을 쉽게 개발할 수 있게 합니다.

예: 로케일 설정, 다국어 메시지 처리.

 

멀티스레딩

POSIX 스레드 라이브러리(pthread)를 지원하여 멀티스레드 프로그래밍을 가능하게 합니다.

예: pthread_create, pthread_join, pthread_mutex_lock.

 


중요성

 

리눅스 및 유닉스 시스템의 필수 구성 요소

glibc는 대부분의 리눅스 배포판과 많은 유닉스 시스템에서 기본 C 라이브러리로 사용됩니다.

시스템의 기본적인 동작을 위해 필수적입니다.

 

광범위한 사용

대부분의 사용자 공간 프로그램이 glibc에 의존하며, 시스템 툴 및 유틸리티도 glibc를 사용합니다.

 


기술적 세부 사항

 

구성 요소 : glibc는 다양한 하위 라이브러리로 구성됩니다.

예를 들어, 표준 C 함수 라이브러리, 스레드 라이브러리, 수학 라이브러리 등이 있습니다.

버전 : glibc는 지속적으로 개발되고 있으며, 각 버전은 새로운 기능 추가, 버그 수정, 성능 개선 등을 포함합니다.

호환성 : glibc는 리눅스 커널과 밀접하게 연동되며, 커널 버전에 따라 특정 버전의 glibc가 필요할 수 있습니다.

 


 


$ export OPENCR_PORT=/dev/ttyACM0
$ export OPENCR_MODEL=burger
$ rm -rf ./opencr_update.tar.bz2

 

 

  • export OPENCR_PORT=/dev/ttyACM0:
    • 환경 변수를 설정하는 명령어입니다.
    • OPENCR_PORT라는 환경 변수를 /dev/ttyACM0로 설정합니다.
    • /dev/ttyACM0는 일반적으로 USB 직렬 포트 장치를 나타내며, 이 경우 아마도 특정 하드웨어 장치(예: 마이크로컨트롤러나 개발 보드)와의 통신 포트를 설정하는 데 사용됩니다.
  • export OPENCR_MODEL=burger:
    • 또 다른 환경 변수를 설정하는 명령어입니다.
    • OPENCR_MODEL이라는 환경 변수를 burger로 설정합니다.
    • 이는 특정 하드웨어 모델이나 설정을 지정하는 데 사용될 수 있습니다. 여기서 burger는 아마도 로봇이나 개발 보드의 특정 모델을 나타낼 것입니다.
  • rm -rf ./opencr_update.tar.bz2:
    • 파일을 삭제하는 명령어입니다.
    • rm은 "remove"의 약자로 파일이나 디렉토리를 삭제합니다.
    • -r 옵션은 디렉토리를 재귀적으로 삭제하도록 하며, 디렉토리와 그 안의 모든 파일을 삭제합니다.
    • -f 옵션은 "force"의 약자로, 사용자에게 확인을 묻지 않고 강제로 삭제합니다.
    • ./opencr_update.tar.bz2는 현재 디렉토리에 있는 opencr_update.tar.bz2 파일을 삭제합니다.
    • 이 명령어는 특정 소프트웨어 업데이트 파일이나 패키지를 제거하는 데 사용될 수 있습니다.

 


$ wget https://github.com/ROBOTIS-GIT/OpenCR-Binaries/raw/master/turtlebot3/ROS1/latest/opencr_update.tar.bz2 
$ tar -xvf opencr_update.tar.bz2 

 

 


 


 

$ cd ./opencr_update
$ ./update.sh $OPENCR_PORT $OPENCR_MODEL.opencr

 

 

  • cd ./opencr_update:
    • cd는 Change Directory의 약자로, 디렉토리를 변경하는 명령어입니다.
    • ./opencr_update는 변경할 디렉토리의 경로입니다.
    • 이 명령어는 현재 작업 디렉토리에서 opencr_update라는 디렉토리로 이동합니다.
  • ./update.sh $OPENCR_PORT $OPENCR_MODEL.opencr:

 

1. /update.sh

./는 현재 디렉터리에 있는 파일을 실행하는 명령어입니다.

여기서는 현재 디렉터리에 있는 update.sh라는 쉘 스크립트를 실행합니다.

update.sh는 쉘 스크립트 파일의 이름입니다.

이 파일은 OpenCR 보드의 펌웨어 업데이트를 수행하는 명령어들을 포함하고 있습니다

2. $OPENCR_PORT

$OPENCR_PORT는 환경 변수입니다. 이 변수는 OpenCR 보드가 연결된 직렬 포트의 이름을 나타냅니다. 예를 들어, /dev/ttyUSB0 또는 /dev/ttyACM0와 같은 값일 수 있습니다.

쉘 스크립트 실행 시, 이 변수에 해당하는 실제 포트 이름이 대체됩니다.

3. $OPENCR_MODEL.opencr

$OPENCR_MODEL 역시 환경 변수입니다.

이 변수는 업데이트할 펌웨어의 모델명을 나타냅니다.

예를 들어, burger, waffle과 같은 값일 수 있습니다.

4. .opencr는 펌웨어 파일의 확장자입니다.

즉, $OPENCR_MODEL 변수의 값에 .opencr가 붙은 형태가 실제 펌웨어 파일의 이름이 됩니다.

예를 들어, burger.opencr 또는 waffle.opencr과 같은 파일 이름이 됩니다.

쉘 스크립트 실행 시, 이 변수에 해당하는 실제 모델명이 대체됩니다.

 

이 명령어는 전체적으로 OpenCR 보드의 펌웨어를 지정된 직렬 포트를 통해 업데이트하는 것을 의미합니다.

update.sh 스크립트는 $OPENCR_PORT와 $OPENCR_MODEL.opencr의 값을 받아서 해당 보드에 맞는 업데이트를 수행합니

다.

 


파일 실행 시 환경 변수 값 설정 이유.

 

  • 유연성과 포괄성: 환경 변수를 사용하면 실행할 파일이나 스크립트가 다양한 환경에서 동작할 수 있습니다. 예를 들어, 포트 번호나 설정 파일의 경로 등을 환경 변수로 지정하면, 환경이 달라져도 손쉽게 변경할 수 있습니다.
  • 보안과 안전성: 민감한 정보(예: 패스워드, 특정 디렉토리 경로)를 스크립트 파일에 하드코딩하지 않고 환경 변수로 관리하면, 보안에 더욱 강력하게 접근할 수 있습니다. 환경 변수는 보통 안전한 방식으로 관리되며, 특히 민감한 정보가 포함된 경우 설정 파일이나 시스템 환경 변수를 통해 안전하게 제어할 수 있습니다.
  • 유지보수와 관리 용이성: 환경 변수를 사용하면 설정을 중앙 집중 관리할 수 있어, 여러 개의 파일이나 스크립트에서 일관된 설정을 유지할 수 있습니다. 변경이 필요한 경우 환경 변수 값만 수정하면 되므로 유지보수가 편리합니다.
  • 자동화와 스크립팅: 특히 자동화된 배포나 설정 관리 시스템에서는 환경 변수를 사용하여 자동화된 작업을 지원합니다. 예를 들어, CI/CD 파이프라인에서는 환경 변수를 사용하여 각 단계에서 필요한 설정을 제공하고, 스크립트를 실행할 수 있습니다.

 


 

  1. After assembling TurtleBot3, connect the power to OpenCR and turn on the power switch of OpenCR. The red Power LED will be turned on.
  2. Place the robot on the flat ground in a wide open area. For the test, safety radius of 1 meter (40 inches) is recommended.
  3. Press and hold PUSH SW 1 for a few seconds to command the robot to move 30 centimeters (about 12 inches) forward.
  4. Press and hold PUSH SW 2 for a few seconds to command the robot to rotate 180 degrees in place.

 

 

'Autonomous Driving > Turtlebot3' 카테고리의 다른 글

'roscore' Error - 20.04 Ver, No GUI  (0) 2024.07.01
Noetic RoS Re-setup  (0) 2024.07.01
Master Connecting Procedure - 24 Ver  (0) 2024.07.01
Raspberry pi 3B+ OS setup  (0) 2024.07.01
Components  (1) 2024.07.01