<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>UTF-404</title>
    <link>https://utf-404.tistory.com/</link>
    <description>이것저것 공부하고 정리하고 있습니다.</description>
    <language>ko</language>
    <pubDate>Mon, 8 Jun 2026 18:57:18 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>UTF-404</managingEditor>
    <image>
      <title>UTF-404</title>
      <url>https://tistory1.daumcdn.net/tistory/6480330/attach/11cb46edae6d43d3abacf65d82617736</url>
      <link>https://utf-404.tistory.com</link>
    </image>
    <item>
      <title>⌨️ CSTS 자격증</title>
      <link>https://utf-404.tistory.com/98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자격증 시리즈 4번째로 소개할 자격증은 &lt;b&gt;CSTS&lt;/b&gt;이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSTS란 소프트웨어 테스트에 대한 기술이론 지식을 갖추고, 테스트 계획, 설계, 실행, 종료 등 테스트 프로세스를 이해하며 테스트 케이스를 설계할 수 있는 능력의 유무를 입증하는 자격증이다. &lt;s&gt;(아래는 필자의 CSTS 자격증 이미지!!)&amp;nbsp;&lt;/s&gt; 필자는 이 자격증을 취득하기 위해 2주간 공부했던 기억이 있다. 정보처리기사를 준비하면서 내용이 겹치는 부분이기도 했고, 소프트웨어 테스트 관련 부분 과목에 deep 한 버전이라고 볼 수 있다. 설명에 앞서 이 자격증은 사실 내가 봐도 과유불급인 자격증이다. &lt;b&gt;저는 테스팅 회사에 꼭 들어가고 싶습니다!!&amp;nbsp;&lt;/b&gt;가 아니라면 있어도 그만 없어도 그만인 자격증인 느낌이랄까.. 개인적인 생각이다. &lt;s&gt;뭐 없는 것보다는 나을 거 같긴 한데..&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-09-23 오후 2.22.22.png&quot; data-origin-width=&quot;1804&quot; data-origin-height=&quot;1272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XwKQY/btsQJwVV3dx/SaprZubfhyrzm99PVFtmDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XwKQY/btsQJwVV3dx/SaprZubfhyrzm99PVFtmDK/img.png&quot; data-alt=&quot;CSTS 자격증&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XwKQY/btsQJwVV3dx/SaprZubfhyrzm99PVFtmDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXwKQY%2FbtsQJwVV3dx%2FSaprZubfhyrzm99PVFtmDK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;410&quot; height=&quot;289&quot; data-filename=&quot;스크린샷 2025-09-23 오후 2.22.22.png&quot; data-origin-width=&quot;1804&quot; data-origin-height=&quot;1272&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CSTS 자격증&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자격증에 대해 알아보자. CSTS도 크게 두 가지로 구분할 수 있는데, 일반 등급과 고급 등급으로 나뉜다. 고급 등급은 일반 등급을 취득해야만 응시 자격이 생기기에 무조건 일반 등급을 우선 취득하여야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특이점부터 가볍게 설명하자면 자격증 최소 조건이 일반 자격증에 비해 허들이 높다. 점수가 75점이 넘어야 합격이며 필기시험 1회를 통해 취득이 가능하다. 참조서도 TTA 협회에서 발행한 책으로만 공부할 수 있고 다른 자료는 없던 것으로 기억한다. 그래서 TTA에서 나온 CSTS 관련 서적을 통해 공부하면 되고, 관련되어 학습하면 된다. 아래는 TTA에서 제공하는 책이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000001732437&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://product.kyobobook.co.kr/detail/S000001732437&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1759142668047&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;소프트웨어 테스트 전문가(CSTS) 가이드 | 한국정보통신기술협회(TTA) - 교보문고&quot; data-og-description=&quot;소프트웨어 테스트 전문가(CSTS) 가이드 | 『소프트웨어 테스트 전문가(CSTS) 가이드』는 〈테스트 개요〉, 〈테스트 설계기법〉, 〈테스트 프로세스〉, 〈SW테스트 전문가(CSTS) 자격시험 예제〉를 &quot; data-og-host=&quot;product.kyobobook.co.kr&quot; data-og-source-url=&quot;https://product.kyobobook.co.kr/detail/S000001732437&quot; data-og-url=&quot;https://product.kyobobook.co.kr/detail/S000001732437&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/WjDV1/hyZKAzfu8v/5o4igyC81ksjkVYKmY2C91/img.jpg?width=458&amp;amp;height=631&amp;amp;face=0_0_458_631,https://scrap.kakaocdn.net/dn/eh0Tms/hyZJy4yHeq/ptpkyIJ2rxRhWkpskWsueK/img.jpg?width=458&amp;amp;height=631&amp;amp;face=0_0_458_631&quot;&gt;&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000001732437&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://product.kyobobook.co.kr/detail/S000001732437&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/WjDV1/hyZKAzfu8v/5o4igyC81ksjkVYKmY2C91/img.jpg?width=458&amp;amp;height=631&amp;amp;face=0_0_458_631,https://scrap.kakaocdn.net/dn/eh0Tms/hyZJy4yHeq/ptpkyIJ2rxRhWkpskWsueK/img.jpg?width=458&amp;amp;height=631&amp;amp;face=0_0_458_631');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;소프트웨어 테스트 전문가(CSTS) 가이드 | 한국정보통신기술협회(TTA) - 교보문고&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;소프트웨어 테스트 전문가(CSTS) 가이드 | 『소프트웨어 테스트 전문가(CSTS) 가이드』는 〈테스트 개요〉, 〈테스트 설계기법〉, 〈테스트 프로세스〉, 〈SW테스트 전문가(CSTS) 자격시험 예제〉를&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;product.kyobobook.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 말하면 이 책은 전공자든 비전공자든 공부하기에는 큰 무리가 없다. 다만 전공자에게 추천해주고 싶은 것은 어차피 기사 자격증을 따야 한다면 이 자격증을 추천한다. 테스트 관련 부분에 대해서 좀 더 자세히 들어가는 부분이다 보니 공부하기가 수월한 부분들이 존재하기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생소한 자격증들이 참 많아진 시대인 거 같다. 자격증은 많을수록 좋고, 취업하려면 남들보다 가져야 할 스펙들이 점점 많아지는 시대이다. 그 스펙들은 기본이고, 개발자라면 코딩 테스트도 준비해야 하고 그 외 직군들도 여러 시험들이 준비가 필요하다고 들었다. 우리 모두 힘든 시기를 잘 버텨내고 모두가 행복하기를 바란다!!&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증</category>
      <category>csts</category>
      <category>자격증</category>
      <author>UTF-404</author>
      <guid isPermaLink="true">https://utf-404.tistory.com/98</guid>
      <comments>https://utf-404.tistory.com/98#entry98comment</comments>
      <pubDate>Mon, 29 Sep 2025 19:50:59 +0900</pubDate>
    </item>
    <item>
      <title>⌨️ SQLD 자격증</title>
      <link>https://utf-404.tistory.com/97</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자격증 시리즈의 3번째 글이다. 이번에 소개할 자격은 SQLD라는 자격증으로 말 그대로 &lt;b&gt;관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계한 특수 목적의 프로그래밍 언어&lt;/b&gt;에 대해 자격을 검증하는 시험이다. &lt;s&gt;(아래는 필자의 자격증 이미지)&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-09-05 오후 4.18.18.png&quot; data-origin-width=&quot;1188&quot; data-origin-height=&quot;1474&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YbF1A/btsQmq8OlDY/R44Jx5GPzIami0TM8wqH80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YbF1A/btsQmq8OlDY/R44Jx5GPzIami0TM8wqH80/img.png&quot; data-alt=&quot;SQLD 자격증 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YbF1A/btsQmq8OlDY/R44Jx5GPzIami0TM8wqH80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYbF1A%2FbtsQmq8OlDY%2FR44Jx5GPzIami0TM8wqH80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;409&quot; height=&quot;507&quot; data-filename=&quot;스크린샷 2025-09-05 오후 4.18.18.png&quot; data-origin-width=&quot;1188&quot; data-origin-height=&quot;1474&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;SQLD 자격증 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자는 2024년에 시험을 보았다. 이때 기존의 시험이 아니라 개정된 첫 해의 시험을 치르게 됐던 것으로 기억한다. &lt;s&gt;사실 개정이 되든 안되든 중요하지는 않았지만 기출문제가 의미가 없다는 것이 좀 흠이었다.&lt;/s&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그래서 SQLD가 대충 뭔지 알겠는데 그래서 따야 해요?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자격증을 소개하기 전 가장 처음 작성한 글에서 말했다시피 없는 것보다는 있는 게 낫다. 그리고 SQLD 상위 자격증인 SQLP의 시험 준비를 해보지는 않았지만 그것 또한 과목과 물어보는 난이도 자체가 다른 것으로 안다. 그것에 비해 SQLD는 기초적인 SQL에 관해 공부만 한다면 쉽게 자격증을 딸 수 있을 것으로 생각된다. 필자는 여러 자격증을 한 번에 같은 시즌에 준비했었는데 그중에 가장 마지막 시험이 SQLD였기에 공부를 4~5일 정도 하루에 3시간씩 정도 했던 것으로 기억한다. 그럴 수 있던 이유는 데이터 베이스 관련 수업을 수강했었고 그것을 이용한 학부 중간, 기말고사 그리고 실습 플로젝트도 했었기 때문에 사실상 기초 개념과 실제 쿼리가 조금은 쉽게 느꼈졌던 감이 있다. 물론 SQLD라고 해서 간단하게 볼 일은 아니다. 솔직히 말하면 Join 종류가 그렇게 많은지도 자격증 공부를 통해 알게 되었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말이 길어졌다. 그래서 시험은 어떻게 진행되는지 간단히 말하자면 필기시험으로 한 번만 보면 자격증은 나온다. 그리고 자격증 취득 1년 6개월 이후에 갱신 영상만 보면 자격증은 무기한으로 자격을 증명할 수 있는 자격증으로 바뀐다. 시험 자체는 고사장에서 그냥 일반 다른 실기 자격증처럼 OMR을 통해 볼 수 있게 되어있던 것으로 기억한다. 그전에 짚고 넘어가고 싶은 점은 생각보다 체감 난이도가 개인적으로는 높았던 것 같다. (합격을 못할 거 같은 데는 아니고 그냥 목표한 점수가 90점 넘겨보기 이런 걸로 생각했을 때) 새롭게 개정된 점도 있었고 기출문제가 거의 소용이 없었던 것이 좀 크게 작용했던 것으로 기억된다. 그렇다고 기출을 안 풀고 가자니 찜찜해서 3개년치를 풀긴 했지만, 가장 중요한 건 유튜브나 구글링을 통한 요약본 그리고 개념서 정도가 중요한 거 같다. 필자도 검색해 보니 유명한 교수님 수업도 있고, 홍쌤이라는 강사분도 계셨는데 뭐 결론은 듣다가 포기했다. 그냥 그 시간에 문제 푸는 게 나을 거 같다는 판단이 섰기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 전공자와 비전공자에 대해서 학습 방법에 대해 알려주자면 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전공자&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 자신이 데이터 베이스 관련 수업을 들었거나 일정 sql을 가지고 데이터 베이스 실습에 대한 경험이 있다면 기초 개념만 보고 문제를 풀면서 감을 익히는 것을 추천한다. 저학년이라면 급한 게 아니라 한다면 데이터 베이스 수업을 듣거나 따로 먼저 토이 프로젝트를 (DB가 포함된) 진행한 후에 자격증 시험 준비를 하는 것을 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;비전공자&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적으로 가장 생각을 많이 해봤다. 비전공자도 2~3주 정도면 자격증을 딸 수 있다는 후기도 봤지만.. 난 그건 아니라고 본다. 주야장천 그것만 보고 하루 종일 SQLD공부만 한다면 2~3주 정도 충분할 거 같지만 그것이 아니라면 필자가 생각하기에는 넉넉하게 한 달에서 한달 반 정도 천천히 개념을 익히고(추천 : 유튜브 활용) 문제를 풀어보는 것을 추천한다. 개인의 공부량의 차이라고 생각되지만 모두의 시간은 소중하니까.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 3번째 SQLD 자격증에 대해 알아보았다. 거창하게 자랑하듯 얘기하는 거 같아서 좀 그렇지만 사실 모두가 그렇다. 사실 필자는 엑셀을 쓸 줄 모른다. 물론 막일로 넣는 건 가능하지만 함수를 쓰고 뭐 편리한 단축어를 쓴다던지.. 왜냐하면 쓸 이유가 없기도 하고 굳이라는 생각에 쓰지 않았다. 그런 것처럼 모두가 자기가 익숙하지 않은 분야에 대한 무엇인가 공부를 하던 자격증을 취득하던 난 그것이 정말 대단하고 멋있는 일이라고 생각한다. 그러니 포기하지 말고 도전해 보자. 그리고 만약 떨어지더라도 상심하지 말자. 그냥 한번 더 보면 되는 거고 그러기 싫다면 그냥 좋은 경험 했다고 생각하면 되니까. 그럼 이번 글은 여기서 마치도록 하겠다.&lt;/p&gt;</description>
      <category>자격증</category>
      <author>UTF-404</author>
      <guid isPermaLink="true">https://utf-404.tistory.com/97</guid>
      <comments>https://utf-404.tistory.com/97#entry97comment</comments>
      <pubDate>Fri, 5 Sep 2025 17:06:15 +0900</pubDate>
    </item>
    <item>
      <title>⌨️ 리눅스 마스터 2급 자격증</title>
      <link>https://utf-404.tistory.com/96</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글은 2번째로 소개할 자격증인 리눅스 마스터 2급이다. 이 자격증의 가장 큰 포인트는 정말 쉽게 자격증을 취득할 수 있다는 장점이 있다. 리눅스라는 운영체제에 대해 어떤 것들이 있고 간단한 명령어와 사용방법 그리고 주요 개념들에 대한 검증받는 시험이다. &lt;s&gt;(필자가 생각하기에 리눅스 마스터라는 이름은 좀 거창하지 않나 싶다.)&amp;nbsp;&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자는 학부 복학 전 시험을 쳤는데 이때 중요한건 2급과 1급 난이도 차이가 좀 상당한 걸로 알고 있다. 실제로 1급에 대한 시험 준비를 해본 적이 없지만 들리는 소문에는 기사급 난이도라는 소문이 있었기에 이왕 볼 거 1급 봐야지!!라는 생각은 하지 않았으면 한다. 우선 들어가기 앞서 필자는 리눅스 CentOS와 Ubuntu에 대한 경험이 있었다는 점을 참고하면 좋을 거 같다. 이 시험도 필기와 실기 두 가지로 나뉘어 있다. &lt;s&gt;(아래는 필자의 자격증 이미지다.)&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-09-02 오후 5.40.23.png&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;1398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPBknP/btsQfDuA6Kp/dUrTx0PjDF8dtIE3E1sOHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPBknP/btsQfDuA6Kp/dUrTx0PjDF8dtIE3E1sOHK/img.png&quot; data-alt=&quot;리눅스 마스터 2급 자격증 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPBknP/btsQfDuA6Kp/dUrTx0PjDF8dtIE3E1sOHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPBknP%2FbtsQfDuA6Kp%2FdUrTx0PjDF8dtIE3E1sOHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;366&quot; height=&quot;461&quot; data-filename=&quot;스크린샷 2025-09-02 오후 5.40.23.png&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;1398&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;리눅스 마스터 2급 자격증 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;필기 편&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 필기에 대해 알아보자. 사실 필기는 신청 후 정해진 날짜 이전까지만 시험을 보면되는데, 이때 온라인으로 시험을 본다는 게 특징이다. 컴퓨터와 인터넷만 있다면 어디서든 시험을 볼 수 있다. 그리고 온라인 시험이라 사실상 오픈북 시험이라고 보면 된다. 필자는 어느 정도 개념이 있어기에 구글링을 통해 &lt;b&gt;리눅스 마스터 2급 요약본&lt;/b&gt;을 검색하여 시험에 나오는 개념을 한번 더 학습했다. 그리고 마찬가지로 시험 기출을 풀었던 기억이 있다. 문제 자체가 크게 어렵지 않았기 때문에 무난하게 통과할 수 있다. &lt;u&gt;(진짜 거짓말이 아니라 그냥 오픈북인 시험이다.)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;따라서 전공자이든 비전공자이든 필기에 대한 난이도는 나눌 필요가 전혀 없다고 당당히 말해주고 싶다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실기 편&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 중요한 실기는 다른 자격증 시험과 마찬가지로 고사장에 직접 가서 시험을 보게 된다. 실제로 시험을 보러 온 체험을 할 수 있다는 게 장점이려나. 여하튼 시험 자체는 솔직히 말하면 개념 공부를 아예 하지 않고 풀 수 없는 문제들이 대부분이다. 만약 공부를 하지 않았다면 기출문제를 닥치는 대로 풀고 외우는 방법도 있다. 하지만 진짜 말 그대로 최후의 수단이며, 이걸 나중에 실제로 써먹거나 면접에서 활용? 할 경우를 대비해서는 그런 공부법은 추천하지 않는다. 필자는 개인적으로 실제로 가장 간단한 우분투 환경을 직접 설치해 보고 터미널을 이용해서 직접 실습해 보는 것을 권장한다. 시험과 별개로 그런 면에서 자격증도 따고 이런 OS에서 이런 개념들이 동작을 하는구나 실제로 느낄 수도 있고 마당도 쓸고 동전도 줍고 그런 느낌적인 느낌.. 여하튼 말이 좀 길었는데 요약하자면 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실기 자체도 전공자 기준 1주일이면 될 것이라 판단되고 비전공자 기준으로도 2~3주 정도면 충분히 합격 가능한 시험이다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;리눅스&lt;/b&gt;에 관련해 솔직히 전공자들도 생소한 사람들이 많을 수 있다고 생각한다. 실제로 관심이 없다면 리눅스가 뭐야.. 먹는거야? 라는 말이 나올 정도라고 생각하기 때문에 나름 자격증에 대해 관심이 있다면 가성비가 정말 괜찮은 자격증이지 않나 싶다. 그래서 &lt;b&gt;결론은 필자는 당장 할 일은 없고 개발자는 하고 싶은데 뭐부터 하지 공부도 하고 있고, 프로젝트도 하고 있는데 자격증에 대한 자신감을 가지고 싶어요.&amp;nbsp;&lt;/b&gt;하는 사람에게 먼저 입문용 자격증으로 가장 추천하고 싶은 자격증이다. 자격증 시험자체는 쉽지만 실제로 GUI에 편의성으로 인해 CLI 환경에 익숙하지 않은 요즘에 이런 자격증을 취득하고, 겸사겸사 직접 실습도 해보는 그런 개발자가 되면 참 좋을 거 같다. 그럼 여기서 글을 마친다.&lt;/p&gt;</description>
      <category>자격증</category>
      <category>리눅스마스터2급</category>
      <category>리뷰</category>
      <category>자격증</category>
      <author>UTF-404</author>
      <guid isPermaLink="true">https://utf-404.tistory.com/96</guid>
      <comments>https://utf-404.tistory.com/96#entry96comment</comments>
      <pubDate>Tue, 2 Sep 2025 17:54:30 +0900</pubDate>
    </item>
    <item>
      <title>⌨️ 정보처리기사 자격증</title>
      <link>https://utf-404.tistory.com/95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째로 소개할 자격증은 바로 컴퓨터 관련 학과 혹은 직무에서 Default로 가지고 있는 &lt;b&gt;정보처리기사&lt;/b&gt; 자격증이다. &lt;s&gt;(아래는 필자의 자격증)&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-09-02 오후 3.59.31.png&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;1010&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LIn5e/btsQe73Bwei/5jNR4hrTvFbH4A0BimY7jK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LIn5e/btsQe73Bwei/5jNR4hrTvFbH4A0BimY7jK/img.png&quot; data-alt=&quot;정보처리기사 자격증 사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LIn5e/btsQe73Bwei/5jNR4hrTvFbH4A0BimY7jK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLIn5e%2FbtsQe73Bwei%2F5jNR4hrTvFbH4A0BimY7jK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;331&quot; height=&quot;466&quot; data-filename=&quot;스크린샷 2025-09-02 오후 3.59.31.png&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;1010&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;정보처리기사 자격증 사진&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그래서 정보처리기사 그게 뭐고 왜 필요한 건데?&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 간단하게 말하면 컴퓨터 관련 직종 즉 IT 관련 직종에서는 대부분 대기업을 제외하고서는 거의 정보처리기사 자격증을 우대 요건에 넣어둔 것을 확인할 수 있을 것이다. 그리고 이런 관련 학과에서는 사실상 졸업장과 비슷한 느낌의 자격증이다. &lt;b&gt;4년간 배운 내용&lt;/b&gt;을 토대로 배운 것을 곱씹으며 취득하는 과정을 밟는 것이라고 필자는 생각한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;정보처리기사는 크게 2가지 필기와 실기로 나뉜다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;필기 편&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 필기에 대해서 알아보자. 필기는 쉽게 생각하면 문제은행 형식의 문제 출제로 구성되어 있다. 여기서 알아야 할 게 있다.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&quot;그럼 CBT 사이트를 활용해서 문제만 주야장천 풀면 되겠네요?&quot;&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당연히 정답은 &quot;아니오.&quot;이다. 우리는 필기만 보고 끝나는 시험이 아니라 &lt;b&gt;최종적으로 실기까지 마쳐야 자격증을 받을 수 있기 때문&lt;/b&gt;에 기초 개념을 튼튼히 알아야 한다. 우선 원하는 필기책 한 권을 찾자. 필자는 과거 필기 교제로 수제비를 선택했었다. 뭐 사실 크게 다르지 않다고 본다. 그냥 수제비든 시나공이든 중요하지 않고 그냥 개념서 한 권을 사서 모든 과목을 3~5일 안에 완독 하는 걸 목표로 했다. 가볍게 이런 내용이 있구나 정도로 넘어가도 좋다. 그리고 필기 문제가 개념서에도 있으니 풀면서 오답하면서 개념을 한번 더 확인하는 형식으로 접근했다. 그리고 &lt;b&gt;가장 중요한 1 회독이 끝난 순간 바로 3개년치의 문제를 그냥 맨땅의 헤딩 느낌으로 필기 문제를 풀었다.&lt;/b&gt; 당연히 문제를 푼 나는 고득점은 아니었고,, &lt;b&gt;오답을 열심히 하면서 개념을 다시 한번 더 적립했다.&lt;/b&gt; 이때 &lt;b&gt;가장 중요한 건 애매한 개념도 다시 한번 더 확인하고 개념서에서 한번 더 확인하는 습관&lt;/b&gt;을 가졌다. 이 과정이 끝나고 개념서 2 회독차를 거쳤다. 그럼 이제 보다 빠르게 개념서가 이해되고 어떤 문제에 적용할지에 대한 감이란 게 생긴다. 그리고 다시 앞서 풀었던 3개년치와에 더해 4개년치까지 해서 다시 풀고 오답하고 이걸 반복해서 마지막에는 5개년치를 풀었던 기억이 있다. 그러다 보면 자연스레 개념은 정립되고 어떤 부분이 중요한지 감이 생기게 된다. 이렇게 3주 정도 했던 기억이 있다. &lt;s&gt;사실 마지막 가서는 문제 자체를 다 외워버리게 되어서 어느 년도 몇번 문제 아니야?라고 정도 외워버리긴 했지만..&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 시험 당일 필기는 당당하게 약 20분 정도만에 풀고 나왔다. 그리고 그 자리에서 합격 여부가 모니터에 나온다. 실제로 시험을 보면 기출이 상당 부분 나오기도 하지만 새로운 유형의 문제도 생각보다 나오기 때문에 다소 놀랐던 기억이 있다. 우리의 목표는 100점이 아니기 때문에 과락과 최소 점수 요건만 맞추면 된다. 그러니까 최대한 아는 문제를 틀리지 않는 게 가장 중요하다고 볼 수 있다. 필기는 필자 생각에 떨어지면 그냥 열심히 안 한 거고 최소한의 노력도 안 한 거라고 생각한다.. 진심으로!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;실기 편&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 가장 중요한 실기 편이다. 필기 시험을 보고 나서 거의 틈틈이 실기 준비를 했던 거 같다. 이것도 마찬가지로 실기 문제만 모아둔 책을 사서 풀었던 기억이 있다. CBT에서 문제 복원이 안된 최근 기출들을 문제집에서는 복원에서 제공해 줬기에 바로 한 권 사서 풀었던 기억이 있다. 확실히 실기는 필기에 비해 코딩을 할 줄 알아야 하고 그리고 그 문제 수 또한 코딩이 거의 30~50% 정도 차지한다. 그리고 나머지는 단답형으로 모두 개념에 대한 내용들이 출제된다. 그래서 실기부터는 개념을 꼼꼼하게 봐야 한다. 그래도 다행인 건 실기도 10% 많게는 20% 정도 기출에서 출제해 주는 경향이 있기 때문에 특히 개념 문제들은 더욱이 그렇다. 그래서 실기도 필기와 마찬가지로 최근 기출 및 약 5년 치 기출을 계속 풀고 오답하고 개념서를 정독하는 반복행위를 했던 것 같다. 사실 이렇게만 해도 대부분 재수 조금 더 가서 1년 안에는 결판 보는 거 같더라. &lt;s&gt;대부분 떨어지는 경우가 실기에서 한문제 정도 차이로 떨어지는데 이건 진짜 너무 슬픈 일이다.&amp;nbsp;&lt;/s&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 내리는 결론에 대해서 말해보면 다음과 같다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;전공자 기준은 솔직히 열심히 하면 된다.&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 솔직히 말하면 &lt;b&gt;비전공자 기준에서 필자가 생각하기에는 다소 난도가 있다고 생각&lt;/b&gt;된다. 전공자들은 관련 수업을 4년에 걸쳐 배웠고 &lt;s&gt;(필자도 자격증 준비하면서 대학생활 수업이 생각보다 도움이 되는구나..라고 생각함)&amp;nbsp;&lt;/s&gt; 그렇지 않은 분들은 다소 어려울 것이라고 생각한다. 과목에 대한 범위도 방대하고, 알아야 할 기본 개념들에 대해 생소한 단어들이 너무 많다고 생각이 든다. 그럼에도 불구하고 기사 자격증 중 가장 난이도가 쉽다고 하니까 최대한 하나쯤 가지고 있는 것이 좋지 않을까 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 첫 자격증으로 이렇게 &lt;b&gt;정보처리기사&lt;/b&gt;에 대해 알아봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 이걸 쓰면서 정말 난 글쓰고 정보를 주는데 도움이 없구나 싶긴 하지만, 이 글이 누군가에게는 꼭 도움이 되기를 바란다.&amp;nbsp;마찬가지로 필자가 Tip을 하나 주자면 필자는 &lt;b&gt;모든 자격증을 먼저 신청하고 공부하는 스타일&lt;/b&gt;이다. 그럼 어떻게든 공부하게 되더라. 정말이다. 이게 누군가가 바라봤을 때는 정말 안좋다고 비판할 수 있는 부분이지만서도, 결국에는 돈이 아까워서라도 하게 된다. 그럼 다음 글을 마치며 다음 글에서 만나 뵙기를 바란다.&lt;/p&gt;</description>
      <category>자격증</category>
      <category>자격증</category>
      <category>정보처리기사</category>
      <category>후기</category>
      <author>UTF-404</author>
      <guid isPermaLink="true">https://utf-404.tistory.com/95</guid>
      <comments>https://utf-404.tistory.com/95#entry95comment</comments>
      <pubDate>Tue, 2 Sep 2025 17:13:39 +0900</pubDate>
    </item>
    <item>
      <title>⌨️ 개발자 자격증</title>
      <link>https://utf-404.tistory.com/94</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;201&quot; data-origin-height=&quot;251&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8oSHQ/btsQje0tvC0/BXx0EY6LNKUHkRJG1qkWCk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8oSHQ/btsQje0tvC0/BXx0EY6LNKUHkRJG1qkWCk/img.jpg&quot; data-alt=&quot;코딩 밈&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8oSHQ/btsQje0tvC0/BXx0EY6LNKUHkRJG1qkWCk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8oSHQ%2FbtsQje0tvC0%2FBXx0EY6LNKUHkRJG1qkWCk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;201&quot; height=&quot;251&quot; data-origin-width=&quot;201&quot; data-origin-height=&quot;251&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코딩 밈&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 들어 나태한 자신을 되돌아보며, 자격증을 몇 가지 알아보던 중 필자가 취득한 자격증에 대해 소개하는 글을 작성해 볼까 한다. 필자가 취득한 자격증은 현재 작성일 기준으로 &lt;b&gt;정보처리기사&lt;/b&gt;, &lt;b&gt;CSTS&lt;/b&gt;, &lt;b&gt;SQLD&lt;/b&gt;, &lt;b&gt;리눅스마스터 2급&lt;/b&gt; 이렇게 총 4가지이다. &lt;span data-token-index=&quot;1&quot;&gt;(운전면허는 여기 넣으면 안 되니까 &lt;span&gt; &lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 카테고리를 만들게 된 이유는 개발직군에 종사하고 싶은 분들께 조금이라도 도움이 되고 싶다는 바람이 있기 때문이다. 2025년 2월 졸업하기 전 우연히 취업을 하게 된 나는 학부 생활 3, 4학년 동안 자격증과 블로그 등 여러 가지를 준비했었다. 자격증이 크게 의미가 있냐는 동기도 있었고, 자격증에 엄청난 시간을 투자해 여러 자격증을 취득하는 동기도 있었다. 필자는 후자에 가까울 거 같다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그래서 이 말을 하는 이유는 필자가 생각하기에는 자격증만큼 쉽게 자신의 능력을 증명할 수 있는 수단이 있을까?라는 생각을 전달하고 싶다. 시간대비 정말 효과적이고 증명하기 쉬운 수단이라고 생각한다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 내가 딴 자격증에 대한 리뷰를 솔직하고 조금은 직설적으로 전공자와 비전공자에 눈높이에 맞춰서 현실적으로 적어볼까 한다. 현재는 총 4가지에 대한 리뷰이겠지만 &lt;s&gt;요즘 들어 성취감이 전혀 없는 나는 자격증을 몇 개 따볼까 생각 중이기에 추가될 수 있다는 점..&amp;nbsp;&lt;/s&gt; 다른 자격증에 대한 리뷰들도 한번 남길 수 있는 그런 기회가 되었으면 하는 바람이 있기도 하다. 그럼 리뷰를 작성하러 가보도록 하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증</category>
      <author>UTF-404</author>
      <guid isPermaLink="true">https://utf-404.tistory.com/94</guid>
      <comments>https://utf-404.tistory.com/94#entry94comment</comments>
      <pubDate>Tue, 2 Sep 2025 15:54:14 +0900</pubDate>
    </item>
    <item>
      <title>ROS2 humble Node 이해!</title>
      <link>https://utf-404.tistory.com/93</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ros2-humble.png&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kRvpQ/btsO11I8hiu/5NkgPV9WI5p6ZyWJ7Vqan1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kRvpQ/btsO11I8hiu/5NkgPV9WI5p6ZyWJ7Vqan1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kRvpQ/btsO11I8hiu/5NkgPV9WI5p6ZyWJ7Vqan1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkRvpQ%2FbtsO11I8hiu%2F5NkgPV9WI5p6ZyWJ7Vqan1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;430&quot; height=&quot;117&quot; data-filename=&quot;ros2-humble.png&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고 : &lt;a href=&quot;https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Nodes/Understanding-ROS2-Nodes.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Nodes/Understanding-ROS2-Nodes.html&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1751504803421&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Understanding nodes &amp;mdash; ROS 2 Documentation: Humble  documentation&quot; data-og-description=&quot;You're reading the documentation for an older, but still supported, version of ROS 2. For information on the latest version, please have a look at Kilted. Understanding nodes Goal: Learn about the function of nodes in ROS 2, and the tools to interact with &quot; data-og-host=&quot;docs.ros.org&quot; data-og-source-url=&quot;https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Nodes/Understanding-ROS2-Nodes.html&quot; data-og-url=&quot;https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Nodes/Understanding-ROS2-Nodes.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Nodes/Understanding-ROS2-Nodes.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Nodes/Understanding-ROS2-Nodes.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Understanding nodes &amp;mdash; ROS 2 Documentation: Humble documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;You're reading the documentation for an older, but still supported, version of ROS 2. For information on the latest version, please have a look at Kilted. Understanding nodes Goal: Learn about the function of nodes in ROS 2, and the tools to interact with&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.ros.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;필요사항 : Ubuntu 22.04&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ROS2의 Node&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ROS의 각 노드는 topic, service, action 또는 매개변수를 통해 다른 노드와 데이터를 주고받을 수 있다. 아래의 그림을 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ros2_node.gif&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tgrhn/btsO1HSaUdO/BoRT1ZTOStkp8to8De7cGk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tgrhn/btsO1HSaUdO/BoRT1ZTOStkp8to8De7cGk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tgrhn/btsO1HSaUdO/BoRT1ZTOStkp8to8De7cGk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/tgrhn/btsO1HSaUdO/BoRT1ZTOStkp8to8De7cGk/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;854&quot; height=&quot;480&quot; data-filename=&quot;ros2_node.gif&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완전한 로봇 시스템은 여러 노드가 함께 작동하는 구조다. ROS2에서는 하나의 실행파일 (C++, Python 프로그램 등)에 하나 이상의 노드가 포함될 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Node 실제 실행해보기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 명령을 통해 패키지에 있는 실행 파일을 실행할 수 있다. 기본 구조는 다음과 같다.&lt;/p&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;ros2 run &amp;lt;package_name&amp;gt; &amp;lt;executable_name&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 사용했던 turtlesim을 통해 확인해 보자. turtlesim을 실행하려면 아래의 명령을 실행하면 되었다.&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;ros2 run turtlesim turtlesim_node&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 &lt;code&gt;package_name&lt;/code&gt;은 &lt;code&gt;turtlesim&lt;/code&gt;이고 , &lt;code&gt;excutable_name&lt;/code&gt;은 &lt;code&gt;turtlesim_node&lt;/code&gt; 다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 아직 우리는 노드 이름이 무엇인지 정확하게 알 수 없다. 다음 명령을 통해 우리는 현재 실행 중인 노드 목록을 확인할 수 있다. 새로운 터미널을 하나 더 열어보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;ros2 node list&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;ros2 node list&lt;/code&gt; 실행 중인 모든 노드의 이름을 표시한다. 특히 노드와 상호 작용하거나 여러 노드를 실행하는 시스템에서 노드를 확인해야 할 때 유용하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-03 오전 9.15.15.png&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;1054&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H1wtL/btsO3dhxxhC/5v0G6PktrUdhUdvxHKw0uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H1wtL/btsO3dhxxhC/5v0G6PktrUdhUdvxHKw0uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H1wtL/btsO3dhxxhC/5v0G6PktrUdhUdvxHKw0uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH1wtL%2FbtsO3dhxxhC%2F5v0G6PktrUdhUdvxHKw0uk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1432&quot; height=&quot;1054&quot; data-filename=&quot;스크린샷 2025-07-03 오전 9.15.15.png&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;1054&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 새로운 터미널을 열어서 다음 명령어를 실행해 보자. 그리고 다시 한번 더 &lt;code&gt;ros2 node list&lt;/code&gt; 명령도 해보자.&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;ros2 run turtlesim turtle_teleop_key&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 아래의 터미널의 ros2 node list 부분처럼 &lt;code&gt;/teleop_turtle&lt;/code&gt; 노드가 하나 더 생긴 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-03 오전 9.15.57.png&quot; data-origin-width=&quot;1435&quot; data-origin-height=&quot;1054&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wTyXU/btsO2HQVwaK/APJitrasQnsJTSGs8fwkK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wTyXU/btsO2HQVwaK/APJitrasQnsJTSGs8fwkK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wTyXU/btsO2HQVwaK/APJitrasQnsJTSGs8fwkK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwTyXU%2FbtsO2HQVwaK%2FAPJitrasQnsJTSGs8fwkK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1435&quot; height=&quot;1054&quot; data-filename=&quot;스크린샷 2025-07-03 오전 9.15.57.png&quot; data-origin-width=&quot;1435&quot; data-origin-height=&quot;1054&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Remapping&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리매핑을 사용하면 노드 이름, 토픽 이름, 서비스 이름 등의 기본 노드 속성을 사용자 지정 값으로 재할당할 수 있다. 이전 글에서는 리매핑을 통해 turtle_teleop_key cmd_vel 토픽 대상을 turtle2로 변경했었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;/turtlesim&lt;/code&gt; 이제 노드 이름을 다시 지정해 보자. 다음 명령어 실행하자.&lt;/p&gt;
&lt;pre class=&quot;stata&quot;&gt;&lt;code&gt;ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;turtlesim을 다시 호출하면 또 다른 turtlesim 창이 열리는데, 이제 ros2 node list를 찍어보면 3개의 노드 이름이 표시되는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-03 오전 9.16.39.png&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;1054&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VZ2l4/btsO0BxTdCQ/zYAeyizHBl9RrIGnGgiD3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VZ2l4/btsO0BxTdCQ/zYAeyizHBl9RrIGnGgiD3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VZ2l4/btsO0BxTdCQ/zYAeyizHBl9RrIGnGgiD3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVZ2l4%2FbtsO0BxTdCQ%2FzYAeyizHBl9RrIGnGgiD3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1430&quot; height=&quot;1054&quot; data-filename=&quot;스크린샷 2025-07-03 오전 9.16.39.png&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;1054&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ros2 노드 정보&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 노드의 이름을 알았으니 다음 명령을 통해 노드에 자세한 정보를 확인할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;ros2 node info &amp;lt;node_name&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 &lt;code&gt;ros2 node info /my_turtle&lt;/code&gt; 실행하면 아래의 그림처럼 관련 정보가 뜨게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-03 오전 9.17.23.png&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;699&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xQaLu/btsO3cCXlmM/ShkxxwOevlzayWBbVucwo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xQaLu/btsO3cCXlmM/ShkxxwOevlzayWBbVucwo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xQaLu/btsO3cCXlmM/ShkxxwOevlzayWBbVucwo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxQaLu%2FbtsO3cCXlmM%2FShkxxwOevlzayWBbVucwo0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;925&quot; height=&quot;699&quot; data-filename=&quot;스크린샷 2025-07-03 오전 9.17.23.png&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;699&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ros2 node info는 subscribers, publishers, services 그리고 액션에 관해 작업 목록을 반환한다. 즉, 해당 노드와 상호 작용하는 ROS 그래프 연결이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약하자면 노드는 로봇 시스템에서 단일 모듈식 목적을 수행하는 기본적인 ROS2 요소이다. 이번에는 활성 노드 이름을 검색하고 단일 노드를 분석하는 방법에 대해 알아보았다. 이러한 도구는 복잡한 실제 로봇 시스템의 데이터 흐름을 이해하는데 필수적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글에서는 &lt;code&gt;topic&lt;/code&gt;에 대해 알아볼 것이다.&lt;/p&gt;</description>
      <category>ROS2(humble)</category>
      <category>humble</category>
      <category>ROS2</category>
      <author>UTF-404</author>
      <guid isPermaLink="true">https://utf-404.tistory.com/93</guid>
      <comments>https://utf-404.tistory.com/93#entry93comment</comments>
      <pubDate>Thu, 3 Jul 2025 10:03:15 +0900</pubDate>
    </item>
    <item>
      <title>ROS2 turtlesim &amp;amp; rqt 알아보기</title>
      <link>https://utf-404.tistory.com/92</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ros2-humble.png&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mSTeJ/btsO0TYcK1d/YPRu6VLBncBxIvFmCEWqP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mSTeJ/btsO0TYcK1d/YPRu6VLBncBxIvFmCEWqP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mSTeJ/btsO0TYcK1d/YPRu6VLBncBxIvFmCEWqP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmSTeJ%2FbtsO0TYcK1d%2FYPRu6VLBncBxIvFmCEWqP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;430&quot; height=&quot;117&quot; data-filename=&quot;ros2-humble.png&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 : &lt;a href=&quot;https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-Turtlesim.html&quot;&gt;https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-Turtlesim.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1751419049929&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Using turtlesim, ros2, and rqt &amp;mdash; ROS 2 Documentation: Humble  documentation&quot; data-og-description=&quot;Open a new terminal and source ROS 2 again. At this point you should have three windows open: a terminal running turtlesim_node, a terminal running turtle_teleop_key and the turtlesim window. Arrange these windows so that you can see the turtlesim window, &quot; data-og-host=&quot;docs.ros.org&quot; data-og-source-url=&quot;https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-Turtlesim.html&quot; data-og-url=&quot;https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-Turtlesim.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bUKElT/hyZfxX0kY9/rxYW4hkZjVzEAT9qzuNct0/img.png?width=582&amp;amp;height=522&amp;amp;face=0_0_582_522,https://scrap.kakaocdn.net/dn/bQJNSR/hyZf4BqyhM/Ibv9PR4k8qjbKO6qu6Pz5K/img.png?width=583&amp;amp;height=519&amp;amp;face=0_0_583_519,https://scrap.kakaocdn.net/dn/bb6pzR/hyZf0Z7ql4/EaqySucbOsugBZ10XwSv80/img.png?width=499&amp;amp;height=527&amp;amp;face=0_0_499_527&quot;&gt;&lt;a href=&quot;https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-Turtlesim.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-Turtlesim.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bUKElT/hyZfxX0kY9/rxYW4hkZjVzEAT9qzuNct0/img.png?width=582&amp;amp;height=522&amp;amp;face=0_0_582_522,https://scrap.kakaocdn.net/dn/bQJNSR/hyZf4BqyhM/Ibv9PR4k8qjbKO6qu6Pz5K/img.png?width=583&amp;amp;height=519&amp;amp;face=0_0_583_519,https://scrap.kakaocdn.net/dn/bb6pzR/hyZf0Z7ql4/EaqySucbOsugBZ10XwSv80/img.png?width=499&amp;amp;height=527&amp;amp;face=0_0_499_527');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Using turtlesim, ros2, and rqt &amp;mdash; ROS 2 Documentation: Humble documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Open a new terminal and source ROS 2 again. At this point you should have three windows open: a terminal running turtlesim_node, a terminal running turtle_teleop_key and the turtlesim window. Arrange these windows so that you can see the turtlesim window,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.ros.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;필요 사항 : Ubuntu 22.04&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Turtlesim&lt;/b&gt;은 ROS2를 활용하기 위한 가벼운 시뮬레이터이다. ROS2가 가장 기본적인 수준에서 수행하는 작업을 부여주며, 나중에 실제 로봇이나 로봇 시뮬레이션을 어떻게 활용할 것인지에 대한 기본기를 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ros2 tools&lt;/b&gt;는 사용자가 ROS 시스템을 관리하고, 살펴보고, 상호 작용할 수 있도록 도와준다. 시스템 및 시스템 우녕의 다양한 측면을 타켓팅하는 여러 명령을 지원한다. 예를 들어 노드 시작, 매개변수 설정, 토픽 수신 대기 등 다양한 용도로 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;rqt&lt;/b&gt;는 ROS2 GUI 도구이며, rqt에서 수행하는 모든 작업은 명령어로 수행할 수 있지만, GUI로 사용자가 편리하게 사용할 수 있는 방식을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 노드, 토픽, 서비스와 같은 핵심 개념을 알아보고, 이러한 개념은 간단히 설명한 글을 참고하면 좋을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://utf-404.tistory.com/83&quot;&gt;https://utf-404.tistory.com/83&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1751419054690&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;  ROS2(humble) 노드와 노드 간 통식 방식&quot; data-og-description=&quot;  ROS2(humble)에서 노드란 무엇일까?Node : 기본 실행 단위이며, 독립적인 작업을 수행한다.특징각각의 노드는 한 가지 기능을 수행한다.노드 간 통신은 주로 토픽, 서비스, 액션으로 이루어진다.&amp;nbsp;&quot; data-og-host=&quot;utf-404.tistory.com&quot; data-og-source-url=&quot;https://utf-404.tistory.com/83&quot; data-og-url=&quot;https://utf-404.tistory.com/83&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cmWheM/hyZf6eWAFI/gc2sqLbE03izi9scKLlpSk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/vh4L6/hyZf60kOaT/6mq5chJWkXsUXOvA15VMs1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bRzntq/hyZgbm2o1s/WpV2cBqiI4AlxRkmKSKfxK/img.png?width=1024&amp;amp;height=1024&amp;amp;face=0_0_1024_1024&quot;&gt;&lt;a href=&quot;https://utf-404.tistory.com/83&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://utf-404.tistory.com/83&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cmWheM/hyZf6eWAFI/gc2sqLbE03izi9scKLlpSk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/vh4L6/hyZf60kOaT/6mq5chJWkXsUXOvA15VMs1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bRzntq/hyZgbm2o1s/WpV2cBqiI4AlxRkmKSKfxK/img.png?width=1024&amp;amp;height=1024&amp;amp;face=0_0_1024_1024');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;  ROS2(humble) 노드와 노드 간 통식 방식&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  ROS2(humble)에서 노드란 무엇일까?Node : 기본 실행 단위이며, 독립적인 작업을 수행한다.특징각각의 노드는 한 가지 기능을 수행한다.노드 간 통신은 주로 토픽, 서비스, 액션으로 이루어진다.&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;utf-404.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. turtlesim 설치하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 ROS2-humble에 맞는 turtlesim을 설치해보자.&lt;/p&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install ros-humble-turtlesim&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pkg가 제대로 설치되었는지 확인하기 위해 아래의 명령을 실행해보자. 그럼 turtlesim의 실행 파일 목록이 반환된다.&lt;/p&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;ros2 pkg executables turtlesim

-----------------결과------------------
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. turtlesim 시작하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;turtlesim 시작 시 터미널에 아래의 명령어로 시작한다.&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;ros2 run turtlesim turtlesim_node&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 명령을 실행할 경우 노드에서 전송된 메시지가 표시된다. 여기서 기본 거북이의 이름과 생성 위치 좌표를 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.10.14.png&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2bOGK/btsOZhTRSH0/955H6PFP4CftJfXLF2zwm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2bOGK/btsOZhTRSH0/955H6PFP4CftJfXLF2zwm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2bOGK/btsOZhTRSH0/955H6PFP4CftJfXLF2zwm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2bOGK%2FbtsOZhTRSH0%2F955H6PFP4CftJfXLF2zwm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;992&quot; height=&quot;86&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.10.14.png&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.10.23.png&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRYHpo/btsOZ9HxO4a/EDrgfo4RTDuPQlo4dnemZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRYHpo/btsOZ9HxO4a/EDrgfo4RTDuPQlo4dnemZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRYHpo/btsOZ9HxO4a/EDrgfo4RTDuPQlo4dnemZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRYHpo%2FbtsOZ9HxO4a%2FEDrgfo4RTDuPQlo4dnemZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;467&quot; height=&quot;505&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.10.23.png&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. turtlesim 사용하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 기존 터미널을 두고, 새로운 터미널을 열어서 새로운 명령어를 하나 실행해보자.&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;ros2 run turtlesim turtle_teleop_key&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 터미널에는 총 두가지의 명령이 실행되고 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;turtlesim_node&lt;/code&gt;, &lt;code&gt;turtle_teleop_key&lt;/code&gt; 이렇게 총 두가지가 실행되어야 하고, 마지막으로 거북이가 보이는 화면 이렇게 총 3가지가 화면에 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.14.30.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;956&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRKvZx/btsO0udwae6/m6NglKKAkGLdERdUu302mK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRKvZx/btsO0udwae6/m6NglKKAkGLdERdUu302mK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRKvZx/btsO0udwae6/m6NglKKAkGLdERdUu302mK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRKvZx%2FbtsO0udwae6%2Fm6NglKKAkGLdERdUu302mK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1002&quot; height=&quot;956&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.14.30.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;956&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.15.21.png&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dOBb3P/btsOZXmIFFP/ntHjKFfKbeDzKpkVKuZPsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dOBb3P/btsOZXmIFFP/ntHjKFfKbeDzKpkVKuZPsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dOBb3P/btsOZXmIFFP/ntHjKFfKbeDzKpkVKuZPsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdOBb3P%2FbtsOZXmIFFP%2FntHjKFfKbeDzKpkVKuZPsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;467&quot; height=&quot;502&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.15.21.png&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 매번 turtlesim_node를 실행할 때마다 랜덤하게 모양과 색이 결정되는데, 동작에는 전혀 지장 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;turtle_teleop_key 터미널을 켜두면, 아래와 같은 메시지가 출력된다. 말 그대로 사용하는 방법에 대해 말해주며, 이제 거북이를 움직일 수있다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;Reading from keyboard
-------------------------------
Use arrow keys to move the turtle.
Use G|B|V|C|D|E|R|T keys to rotate to absolute orientations. 'F' to cancel a rotation. 
'Q' to quit.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;list&lt;/code&gt; 는 각 명령 (node, topic, service, action)의 하위 명령을 사용하면 어떤 것들이 실행되고 있는지 확인할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;ros2 node list
ros2 topic list
ros2 service list
ros2 action list&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.16.16.png&quot; data-origin-width=&quot;1003&quot; data-origin-height=&quot;957&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0BgFt/btsO0jbZnwj/BJxnMX03x9MkGjtRb88RI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0BgFt/btsO0jbZnwj/BJxnMX03x9MkGjtRb88RI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0BgFt/btsO0jbZnwj/BJxnMX03x9MkGjtRb88RI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0BgFt%2FbtsO0jbZnwj%2FBJxnMX03x9MkGjtRb88RI0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1003&quot; height=&quot;957&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.16.16.png&quot; data-origin-width=&quot;1003&quot; data-origin-height=&quot;957&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.16.58.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;959&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bd3hwW/btsOZRf1x8h/pjcxABTsJxCVg811MKVR4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bd3hwW/btsOZRf1x8h/pjcxABTsJxCVg811MKVR4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bd3hwW/btsOZRf1x8h/pjcxABTsJxCVg811MKVR4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbd3hwW%2FbtsOZRf1x8h%2FpjcxABTsJxCVg811MKVR4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1002&quot; height=&quot;959&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.16.58.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;959&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.17.22.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;961&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/emj5QB/btsO1wOWrLV/KgRzUi76srvKFkg0Kk5tk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/emj5QB/btsO1wOWrLV/KgRzUi76srvKFkg0Kk5tk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/emj5QB/btsO1wOWrLV/KgRzUi76srvKFkg0Kk5tk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Femj5QB%2FbtsO1wOWrLV%2FKgRzUi76srvKFkg0Kk5tk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1000&quot; height=&quot;961&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.17.22.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;961&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. rqt 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 새 터미널을 열어 &lt;code&gt;rqt&lt;/code&gt; 플러그인을 설치하자.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install '~nros-humble-rqt*'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 끝난 후 rqt를 실행해보자.&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;rqt&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. rqt 사용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rqt를 처음 실행하면 창이 비어 있을 수 있다. 하지만 이건 당연하다. 내가 어떤 것을 선택해서 호출할지 정하지 않았으니 말이다. 상단 메뉴에서 pulgins &amp;gt; Services &amp;gt; Service Caller 를 선택하자. 그럼 Service 라는 단어 옆에 선택 메뉴가 생긴다. 이때 Service 옆에 있는 새로 고침 버튼을 사용해보자.(왼쪽) 이제 turtlesim 노드에 어떤 서비스가 있는지 확인해보고 &lt;code&gt;/spawn&lt;/code&gt; 서비스를 선택하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 이 서비스를 활용해 거북이를 하나 더 생성할 것이다. 아래와 같이 &lt;code&gt;turtle2&lt;/code&gt;를작성해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.19.03.png&quot; data-origin-width=&quot;593&quot; data-origin-height=&quot;643&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5QJN7/btsOZiSNFy7/FZbX3WKpPmv2ShA0agO4a1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5QJN7/btsOZiSNFy7/FZbX3WKpPmv2ShA0agO4a1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5QJN7/btsOZiSNFy7/FZbX3WKpPmv2ShA0agO4a1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5QJN7%2FbtsOZiSNFy7%2FFZbX3WKpPmv2ShA0agO4a1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;593&quot; height=&quot;643&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.19.03.png&quot; data-origin-width=&quot;593&quot; data-origin-height=&quot;643&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.20.31.png&quot; data-origin-width=&quot;1063&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0hECE/btsOZxIMBc2/xGCI2WnB3gZV0MKZspZC00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0hECE/btsOZxIMBc2/xGCI2WnB3gZV0MKZspZC00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0hECE/btsOZxIMBc2/xGCI2WnB3gZV0MKZspZC00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0hECE%2FbtsOZxIMBc2%2FxGCI2WnB3gZV0MKZspZC00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1063&quot; height=&quot;550&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.20.31.png&quot; data-origin-width=&quot;1063&quot; data-origin-height=&quot;550&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 rqt 창의 오른쪽 상단에 있는 호출에서 turtle2를 선택해 서비스를 호출한다. 성공적으로 한다면 x, y 에 입력한 좌표 값에 맞게 거북이가 새롭게 생성되는 것을 확인할 수 있다. 또한 rqt 서비스 목록도 새로 고침하면 새로운 &lt;code&gt;turtle2&lt;/code&gt; 와 관련된 서비스가 추가 된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 &lt;code&gt;turtle1&lt;/code&gt; 서비스를 사용해 움직이는 경로에 대한 색상과 선의 두께를 설정해보자. 아래의 사진과 같이 설정을 하고 움직여보면 기존과 다른 색상과 두께의 선으로 움직임을 확인할 수 있다. 여기서 이제 우리는 한 가지 의문이 생긴다. &lt;code&gt;turtle1&lt;/code&gt;은 움직이지만 &lt;code&gt;turtle2&lt;/code&gt;는 어떻게 해야 움직일 수 있을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에 대한 답은 &lt;code&gt;Remapping&lt;/code&gt;에 있다. 이제 &lt;code&gt;turtle2&lt;/code&gt;를 동작을 위해서 &lt;code&gt;cmd_vel&lt;/code&gt; 토픽을 다시 매핑해야 한다. 새로운 터미널을 열어서 다음과 같이 명령해보자.&lt;/p&gt;
&lt;pre class=&quot;stata&quot;&gt;&lt;code&gt;ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 그럼 아래의 이미지와 같이 turtle2가 움직이는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.29.19.png&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;983&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baSlNi/btsO0f8vChS/KT94NFaLtZqaHHik09s9DK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baSlNi/btsO0f8vChS/KT94NFaLtZqaHHik09s9DK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baSlNi/btsO0f8vChS/KT94NFaLtZqaHHik09s9DK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaSlNi%2FbtsO0f8vChS%2FKT94NFaLtZqaHHik09s9DK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;595&quot; height=&quot;983&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.29.19.png&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;983&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.48.26.png&quot; data-origin-width=&quot;590&quot; data-origin-height=&quot;975&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cweRFX/btsOZvKWHhy/m6eQE09rXIMhMpgWCFitL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cweRFX/btsOZvKWHhy/m6eQE09rXIMhMpgWCFitL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cweRFX/btsOZvKWHhy/m6eQE09rXIMhMpgWCFitL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcweRFX%2FbtsOZvKWHhy%2Fm6eQE09rXIMhMpgWCFitL0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;590&quot; height=&quot;975&quot; data-filename=&quot;스크린샷 2025-07-01 오후 1.48.26.png&quot; data-origin-width=&quot;590&quot; data-origin-height=&quot;975&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약하자면 우리는 이번에 rqt와 turtlesim을 이용해서 간단하게 topic과 node에 대한 것이 무엇인지는 정확히 모르지만 그것을 통해 실제로 움직임을 제어하고 여러 시스템에 관여하여 제어할 수 있다는 것을 알았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 다음에는 실제로 ROS2에서 중요한 부분 중 하나인 &lt;code&gt;Node&lt;/code&gt;에 대해 알아볼 것이다.&lt;/p&gt;</description>
      <category>ROS2(humble)</category>
      <category>humble</category>
      <category>ROS2</category>
      <author>UTF-404</author>
      <guid isPermaLink="true">https://utf-404.tistory.com/92</guid>
      <comments>https://utf-404.tistory.com/92#entry92comment</comments>
      <pubDate>Wed, 2 Jul 2025 10:17:19 +0900</pubDate>
    </item>
    <item>
      <title>ROS2-humble 환경 구성</title>
      <link>https://utf-404.tistory.com/91</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지난 글에서 우리는 &lt;code&gt;ROS2-humble&lt;/code&gt; 설치 방식에 대해 알아보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://utf-404.tistory.com/90&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://utf-404.tistory.com/90&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1751336074144&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;ROS2-humble 설치 및 삭제&quot; data-og-description=&quot;벌써 입사한 지 반년이 넘었다. 이제 다시 한번 더 ROS2의 개념을 좀 더 확실하게 다 잡자는 마음에 이렇게 ROS2-humble에 대해 작성하게 되었다. 처음에는 이게 뭐지..라는 생각이었지만 하다 보니 &quot; data-og-host=&quot;utf-404.tistory.com&quot; data-og-source-url=&quot;https://utf-404.tistory.com/90&quot; data-og-url=&quot;https://utf-404.tistory.com/90&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cOF1pc/hyZfsoGq36/5DcAFgAgSckrMzV9EtlFo0/img.png?width=430&amp;amp;height=117&amp;amp;face=0_0_430_117,https://scrap.kakaocdn.net/dn/q2zN5/hyZf1R5S3n/Ck2CdfEAkWaDFYZn46a1NK/img.png?width=430&amp;amp;height=117&amp;amp;face=0_0_430_117,https://scrap.kakaocdn.net/dn/h907u/hyZfXPGkkt/nfbUwWf3uh3BE7DcoIbN41/img.png?width=1024&amp;amp;height=1024&amp;amp;face=0_0_1024_1024&quot;&gt;&lt;a href=&quot;https://utf-404.tistory.com/90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://utf-404.tistory.com/90&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cOF1pc/hyZfsoGq36/5DcAFgAgSckrMzV9EtlFo0/img.png?width=430&amp;amp;height=117&amp;amp;face=0_0_430_117,https://scrap.kakaocdn.net/dn/q2zN5/hyZf1R5S3n/Ck2CdfEAkWaDFYZn46a1NK/img.png?width=430&amp;amp;height=117&amp;amp;face=0_0_430_117,https://scrap.kakaocdn.net/dn/h907u/hyZfXPGkkt/nfbUwWf3uh3BE7DcoIbN41/img.png?width=1024&amp;amp;height=1024&amp;amp;face=0_0_1024_1024');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ROS2-humble 설치 및 삭제&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;벌써 입사한 지 반년이 넘었다. 이제 다시 한번 더 ROS2의 개념을 좀 더 확실하게 다 잡자는 마음에 이렇게 ROS2-humble에 대해 작성하게 되었다. 처음에는 이게 뭐지..라는 생각이었지만 하다 보니&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;utf-404.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ros2-humble.png&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vdsJe/btsOY6pTB00/1wOSzHSScAWDFJs9KaFy4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vdsJe/btsOY6pTB00/1wOSzHSScAWDFJs9KaFy4K/img.png&quot; data-alt=&quot;ros2-humble img&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vdsJe/btsOY6pTB00/1wOSzHSScAWDFJs9KaFy4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvdsJe%2FbtsOY6pTB00%2F1wOSzHSScAWDFJs9KaFy4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;430&quot; height=&quot;117&quot; data-filename=&quot;ros2-humble.png&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ros2-humble img&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 ROS2-humble&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;환경 설정에 대해 알아보자.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필요 사항 : Ubuntu 22.04&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 환경 변수 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ROS2 설치 파일을 sourcing 하면 작동에 필요한 여러 환경 변수가 설정되는데, 이때 패키지를 찾거나 사용하는 데 문제가 있는 경우 다음 명령을 사용해 환경이 올바르게 설정되었는지 확인해야 한다.&lt;/p&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;printenv | grep -i ROS&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;code&gt;ROS_DISTRO와&lt;/code&gt; &lt;code&gt;ROS_VERSION&lt;/code&gt; 같은 변수가 설정되었는지 확인하자. 아래와 같이 뜬다면 된다.&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;ROS_VERSION=2
ROS_PYTHON_VERSION=3
ROS_DISTRO=humble&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. &lt;code&gt;ROS_DOMAIN_ID&lt;/code&gt; 변수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ROS2 노드 그룹에 대해 고유한 정수를 결정하여 아래의 명령을 통해 &lt;code&gt;domain_id를&lt;/code&gt; 설정할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;export ROS_DOMAIN_ID=&amp;lt;your_domain_id&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 설정을 유지하려면 시작 스크립트에 추가할 수도 있다.&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;echo &quot;export ROS_DOMAIN_ID=&amp;lt;your_domain_id&amp;gt;&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. &lt;code&gt;ROS_LOCALHOST_OLNY&lt;/code&gt; 변수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 ROS2 통신은 &lt;code&gt;local_host로&lt;/code&gt; 제한되지 않는다. &lt;code&gt;ROS_LOCALHOST_ONLY&lt;/code&gt; 환경 변수를 사용하면 ROS2 통신을 로컬 호스트로만 제한할 수 있다. 이 기능은 같은 공간에서 여러 로봇이 동일한 토픽에 노출될 경우 이상한 동작을 일으킬 수 있는 특정 환경에서 유용하게 사용될 수 있다. 아래의 명령을 통해 설정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;똑같이 설정을 유지하라면 시작 스크립트에 추가해서 사용하면 된다. &lt;b&gt;(대부분 시작 스크립트에 넣어 사용하는 것을 추천한다.)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;export ROS_LOCALHOST_ONLY=1
echo &quot;export ROS_LOCALHOST_ONLY=1&quot; &amp;gt;&amp;gt; ~/.bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ROS2 개발 환경은 사용하기 전 올바르게 구성해야 한다. 새로운 터미널을 열 때마다 설치 파일을 sourcing 하거나, 시작 스크립트에 source 명령을 추가하는 것이다. 위에서 말했듯 시작 스크립트에 넣어서 사용하는 것을 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ROS2 pkg를 찾거나 사용하는데 문제가 발생하면 가장 먼저 환경 변수를 확인하고 사용하려는 버전과 배포판으로 설정되어 있는지 확인하는 것이 중요하다.&lt;/p&gt;</description>
      <category>ROS2(humble)</category>
      <category>humble</category>
      <category>ROS2</category>
      <author>UTF-404</author>
      <guid isPermaLink="true">https://utf-404.tistory.com/91</guid>
      <comments>https://utf-404.tistory.com/91#entry91comment</comments>
      <pubDate>Tue, 1 Jul 2025 11:17:36 +0900</pubDate>
    </item>
    <item>
      <title>ROS2-humble 설치 및 삭제</title>
      <link>https://utf-404.tistory.com/90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;벌써 입사한 지 반년이 넘었다. 이제 다시 한번 더 ROS2의 개념을 좀 더 확실하게 다 잡자는 마음에 이렇게 ROS2-humble에 대해 작성하게 되었다. 처음에는 이게 뭐지..라는 생각이었지만 하다 보니 이런 거구나 자연스럽게 조금씩 이해되는 느낌이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 언어들 혹은 운영체제 (필자가 생각하기에는 ROS는 로봇 운영체제라는 말과 안 맞게 사실 미들웨어에 가깝다란 생각을 한다.)와 달리 생각보다 여러 집합체의 의미를 가지고 있는 것이 ROS라고 생각한다. 뭐 이리저리 말이 길었는데, ROS2를 어떻게 사용하는 것인지 설치는 어떻게 하고 어떤 기능들이 있는지에 대해 지금부터 알아보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ros2-humble.png&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJ77Qa/btsOXOp99VQ/loOyHXngFKkwoXlkXrxFoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJ77Qa/btsOXOp99VQ/loOyHXngFKkwoXlkXrxFoK/img.png&quot; data-alt=&quot;ros2-humble img&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJ77Qa/btsOXOp99VQ/loOyHXngFKkwoXlkXrxFoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ77Qa%2FbtsOXOp99VQ%2FloOyHXngFKkwoXlkXrxFoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;430&quot; height=&quot;117&quot; data-filename=&quot;ros2-humble.png&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ros2-humble img&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 : &lt;a href=&quot;https://docs.ros.org/en/humble/index.html&quot;&gt;https://docs.ros.org/en/humble/index.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1751334650342&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;ROS 2 Documentation &amp;mdash; ROS 2 Documentation: Humble  documentation&quot; data-og-description=&quot;You're reading the documentation for an older, but still supported, version of ROS 2. For information on the latest version, please have a look at Kilted. ROS 2 Documentation The Robot Operating System (ROS) is a set of software libraries and tools for bui&quot; data-og-host=&quot;docs.ros.org&quot; data-og-source-url=&quot;https://docs.ros.org/en/humble/index.html&quot; data-og-url=&quot;https://docs.ros.org/en/humble/index.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.ros.org/en/humble/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.ros.org/en/humble/index.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ROS 2 Documentation &amp;mdash; ROS 2 Documentation: Humble documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;You're reading the documentation for an older, but still supported, version of ROS 2. For information on the latest version, please have a look at Kilted. ROS 2 Documentation The Robot Operating System (ROS) is a set of software libraries and tools for bui&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.ros.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;필요 사항 : Ubuntu 22.04&lt;/b&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 설치 및 환경 설정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치된 우분투에서 터미널로 들어가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 Ubuntu Universe 저장소가 활성화되어야 한다.&lt;/p&gt;
&lt;pre class=&quot;smali&quot;&gt;&lt;code&gt;sudo apt install software-properties-common
sudo add-apt-repository universe&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 &lt;code&gt;ros2-apt-source pkg&lt;/code&gt;를 설치하는데 시스템에 ROS2 저장 장소가 구성된다. pkg 새 버전이 ROS 저장 장소에 출시되면 구성이 자동으로 업데이트된다.&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install curl -y
export ROS_APT_SOURCE_VERSION=$(curl -s &amp;lt;https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest&amp;gt; | grep -F &quot;tag_name&quot; | awk -F\\&quot; '{print $4}')
curl -L -o /tmp/ros2-apt-source.deb &quot;&amp;lt;https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$&amp;gt;(. /etc/os-release &amp;amp;&amp;amp; echo $VERSION_CODENAME)_all.deb&quot; # If using Ubuntu derivates use $UBUNTU_CODENAME
sudo dpkg -i /tmp/ros2-apt-source.deb&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완료 후 업데이트와 업그레이드를 해준다. 이유는 &lt;b&gt;Ubuntu&lt;/b&gt; 시스템을 기반으로 하다 보니, 자주 업데이트 되는 OS 특성상 습관처럼 시스템이 최신 상태인지 확인하는 것이 좋다.&lt;/p&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;sudo apt update
sudo apt upgrade&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로는 &lt;code&gt;ros-humble-desktop&lt;/code&gt;과 &lt;code&gt;ros-dev-tools&lt;/code&gt;를 설치할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각 desktop은 실제로 ROS2를 활용하면서 필요한 Rviz, demon, tutorial 같은 것들이 포함되어 있고, tools는 말 그대로 개발 시 도와주는 도구들의 집합 정도로 생각하면 된다.&lt;/p&gt;
&lt;pre class=&quot;cmake&quot;&gt;&lt;code&gt;sudo apt install ros-humble-desktop
sudo apt install ros-dev-tools&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잠시 위의 설치에서 멈춰서 생각해 보자. 그렇다면 이렇게 설치를 하면 &amp;ldquo;이제 완벽한 준비가 된 건가요?&amp;rdquo; 70% 정도는 정답이라고 하자. 왜냐하면 실제로 개발을 하다 보면 설치가 되지 않은 것들이 많다. 그렇다면 그때마다 sudo apt install 명령어 또는 다른 ros 명령어로 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해 주면 될 뿐이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 내가 직접 작업할 터미널 환경에 ros2-humble을 불러오자.&lt;/p&gt;
&lt;pre class=&quot;gradle&quot;&gt;&lt;code&gt;source /opt/ros/humble/setup.bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당연한 소리겠지만 새로운 터미널 환경을 열 때마다 이 짓을 하고 싶지는 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 우리는 &lt;code&gt;.bashrc&lt;/code&gt; 파일에 shell 시작 시 아래의 명령어를 추가할 수 있다. 실제로 잘 추가되었는지 확인하고 싶다면. bashrc 파일 제일 아래로 내려가면 추가된 것을 확인할 수 있다. 가끔 터미널 환경에 익숙하지 않은 분들이 많은데 이때는 &lt;code&gt;:q!&lt;/code&gt; 쳐보자. &lt;code&gt;i&lt;/code&gt;를 누르면 삽입 모드가 되어 bashrc 파일에 실제 작성이 되어 놀랄 수도 있다. 그러니 당황하지 말고 &lt;code&gt;esc&lt;/code&gt;를 누르고 방금 말했던 &lt;code&gt;:q!&lt;/code&gt;를 눌러 탈출하자. 이 명령어는 내가 어떤 짓을 했던 무시하고 그냥 저장하지 않고 나간다. 정도로 생각하자. 물론 들어온 후에 했던 것을 무시하는 것이라 기존 파일은 안전하다.&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;echo &quot;source /opt/ros/humble/setup.bash&quot; &amp;gt;&amp;gt; ~/.bashrc
vi .bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 확인해 보기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 테스트로 ros2-humble이 잘 설치되었는지 안되었는지 확인하는 방법을 알아보자. 방법은 간단하다. 터미널 창을 2개 준비하자.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;1번 터미널에서 다음과 같은 명령어를 진행한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;gradle&quot;&gt;&lt;code&gt;source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talker&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.2번 터미널에서 다음과 같은 명령어를 진행한다.&lt;/p&gt;
&lt;pre class=&quot;gradle&quot;&gt;&lt;code&gt;source /opt/ros/humble/setup.bash
ros2 run demo_nodes_py listener&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 삭제&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 설치가 잘 되지 않았거나, 사용하지 않을 경우 제거하는 방법도 알아야 하는데 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;del&gt;실제로 필자는 처음 ROS2를 사용할 때 제대로 설치가 되지 않아 한번 시원하게 날려버리고 다시 설치를 한 경우가 있다. 대부분 그냥 삭제 후 재설치를 하는 게 가장 마음이 편하기도 하고 빠르기도 한 편이라고 생각하기 때문이다.&lt;/del&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;똑같이 터미널로 다시 들어가서 아래의 명령을 실행하자.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sudo apt remove ~nros-humble-* &amp;amp;&amp;amp; sudo apt autoremove&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장 장소를 제거할 수도 있는데 아래의 명령을 실행하면 된다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sudo apt remove ros2-apt-source
sudo apt update
sudo apt autoremove
sudo apt upgrade # Consider upgrading for packages previously shadowed.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 간단하게 &lt;code&gt;ROS-humble&lt;/code&gt; 설치 및 삭제 방법에 대해 알아보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마치면서 ROS2가 생소하기에 필자의 생각을 얘기로 마무리하려 한다.&lt;br /&gt;여러 해외 유명 회사는 AI와 vision, Robot과 관련되어 엄청난 붐이 일어나고 있다.&lt;br /&gt;이와 관련해 가장 기초적으로 알아야할 것이 코딩(Python, C++ 등...)과 ROS2 등이다. 필자도 아직까지는 잘 모르는 분야라 열심히 배우고 있지만 배워두면 앞으로의 개발 시장에서의 도움이 될 것이라고 확신한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 환경 변수 설정과 확인 방법에 대해 알아보자~!!&lt;/p&gt;</description>
      <category>ROS2(humble)</category>
      <category>humble</category>
      <category>ROS2</category>
      <author>UTF-404</author>
      <guid isPermaLink="true">https://utf-404.tistory.com/90</guid>
      <comments>https://utf-404.tistory.com/90#entry90comment</comments>
      <pubDate>Tue, 1 Jul 2025 09:56:26 +0900</pubDate>
    </item>
    <item>
      <title>SAM2 다양하게 이용해보기!!</title>
      <link>https://utf-404.tistory.com/89</link>
      <description>&lt;h1&gt;  SAM 기반 이미지 및 비디오 추적기 | Image &amp;amp; Video Tracker using SAM&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 프로젝트는 Meta의 &lt;a href=&quot;https://github.com/facebookresearch/segment-anything&quot;&gt;Segment Anything Model (SAM)&lt;/a&gt;을 기반으로 이미지 및 영상에서 특정 색상을 기준으로 객체를 분할하고 추적하는 Python 스크립트 모음입니다.&lt;br /&gt;This project uses Meta&amp;rsquo;s &lt;a href=&quot;https://github.com/facebookresearch/segment-anything&quot;&gt;Segment Anything Model (SAM)&lt;/a&gt; to segment and track objects in images and videos based on color.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Meta에서 공개한 강력한 범용 분할 모델 SAM은 객체의 경계와 형태를 고정된 프롬프트 없이도 정확하게 식별할 수 있습니다. 본 프로젝트는 이 기능을 색상 기반 객체 추적에 응용하여, 다양한 이미지 및 영상 내 응용 가능성을 탐색합니다.&lt;br /&gt;SAM by Meta can detect object boundaries with high precision even without predefined prompts. This project applies SAM for color-based object tracking, showcasing its flexibility in both image and video domains.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  프로젝트 구성 | Project Structure&lt;/h2&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;파일명 (Filename)&lt;/th&gt;
&lt;th&gt;설명 (Description)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;image_color_sam2.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;마우스 클릭으로 선택한 색상 영역을 기준으로 이미지에서 객체를 분할합니다. SAM 모델을 활용하여 마스크를 생성하고, 해당 객체에 색상을 입힙니다. &lt;br /&gt;Interactive color-based object segmentation on static images using SAM.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;video_color_sam2.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;영상 내 특정 색상을 기준으로 SAM을 이용하여 객체를 추적합니다. 마우스로 색상을 선택하면 프레임마다 유사 객체를 추적하며 마스크를 생성합니다. &lt;br /&gt;Color-based object tracking in video streams using SAM and mouse-guided selection.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tracking_sam2.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;중복 객체 제거, 중심점 계산, 거리 기반 보정 등 정교한 추적 기능을 포함한 SAM 기반 객체 추적 스크립트입니다. &lt;br /&gt;Advanced tracking using SAM with centroid detection, duplicate filtering, and repulsion adjustment.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;video_sam2_demo.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;마우스로 클릭한 객체를 SAM으로 추적하는 영상 데모입니다. 단순한 실험용 UI 및 기능 확인용으로 적합합니다. &lt;br /&gt;Simple video demonstration of SAM tracking triggered by mouse input.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;test_sam2.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Kalman 필터 생성, 중복 제거, 중심점 계산 등 SAM과 다양한 기능을 테스트하기 위한 종합 테스트용 스크립트입니다. &lt;br /&gt;Multi-function test script including SAM, Kalman filter creation, and object duplicate handling.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;color_run_sam2.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;다양한 색상을 임의로 생성하고, 클릭 이벤트 기반 객체 추적을 실행합니다. 색상 기반 마스크 저장 기능 포함. &lt;br /&gt;Interactive color-triggered segmentation with random color generation and save functionality.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;last_test_sam2.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;다양한 기능을 통합한 최종 테스트 스크립트로, 마스크 시각화 및 포인트 기반 추적 확인용입니다. &lt;br /&gt;Final integration test script including mask display and point-based interaction.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  설치 방법 | Installation&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1️⃣ Python 가상환경 생성 | Create a virtual environment&lt;/h3&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;conda create -n sam_env python=3.10 -y
conda activate sam_env&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2️⃣ 필수 라이브러리 설치 | Install dependencies&lt;/h3&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install opencv-python matplotlib
pip install git+https://github.com/facebookresearch/segment-anything.git&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3️⃣ SAM 사전학습 모델 다운로드 | Download SAM pretrained model&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Meta의 공식 모델은 아래 경로에서 받을 수 있습니다.&lt;br /&gt;Download the pretrained model from Meta using:&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h.pth -P ./checkpoints&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SAM의 작동 방식에 대한 자세한 내용은 &lt;a href=&quot;https://arxiv.org/abs/2304.02643&quot;&gt;Segment Anything 논문&lt;/a&gt;과 &lt;a href=&quot;https://github.com/facebookresearch/segment-anything&quot;&gt;공식 GitHub 문서&lt;/a&gt;를 참고하세요.&lt;br /&gt;For more details on how SAM works, refer to the &lt;a href=&quot;https://arxiv.org/abs/2304.02643&quot;&gt;Segment Anything Paper&lt;/a&gt; and &lt;a href=&quot;https://github.com/facebookresearch/segment-anything&quot;&gt;official GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;▶️ 사용 방법 | How to Use&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  이미지 색상 기반 분할 | Image color-based segmentation&lt;/h3&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;python image_color_sam2.py --image_path path/to/image.jpg&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  영상 색상 기반 추적 | Video color-based tracking&lt;/h3&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;python video_color_sam2.py --video_path path/to/video.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  영상 데모 실행 | Run SAM video demo&lt;/h3&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;python video_sam2_demo.py --video_path path/to/sample.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자는 영상/이미지 속 객체의 색상을 선택하고 해당 색상과 유사한 픽셀 군집에 대해 SAM을 통해 마스크를 생성합니다. 이를 기반으로 객체를 프레임 단위로 추적합니다.&lt;br /&gt;Users can select object colors in an image/video, and SAM generates masks for clusters of similar pixels to track them frame-by-frame.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  프로젝트 활용 및 확장 방향 | Notes and Potential Applications&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;본 프로젝트는 실시간 감시 시스템, 자동 로봇 시각 처리, 색상 기반 품질 검사 등의 산업적 응용에 적합합니다.&lt;br /&gt;This project is suitable for industrial applications like real-time surveillance, robotic vision, and color-based quality inspection.&lt;/li&gt;
&lt;li&gt;SAM은 prompt-free 분할 기능을 통해 영상 내 다양한 사물 인식 및 분리 작업에서 강력한 성능을 보이며, 이 프로젝트는 해당 모델의 유연성을 색상 분석 작업에 접목한 것입니다.&lt;br /&gt;SAM&amp;rsquo;s prompt-free segmentation offers high flexibility, and this project integrates it with color analysis for robust tracking.&lt;/li&gt;
&lt;li&gt;다양한 색상 범위, 해상도, 조명 조건에서도 잘 작동하도록 구성되어 있으며, 코드 일부는 사용자 지정으로 확장 가능합니다.&lt;br /&gt;It is robust to color variation, resolution, and lighting, and can be easily extended for custom use cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ 본 프로젝트는 연구 및 프로토타이핑을 위한 시작점으로 활용되며, 향후 다음과 같은 방향으로 확장될 수 있습니다:&lt;br /&gt;This project serves as a prototype and can be extended to:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실시간 영상 스트리밍 처리 (Real-time video streaming)&lt;/li&gt;
&lt;li&gt;사용자 마우스 클릭 기반 객체 추적 (Click-to-track systems)&lt;/li&gt;
&lt;li&gt;로봇 제어 또는 행동 트리거용 객체 인식 (Object-triggered robotic actions)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  Github&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/utf-404/sam2_image_video_detection&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/utf-404/sam2_image_video_detection&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>private study</category>
      <author>UTF-404</author>
      <guid isPermaLink="true">https://utf-404.tistory.com/89</guid>
      <comments>https://utf-404.tistory.com/89#entry89comment</comments>
      <pubDate>Fri, 11 Apr 2025 11:25:27 +0900</pubDate>
    </item>
  </channel>
</rss>