실제 개발에서는 리눅스를 많이 쓴다. 리눅스 > 맥 > 윈도우 랄까..
리눅스 운영체제 안에 우분투, 레드헷, 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 |