로봇 경진대회에서 사용하기 위해 opencv를 처음 사용해보았는데 어떤 부분 위주로 사용했는지 기초부터 정리해봐야겠다.그냥 파이썬에서 실행하는 것과 ROS에서 opencv를 사용하는 게 섞여있다.이미지 불러오기img = cv2.imread('test.jpg')cv2.imshow('frame',img)cv2.waitkey(0)cv2.destroyAllWindows()#혹은while True: keycode = cv2.waitKey(0) if keycode == ord('x'): break비디오 불러오기video = cv2.VideoCapture('test.mp4')if not video.isOpened(): print("Video is unavailable :", filepath) exit(0)카메라에서..

matrix로 그래프 구현하기행 정점에서 열 정점(vertext)으로 가는 길(edge)이 있다면 1로, 없다면 0으로 구현하려고 한다.무방향 그래프라면 행렬이 대칭으로 나타날 것이다.그래프는 구조체로 선언하고 내부에 정점의 개수와 2차원 배열을 멤버 변수로 선언할 것이다.typedef struct GraphType { int n; // 정점의 개수 int adj_mat[MAX_VERTICES][MAX_VERTICES];} GraphType;필요한 함수initinsert_vertexinsert_edgeprint_adj_mat함수 설명1) init// 그래프 초기화 void init(GraphType* g){ int r, c; g->n = 0; for (r = 0; radj_mat[r][c] = 0;}이중..
서비스 서버, 클라이언트 만들기 (service_server.py)서비스 서버의 구조서버 노드 만들기(클래스)init 정의서버를 만드는 함수 self.create_service(만든 서비스 타입, 이름, 실행함수)callback 함수 정의 (response 반환)client 로부터 request 받으면 실행main 함수객체화spin 실행shutdownif 문서비스 서버 만들기구독, 발행 노드를 만들때는 create_subscription, create_publisher를 이용했던 것처럼 이번에는 create_service를 이용한다.multi_spawn이란 이름의 MultiSpawn 데이터 타입의 서비스를 호출?callback 함수에서는 request와 response를 받고from my_first_pa..

서비스 정의 만들기srv 폴더 만들기메시지 패키지 (my_first_package_msgs) 에 srv 폴더 만들기메시지 만들때는 msg 만들었다면 서비스는 srv 폴더를 만듦srv 파일 만들기원하는 .srv 파일을 만듦메시지 msg는 종류가 한 가지 이지만 서비스는 request와 response로 두 가지이기에 구분이 필요함--- 구분자 이용하여 구분을 하는 것임int64 num---float64[] xfloat64[] yfloat64[] thetaCMakeLists.txt 수정이전에 만들었던 msg 파일과 마찬가지로 srv 파일을 알려줌 find_package(rosidl_default_generators REQUIRED)rosidl_generate_interfaces(${PROJECT_NAME} ..

이전에 대회에 나갔을 때 기존에 있는 패키지를 바탕으로 코드를 수정하면서 원하는 방향으로 로봇이 움직이도록 만들었다. 이때 내가 처음부터 작성한 코드가 아니기에 조금만 수정해도 오류가 발생했다. 코딩, 프로그래밍을 한 것이 처음이었기에 이때부터 디버깅이라고 해야할지 로그를 남기는 것의 필요성이 중요하게 다가왔다. 하지만 ROS에서 로그를 남기는 방법이 다양해서 어떤 방법을 사용할지 몰라 그냥 print를 이용했었다. ㅎㅎ 이번에 로그 관련 강의가 올라와 이 부분이 궁금해 먼저 글을 써보려고 한다.우선 혹시 모르기 때문에 rqt 관련 파일?을 설치한다.sudo apt install ros-humble-rqt*터틀심 실행하고 rqt를 실행하자!플러그인 - 로깅 - 콘솔 선택rqt 플러그인으로 로그를 관찰할 ..
항상 그랬듯 새로운 파이썬 파일 만들고서는 setup.py 수정하기setup.py에서 엔트리 포인트를 추가해주어야 함 두 가지 토픽을 구독하는 노드 만들기import rclpy as rp from rclpy.node import Nodefrom turtlesim.msg import Posefrom geometry_msgs.msg import Twistfrom my_first_package_msgs.msg import CmdAndPoseVelclass CmdAndPose(Node): def __init__(self): super().__init__('turtle_cmd_pose') self.sub_pose = self.create_subscription(Pose, '/turt..

메시지 정의 패키지 만들기패키지는 src 폴더에서 만들어야한다.ros2 pkg create --build-type ament_cmake my_first_package_msgs이전에 패키지를 만들 때에는 ament_python을 썼는데c++ 문법을 쓰진 않지만 ament_python이 메시지 빌드가 안되기 때문기존에 만든 에서 사용할 메시지를 정의할 것이기에_msgs 라는 이름의 패키지를 만듦왜 데이터 타입이 있는 패키지를 따로 분리해서 만드냐?메시지만 따로 빌드할 수 있다로봇의 버전이 달라도 원격 pc에서 핸들링이 쉽다..?새로운 패키지가 만들어졌음을 볼 수 있다.setup.py 대신 CMakeLists.txt 파일이 있다.메시지 정의 파일 만들기만든 패키지 폴더에 들어가서 msg 폴더를 만든다.그리고..

ROS2 노드 만들고 실행해보기 1ROS2 패키지 만들기워크스페이스 만들고 빌드하기학습용 워크스페이스 폴더를 만들고 패키지를 만들어 봄폴더를 하나 만들고 그 안에 src 폴더를 하나 더 만듦mkdir -p ~/ros2_ws/src하위 폴더까지 한studentstory.tistory.com 이전 글에서와 마찬가지로 노드를 만들어보려고 한다.이전에는 구독 노드를 만들었다면 이번에는 topic을 발행하는 노드이다.topic 발행 노드import rclpy as rp from rclpy.node import Nodefrom geometry_msgs.msg import Twistclass TurtlesimPublisher(Node): def __init__(self): super().__init..
- Total
- Today
- Yesterday
- 카카오페이
- 알뜰 요금제
- f-91w
- 시계 줄
- 북문
- 문서 스캔
- 맛집
- 교체
- 타란튤라
- 리브엠
- 할인
- 네이버페이
- Liiv M
- f-94w
- 티스토리챌린지
- a모바일
- 계산방법
- 알뜰폰요금제
- mealy
- 리브모바일
- 파스타
- 배송기간
- 10만포인트
- 방어동작
- 메쉬 밴드
- 알리익스프레스
- 방향장
- 카시오
- 경북대
- 오블완
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |