이전 글에서는 matrix 와 연결리스트로 그래프를 구현하는 방법에 대해 알아봤다. C언어 행렬과 연결리스트로 그래프 구현하기matrix로 그래프 구현하기행 정점에서 열 정점(vertext)으로 가는 길(edge)이 있다면 1로, 없다면 0으로 구현하려고 한다.무방향 그래프라면 행렬이 대칭으로 나타날 것이다.그래프는 구조체로 선언하studentstory.tistory.com 이번에는 그래프에서 탐색을 어떻게 C언어로 구현하는지 써보려고 한다.이전 글에서도 말했지만 DFS, BFS는 search이지만 실제로는 travarsal, 즉 순회를 설명할 것이다..깊이 우선 탐색 Depth-firstmatrix로 구현된 그래프에서 깊이 우선으로 탐색하는 방법단순히 그래프를 구현하는 방법은 이전 글에서 작성하였기에 ..
이진탐색트리 Binary Search Tree이진 탐색 트리는 효율적인 탐색을 위한 트리이다.부모의 왼쪽노드 있는 값은 부모보다 값이 작아야하며 오른쪽 노드에 있는 값은 부모보다 값이 크도록 한다.이진탐색트리 binary search tree 를 구현하기 위한 구조체는 다음과 같다.두 자식노드를 가리킬 수 있도록 left와 right가 있다.typedef struct TreeNode { int key; struct TreeNode *left, *right;} TreeNode;필요한 함수searchnew_nodeinsert_nodemin_value_nodedelete_nodeinorder 탐색함수 설명1) search특정 key 값을 가진 노드를 찾기위한 함수다.TreeNode * search(TreeNo..
로봇 경진대회에서 사용하기 위해 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)카메라에서..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/GxCkF/btsKNZ85Idf/eVccRcsUaSQB5B44aEYAR1/img.png)
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..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b0C9Gn/btsKLlZKUoK/Cq6tu6wcEwYRhEhBfHDCk0/img.png)
서비스 정의 만들기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} ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/MNCK6/btsKI20jBUv/ERTm2h9UWHTmfyvqM36RvK/img.png)
이전에 대회에 나갔을 때 기존에 있는 패키지를 바탕으로 코드를 수정하면서 원하는 방향으로 로봇이 움직이도록 만들었다. 이때 내가 처음부터 작성한 코드가 아니기에 조금만 수정해도 오류가 발생했다. 코딩, 프로그래밍을 한 것이 처음이었기에 이때부터 디버깅이라고 해야할지 로그를 남기는 것의 필요성이 중요하게 다가왔다. 하지만 ROS에서 로그를 남기는 방법이 다양해서 어떤 방법을 사용할지 몰라 그냥 print를 이용했었다. ㅎㅎ 이번에 로그 관련 강의가 올라와 이 부분이 궁금해 먼저 글을 써보려고 한다.우선 혹시 모르기 때문에 rqt 관련 파일?을 설치한다.sudo apt install ros-humble-rqt*터틀심 실행하고 rqt를 실행하자!플러그인 - 로깅 - 콘솔 선택rqt 플러그인으로 로그를 관찰할 ..
- Total
- Today
- Yesterday
- 메쉬 밴드
- 계산방법
- 배송기간
- 문서 스캔
- 카시오
- 리브모바일
- 오블완
- 리브엠
- f-91w
- 파스타
- 교체
- mealy
- 10만포인트
- 할인
- f-94w
- 경북대
- 방향장
- a모바일
- 맛집
- 카카오페이
- 티스토리챌린지
- 타란튤라
- 시계 줄
- 북문
- 네이버페이
- 알리익스프레스
- 알뜰 요금제
- 알뜰폰요금제
- 방어동작
- Liiv M
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |