728x90

자율주행/ROS python (xytron 강의) 12

슬라이딩 윈도우 기반 차선인식

1. Image Read == 카메라 영상신호를 이미지로 읽기 2. Warping == 원rms 변환으로 이미지 변형. 4점을 지정해서 저번에 했던 perspective 를 진행함 3. Gaussian Blur == 노이즈 제거 4. Threshold == 이진 이미지로 변환 , cvtColor 를 통해 BGR 을 HLS으로 포맷 변환후 이진화 처리 5. Historgram == 히스토그램에서 차선의 x 좌표 위치 추출 6. Sliding Window == 슬라이딩 윈도우 좌우 x 좌표에 9개 씩 쌓기 7. Polyfit == 2차 함수 그래프로 차선 그리기 8. 차선 영역 표시 == 원본 이미지에 차선 영역 겹치게 오버레이 #!/usr/bin/env python # -*- coding: utf-8 -*..

Rosbag file을 통해 비디오생성

1. rosbag 파일을 준비한다. 2. $rosbag play "준비된 rosbag파일" 을 실행한다. 3-1. $rosbag record -o cam_topic /usb_cam/image_raw 를 실행함으로서 특정 토픽(usb_cam/image_raw) 를 추출해와서 새로운 rosbag 파일을 생성한다. 3-2. $rosrun image_view video_recorder image:='/usb_cam/image_raw' _filename:='track2_tony.avi' _fps:=30 을 통해 비디오로 생성해줄수도 있다. callback 함수에서 bridge.imgmsg_to_cv2 함수를 통해서 주어진 msg 데이터를 opencv가 처리할수있게 변환해서 넣어줍니다. if cv_image.siz..

8자 주행 ,ultrasonic 내 코드 정리

8자 주행 -> converter -> odom 이 하나의 프로세스 결과이다. 우선 converter에게 바퀴의 각도(angle) 과 바퀴의 굴러가는 속도 100을 topic으로 쏴줍니다. 그리고 일정한 시간이되면 바퀴의 각도를 반대방향 angle로 틀어줍니다. 그 다음 converter에서 받아온 topic의 speed를 input_speed 에 넣어주고 바퀴의 회전속도에 곱해줘서 hello_xycar.position 의 3,4번째에 넣어줍니다. 바퀴의 방향또한 hello_xycar.postion 의 1,2,번째 에 넣어줍니다. imu파일에는 euler angle 형식으로 정보가 들어있기에 quaternion_from_euler 함수를 통해 quaternion으로 바꾸어 줍니다. wheel_speed는..

자이카 ROS 패키지

각종센서들이 여러 토픽을 /auto_drive 노드에게 보내주고 그것을 처리하여 /xycar_motor 노드에게 토픽을 쏴주어 컨트롤 하는 방식이다 YOLO 를 구성하고있는 darkent을 통해서 사람을 detect하고 lidar를 통해 거리를 측정한 정보를 /human_track 노드에 넣어주고 처리하여 xycar_motor 토픽을 발행한다. usb_cam노드에서 compress된 이미지를 안드로이드 카메라 ROS노드에게 보내준다. 안드로이드에서 방향과 속도를 입력받아서 최종적으로 xycar_mtor에게 토픽의 형태로 전달을 해준다. Base == 고정 부분 , 아래에 검은 상자 Link == 관절에 연결되는 긴 원통 부분 Joint == 링크를 연결하는 부위로 관절 부위 회전하는 방향및 한계가 존재함..

ROS 과제 답안

1. 노드간 동기화 문제 해결 , 첫번쨰 메시지가 수신이 안되는경우 sender_serial.py 에서 pub.get_num_connection 을 통해서 1이 될떄까지 헛돌게 하면된다. 1:N의 통신도 마찬가지이다 3이될떄까지 헛돌게 하면된다. 2. 데이터 크기에 따른 전송속도는 어떻게 되는가? 큰 파일을 보낼수록 속도는 늦어진다. 3. 도착하는 데이터를 미처 처리하지 못하면 어떻게 되는가? subscriber 의 큐사이즈를 늘리면 아무리 publishing 이 빨라도 흘림없이 다 처리 할 수 있다. 4. 주기적 발송에서 타임슬롯을 오버하면 어떻게 되는가? 이런식으로 벗어나게 된다 5. ROS 노드의 순차 실행 while True 문에서 자신의 이름에 해당하는 메세지가 올떄까지 돌고있다가 인터럽트 방식..

ROS day3

code analysis rospy.init_node('teacher') == 많은 노드들을 관리하고 통합하는 것이 ROS프레임워크 가 하는일이고 그것을 python으로 만든 것이 rospy 라이브러리이다. ros 시스템상에서 노드들이 topic을 주고 받기 위해서는 노드에 고유의 이름을 할당해야 한다. def init_node( name, argv= None, anonymous=False , log_level=None, disable_rostime=False , disable_rosout=False, disable_signals=False, xmlrpc_port=0, tcpros_port=0): 두번째 인자는 argv인데 사용자가 지정한 argument를 넘겨 받을 때 사용. 타입은 string의 li..

728x90