본문 바로가기
Robot/ROS

[라이더] 리눅스에 대해 더 공부

by 9루트 2022. 2. 24.

실제 개발에서는 리눅스를 많이 쓴다. 리눅스 > 맥 > 윈도우 랄까..

 

리눅스 운영체제 안에 우분투, 레드헷, suse, debian이 있다.

리눅스가 윈도우보다 더 안정적이다.

저사양 고효율이며 다중 사용자 및 다중 처리 시스템이지만 반면 기술 지원이 부족하고 특정 하드웨어 지원이 부족하다.

-> STACKOVER FLOW 사이트나 레딧? 이라는 사이트에서 기술 보조해주는 정도..

그래서 오히려 최신 컴퓨터나 노트북을 사면 오히려 리눅스가 잘 동작 안할 수 있다.

또한 C언어로 이루어진 커널로 이식성이 좋다. 따라서 저급언어로 짜여져있어 컴퓨터와 대화가 수월하다.

유연성과 확장성이 좋다. 하지만 사용자의 숙련된 기술이 요구되고 대부분의 언어는 영어이다.

 

새로운 걸 배워야 한다면 영어로 된 자료만 접하게 될 것이다.

 

 

커널(www.kernel.org)

시스템의 하드웨어, 다양한  프로세스와 메모리 관리

 

터미널이라고 보면된다.

sh, ash, bash, csh 등 다양한 셀 존재

명령어 해석기로 사용자와 os간의 인터페이스를 해석한다.

쌤은 제트쉘을 쓴다. 우리는 bash라는 쉘을 이용한다.

 

유저 -> 쉘 -> 커널 -> 하드웨어 로 명령 전달한다.

 

터미널

우리는 틸릭스라는 터미널을 쓴다.

컴퓨터와 사용자 간의 소통을 위한 인터페이스

ctrl shift w 하면 종료

alt shift 방향키로 크기 조정

alt 방향키 커서 이동

ctrl shift t 새로운 터미널 탭 생성

오타를 줄이기 위해, 점검을 위해 탭을 잘 써야 한다.

ctrl page up/page down 이전 /다음 터미널 탭으로 이동

 

 

 

pwd : 현재 폴더의 위치

절대 경로:  pwd하면 나오는 경로

상댁 경로: ./ 이용하여 쓴다.  현재 폴더 안의

cd ./catkin_ws/src/

cd catkin_ws/src/

이런 식으로 쓴다.

 

cd ../../workspace 이런 식으로 상위폴더로 올라간다.

 

echo $home : 홈 디렉토리로 이동한다.

cd /

하늘 색은 폴더

초록색은 실행권한이 있어 실행할 수 있는 폴더

청록색은 바로가기 링크를 의미한다.

ls -la를 치면 모든 파일 관련 정보가 뜬다.

bin: 바이너리 폴더, 실행할 수 있는 파일 저장해놓은 폴더, 이진수로 이루어져 있어 바로 실행이 가능한 파일을 모아놓은 폴더

모든 bash 명령어들이 있다.

dev : 디바이스 폴더. 리눅스는 모든 입출력 장치를 파일로 관리한다,  ttyusb 이런식으로 연결 장치들이 표시된다.

etc: 기타파일

lib : 라이브러리 파일 모아놓은 폴더

lost+found : 접근 권한이 없다. 백업 파일들을 저장해서 복구할 수 있도록 한다.

컴퓨터 작동 잘 안되면 백업이고 뭐고 그냥 새로 우분투 설치하는 게 좋다.

따라서 lost+found 는 리눅스에서 도움이 안 된다.

sud cd lost+found는 실행 안됨.

 

media와 mnt(마운트)는 유일하게 접근할 수 있는 저장 장치

opt: 옵션

proc : 프로세스로 하드웨어

cat cpuinfo: 하드웨어 정보가 뜬다.

cat meninfo: 자치하는 공간 용량 표시

root: 관리자의 폴더로 접근할 수 없다.

snap: 다운로드 폴더

srv : 서비스 폴더

usr: 유저라는 폴더 안에 직접 라이브러리를 설치한다. 유저의 bin 폴더로 설치한 파일들이 먼저 이동된다.

var: 값이 바뀌는 파일들이 있다.

 

 

Resource temporarily unavailable: 기다리거나 재부팅하자.

 

리눅스 명령어

import mat

dir(math) 하면 메스라는 라이브러리로 사용할 수 있는 함수들을 알려준다.

bash는 현재 리눅스의 표준 셀이다.

 

source ~/.bashrc

sudo subl .bashrc

alias sb="source ~/.bashrc"

alias eb="sudo subl ~/.bashrc"

alias sds="source devel/setup.bash"

echo hello 넣고

source ~/.bashrc  하면 hello가 뜬다.

alias sb="source ~/.bashrc"

"sds = source devel/setup.bash"

 

source

 

 

history: 과거 명령어들을  보여준다.

 

/bin  man alias 치면 메뉴얼 없다고 나오네..

man ls을 치면 ls 메뉴얼이 나온다.

또는 ls --help를 해도  나온다.

ls -l : 리스트로 출력된다.

ls -a : 파일명 앞에 . 이 붙인 숨긴 파일이 모두 난열된다.

ls -la : 리스트로 숨긴 파일까지 모두 표시된다.

ls -lat : 최근 수정한 내용부터 시간 순으로 정렬된다.

ls -t: 수정 날짜 순서대로 출력해준다.

ls -latF:  별 붙은 실행 파일과 /가 붙은 폴더와 아무것도 없는 일반 파일(검정)이 나온다. 색으로 알기 때문에 딱히 중요하진 않다.

 

 

 

kw-cobot@kwcobot-HGDT-Series:~$ mkdir test
kw-cobot@kwcobot-HGDT-Series:~$ cd test
kw-cobot@kwcobot-HGDT-Series:~/test$ ls
kw-cobot@kwcobot-HGDT-Series:~/test$ cd ..
kw-cobot@kwcobot-HGDT-Series:~$ rm -rf test
kw-cobot@kwcobot-HGDT-Series:~$ mkdir test && cd test
kw-cobot@kwcobot-HGDT-Series:~/test$ touch test2.txt
kw-cobot@kwcobot-HGDT-Series:~/test$ ls
test2.txt
kw-cobot@kwcobot-HGDT-Series:~/test$ touch test4.txt
kw-cobot@kwcobot-HGDT-Series:~/test$ touch text3.txt
kw-cobot@kwcobot-HGDT-Series:~/test$ ls
test2.txt  test4.txt  text3.txt
kw-cobot@kwcobot-HGDT-Series:~/test$ chomod +x text1.txt

Command 'chomod' not found, did you mean:

  command 'chmod' from deb coreutils

Try: sudo apt install <deb name>

kw-cobot@kwcobot-HGDT-Series:~/test$ chmod +x text1.txt
chmod: 'text1.txt'에 접근할 수 없습니다: 그런 파일이나 디렉터리가 없습니다
kw-cobot@kwcobot-HGDT-Series:~/test$ chmod +x text3.txt
kw-cobot@kwcobot-HGDT-Series:~/test$ ls
test2.txt  test4.txt  text3.txt
kw-cobot@kwcobot-HGDT-Series:~/test$ ls -la
합계 8
drwxrwxr-x  2 kw-cobot kw-cobot 4096  2월 24 11:16 .
drwxr-xr-x 26 kw-cobot kw-cobot 4096  2월 24 11:16 ..
-rw-rw-r--  1 kw-cobot kw-cobot    0  2월 24 11:16 test2.txt
-rw-rw-r--  1 kw-cobot kw-cobot    0  2월 24 11:16 test4.txt
-rwxrwxr-x  1 kw-cobot kw-cobot    0  2월 24 11:16 text3.txt
kw-cobot@kwcobot-HGDT-Series:~/test$ mkdir test_folder1
kw-cobot@kwcobot-HGDT-Series:~/test$ ls -la
합계 12
drwxrwxr-x  3 kw-cobot kw-cobot 4096  2월 24 11:18 .
drwxr-xr-x 26 kw-cobot kw-cobot 4096  2월 24 11:16 ..
-rw-rw-r--  1 kw-cobot kw-cobot    0  2월 24 11:16 test2.txt
-rw-rw-r--  1 kw-cobot kw-cobot    0  2월 24 11:16 test4.txt
drwxrwxr-x  2 kw-cobot kw-cobot 4096  2월 24 11:18 test_folder1
-rwxrwxr-x  1 kw-cobot kw-cobot    0  2월 24 11:16 text3.txt

 

d: 디렉터리 표시

rwx : 읽고 쓰고 실행 권한이 있다.

파일 소유자(kw-cobot)의 권한이 앞에 세 자리로 표시된다.

pc에 등록된 다른 구성원들은 뒤에 세자리로 표시된다.

마지막 rwx는 그 외 pc 외부 사람들의 권한을 보여준다.는

관리자는 모두 실행 권한이 있기 때문에 따로 적진 않는다.

관리자와 소유자의 차이는 뭘까?

 

파일 실행할 때 파일 이름을 치면 되는데

./text3.txt로 실행해야 한다. 꼭 점 슬래쉬를 붙여주자.

./ 현재 경로에 있음을의미한다. 

./test_folder1/ 를 치면 bash에서는

 

chmod

1.기본 사용법

test라는 폴더에서

-x 하면 권한 뺏어오는 것임

chmod u+x text2.txt

로 하면 맨 앞 user에만 실행 권한이 들어간다.

chmod g+x text2.txt

chmod o+x text2.txt

 

모두에게 권한을 줄 때

chmod a+x text2.txt

 

권한 뺏을 때

chmod ug+x text2.txt

 

2. 폴더 안의 파일에 실행 권한 주고 싶을 때

chmod -R +x text(폴더명)

ls -la text2.txt

chmod 777 text2.txt (모든 권한을 다 준다.)

chmod 664 text2.txt : 이게 기본 옵션이다.

또는 774도 상관없다. 770도 상관없다.

sudo chmod는 쓰지 말자.

 

sudo chmod -R 777 / 절대 쓰지 말자

sudo rm -rf / 은 절대 쓰지 말자

 

 

 

printenv : 환경변수로 등록된 것들 바꿀 수 있다.

각각의 언어에 따라 어디서 가져오는지 경로를 알려준다. (환경변수를 알려준다.)

printenv | grep PATH

grep은 PATH라는 문구가 들어간 표가 되도록 하자.

printenv | grep -i PATH

는 대소문자 구분없이 표시가 된다.

 

 

cd -를 하면 이전 폴더로 간다.

 

 

 

지우기

rm text.txt

rm  -r test_folder1/ :안에 있는 파일을 순차적으로 모두 지워라.

recursive 스스로 계속 부른다.

-r 대신 -rf를 쓰면 강제적으로 안에 있는 파일을 지우는 것으로 쓸 수 있다.

 

mkdir test/test/test/test 안됨

mkdir -p test/test/test/test 는 가능하다.

parent 옵션으로 부모부터 순서대로 만들 때 사용한다.

sudo apt purge 패키지이름 : 패키지 삭제

sudo apt install 패키지 이름 : 패키지 생성

apt를 붙이는 이유: apt list를 빼고는 sudo와 붙여 다닌다. 관리자(root)가 관리하기  때문에 sudo를 붙여줘야 한다.

 

 

 

cp

cp -r test2 test3

파일 또는 폴더를 복사하는 명령어

 

mv

cp 오리지널파일 복사파일

mv  오리지널파일 이동파일

이름바꿀 때도 mv사용

mv test hello_world: test라는 폴더 이름을  hello_worldㄹ 바꿔준다.

cp는 꼭 -r 써주자

mv는 -r 써주지 않아도 된다.

 

sudo apt install ros-melodic-rqt-robot-monitor

sudo apt purge ros=melodic-desktop-full

sudo apt install --fix broken: 오류가 났는지 확인

apt list update ??

sudo apt upgrade

sudo apt install --only--upgrade : 설치 다시 해준다.

 

 

기타 -----------------------------------

sudo vi /etc/modprobe.d/blacklist-noveau.conf

vi: 에디터 이름, vi, nano 같은 표준 에디터를 불러온다. 리눅스의 기본 에디터 vi/ nano/ emacs 세 개 에디터가 있다.

vi에디터로 modprobe.d/blacklist-noveau.conf 파일을 열어라

nano 추천한다.

gedit 편집기는 잘 쓰지 않음

 

kw-cobot@kwcobot-HGDT-Series:~/test$ hostname -I
114.70.60.28 

SPHERE.PY 코드 리뷰

 

TImer의 역할

1.0/10초마다 콜백함수를 실행해라

oneshot = True로 해두면 한 번만 실행된다.

가독성을 위해 넣는다.

 

event란?

Timer event: 타이머가 울렸을 때의 시간을 저장한다.

print(event.last_duration) : 마지막 콜백함수가 실행된 다음의 시간을 알려준다.

 

 

laser scan과 cloud point의 차이

여러 점을 표현한다는 점에서 공통 되지만

데이터를 표현하는 점에서 차이

laser scan: 극좌표계를 사용, r, theta

cloud point: x,y,z 좌표계를 사용

rosmg show PointCloud

 두번째 차이는 레이저 스캔은 어떻게 해도 삼차원을 표현할 수 없다. 즉 2차원 라이더에서만 사용 가능하다.

포인트 클라우드는 삼차원 점을 표현할 수 있다.

실제로 사용하는 건 포인트 클라우드2

 

 

 

stamp 와 frame_id 역할

frame_id의 역할

rviz 창에 점을 하나 보낸다.

rostopic pub /hello geometry_msg/PointStamped "header":

frame_id는 해당 좌표의 이름을 의미한다.

point1과 point2를 같은 화면에서 보려면

rosrun tf static_transform_publiser 3 5 0 0 0 0 position1 position2 100

100ms마다 출력해준다.

위 코드를 쳐줌으로써 position1로부터  x방향 3미터 y방향으로 5미터 이동한 점이 position2가 된다.

 

stamp의 역할

워크 스페이스에서

rostopic echo/testpoint1를 치면 스템프가 없음을 볼 수 있다.

여러 피시와 센서를 사용하면 몇 이상 지나면 데이터가 쓸모 없음을 알려주는 데이터이다.

실시간서이 중요한 코드에서는 사용한다.

일반적인 시각화에는 사용하지 않는다.

 

 

 

 

 

 

 

 

 

 

'Robot > ROS' 카테고리의 다른 글

참고 자료  (0) 2022.02.25
[simulator] Detecting 장애물 오픈 소스  (0) 2022.02.24
[라이더] rviz에서 자동차를 따라가는 sphere 좌표 찍기  (0) 2022.02.24
[Lidar]  (0) 2022.02.23
우분투 원격 제어  (0) 2022.02.22