Programming 45

오일러와 쿼터니언

오일러 각도(Euler Angle) 오일러 각도는 x, y, z 등 3개의 축을 기준으로 회전시키는 각도계를 의미한다. 오일러 각도는 짐벌락(Gimbal-Lock)이라는 문제가 있어 모든 각도 변환을 표현하는데 한계가 있기 때문에 보완하여 만들어진게 쿼터니언(Qauternion)이다. 설명하자면, 아래와 같이 x, y, z축을 가진 오브젝트가 있고 화살표가 가리키는 방향을 유의해서 볼 때, x축(빨강)을 90도 회전하고, y축(초록)을 90도 회전하면 z축(파랑)과 x축(빨강)이 한 축으로 겹치면서 한쪽 축에 대한 계산이 불가능해지는데, 이 현상을 짐벌락이라고 한다. 이러한 짐벌락 현상이 생기는 이유는 오일러 각도가 자체적으로 설정되어있는 순서로 해당 축들을 개별적으로 계산하기 때문이다. (예를 들면, ..

Programming/ROS 2022.02.10

Vector 알아보기

벡터의 정의 - 벡터(Vector)는 크기(magnitude)와 방향(direction)으로 정의되는 값으로, 크기와 방향이 같으면 어디에 존재하든 같은 벡터이다. - 크기와 방향을 모두 가진 수량을 벡터값 수량(Vector-Valued Quantity이라고 한다. - 벡터값 수량의 예로는 크기와 방향을 가진 힘, 변위 그리고 속도 등이 있다. 벡터를 그릴 때 위치는 중요하지 않다. 왜냐하면 위치를 바꾸어도 벡터의 크기와 방향은 변하지 않기 때문이다. 또한 벡터를 다른 곳으로 이동해도 벡터의 의미는 변하지 않는다. 두 벡터의 길이와 방향이 같을 때 그 두 벡터를 서로 상등(Equal)하다 라고 할 수 있다. 좌표계 상에서의 벡터 좌표계 상에서 벡터는 공간에 맞게 X, Y Z 좌표로 수치적인 표현이 가능해..

Programming/ROS 2022.02.09

ROS 카메라 원격 설정

카메라가 연결된 PC - 카메라가 연결된 PC를 ROS master로 지정한다. - ROS_MASTER_URI 와 ROS_HOSTNAME 을 같은 네트워크 변수로 수정한다. - master PC는 ROS_MASTER_URI 와 ROS_HOSTNAME 에 사용된 IP가 동일하다. $ gedit ~/.bashrc export ROS_MASTER_URI = http://[master_pc_ip]:11311 export ROS_HOSTNAME = [current_pc_ip] - roscore를 실행하고, 터미널 창에서 uvc_camera_node를 실행한다. $ roscore $ rosrun uvc_camera uvc_camera_node 이미지를 받을 PC - 이미지를 받을 PC에도 동일한 설정을 한다. $ ..

Programming/ROS 2022.02.07

ROS 폴더 및 파일 구성

파일 구성 - /build : 빌드 관련 파일 - /devel : msg, srv 헤더 파일과 사용자 패키지 라이브러리 실행 파일 - /src : 사용자 패키지 사용자 패키지 - ~/catkin_ws/src : 사용자 소스 코드의 공간이다. 이 폴더에서 사용자가 개발한 ROS 패키지나 다른 개발자가 개발한 패키지를 저장하고 필드할 수 있다. - 사용자 패키지의 구성은 아래와 같다. /include : 헤더 파일 /launch : roslaunch에 사용되는 launch 파일 /node : rospy용 스크립트 /msg : 메세지 파일 /src : 코드 소스 파일 /srv : 서비스 파일 CMakeLists.txt : 빌드 설정 파일 package.xml : 패키지 설정 파일

Programming/ROS 2022.02.07

ROS 명령어 간단 정리

- roscd : 위치한 ros 패키지의 폴더로 이동 - rosls : 해당 ros 패키지 내부 폴더의 파일 목록을 확인하는 명령어 - rosed : ros 패키지 내부 파일의 편집이 가능한 명령어(기본적으로 vim을 사용) - roscp : ros 패키지 내부 파일의 복사가 가능한 명령어 - rospd : 디렉토리 인덱스에 파일을 추가 - rosd : 디렉토리 인덱스 확인 - roscore : master를 실행하는 명령어 - rosrun : 패키지의 노드를 실행하는 명령어 - roslaunch : 여러 개의 노드 및 master가 없을 경우, master도 함께 실행하는 명령어 - rosclean : ROS 로그 파일을 검사하거나, 파일 시스템 리소스를 제거 및 정리하는 명령어 - rostopic :..

Programming/ROS 2022.01.26

ROS 통신 1

ROS 내에서는 노드 사이의 데이터 통신을 메세지를 이용하며, 통신 방식으로는 Topic, Service, Action등이 있다. 메세지는 필드타입과 필드네임으로 구성된다. 1. Topic - 단방향 통신으로 연속적으로 데이터를 송수신하는 경우에 사용한다.(ex. 센서 데이터) - 한 번 접속 시, 지속적으로 데이터를 송수신할 수 있으며, Publisher는 데이터의 송신 시점을 지정할 수 있다. - 하나의 Topic에 대해, 여러 개의 Publisher와 Subscriber가 존재할 수 있으나, 권장하지는 않는다. - *.msg 라는 확장자를 사용한다. # geometry_msgs/Twist.msg Vector3 linear Vector3 angular 2. Service - 양방향 통신으로 노드 간의..

Programming/ROS 2022.01.26

파이썬 내장 함수

abs abs(x)는 어떤 숫자를 입력받았을 때, 그 숫자의 절댓값을 리턴하는 함수이다. all all(x)sms 반복 가능한(iterable) 자료형 x를 입력 인수로 받으며, x의 요소가 모두 참이면 True, 거짓이 하나라도 있으면 False를 리턴한다. ※반복 가능한 자료형이란 for문으로 그 값을 출력할 수 있는 것을 의미한다. (리스트, 튜플, 문자열, 딕셔너리, 세트) >>> all([1, 2, 3]) True any any(x)는 반복 가능한(iterable) 자료형 x를 입력 인수로 받으며, x의 요소 중 하나라도 참이 있으면 True, x가 모두 거짓일 때에만 False를 리턴한다. (리스트 안의 0은 거짓) >>> any([1, 2, 3, 0]) True divmod divmod(a,..

Programming/Python 2022.01.05

오류 예외 처리 기법

try, except문 아래 코드는 오류 처리를 위한 try, except문의 기본 구조이다. try: --- except[발생 오류[as 오류 메시지 변수]]: --- 위 코드에서 [ ] 기호는 괄호 안에 내용을 생략할 수 있다는 표기법이다. 즉, except문은 3가지 방법으로 사용할 수 있다. 1. try, except만 쓰는 방법 try: ... except: ... 이 경우, 오류 종류에 상관없이 오류가 발생하면 except 블록을 수행한다. 2. 발생 오류만 포함한 except문 try: ... except 발생 오류: ... 이 경우, 오류가 발생했을 때 except문에 미리 정해놓은 오류 이름과 일치할 때만 except 블록을 수행한다. 3. 발생 오류와 오류 메시지 변수까지 포함한 exc..

Programming/Python 2022.01.05

__init__.py 의 용도

__init__.py 파일은 해당 디렉터리가 패키지의 일부 임을 알려주는 역할을 한다. 만약 패키지에 포함된 디렉터리에 __init.py 파일이 없다면 패키지로 인식되지 않는다. 아래 코드처럼 game.sound 패키지에서 모든 것(*)을 import하면 echo 모듈을 사용가능할 것 같지만, 오류가 발생한다. >>> from game.sound import * >>> echo.echo_test() Traceback (most recent call last): File "", line 1, in NameError: name 'echo' is not defined 특정 디렉터리의 모듈을 * 을 사용해서 import 할 때는 다음과 같이 해당 디렉터리의 __init__.py 파일에 __all__ 변수를 설정..

Programming/Python 2022.01.04

모듈

모듈이란, 함수나 변수 또는 클래스를 모아놓은 파일이다. 모듈은 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 파이썬 파일이라고도 한다. 모듈 만들기 아래와 같은 파일 mod1.py를 만들고 디렉터리에 저장하면, 이 mod1.py파일은 모듈이 된다. 즉, 파이썬 확장자 .py로 만든 파이썬 파일은 모두 모듈이다. # mod1.py def add(a, b): return a + b def sub(a, b): return a-b 모듈 사용하기 모듈 mod1.py를 불러오기 위해서 import mod1를 입력해준다. (.py는 붙이지 않는다.) 또한 작성된 모듈과 작성 중인 파일은 동일한 디텍터리에 있어야한다. 여기서 import는 이미 만들어 놓은 파이썬 모듈을 사용할 수 있게 해주는 명령어이다. ..

Programming/Python 2022.01.04