<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>smile_b.log</title>
        <link>https://velog.io/</link>
        <description>감사합니다. https://www.youtube.com/channel/UCxlkiu9_aWijoD7BannNM7w</description>
        <lastBuildDate>Tue, 05 Nov 2024 20:43:45 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>smile_b.log</title>
            <url>https://velog.velcdn.com/images/smile_b/profile/f4b25f32-b40a-47b8-b3b3-fefff5a90fde/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. smile_b.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/smile_b" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Linux ttyUSB0 고정]]></title>
            <link>https://velog.io/@smile_b/Linux-ttyUSB0-%EA%B3%A0%EC%A0%95</link>
            <guid>https://velog.io/@smile_b/Linux-ttyUSB0-%EA%B3%A0%EC%A0%95</guid>
            <pubDate>Tue, 05 Nov 2024 20:43:45 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/smile_b/post/246d491e-cc1e-4349-9280-1d3086b6d9e0/image.png" alt=""></p>
<h3 id="문제">문제</h3>
<p>ROS2 run을 할 때 마다 arduino nano를 하드웨어적으로 해제했다가 연결해줘야 하는데(포트가 한번 설정되면 launch 가 끝나도 사용되는것으로 인식)</p>
<p>재 연결시 /dev/ttyUSB1로 바뀌는 경우가 있다.</p>
<p>그래서 nano의 USB 정보가 들어오면 해당 정보의 USB는 정의한 내용으로 잡히게 해달라는 규칙을 추가해야한다.</p>
<h3 id="해결">해결</h3>
<p>Arduino nano <code>/dev/ttyUSB0</code>로 고정하기 위한 udev 규칙 생성</p>
<ol>
<li><p>udev 규칙 파일 생성:</p>
<pre><code class="language-bash">sudo nano /etc/udev/rules.d/99-arduino.rules</code></pre>
</li>
<li><p>다음 내용 추가 (위에서 확인된 USB 정보 기반):</p>
</li>
</ol>
<pre><code>SUBSYSTEM==&quot;tty&quot;, ATTRS{idVendor}==&quot;1a86&quot;, ATTRS{idProduct}==&quot;7523&quot;, KERNEL==&quot;ttyUSB*&quot;, NAME=&quot;ttyUSB0&quot;, SYMLINK+=&quot;ttyUSB0&quot;, MODE=&quot;0666&quot;</code></pre><p>각 속성의 의미:</p>
<p>SUBSYSTEM: &quot;tty&quot; (시리얼 포트)
ATTRS{idVendor}: &quot;1a86&quot; (제조사 ID)
ATTRS{idProduct}: &quot;7523&quot; (제품 ID)
ATTRS{product}: &quot;USB Serial&quot; (제품명)
KERNEL: &quot;ttyUSB*&quot; (커널에서 인식하는 장치 이름 패턴)
NAME: &quot;ttyUSB0&quot; (지정할 장치 이름)
SYMLINK: &quot;ttyUSB0&quot; (심볼릭 링크)
MODE: &quot;0666&quot; (읽기/쓰기 권한)</p>
<p>2-1. arduino nano의 USB 정보 값</p>
<pre><code>usb 1-1.3: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.64
usb 1-1.3: New USB device strings: Mfr=0, Product=2, SerialNumber=0
usb 1-1.3: Product: USB Serial
이 Arduino(CH341 칩셋)의 정보는:

Vendor ID: 1a86 (QinHeng Electronics)
Product ID: 7523 (CH341 USB to Serial converter)
Product Name: USB Serial
Device Path: 1-1.3 (USB 포트 위치)
Device Type: ch341-uart converter</code></pre><ol start="3">
<li><p>udev 규칙 적용:</p>
<pre><code class="language-bash">sudo udevadm control --reload-rules
sudo udevadm trigger</code></pre>
</li>
<li><p>Arduino 연결이 끊어지는 것을 방지하기 위한 추가 설정:</p>
<pre><code class="language-bash">sudo bash -c &#39;echo &quot;options ch341 break_on_timeout=0&quot; &gt; /etc/modprobe.d/ch341.conf&#39;</code></pre>
</li>
<li><p>현재 사용자에게 권한 부여:</p>
<pre><code class="language-bash">sudo usermod -a -G dialout $USER</code></pre>
</li>
<li><p>변경사항 적용을 위해 재부팅:</p>
<pre><code class="language-bash">sudo reboot</code></pre>
</li>
</ol>
<p>재부팅 후 Arduino를 연결하면 항상 <code>/dev/ttyUSB0</code>로 인식될 것입니다. 작동 여부를 확인하려면:</p>
<pre><code class="language-bash">ls -l /dev/ttyUSB*</code></pre>
<p>이 설정으로 Arduino를 재연결하거나 다른 USB 포트에 연결해도 항상 ttyUSB0로 인식 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ROS2 - Turtlebot project 1]]></title>
            <link>https://velog.io/@smile_b/ROS2-Turtlebot-project-1</link>
            <guid>https://velog.io/@smile_b/ROS2-Turtlebot-project-1</guid>
            <pubDate>Wed, 28 Aug 2024 02:06:17 GMT</pubDate>
            <description><![CDATA[<p>저번에 raspberry pi에 대한 내용을 올렸었는데 이번에는 전체적인 프로젝트의 회로를 한번 확인한다.
<img src="https://velog.velcdn.com/images/smile_b/post/1b60fbc7-703a-4a55-ae0a-35dcbab52d1e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/b6ce427b-c76e-4a0b-8c81-d10cb3216d9f/image.png" alt="">
여태 했던 ROS 프로젝트와 달리 라즈베리파이가 추가가 됐는데 라즈베리파이로 원격으로 제어하기 위해 기존의 ROS가 설치된 컴퓨터를 대체하는 내용이다.</p>
<p>BOM list 및 3d model에 대한 내용은 아래 있다.
<a href="https://velog.io/@smile_b/ROS-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-Topic-publisher">https://velog.io/@smile_b/ROS-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-Topic-publisher</a></p>
<p><a href="https://velog.io/@smile_b/Robot-Model-1">https://velog.io/@smile_b/Robot-Model-1</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Git - Lab, Fork, Desktop]]></title>
            <link>https://velog.io/@smile_b/Git-Lab-Fork-Desktop</link>
            <guid>https://velog.io/@smile_b/Git-Lab-Fork-Desktop</guid>
            <pubDate>Mon, 26 Aug 2024 14:31:49 GMT</pubDate>
            <description><![CDATA[<p>Github desktop만으로는 프로젝트를 관리하기 힘들다는것을 느끼고, 인터넷에 검색해서 사람들이 많이 사용하는 것들을 찾았다.</p>
<h2 id="특징">특징</h2>
<ol>
<li>GitLab</li>
</ol>
<ul>
<li>프로젝트 호스팅 및 관리 플랫폼</li>
<li>협업 도구 (이슈 트래킹, 코드 리뷰 등) 제공</li>
<li>CI/CD 파이프라인 통합</li>
</ul>
<ol start="2">
<li>GitFork</li>
</ol>
<ul>
<li>Git 클라이언트 소프트웨어</li>
<li>시각적으로 브랜치 관리와 병합 작업 수행</li>
<li>복잡한 Git 작업을 간편하게 처리</li>
</ul>
<ol start="3">
<li>GitHub Desktop</li>
</ol>
<ul>
<li>간단하고 직관적인 GUI 인터페이스</li>
<li>기본적인 Git 작업을 쉽게 수행</li>
<li>GitHub와의 원활한 통합</li>
</ul>
<h3 id="형상관리-방법">형상관리 방법</h3>
<p>GiLab에서 프로젝트를 관리하고 협엽,
GitFork로 복잡한 Git 작업 처리
GitHub Desktop으로 일상적인 커밋, 푸시 등을 간편하게 수행</p>
<h3 id="gitlab">Gitlab</h3>
<p><img src="https://velog.velcdn.com/images/smile_b/post/261b73c9-87c1-43ec-b796-39056f617a79/image.png" alt=""></p>
<p>회원가입하고 github와 연동한다음 대표적인 Study 레포지를 추출
<img src="https://velog.velcdn.com/images/smile_b/post/8225b47e-db6a-43cc-bdea-aabb9e9b3756/image.png" alt=""></p>
<p>위의 추출이 다되고 projects에 들어가면 추출한 레포가 출력돼있다.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/fd89cfe1-c4d8-436d-9f53-01c0b9eaeb27/image.png" alt=""></p>
<p>들어가서 어떤 문제들이 있는지 확인하자.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/2c01b7a0-f898-4800-99ec-a60735c2bebc/image.png" alt="">
우선 두개</p>
<p>push, pull을 사용하기 위해 ssh key를 추가.</p>
<p>여기서 SSH 키는 Git에서 발급해야한다.</p>
<p>Gitlab은 SSH 프로토콜을 이용해서 Git과 통신하기때문이다.</p>
<h4 id="git-bash-실행">Git Bash 실행</h4>
<p><img src="https://velog.velcdn.com/images/smile_b/post/09d258a2-47ba-46da-a27d-cf2aab43ef18/image.png" alt="">
ssh-keygen 입력
<img src="https://velog.velcdn.com/images/smile_b/post/1135c696-8291-4763-bbdd-242fd42785cf/image.png" alt=""></p>
<p>그럼 경로, 비밀번호 설정해줘야하는데 기본설정경로 및 비밀번호 없이 하려면 엔터세번 눌러주면 된다.</p>
<p>SSH 파일 위치는 /.ssh/id_rsa에 저장돼있다고 나와있다.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/1314791e-1a36-4bd8-bc8d-cfc82f7c2fc3/image.png" alt="">
경로에 들어가 생성된 pub의 내용을 복사</p>
<h4 id="gitlab에-ssh-key-등록">Gitlab에 SSH key 등록</h4>
<p><img src="https://velog.velcdn.com/images/smile_b/post/e60373d1-00ae-4d35-b35d-f133b65da83d/image.png" alt="">
복사한 내용을 SSH Key 추가에 넣고,</p>
<p>Expiration date 는 1년을 기준으로 돼있는데 그냥 기한 없이 설정하려면 x버튼을 클릭하면 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[3mf 파일 만들기]]></title>
            <link>https://velog.io/@smile_b/3mf-%ED%8C%8C%EC%9D%BC-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@smile_b/3mf-%ED%8C%8C%EC%9D%BC-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Mon, 26 Aug 2024 14:16:37 GMT</pubDate>
            <description><![CDATA[<h3 id="홈페이지-업로드-방법">홈페이지 업로드 방법</h3>
<p> Bambu labs printer 들은 .3mf 라는 파일로 실행한다.</p>
<p> 변환 방법은 홈페이지에 들어가서 STL 파일을 넣어주면 된다.</p>
<p> <img src="https://velog.velcdn.com/images/smile_b/post/d3d711d2-15df-4411-854c-eff22dce36d6/image.png" alt="">
 위와 같이 bambustudio에서 미리보기를 눌러준다음 업로드를 클릭하면 웹페이지가 뜨게 된다.
<img src="https://velog.velcdn.com/images/smile_b/post/e4158ec1-f262-4681-b20c-8131211ba64f/image.png" alt=""></p>
<p>해당 웹페이지에서 STL파일은 갖고있으므로 아래항목을 선택해준 다음 ROS Model 에 해당하는 파일들을 넣어주면된다.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/6871e8a4-c4a5-4552-9a04-a28bac1266b9/image.png" alt="">
<img src="https://velog.velcdn.com/images/smile_b/post/31a65288-4697-4380-80a0-3f4f14d9bc93/image.png" alt="">
넣어주니까 이미지를 보여준다</p>
<h2 id="출력">출력</h2>
<p><img src="https://velog.velcdn.com/images/smile_b/post/30efe981-9baf-4fe0-a138-acc10a413f74/image.png" alt="">
STL 파일을 Bambu Studio에서 끌어다 쓰면 생성된다.</p>
<p>총 6개의 부품을 만들어야하는데, 플레이트가 작으므로 2개씩 출력할 예정이다.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/90ea94a8-edb2-49f0-8840-349112f7fb82/image.png" alt="">
<img src="https://velog.velcdn.com/images/smile_b/post/a203e926-4fc4-44e2-9624-e094bee346a6/image.png" alt="">
해당 두개로 돌려줌
<img src="https://velog.velcdn.com/images/smile_b/post/e9bee21c-c87c-4703-959f-a64165dc9c63/image.png" alt="">
슬라이스를 클릭해서</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/96f1834c-636a-4a8a-8176-94dae2a3f23d/image.png" alt="">
내부채움 15%로 두개 출력</p>
<p>바로 출력말고 타임랩스 설정을 위해 보내기로 해서 내 프린터로 인터넷을 사용해서 전송
<img src="https://velog.velcdn.com/images/smile_b/post/2e1f4d61-2f05-41ff-8851-f22435e61115/image.png" alt="">
<img src="https://velog.velcdn.com/images/smile_b/post/f3e7f0d1-32ea-4e17-9089-00f3f48cb6f8/image.png" alt="">
<img src="https://velog.velcdn.com/images/smile_b/post/171b0ee3-db4e-4894-8c44-7abb0d01cfd1/image.png" alt="">
타임랩스 설정은 기본적으로 꺼져있다.
한번 클릭해주면 밑에 애들이랑 똑같이 초록색으로 불이 들어온다.
<img src="https://velog.velcdn.com/images/smile_b/post/c13527bb-e740-4199-a639-2922bd16259c/image.png" alt=""></p>
<h3 id="타임랩스">타임랩스</h3>
<p><img src="https://velog.velcdn.com/images/smile_b/post/4c2ba4fb-4ae7-413f-bad7-4f3200b2950f/image.png" alt="">
출력을 걸고나서 studio에 뭐 있나 뒤져보다가 SD카드에 타임랩스 파일이 있는것을 발견</p>
<p>바로 다운로드 눌러줬다. 이렇게 되면 다음에 굳이 3D 프린터로 옮겨서 하는것보단 바로 전송해서 실행하는것으로 해야겠다.</p>
<p>우선 5시간 뒤에 어떻게 나올지 확인부터..</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Raspberry Pi 4 -ubuntu 22.04.4 LTS OS 설치]]></title>
            <link>https://velog.io/@smile_b/Raspberry-Pi-4-ubuntu-22.04.4-LTS-OS-%EC%84%A4%EC%B9%98</link>
            <guid>https://velog.io/@smile_b/Raspberry-Pi-4-ubuntu-22.04.4-LTS-OS-%EC%84%A4%EC%B9%98</guid>
            <pubDate>Mon, 26 Aug 2024 05:03:56 GMT</pubDate>
            <description><![CDATA[<p>Raspberry Pi 4 에 turtlebot 제어를 위해 OS를 설치하는 내용이다.</p>
<ol>
<li>raspberry pi OS 설치
<img src="https://velog.velcdn.com/images/smile_b/post/06e9fd86-0c8b-47cd-b0ff-a7d7a32b7761/image.png" alt=""></li>
</ol>
<p><img src="https://velog.velcdn.com/images/smile_b/post/5f7ac517-06fc-46d0-b2fb-e89de9da2d84/image.png" alt="">
1번은 OS 를 설정해주는데
<img src="https://velog.velcdn.com/images/smile_b/post/c10fdccb-bbf5-45f7-a75e-49b5c48693a3/image.png" alt="">
other general-purpose OS를 선택하여 Ubuntu 용으로 설치한다.
<img src="https://velog.velcdn.com/images/smile_b/post/ed05e099-4654-4d8e-a501-f764f63099c5/image.png" alt="">
22.04.4 LTS 이므로 맞게 설치</p>
<p>2번 스토리지는 usb로 raspberry 파이 연결 하면 뜨는데 그거 선택</p>
<h2 id="2-세팅-설정">2. 세팅 설정</h2>
<p>우측 하단 톱니바퀴 누르고 SSH 허용과
<img src="https://velog.velcdn.com/images/smile_b/post/1d8622d8-ceeb-49e5-8c56-57f4db8a200f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/c5ad45fe-287d-4bf6-a2bd-7be060ec3095/image.png" alt="">
라즈베리 파이에 접근할 username, password를 설정해주고, </p>
<p>라즈베리파이와 통신 및 인테넛연결을 위해 LAN, WiFi 정보를 입력해준다.</p>
<p>SSID - Wifi 이름</p>
<p>지역은 kr로 설정해주면 된다.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/a9edd2a5-9fc8-40ad-8753-931d5733f019/image.png" alt=""></p>
<p>이후 OS 설치 버튼을 클릭하면 설치가 완료됐다는 문구가 출력된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Robot Arms 3 - Servo 3D model]]></title>
            <link>https://velog.io/@smile_b/Robot-Arms-3-Servo-3D-model</link>
            <guid>https://velog.io/@smile_b/Robot-Arms-3-Servo-3D-model</guid>
            <pubDate>Sat, 17 Aug 2024 17:51:48 GMT</pubDate>
            <description><![CDATA[<p>몸체 부분까지 진행을 했고 금일 모터가 도착을 해서 조립을 완성을 했다.
<img src="https://velog.velcdn.com/images/smile_b/post/a470ba5f-0453-4c7c-80b4-508ac5dd863c/image.jpg" alt="">
원래는 밑에 screw로 고정을 해야하는데 3d model 에 구멍이 없어서 절연 테이프로 고정했다.</p>
<p>이 부분은 로봇팔의 몸체를 회전 시켜주는 역할을 한다.
<img src="https://velog.velcdn.com/images/smile_b/post/7b82fb25-38e4-4d64-9cb7-af044e836f0e/image.jpg" alt="">
양쪽의 모터들은 팔을 숙이고 팔을 옮겨주는 역할을 하는 모터이다.
<img src="https://velog.velcdn.com/images/smile_b/post/4bd963b4-8bc6-490f-b6b7-9a50b8f5ef38/image.jpg" alt="">
로봇팔 부분에도 똑같이 절연테이프로 고정을 하였고 
<img src="https://velog.velcdn.com/images/smile_b/post/a9810b40-ff95-458e-8cb8-e366bc3b026c/image.jpg" alt="">
아래는 모터가 회전을 하면 톱니바퀴가 돌면서 어떤것을 집게 부착을 했다.
<img src="https://velog.velcdn.com/images/smile_b/post/3a9f1caf-f2fb-4586-be54-efe740d60577/image.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Robot Arms 2 - Servo 3D model]]></title>
            <link>https://velog.io/@smile_b/Robot-Arms-2-Servo-3D-model</link>
            <guid>https://velog.io/@smile_b/Robot-Arms-2-Servo-3D-model</guid>
            <pubDate>Fri, 16 Aug 2024 19:43:52 GMT</pubDate>
            <description><![CDATA[<p>3D 프린터로 부품을 출력했다.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/e14a2270-7266-4a10-85ac-8dcd1fe1221b/image.jpg" alt="">
<a href="https://www.instructables.com/EEZYbotARM/">모델가이드</a>
가이드는 위의 링크를 따라하였고
<img src="https://velog.velcdn.com/images/smile_b/post/7ee37adc-b7f1-4337-b00c-0563095a1e84/image.png" alt="">
저 위에 빨간색같은 brass pipe가 없어서 따로 만들어서 출력했다.
<img src="https://velog.velcdn.com/images/smile_b/post/ad75c6d1-be47-4f8a-bd00-af51fd767501/image.png" alt="">
총 2개를 출력하였다.
<img src="https://velog.velcdn.com/images/smile_b/post/c8b88533-1960-4601-bca8-01e114b14b8c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/5c828cf8-e2f4-4f43-88a5-cf783f539518/image.jpg" alt="">
<img src="https://velog.velcdn.com/images/smile_b/post/d52db1e3-847b-4fe1-b4b1-cd7dfaccfd54/image.jpg" alt="">
<img src="https://velog.velcdn.com/images/smile_b/post/b409c293-7c9f-4993-a5ad-a31accf4fd39/image.png" alt=""></p>
<p>가이드 대로 조립을 해주었고 이 위의 사진에서 pipe는 표시한 저부분에 끼웠는데 빡빡해서 고무망치같은걸로 안부러지게 톡톡 쳐서 넣었다.
<img src="https://velog.velcdn.com/images/smile_b/post/905805ff-4786-4f85-a6dc-37147e047155/image.png" alt="">
총 두 곳에 파이프를 넣었고 고정을 하였다.</p>
<p>이 이후의 상황은 MG60S 모터가 내일 도착하므로 다음 글에 작성하겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Robot Arms 1 - Servo 3D model]]></title>
            <link>https://velog.io/@smile_b/Robot-Arms-1-Servo-3D-model</link>
            <guid>https://velog.io/@smile_b/Robot-Arms-1-Servo-3D-model</guid>
            <pubDate>Thu, 08 Aug 2024 13:47:46 GMT</pubDate>
            <description><![CDATA[<p>다음 프로젝트로 Servo motor, Ros2 Moveit을 이용한 로봇팔 프로젝트를 진행하는데 하드웨어를 3d 프린터로 뽑고 esp 모듈로 로봇팔을 제어하려 한다.
<img src="https://velog.velcdn.com/images/smile_b/post/11e3ee85-0793-458c-9e30-67f641fee533/image.png" alt="">
<img src="https://velog.velcdn.com/images/smile_b/post/c71d5415-3267-44ff-9d92-1aeea6509b45/image.png" alt="">
<img src="https://velog.velcdn.com/images/smile_b/post/ec8ccda5-f4b3-4276-96de-8ce7f674f1d7/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/50f49bc2-9772-4df2-9784-a530a86f4ca1/image.png" alt="">
<img src="https://velog.velcdn.com/images/smile_b/post/1e937c7b-248e-4f6c-8484-a6ef9e969b5e/image.png" alt="">
<img src="https://velog.velcdn.com/images/smile_b/post/ff74b819-f6f4-4ad3-91be-fb67b9851e08/image.png" alt="">
<img src="https://velog.velcdn.com/images/smile_b/post/66a92bf6-577a-4f0d-a0aa-ca0804bfed7c/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[MoveIt 에러 발생]]></title>
            <link>https://velog.io/@smile_b/MoveIt-%EC%97%90%EB%9F%AC-%EB%B0%9C%EC%83%9D</link>
            <guid>https://velog.io/@smile_b/MoveIt-%EC%97%90%EB%9F%AC-%EB%B0%9C%EC%83%9D</guid>
            <pubDate>Tue, 06 Aug 2024 14:45:57 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/smile_b/post/361beb27-370f-4770-ac3c-6c445c6600b7/image.png" alt="">
해당 에러가 계속해서 사라지지 않아서 모든 패키지를 제거하고 재설치 했다.</p>
<p>문제의 원인은 gazebo 버전에 의한 문제인것으로 확인은 되지만 솔루션에도 해결되지 않았다.
<a href="https://github.com/doosan-robotics/doosan-robot2/issues/61">https://github.com/doosan-robotics/doosan-robot2/issues/61</a></p>
<ol>
<li><p>기존 ROS 2 및 관련 패키지 제거:</p>
<pre><code>sudo apt remove ros-* &amp;&amp; sudo apt autoremove</code></pre></li>
<li><p>ROS 2 관련 디렉토리 삭제:</p>
<pre><code>rm -rf ~/ros2_ws
rm -rf ~/ws_moveit</code></pre></li>
<li><p>ROS 2 Iron 설치 (Ubuntu 22.04 기준):</p>
<pre><code>sudo apt update &amp;&amp; sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update &amp;&amp; sudo apt install curl
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo &quot;deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release &amp;&amp; echo $UBUNTU_CODENAME) main&quot; | sudo tee /etc/apt/sources.list.d/ros2.list &gt; /dev/null
sudo apt update
sudo apt upgrade
sudo apt install ros-iron-desktop</code></pre></li>
<li><p>환경 설정:</p>
<pre><code>echo &quot;source /opt/ros/iron/setup.bash&quot; &gt;&gt; ~/.bashrc
source ~/.bashrc</code></pre></li>
<li><p>개발 도구 및 ROS 2 패키지 설치:</p>
<pre><code>sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo apt install python3-colcon-common-extensions</code></pre></li>
<li><p>rosdep 초기화:</p>
<pre><code>sudo rosdep init
rosdep update</code></pre></li>
<li><p>MoveIt 2 워크스페이스 생성 및 소스 코드 다운로드:</p>
<pre><code>mkdir -p ~/ws_moveit/src
cd ~/ws_moveit/src
git clone https://github.com/ros-planning/moveit2.git -b iron
vcs import &lt; moveit2/moveit2.repos</code></pre></li>
<li><p>의존성 설치:</p>
<pre><code>cd ~/ws_moveit
rosdep install -r --from-paths . --ignore-src --rosdistro iron -y</code></pre></li>
<li><p>빌드:</p>
<pre><code>colcon build --event-handlers desktop_notification- status- --cmake-args -DCMAKE_BUILD_TYPE=Release</code></pre></li>
<li><p>환경 설정:</p>
<pre><code>echo &quot;source ~/ws_moveit/install/setup.bash&quot; &gt;&gt; ~/.bashrc
source ~/.bashrc</code></pre></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[노즐 교체 (0.4mm > 0.2 mm)]]></title>
            <link>https://velog.io/@smile_b/%EB%85%B8%EC%A6%90-%EA%B5%90%EC%B2%B4-0.4mm-0.2-mm</link>
            <guid>https://velog.io/@smile_b/%EB%85%B8%EC%A6%90-%EA%B5%90%EC%B2%B4-0.4mm-0.2-mm</guid>
            <pubDate>Tue, 23 Jul 2024 22:16:28 GMT</pubDate>
            <description><![CDATA[<p>저번에 0.4 mm로  M3 볼트 너트를 뽑았을 때 미세하지 않아서 그냥 뭉텅이로 나와 조립의 역할을 해내지 못했다.</p>
<p>그래서 0.2 mm 노즐을 구매하였다.</p>
<h2 id="구매-노즐">구매 노즐</h2>
<img src="https://velog.velcdn.com/images/smile_b/post/cb993822-5bb7-483d-88e3-462b514a2f37/image.png" style="width: 70%;" alt="구매 노즐">
정품은 아니지만, 가격이 저렴하므로 바로 구매

<p>16일 주문, 22일 수령  6일 걸렸다.</p>
<h2 id="교체">교체</h2>
<img src="https://velog.velcdn.com/images/smile_b/post/193c73d9-79ed-47f9-92da-7cf90b9a7ee1/image.png" style="width: 30%;" alt="교체 1">
커버를 벗기면 이렇게 돼있고, 현재 0.4 노즐이다.
<img src="https://velog.velcdn.com/images/smile_b/post/756ff2b5-fb8e-4afc-900e-33351f350f72/image.jpg" style="width: 30%;" alt="교체 2">
고무패킹을 벗기고 아래 고정핀을 푼 다음
<img src="https://velog.velcdn.com/images/smile_b/post/dcb803eb-9bc6-4baf-a419-e4ed90000bae/image.jpg" style="width: 30%;" alt="교체 3">
자석으로 부착돼있기에 손으로 떼면 떨어진다. 
<img src="https://velog.velcdn.com/images/smile_b/post/522da419-a104-4294-9443-6f928231e87f/image.jpg" style="width: 30%;" alt="교체 4">
0.4, 0.2 노즐 비교
<img src="https://velog.velcdn.com/images/smile_b/post/a63fd153-4c3b-4d23-b5df-22e0680094ab/image.jpg" style="width: 30%;" alt="교체 5">
0.2 노즐 교체
<img src="https://velog.velcdn.com/images/smile_b/post/fac3e252-781b-4d62-9d48-8a2e106a5f5a/image.jpg" style="width: 30%;" alt="교체 6">
조립 완료


<h2 id="플레이트-슬라이스">플레이트 슬라이스</h2>
<img src="https://velog.velcdn.com/images/smile_b/post/5aa97b10-338d-4798-bfbc-426626688343/image.png" style="width: 30%;" alt="플레이트 슬라이스 1">
프린터를 출력하기 위해 슬라이스 진행
<img src="https://velog.velcdn.com/images/smile_b/post/34bba05b-e538-474a-b4be-40241f6b75b8/image.png" style="width: 60%;" alt="플레이트 슬라이스 2">
출력을 위해 보내기를 선택
<img src="https://velog.velcdn.com/images/smile_b/post/23da3690-dc8a-4ff7-b745-acc08841b27f/image.png" style="width: 50%;" alt="플레이트 슬라이스 3">
슬라이스는 0.2 노즐로 했는데, 장치의 노즐은 0.4로 그래로라서 에러 발생
<img src="https://velog.velcdn.com/images/smile_b/post/ca0c0400-5dec-48e6-bbdf-cf9a260b63b8/image.png" style="width: 50%;" alt="플레이트 슬라이스 4">
장치 프린터 부품에 있는 노즐 직경을 0.2로 수정

<h2 id="출력-결과">출력 결과</h2>
<p><img src="https://velog.velcdn.com/images/smile_b/post/44bcc551-b685-4171-be10-6a5c4a5753c1/image.png" alt="">
볼트는 떼다가 부러졌는데, 그런데 애초에 나사산이 뭉개져서 출력됐다.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/aafab3cf-032f-4424-aedf-746474d2d5e2/image.png" alt="">
너트는 꽤 정교하게 나온것으로 보아 너트 볼트는 따로 뽑고,
<img src="blob:https://velog.io/1958b3c7-f5ba-448c-a164-bdfdc1857d37" alt="업로드중..">
볼트 출력 할 때 출력 속도, 온도, 쿨링 등을 고려해서 다시 출력하면 될 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Robot Model 1]]></title>
            <link>https://velog.io/@smile_b/Robot-Model-1</link>
            <guid>https://velog.io/@smile_b/Robot-Model-1</guid>
            <pubDate>Mon, 15 Jul 2024 21:56:03 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/smile_b/post/e6b24e65-8b3c-4be3-8d76-8c34140010a0/image.jpg" alt="">
출력을 하고 끼우려고하는데 뭔가 안맞아서 확인해보니까 튀어나온 부분은 서포터를 위해 설계된걸로 뜯어내줘야한다.
<img src="https://velog.velcdn.com/images/smile_b/post/3a25328c-afe4-466a-a2c5-78d6b91d15f7/image.jpg" alt="">
뜯어 내주고 나니 잘 붙는 모습이다.
<img src="https://velog.velcdn.com/images/smile_b/post/0b7d89a5-29fa-46f0-8ef2-7f55bbf65ec6/image.jpg" alt="">
그리고 turtlebot3 model인데 여기서 볼트, 너트가 필요해 보인다.
<img src="https://velog.velcdn.com/images/smile_b/post/a5a7887f-51a6-4a31-a500-4b53607f1c81/image.png" alt="">
구글링 검색을 통해 싱기버스에 해당 모델이 올라와있고
<img src="https://velog.velcdn.com/images/smile_b/post/26e5d029-5bab-4514-9224-b1b560547cc4/image.png" alt="">
패키지 내에서 볼트도 출력가능한 부품이 있는것을 확인했다.
<img src="https://velog.velcdn.com/images/smile_b/post/126c7ce3-54b5-4e38-badb-8164fd8438fb/image.png" alt=""></p>
<p>나에게 필요한 부품들을 골라 개수를 선택해 출력해야겠다.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/5ca746d6-b69c-4594-926e-9bda96beb6cf/image.png" alt=""></p>
<p>목록의 부품들 중 무지성 출력 해봐서 사용할수있는것을 확인하는게 맘편하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ROS 시스템 - RViz, Parameter Server]]></title>
            <link>https://velog.io/@smile_b/ROS-%EC%8B%9C%EC%8A%A4%ED%85%9C-RViz-Parameter-Server</link>
            <guid>https://velog.io/@smile_b/ROS-%EC%8B%9C%EC%8A%A4%ED%85%9C-RViz-Parameter-Server</guid>
            <pubDate>Sun, 14 Jul 2024 12:39:36 GMT</pubDate>
            <description><![CDATA[<p>RViz는 ROS Visualization의 약자로 </p>
<p>여러 플러그인을 제공해 ROS의 메시지를 시각화한다.</p>
<p>예를 들어 로봇이 이동하고 내비게이션을 할 수 있는 건물 지도를 시각화 할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/26c5dda2-1e38-49a5-88e1-38ecaff19e34/image.png" alt=""></p>
<h3 id="parameter-server">parameter server</h3>
<p>파라미터 서버는 ROS 애플리케이션의 노드들 간 대체 통신 프로토콜을 제공한다.</p>
<h4 id="그림-설명">그림 설명</h4>
<pre><code>+---------------------+
|      ROS Master     |
|  +---------------+  |
|  |  Parameter    |  |
|  |    Server     |  |
|  +---------------+  |
+---------------------+
         |  |
         |  |
    +----+  +----+
    |           |
+---v---+   +---v---+
| Node1 |   | Node2 |
+-------+   +-------+
</code></pre><h4 id="그림-설명--rviz">그림 설명 + RViz</h4>
<p>위에 설명한 RViz는 Node와 같은 선상에 있어 그림으로 나타내면 아래와 같다.</p>
<pre><code>+---------------------+
|      ROS Master     |
|  +---------------+  |
|  |  Parameter    |  |
|  |    Server     |  |
|  +---------------+  |
+---------------------+
         |  |
         |  |
    +----+  +----+
    |           |
+---v---+   +---v---+   +-------+
| Node1 |   | Node2 |   | RViz  |
+-------+   +-------+   +-------+
    |           |           ^
    |           |           |
    +-----------+-----------+</code></pre><p>RViz도 하나의 ROS 노드로 작동하며,
RViz는 ROS Master 및 Parameter Server와 연결돼있고, RViz가 ROS Master를 통해 시스템에 등록되고, Parameter Server에서 설정을 읽거나 쓸 수 있음을 의미한다.</p>
<p>RViz와 다른 노드들 사이의 선은 RViz가 다른 노드들과 통신할 수 있음을 나타내며 이들은 서로 토픽을 통해 이루어진다.</p>
<h4 id="이-구조에서-rviz의-역할">이 구조에서 RViz의 역할</h4>
<ul>
<li>RViz는 다른 노드들이 발행하는 데이터를 구독하여 시각화</li>
<li>Parameter Server에서 설정을 읽어와 시각화 구성에 사용</li>
<li>사용자가 RViz에서 변경한 설정을 Parameter Server에 저장</li>
<li>ROS Master를 통해 시스템의 다른 부분과 통신하고 필요한 토픽을 찾음</li>
</ul>
<h4 id="node-예시">Node 예시</h4>
<ol>
<li><p>설명: ROS의 기본 연산 단위, 특정 작업을 수행하는 실행 가능한 프로그램</p>
</li>
<li><p>역할: 센서 데이터 처리, 모터 제어, 알고리즘 실행 등</p>
</li>
<li><p>실제 사용:
센서 드라이버 노드: 카메라, 라이다, IMU 등의 센서 데이터 발행
모터 제어 노드: 로봇의 모터를 제어하여 움직임 생성
SLAM 노드: 동시적 위치추정 및 지도 작성 알고리즘 실행
내비게이션 노드: 경로 계획 및 장애물 회피 알고리즘 실행
이미지 처리 노드: 컴퓨터 비전 알고리즘을 사용한 이미지 분석</p>
</li>
</ol>
<h4 id="parameter-server-추가-설명">parameter server 추가 설명</h4>
<ol>
<li>설명: 키-값 쌍으로 구성된 공유 딕셔너리로, 노드 간에 설정을 공유</li>
<li>역할: 전역 설정 저장, 노드 간 설정 공유</li>
<li>실제 사용:
로봇의 물리적 특성 저장 (무게, 크기 등)
센서 설정 저장 (카메라 해상도, 레이저 스캐너 범위 등)
알고리즘 파라미터 저장 (PID 제어기 게인, 경로 계획 파라미터 등)</li>
</ol>
<h4 id="ros-master">ROS Master</h4>
<ol>
<li>설명: ROS 시스템의 중추로, 노드 간 통신을 관리하고 조정합니다.</li>
<li>역할: 노드 등록, 노드 간 연결 설정, 파라미터 서버 호스팅</li>
<li>실제 사용: 모든 ROS 시스템에서 기본적으로 사용됩니다. &#39;roscore&#39; 명령어로 실행</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[Robot Model - URDF 2 에러 해결]]></title>
            <link>https://velog.io/@smile_b/Robot-Model-URDF-2</link>
            <guid>https://velog.io/@smile_b/Robot-Model-URDF-2</guid>
            <pubDate>Fri, 12 Jul 2024 14:59:10 GMT</pubDate>
            <description><![CDATA[<p>두개의 에러 발생</p>
<p>ROS </p>
<ol>
<li>version error</li>
</ol>
<pre><code>Command failed: bash --login -c &quot;xacro &#39;/home/vboxuser/bumperbot_ws/src/bumperbot_description/urdf/bumperbot.urdf&#39; &amp;&amp; env&quot;
XML parsing error: XML or text declaration not at start of entity: line 22, column 0
when processing file: /home/vboxuser/bumperbot_ws/src/bumperbot_description/urdf/bumperbot.urdf

Check that:
 - Your XML is well-formed
 - You have the xacro xmlns declaration: xmlns:xacro=&quot;http://www.ros.org/wiki/xacro&quot;
</code></pre><p>error</p>
<p><a href="https://github.com/gkjohnson/vscode-urdf-preview?tab=readme-ov-file">https://github.com/gkjohnson/vscode-urdf-preview?tab=readme-ov-file</a></p>
<ol start="2">
<li>문법에러</li>
</ol>
<pre><code>Could not render URDF due to: Error: Vector ${vec} does not have 3 values
Error: Vector ${vec} does not have 3 values
    at h (https://file+.vscode-resource.vscode-cdn.net/home/vboxuser/.vscode/extensions/ms-iot.vscode-ros-0.9.6/dist/webview.js:2:1481833)
    at https://file+.vscode-resource.vscode-cdn.net/home/vboxuser/.vscode/extensions/ms-iot.vscode-ros-0.9.6/dist/webview.js:2:1488205
    at Generator.next (&lt;anonymous&gt;)
    at https://file+.vscode-resource.vscode-cdn.net/home/vboxuser/.vscode/extensions/ms-iot.vscode-ros-0.9.6/dist/webview.js:2:1485370
    at new Promise (&lt;anonymous&gt;)
    at y (https://file+.vscode-resource.vscode-cdn.net/home/vboxuser/.vscode/extensions/ms-iot.vscode-ros-0.9.6/dist/webview.js:2:1485115)
    at S (https://file+.vscode-resource.vscode-cdn.net/home/vboxuser/.vscode/extensions/ms-iot.vscode-ros-0.9.6/dist/webview.js:2:1487153)
    at https://file+.vscode-resource.vscode-cdn.net/home/vboxuser/.vscode/extensions/ms-iot.vscode-ros-0.9.6/dist/webview.js:2:1488908
    at Generator.next (&lt;anonymous&gt;)
    at https://file+.vscode-resource.vscode-cdn.net/home/vboxuser/.vscode/extensions/ms-iot.vscode-ros-0.9.6/dist/webview.js:2:1485370</code></pre><pre><code>The following packages were not found in the workspace:
bumperbot_description

NOTE: If this occurs at startup, please try saving the open file to refresh.</code></pre><h2 id="fix">fix</h2>
<p><img src="https://velog.velcdn.com/images/smile_b/post/ad1f13d9-143d-47ce-9185-cbeb89458656/image.png" alt="">
<img src="https://velog.velcdn.com/images/smile_b/post/22541632-236b-4dc2-9814-6ff0a618b5b5/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/87ec600e-69ae-4a02-b183-914e9a5c205d/image.png" alt="">
라즈베리파이, Nano 고정을 위한 브라켓 두개, 바퀴 2개 몸체 한개를 우선 연결 시켰다.</p>
<h3 id="수정한-부분">수정한 부분.</h3>
<h4 id="1-extension">1. Extension</h4>
<p><img src="https://velog.velcdn.com/images/smile_b/post/c282f056-9cf4-4fea-a1ab-a0450120c826/image.png" alt="">
<strong>0.9.6</strong>버전으로 설치했음, 그냥 다운로드하면 0.9.2로 다운로드 되는데 시험판, 테스트판으로 설치하는 설정으로 다운로드하면 0.9.6 버전으로 다운로드 가능
<img src="https://velog.velcdn.com/images/smile_b/post/e4bec910-f3bc-4842-bd38-62155a375e5b/image.png" alt="">
다른버전 설치로 버전을 옮기면서 테스트 했는데</p>
<h4 id="2-workspace-activate">2. workspace activate</h4>
<p>bumperbot_ws 폴더를 열고있는 VScode 터미널에서 아래 명령어를 실행시켜줌</p>
<pre><code>source ~/bumperbot_ws/devel/setup.bash
cd ~/bumperbot_ws
catkin_make
source devel/setup.bash</code></pre><h4 id="3-cmakelists">3. CMakeLists</h4>
<p>Extension 설치 관련으로 설정하다가 4개 설정칸이 떠서 여러번 테스트 하다 두번째것으로 했는데 그 뒤로부터 vscode 실행시 자동으로 bash 실행
<img src="https://velog.velcdn.com/images/smile_b/post/0a5705d2-0dc6-4ffd-8c23-2a0e15ded86c/image.png" alt="">
vscode settings.js edit
<strong>&quot;cmake.sourceDirectory&quot;: &quot;/home/vboxuser/bumperbot_ws/src&quot;</strong></p>
<p>요약하자면 버전 수정 &gt; WS 활성화가 돼야 동작 &gt; CMake로 WS 활성 자동화 &gt; 했는데 urdf preview에 변화가 없으면 다시 urdf 실행으로 해결하였다.</p>
<p>테스트로 virtual box를 재부팅 후 vscode를 실행시켰을때에도 자동으로 bash 실행과 preview가 정상적으로 동작했다.</p>
<h3 id="fix-code">Fix code</h3>
<pre><code>&lt;?xml version=&quot;1.0&quot;?&gt;

&lt;!-- 
로봇 구조 요약:
1. base_footprint: 로봇의 기준점
2. base_link: 로봇의 주 본체
3. wheel_right_link: 오른쪽 바퀴
4. wheel_left_link: 왼쪽 바퀴
5. caster_front_link: 전방 캐스터 휠
6. caster_rear_link: 후방 캐스터 휠

조인트 구조:
- base_joint: base_footprint와 base_link 연결 (고정)
- wheel_right_joint: base_link와 오른쪽 바퀴 연결 (연속 회전)
- wheel_left_joint: base_link와 왼쪽 바퀴 연결 (연속 회전)
- caster_front_joint: base_link와 전방 캐스터 연결 (고정)
- caster_rear_joint: base_link와 후방 캐스터 연결 (고정)

이 로봇은 두 개의 구동 바퀴와 두 개의 캐스터 휠을 가진 이동 로봇입니다.
STL 파일을 사용하여 각 부품의 3D 모델을 정의하고 있습니다.
--&gt;

&lt;!-- 로봇 정의 시작 --&gt;
&lt;robot name=&quot;bumperbot&quot;&gt;
    &lt;!-- 베이스 발자국 링크 정의 --&gt;
    &lt;link name=&quot;base_footprint&quot;&gt;
    &lt;/link&gt;

    &lt;!-- 베이스 링크 정의 --&gt;
    &lt;link name=&quot;base_link&quot;&gt;
        &lt;visual&gt;
            &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&gt;
            &lt;geometry&gt;
                &lt;!-- 베이스 링크의 3D 모델 파일 지정 --&gt;
                &lt;mesh filename=&quot;package://bumperbot_description/meshes/base_link.STL&quot;/&gt;
            &lt;/geometry&gt;
        &lt;/visual&gt;
    &lt;/link&gt;

    &lt;!-- 베이스 발자국과 베이스 링크를 연결하는 고정 조인트 --&gt;
    &lt;joint name=&quot;base_joint&quot; type=&quot;fixed&quot;&gt;
        &lt;parent link=&quot;base_footprint&quot;/&gt;
        &lt;child link=&quot;base_link&quot;/&gt;
        &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0.033&quot;/&gt;
    &lt;/joint&gt;

    &lt;!-- 오른쪽 바퀴 링크 정의 --&gt;
    &lt;link name=&quot;wheel_right_link&quot;&gt;
        &lt;visual&gt;
            &lt;origin rpy=&quot;1.57 0 0&quot; xyz=&quot;0 0 0&quot;/&gt;
            &lt;geometry&gt;
                &lt;!-- 오른쪽 바퀴의 3D 모델 파일 지정 --&gt;
                &lt;mesh filename=&quot;package://bumperbot_description/meshes/wheel_right_link.STL&quot;/&gt;
            &lt;/geometry&gt;
        &lt;/visual&gt;
    &lt;/link&gt;

    &lt;!-- 오른쪽 바퀴 조인트 정의 (연속 회전) --&gt;
    &lt;joint name=&quot;wheel_right_joint&quot; type=&quot;continuous&quot;&gt;
        &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 -0.07 0&quot;/&gt;
        &lt;parent link=&quot;base_link&quot;/&gt;
        &lt;child link=&quot;wheel_right_link&quot;/&gt;
        &lt;axis xyz=&quot;0 1 0&quot;/&gt;
    &lt;/joint&gt;

    &lt;!-- 왼쪽 바퀴 링크 정의 --&gt;
    &lt;link name=&quot;wheel_left_link&quot;&gt;
        &lt;visual&gt;
            &lt;origin rpy=&quot;-1.57 0 0&quot; xyz=&quot;0 0 0&quot;/&gt;
            &lt;geometry&gt;
                &lt;!-- 왼쪽 바퀴의 3D 모델 파일 지정 --&gt;
                &lt;mesh filename=&quot;package://bumperbot_description/meshes/wheel_left_link.STL&quot;/&gt;
            &lt;/geometry&gt;
        &lt;/visual&gt;
    &lt;/link&gt;

    &lt;!-- 왼쪽 바퀴 조인트 정의 (연속 회전) --&gt;
    &lt;joint name=&quot;wheel_left_joint&quot; type=&quot;continuous&quot;&gt;
        &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0.07 0&quot;/&gt;
        &lt;parent link=&quot;base_link&quot;/&gt;
        &lt;child link=&quot;wheel_left_link&quot;/&gt;
        &lt;axis xyz=&quot;0 1 0&quot;/&gt;
    &lt;/joint&gt;

    &lt;!-- 전방 캐스터 링크 정의 --&gt;
    &lt;link name=&quot;caster_front_link&quot;&gt;
        &lt;visual&gt;
            &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&gt;
            &lt;geometry&gt;
                &lt;!-- 전방 캐스터의 3D 모델 파일 지정 --&gt;
                &lt;mesh filename=&quot;package://bumperbot_description/meshes/caster_front_link.STL&quot;/&gt;
            &lt;/geometry&gt;
        &lt;/visual&gt;
    &lt;/link&gt;

    &lt;!-- 전방 캐스터 조인트 정의 (고정) --&gt;
    &lt;joint name=&quot;caster_front_joint&quot; type=&quot;fixed&quot;&gt;
        &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0.0475 0 -0.0275&quot;/&gt;
        &lt;parent link=&quot;base_link&quot;/&gt;
        &lt;child link=&quot;caster_front_link&quot;/&gt;
    &lt;/joint&gt;   

    &lt;!-- 후방 캐스터 링크 정의 --&gt;
    &lt;link name=&quot;caster_rear_link&quot;&gt;
        &lt;visual&gt;
            &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&gt;
            &lt;geometry&gt;
                &lt;!-- 후방 캐스터의 3D 모델 파일 지정 --&gt;
                &lt;mesh filename=&quot;package://bumperbot_description/meshes/caster_rear_link.STL&quot;/&gt;
            &lt;/geometry&gt;
        &lt;/visual&gt;
    &lt;/link&gt;

    &lt;!-- 후방 캐스터 조인트 정의 (고정) --&gt;
    &lt;joint name=&quot;caster_rear_joint&quot; type=&quot;fixed&quot;&gt;
        &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;-0.0475 0 -0.0275&quot;/&gt;
        &lt;parent link=&quot;base_link&quot;/&gt;
        &lt;child link=&quot;caster_rear_link&quot;/&gt;
    &lt;/joint&gt;
&lt;/robot&gt;
&lt;!-- 로봇 정의 끝 --&gt;
</code></pre><p><strong>vscode</strong>
settings.json</p>
<pre><code>{
    &quot;python.autoComplete.extraPaths&quot;: [
        &quot;/opt/ros/noetic/lib/python3/dist-packages&quot;
    ],
    &quot;python.analysis.extraPaths&quot;: [
        &quot;/opt/ros/noetic/lib/python3/dist-packages&quot;
    ],
    &quot;ros.distro&quot;: &quot;noetic&quot;,
    &quot;ros.packagePath&quot;: [
        &quot;/home/vboxuser/bumperbot_ws/src&quot;,
        &quot;/opt/ros/noetic/share&quot;
    ],
    **&quot;cmake.sourceDirectory&quot;: &quot;/home/vboxuser/bumperbot_ws/src&quot;**
}
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Robot Model - URDF 1]]></title>
            <link>https://velog.io/@smile_b/Robot-Model-URDF-1</link>
            <guid>https://velog.io/@smile_b/Robot-Model-URDF-1</guid>
            <pubDate>Wed, 10 Jul 2024 13:22:24 GMT</pubDate>
            <description><![CDATA[<p>워크스페이스까지 만들었는데, 시뮬레이션을 동작하기 위해서는
Model &gt; Visualize &gt; Simulate &gt; 문제점 찾기 &gt; 수정 의 순서로 진행할 예정이다.</p>
<h2 id="model">Model</h2>
<h3 id="urdf">URDF</h3>
<p>Model 단계에 해당하는 URDF로 XML 태그를 사용하여 로봇의 구조와 구성 요소를 표현한다.
HTML과 유사한구조</p>
<h4 id="urdf-구성">URDF 구성</h4>
<p><img src="https://velog.velcdn.com/images/smile_b/post/2299e366-6ed4-488d-94e0-c62115442a16/image.png" alt=""></p>
<h4 id="주요-urdf-태그">주요 URDF 태그</h4>
<ul>
<li><robot> 전체 로봇 구조를 정의하는 최상위 태그</li>
<li><link>: 로봇의 개별 구성 요소를 표현 visual, collision, inertial 등의 하위 태그로 속성 정의</li>
<li><joint>: 두 링크를 연결하고 그 속성을 정의
부모-자식 관계로 트리 구조 형성
연결 유형(고정, 회전, 이동 등) 지정
회전축, 이동 제한 등 추가 속성 정의 가능</li>
</ul>
<h4 id="구조">구조</h4>
<pre><code>&lt;robot&gt;
  &lt;link&gt;
  ...
  &lt;/link&gt;
  &lt;joint&gt;
  ...
  &lt;/joint&gt;
&lt;/robot&gt;</code></pre><p>총 6개의 부품을 연결</p>
<p> <img src="https://velog.velcdn.com/images/smile_b/post/a414c0b8-072b-459d-979b-1550247849f2/image.png" alt=""></p>
<ol>
<li>base_link
<img src="https://velog.velcdn.com/images/smile_b/post/b888b331-029b-4f48-aa56-d372abffaa87/image.png" alt=""></li>
<li>imu_link ( 자이로센서)
<img src="https://velog.velcdn.com/images/smile_b/post/bad2fc40-6366-4872-ba3c-fe2d2fe665f5/image.png" alt=""></li>
<li>바퀴 두짝<ol start="4">
<li>caster-rear, front<h4 id="실제-코드">실제 코드</h4>
</li>
</ol>
</li>
</ol>
<pre><code>&lt;?xml version=&quot;1.0&quot;?&gt;

&lt;!-- 
&lt;?xml version=&quot;1.0&quot;?&gt;

&lt;!-- 
로봇 구조 요약:
1. base_footprint: 로봇의 기준점
2. base_link: 로봇의 주 본체
3. wheel_right_link: 오른쪽 바퀴
4. wheel_left_link: 왼쪽 바퀴
5. caster_front_link: 전방 캐스터 휠
6. caster_rear_link: 후방 캐스터 휠

조인트 구조:
- base_joint: base_footprint와 base_link 연결 (고정)
- wheel_right_joint: base_link와 오른쪽 바퀴 연결 (연속 회전)
- wheel_left_joint: base_link와 왼쪽 바퀴 연결 (연속 회전)
- caster_front_joint: base_link와 전방 캐스터 연결 (고정)
- caster_rear_joint: base_link와 후방 캐스터 연결 (고정)

이 로봇은 두 개의 구동 바퀴와 두 개의 캐스터 휠을 가진 이동 로봇입니다.
STL 파일을 사용하여 각 부품의 3D 모델을 정의하고 있습니다.
--&gt;

&lt;!-- 로봇 정의 시작 --&gt;
&lt;robot name=&quot;bumperbot&quot;&gt;
    &lt;!-- 베이스 발자국 링크 정의 --&gt;
    &lt;link name=&quot;base_footprint&quot;&gt;
    &lt;/link&gt;

    &lt;!-- 베이스 링크 정의 --&gt;
    &lt;link name=&quot;base_link&quot;&gt;
        &lt;visual&gt;
            &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&gt;
            &lt;geometry&gt;
                &lt;!-- 베이스 링크의 3D 모델 파일 지정 --&gt;
                &lt;mesh filename=&quot;package://bumperbot_description/meshes/base_link.STL&quot;/&gt;
            &lt;/geometry&gt;
        &lt;/visual&gt;
    &lt;/link&gt;

    &lt;!-- 베이스 발자국과 베이스 링크를 연결하는 고정 조인트 --&gt;
    &lt;joint name=&quot;base_joint&quot; type=&quot;fixed&quot;&gt;
        &lt;parent link=&quot;base_footprint&quot;/&gt;
        &lt;child link=&quot;base_link&quot;/&gt;
        &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0.033&quot;/&gt;
    &lt;/joint&gt;

    &lt;!-- 오른쪽 바퀴 링크 정의 --&gt;
    &lt;link name=&quot;wheel_right_link&quot;&gt;
        &lt;visual&gt;
            &lt;origin rpy=&quot;1.57 0 0&quot; xyz=&quot;0 0 0&quot;/&gt;
            &lt;geometry&gt;
                &lt;!-- 오른쪽 바퀴의 3D 모델 파일 지정 --&gt;
                &lt;mesh filename=&quot;package://bumperbot_description/meshes/wheel_right_link.STL&quot;/&gt;
            &lt;/geometry&gt;
        &lt;/visual&gt;
    &lt;/link&gt;

    &lt;!-- 오른쪽 바퀴 조인트 정의 (연속 회전) --&gt;
    &lt;joint name=&quot;wheel_right_joint&quot; type=&quot;continuous&quot;&gt;
        &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 -0.07 0&quot;/&gt;
        &lt;parent link=&quot;base_link&quot;/&gt;
        &lt;child link=&quot;wheel_right_link&quot;/&gt;
        &lt;axis xyz=&quot;0 1 0&quot;/&gt;
    &lt;/joint&gt;

    &lt;!-- 왼쪽 바퀴 링크 정의 --&gt;
    &lt;link name=&quot;wheel_left_link&quot;&gt;
        &lt;visual&gt;
            &lt;origin rpy=&quot;-1.57 0 0&quot; xyz=&quot;0 0 0&quot;/&gt;
            &lt;geometry&gt;
                &lt;!-- 왼쪽 바퀴의 3D 모델 파일 지정 --&gt;
                &lt;mesh filename=&quot;package://bumperbot_description/meshes/wheel_left_link.STL&quot;/&gt;
            &lt;/geometry&gt;
        &lt;/visual&gt;
    &lt;/link&gt;

    &lt;!-- 왼쪽 바퀴 조인트 정의 (연속 회전) --&gt;
    &lt;joint name=&quot;wheel_left_joint&quot; type=&quot;continuous&quot;&gt;
        &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0.07 0&quot;/&gt;
        &lt;parent link=&quot;base_link&quot;/&gt;
        &lt;child link=&quot;wheel_left_link&quot;/&gt;
        &lt;axis xyz=&quot;0 1 0&quot;/&gt;
    &lt;/joint&gt;

    &lt;!-- 전방 캐스터 링크 정의 --&gt;
    &lt;link name=&quot;caster_front_link&quot;&gt;
        &lt;visual&gt;
            &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&gt;
            &lt;geometry&gt;
                &lt;!-- 전방 캐스터의 3D 모델 파일 지정 --&gt;
                &lt;mesh filename=&quot;package://bumperbot_description/meshes/caster_front_link.STL&quot;/&gt;
            &lt;/geometry&gt;
        &lt;/visual&gt;
    &lt;/link&gt;

    &lt;!-- 전방 캐스터 조인트 정의 (고정) --&gt;
    &lt;joint name=&quot;caster_front_joint&quot; type=&quot;fixed&quot;&gt;
        &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0.0475 0 -0.0275&quot;/&gt;
        &lt;parent link=&quot;base_link&quot;/&gt;
        &lt;child link=&quot;caster_front_link&quot;/&gt;
    &lt;/joint&gt;   

    &lt;!-- 후방 캐스터 링크 정의 --&gt;
    &lt;link name=&quot;caster_rear_link&quot;&gt;
        &lt;visual&gt;
            &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&gt;
            &lt;geometry&gt;
                &lt;!-- 후방 캐스터의 3D 모델 파일 지정 --&gt;
                &lt;mesh filename=&quot;package://bumperbot_description/meshes/caster_rear_link.STL&quot;/&gt;
            &lt;/geometry&gt;
        &lt;/visual&gt;
    &lt;/link&gt;

    &lt;!-- 후방 캐스터 조인트 정의 (고정) --&gt;
    &lt;joint name=&quot;caster_rear_joint&quot; type=&quot;fixed&quot;&gt;
        &lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;-0.0475 0 -0.0275&quot;/&gt;
        &lt;parent link=&quot;base_link&quot;/&gt;
        &lt;child link=&quot;caster_rear_link&quot;/&gt;
    &lt;/joint&gt;
&lt;/robot&gt;
&lt;!-- 로봇 정의 끝 --&gt;

</code></pre><p>STL 파일
<a href="https://drive.google.com/drive/folders/11_n552jfseJHNUhTUXIdhJ0XULIWUrl6?usp=sharing">https://drive.google.com/drive/folders/11_n552jfseJHNUhTUXIdhJ0XULIWUrl6?usp=sharing</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[A1 mini 설정 및 출력]]></title>
            <link>https://velog.io/@smile_b/A1-mini-3D-%ED%94%84%EB%A6%B0%ED%84%B0</link>
            <guid>https://velog.io/@smile_b/A1-mini-3D-%ED%94%84%EB%A6%B0%ED%84%B0</guid>
            <pubDate>Mon, 08 Jul 2024 19:08:23 GMT</pubDate>
            <description><![CDATA[<pre><code>&lt;center&gt;&lt;img src = &quot;&quot; width = &quot;30%&quot; height = &quot;30%&quot;&gt;&lt;/center&gt;</code></pre><p>이번에 ROS 프로젝트를 진행하면서 몸체가 필요해서 3D 프린터 출력대행을 알아보다가 터무니 없이 비싼것을 보고 그냥 Bambu labs의 A1 mini를 구매했다.</p>
<p>내수용은 30만원이고 할인때 사면 더 저렴하지만 글로벌용 KC인증받은 제품을 구매했다.(38만원)</p>
<center><img src = "https://velog.velcdn.com/images/smile_b/post/187a5cdc-3736-4b91-8564-7fa85b93c901/image.jpg" width = "30%" height = "30%"></center>

<p>3년 전에 저가형 3D 프린터로 Anet A8을 사용한적이 있었는데, 이 때 정말 힘들었다.</p>
<p>조립도 수평맞춰 해야하고, 레벨링도 매번 신경 써줘야하고 맞춰준다해도 다른 사소한 문제들로인해 이쁜 출력물이 나오지 않았다.</p>
<p>그냥.. 정상적인 동작을 하는것에 행복함을 느낄정도였다.
<img src="https://velog.velcdn.com/images/smile_b/post/841d7ed0-868d-447b-8b14-96e0d94823bd/image.png" alt=""></p>
<p>다시 본론으로 돌아와 A1 mini는 조립이 돼있는 상태로 와서 z축 고정부분과 몇개 부품만 껴주면된다.</p>
<center><img src = "https://velog.velcdn.com/images/smile_b/post/c7bf623a-ee49-4cee-8b9f-54123e0ade14/image.jpg" width = "50%" height = "50%"></center>

<p>전원을 연결하면 펌웨어로 소음을 줄이기 전과 후를 보여준다. 출력속도 0~100까지는 차이가 많이 나지만</p>
<p>100 이상부터는 차이가 별로없다. </p>
<p>그런데 100 이상으로 프린트를 출력할 일은 솔직히 많이 없다.</p>
<center><img src = "https://velog.velcdn.com/images/smile_b/post/15d37825-746c-4dc3-a3b1-9368e398649f/image.jpg" width = "50%" height = "50%"></center>

<p>박스 안에 동봉돼있던 것으로 저 출력물 뒤의 저거 하나가 딸려온다.</p>
<h3 id="휴대폰-앱-연동">휴대폰 앱 연동</h3>
<p>2.4GHz wifi에 연결하여 원격으로도 출력이 가능하고, 앱 안에 있는 디자인도 출력이 돼서 저 보트에 맞는 디자인을 선택해서 출력해줬다.</p>
<center><img src = "https://velog.velcdn.com/images/smile_b/post/59a9128f-26e2-454a-9696-eb4462bb64a9/image.jpg" width = "30%" height = "10%"></center>
<center><img src = "https://velog.velcdn.com/images/smile_b/post/afb88f58-4210-4f53-8987-1ce6fd63381f/image.jpg" width = "30%" height = "10%"></center>

<p>어플사용시 대표적인 사용기능으로 </p>
<ol>
<li>원격 출력</li>
<li>타임랩스 지원
두 가지가 가장 크고 나머지는 잘 안쓰는 내용들이다.</li>
</ol>
<p>어플에서 타임랩스를 설정하고 했고, 한 층 출력할때마다 노즐이 바깥부분으로 나가 촬영하는 모습을 보였지만 영상이 저장되지 않았다.</p>
<p>앱에서 타임랩스를 설정했는데, 프린터 내에서도 타임랩스 설정하는것이 있었다.</p>
<p>다음에는 프린터에서 타임랩스를 설정해야겠다.</p>
<h3 id="출력">출력</h3>
<p>우선 오토레벨링을 해준다. 바닥의 판은 가만히 있지만 출력할때마다 판에 16개 점을 찍으면서 레벨링을 알아서 조절해준다.</p>
<p>여기서 많은 감동을 받았다.</p>
<center><img src = "https://velog.velcdn.com/images/smile_b/post/635d9405-cb7d-4a08-8792-d49f453b4c90/image.jpg" width = "30%" height = "10%"></center>
그냥 아무런 설정 없이 출력 딸깍 했을뿐인데 꽤 괜찮은 출력물이 나왔다.
<center><img src = "https://velog.velcdn.com/images/smile_b/post/844f00e9-bd83-47de-985a-a150e5bef27a/image.jpg" width = "30%" height = "10%"></center>
구성품으로는 배와 핸들을 출력했고
<center><img src = "https://velog.velcdn.com/images/smile_b/post/a0381aaa-9d26-424d-9378-31fae95d8c23/image.jpg" width = "30%" height = "10%"></center>
핸들은 배 안에 잘 꽂아줬다. 딸깍 하고 들어간다.
<center><img src = "https://velog.velcdn.com/images/smile_b/post/2f3f2996-6857-4888-918b-c36a3da1ea38/image.jpg" width = "30%" height = "10%"></center>
배 아래에 출력이 이상하게 된 부분이 있었는데, 이런 부분은 출력속도를 줄여주면 해결될것같다. 

<p>출력속도가 말도안되게 빨랐다.</p>
<center><img src = "https://velog.velcdn.com/images/smile_b/post/213b1e20-a107-40bc-a190-e20608350a24/image.jpg" width = "30%" height = "10%"></center>

<h3 id="결론">결론</h3>
<p>Bambu 프린터 사자.
사용하다가 여윳돈이 생기면 150만원 짜리 제품도 구매할 의사가 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ROS 환경에서 Topic publisher + BOM List]]></title>
            <link>https://velog.io/@smile_b/ROS-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-Topic-publisher</link>
            <guid>https://velog.io/@smile_b/ROS-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-Topic-publisher</guid>
            <pubDate>Sat, 29 Jun 2024 14:41:14 GMT</pubDate>
            <description><![CDATA[<p><a href="https://github.com/Kimseongbeen/Study/tree/master/ROS/2.Simple%20Publisher">Simple publisher Github</a></p>
<p>ROS 워크스페이스에서 구독, 게시의 간단한 예시를 실습</p>
<h3 id="추가-bom-list">추가) BOM List</h3>
<p>저번에 생각하고있던 구매 리스트를 작성하였다.</p>
<p>원래 알리, 아마존에서 구매를 했지만, 배송기간, 배달비를 생각을 했을때 너무 오랜기간 걸리고 </p>
<p>많이 차이가 안나서 한국에서 주문을 했고, 바퀴는 한국이 많이 비싸길래 알리에서 주문을 했다.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/7ecb69e2-37de-4f14-9344-f4ae3921e8ed/image.png" alt=""></p>
<p>바퀴가 두개기에 균형을 잡기위한 MPU6050</p>
<p>자율주행을 하다 속도가 불안정해지면 테스트의 변수가 많아지므로 안정적인 출력을 위해 3S(11.1V) Lipo 베터리 구매</p>
<p>이후 나머지는 전원, HSI 부분으로 나중에 물건이 도착하면 진행하도록 하겠다.
<img src="https://velog.velcdn.com/images/smile_b/post/79ddec6e-55b9-41d9-8a51-1a4d911ff9a2/image.png" alt=""></p>
<p>그 전까지는 시뮬레이션 사용</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ROS 작업 공간(Workspace) 만들기]]></title>
            <link>https://velog.io/@smile_b/ROS-%EC%9E%91%EC%97%85-%EA%B3%B5%EA%B0%84Workspace-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@smile_b/ROS-%EC%9E%91%EC%97%85-%EA%B3%B5%EA%B0%84Workspace-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Thu, 27 Jun 2024 18:40:07 GMT</pubDate>
            <description><![CDATA[<p>ROS (Robot Operating System)는 로봇 응용 프로그램을 위해 많은 운영 체제 기능을 시뮬레이트하는 소프트웨어 프레임워크이다.</p>
<h3 id="1-워크스페이스-만들기">1. 워크스페이스 만들기</h3>
<p><img src="https://velog.velcdn.com/images/smile_b/post/ef6699cb-9729-4d64-9f3c-76919c0a2039/image.png" alt=""></p>
<p>터미널에서 bumperbot_ws 라는 폴더를 만들고 이동해주자.</p>
<h3 id="2-src-폴더-생성">2. src 폴더 생성</h3>
<p><img src="https://velog.velcdn.com/images/smile_b/post/ba95a8a5-64c2-4e7a-a84d-04922fd2cb69/image.png" alt="">
src 라는 폴더를 생성</p>
<h3 id="3-워크스페이스-초기화">3. 워크스페이스 초기화</h3>
<p>ROS 오버레이 - 모든 ROS 패키지와 코스를 따라 개발할 모든 새 패키지에 접근할 수 있다.</p>
<pre><code>catkin_make</code></pre><p>캣킨은 기본적인 빌드 도구이며 빌드 도구는 소스코드를 변환한다.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/6f04b0da-9403-4dda-ab26-cc32a1ff3e9d/image.png" alt="">
실행을 하게 되면 bulid, devel 이라는 폴더 생성
이 두 폴더는 소스 폴더에 있는 코드의 실행과 컴파일을 담당</p>
<h3 id="4-ros-패키지-생성">4. ROS 패키지 생성</h3>
<pre><code>catkin_create_pkg bumperbot_examples roscpp rospy std_msgs </code></pre><p>src 파일로 이동해 위 명령어 실행</p>
<p>사용 방법은 </p>
<pre><code>#catkin_create_pkg [패키지 이름] [종속성 라이브러리]</code></pre><p>roscpp: C++ 스크립트 내에서 ROS 기능을 사용가능
rospy:  python 스크립트 내에서 ROS 기능을 사용가능
std_msgs: 정수문자열같은 정의 포함 라이브러리</p>
<pre><code># 잘못생성했을때
rm -rf [폴더이름]</code></pre><p><img src="https://velog.velcdn.com/images/smile_b/post/2b48a9b8-35e6-46d7-b6c5-2a2f71b8054a/image.png" alt="">
폴더를 생성 후 들어가면 2개 폴더, 2개 파일 생성</p>
<p>CMakelists.txt 파일은 컴파일러가 어떻게 빌드하고 소스 코드를 실행 가능한 변환해야 하는 명령서 같은 것</p>
<p>package.xml - 라이브러리 종속성 표시</p>
<h3 id="5-ws-다시-구축">5. WS 다시 구축</h3>
<p>buperbot_examples 폴더로 나와서 WS 를 다시 구축해주면
<img src="https://velog.velcdn.com/images/smile_b/post/eb58e666-8514-42a2-9339-74ee0e242255/image.png" alt="">
맨 처음과 나왔던 결과와는 다르게 출력된다.</p>
<h3 id="6-ws-활성화">6. WS 활성화</h3>
<p>bumperbot 폴더가 ROS 오버레이로 인식 &gt; devel 폴더에 자동으로 생성된 파일을 소싱
<img src="https://velog.velcdn.com/images/smile_b/post/f83c29da-69f7-403a-a077-7b0db04a46c1/image.png" alt=""></p>
<pre><code>source setup.bash
</code></pre><p><img src="https://velog.velcdn.com/images/smile_b/post/15f77d06-bda1-48c6-b6cd-fec0878e7af1/image.png" alt=""></p>
<p>이 명령어를 치면 WS가 활성화 된다.</p>
<p>이 작업을 통해 ROS가 bumperbot_examples 패키지를 알게 됐다 .</p>
<h3 id="7-ros-패키지-리다이렉션">7. ROS 패키지 리다이렉션</h3>
<p><img src="https://velog.velcdn.com/images/smile_b/post/7708cf22-cb4c-4bbd-9917-622664693140/image.png" alt="">
devel 폴더에서 roscd bumperbot_examples를 실행했을때 해당 폴더로 이동한다면, </p>
<p>이 패키지가 정상적으로 인식되고 있음을 나타낸다.</p>
<h4 id="주의점">주의점</h4>
<p>터미널을 껏다가 다시 켰을때
roscd bumperbot_examples를 실행하게 되면 찾지 못한다고 나온다.</p>
<p>프로젝트를 실행할때 마다 패키지(bumperbot_examples)가 든 워크스페이스(bumperbot_ws) 에 찾아 가야한다.
<img src="https://velog.velcdn.com/images/smile_b/post/df1f6237-c819-4b15-acdc-e64dddb527b7/image.png" alt=""></p>
<p>터미널을 다시 실행시켰을 때 보면, roscd 명령어가 동작하지 않는다.</p>
<blockquote>
<p><a href="https://github.com/Kimseongbeen/Study/tree/master/ROS/1.ROS_Workspace">과정.md github</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Setup 3 - VSCode & teminator]]></title>
            <link>https://velog.io/@smile_b/Setup-3-VSCode</link>
            <guid>https://velog.io/@smile_b/Setup-3-VSCode</guid>
            <pubDate>Thu, 27 Jun 2024 12:43:09 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/smile_b/post/7016e5b1-5e0a-4964-be2f-350e336bc648/image.png" alt="">
Ubuntu Software에 들어가서 VSCode를 설치</p>
<p>설치를 한 다음 Extension(확장) 에 들어간다.</p>
<p>들어가서 아래 5가지 항목을 다운로드 </p>
<ul>
<li><p>C++
<img src="https://velog.velcdn.com/images/smile_b/post/f054f43e-77be-45cd-a86a-ab706b81f7da/image.png" alt=""></p>
</li>
<li><p>python
<img src="https://velog.velcdn.com/images/smile_b/post/47d1ff1b-eec4-4cd0-9ba0-f849e80bdf45/image.png" alt=""></p>
</li>
<li><p>CMake
CMake Tools
<img src="https://velog.velcdn.com/images/smile_b/post/80122214-0ca7-46a3-af1d-b3e4f5c7158b/image.png" alt=""></p>
</li>
<li><p>XML
XML Tools
<img src="https://velog.velcdn.com/images/smile_b/post/bee9f733-5c95-4360-8876-6a97ddd8609b/image.png" alt=""></p>
</li>
<li><p>ROS
<img src="https://velog.velcdn.com/images/smile_b/post/075d591c-9492-43d4-8ac1-374cd40e326f/image.png" alt=""></p>
</li>
</ul>
<p>입력하고 맨 위에 있는 놈들을 다운로드 하면 된다.</p>
<p>VSCode를 사용하는 이유는 당연히 효율적으로 프로그램을 개발하기 위해서 이다.</p>
<p>그러고 터미널을 여러개로 나눠서 개발하기 위해
우분투(Ubuntu)에서 터미널 사용시 분할 윈도우 기능이 있는 Terminator라는 걸 설치했다.
<img src="https://velog.velcdn.com/images/smile_b/post/9ccf4d57-4ec9-4849-a315-fdf49843e8fc/image.png" alt=""></p>
<p>ctrl + shift + e, o 가 동작을 안한다.</p>
<p>알고보니 바로 하면 안되고 terminator라는 명령어를 입력하면 된다.
<img src="https://velog.velcdn.com/images/smile_b/post/849b761b-cf63-4999-9146-ee2c4d145e00/image.png" alt=""></p>
<p>그리고 ROS 사용하기 위한 설치 몇개 진행</p>
<pre><code># 로봇 제어를 위한 다양한 컨트롤러를 제공
sudo apt-get install ros-noetic-ros-controllers

# Gazebo 시뮬레이터에서 ROS 제어 기능을 사용할 수 있도록 지원
sudo apt-get install ros-noetic-gazebo-ros-control

# ROS 액션 라이브러리 관련 도구들을 설치
sudo apt-get install ros-noetic-actionlib-tools

# GUI를 사용하여 조인트 상태를 퍼블리시할 수 있도록 지원
sudo apt-get install ros-noetic-joint-state-publisher-gui

# 간단한 시뮬레이션 환경을 제공하는 ROS 패키지
sudo apt-get install ros-noetic-turtlesim

# 로봇의 위치 추정 및 로컬라이제이션을 위한 패키지
sudo apt-get install ros-noetic-robot-localization

# 조이스틱 입력을 처리하기 위한 ROS 패키지
sudo apt-get install ros-noetic-joy

# 조이스틱을 사용하여 로봇을 원격으로 조작할 수 있도록 지원
sudo apt-get install ros-noetic-joy-teleop
</code></pre><p>여기까지 하면 ROS 기본 세팅은 끝났다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Setup 2 - ROS 설치]]></title>
            <link>https://velog.io/@smile_b/Setup-2-ROS-%EC%84%A4%EC%B9%98</link>
            <guid>https://velog.io/@smile_b/Setup-2-ROS-%EC%84%A4%EC%B9%98</guid>
            <pubDate>Thu, 27 Jun 2024 10:43:56 GMT</pubDate>
            <description><![CDATA[<p><a href="https://wiki.ros.org/noetic/Installation/Ubuntu">https://wiki.ros.org/noetic/Installation/Ubuntu</a>
20.04 환경에서 ROS를 설치하는 공식 가이드인데,</p>
<p><a href="https://github.com/Kimseongbeen/Study/blob/master/ROS/readme.md">https://github.com/Kimseongbeen/Study/blob/master/ROS/readme.md</a>
귀찮으면 위에 github에 복붙할수있게 적어놨다.</p>
<p>설치하려는데 CMD가 안열림</p>
<h4 id="cmd-안열림-문제">CMD 안열림 문제</h4>
<p><img src="https://velog.velcdn.com/images/smile_b/post/1ccee2bf-6222-4251-821a-d3ac9134c187/image.png" alt="">
언어가 english - united로 돼있는데, korea로 바꿔주자
<a href="https://code-lab1.tistory.com/309">https://code-lab1.tistory.com/309</a>
내용에는 canada로 바꾸라했는데, 한글로 해도 된다.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/f44aeae6-c9a5-44ae-a2a9-e97288553594/image.png" alt="">
근데 여기서 재시작하면 폴더 이름을 한글로 변경할건지 물어보는데 아니요를 권장합니다.</p>
<p>왜냐하면,, 한글은 미움받고있어요</p>
<h3 id="root-권한-부여">root 권한 부여</h3>
<p>cmd 열었고, 이후에 root 권한을 부여해 줘야 설치가 가능하다.
<a href="https://prathapreddy-mudium.medium.com/vboxuser-is-not-in-the-sudoers-file-this-incident-will-be-reported-enable-sudo-in-ubuntu-resolved-305e7988c6bc">https://prathapreddy-mudium.medium.com/vboxuser-is-not-in-the-sudoers-file-this-incident-will-be-reported-enable-sudo-in-ubuntu-resolved-305e7988c6bc</a>
참고</p>
<pre><code>sudo apt install ros-noetic-desktop-full</code></pre><p>ROS 다운로드하는 명령어인데, 10분 넘게 걸립니다.</p>
<pre><code>echo &quot;source /opt/ros/noetic/setup.bash&quot; &gt;&gt; ~/.bashrc
source ~/.bashrc</code></pre><p>설치가 완료가 되면 ROS를 cmd를 오픈할때마다 사용할수있게 환경변수 설정</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/bc070eb8-446d-4ad0-ae03-d327734e86f7/image.png" alt="">
설정을 하고 &quot;roscode&quot;를 입력해서 위와같은 문구가 뜨면 성공적으로 설치</p>
<p>ctrl + c 로 해제</p>
<p>그 뒤 라이브러리 설치 하고 마무리</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Setup 1 - 가상 머신에 Ubuntu 설치]]></title>
            <link>https://velog.io/@smile_b/Setup-1-%EA%B0%80%EC%83%81-%EB%A8%B8%EC%8B%A0%EC%97%90-Ubuntu-%EC%84%A4%EC%B9%98</link>
            <guid>https://velog.io/@smile_b/Setup-1-%EA%B0%80%EC%83%81-%EB%A8%B8%EC%8B%A0%EC%97%90-Ubuntu-%EC%84%A4%EC%B9%98</guid>
            <pubDate>Thu, 27 Jun 2024 07:47:08 GMT</pubDate>
            <description><![CDATA[<h2 id="virtualbox-설치">VirtualBox 설치</h2>
<p><img src="https://velog.velcdn.com/images/smile_b/post/274310ef-c814-4878-a0d3-ba7c0f3318d0/image.png" alt="">
본인 OS에 맞게 VirtualBox를 설치해준다
<img src="https://velog.velcdn.com/images/smile_b/post/628426b7-a1e2-4bd7-a897-9f374b646366/image.png" alt="">
설정 건드리지 않고 다운로드 진행</p>
<h2 id="ubuntu-설치">Ubuntu 설치</h2>
<h3 id="설치-방법">설치 방법</h3>
<p>두가지 방식이 있다.</p>
<h4 id="virtualbox-설치-1">Virtualbox 설치</h4>
<p>말 그대로 virtualbox, 가상 환경을 만들고 그 환경에서 사용하는것</p>
<h4 id="dual부팅-설치">dual부팅 설치</h4>
<p>이거는 남는 공간이 많을때 하는것이 좋다. 예를들어 아예안쓰는 D 드라이브가 있다면 그 D 드라이브 자체를 우분투 환경으로 만드는것인데,</p>
<p>현재 지금 Windows를 사용하고 있는사람들은 C에 Window OS를 설치해서 사용하는것을 우분투로 사용하는것과 같다.</p>
<h4 id="방식--virtualbox-선택">방식 : Virtualbox 선택</h4>
<p>dual 부팅을 하면 깔끔하지만, virtualbox가 익숙하므로 이대로 진행하겠다.</p>
<p>설치를 위해선 ISO가 필요하다</p>
<blockquote>
<p><a href="https://releases.ubuntu.com/focal/?_gl=1*160rzew*_gcl_au*MTI2ODQxMDgyOC4xNzE5NDcxOTU2&amp;_ga=2.242881099.895368138.1719472008-1914906693.1719472008">ubuntu 공식 다운로드</a></p>
</blockquote>
<p>나는 20.04를 설치했는데 최근에 24 까지 나왔지만,, 항상 최신것을 사용하면 에러발생문제로 결국 안정된 버전으로 돌아온 기억이 있어서</p>
<p>예전 버전을 설치했다.
<img src="https://velog.velcdn.com/images/smile_b/post/833e6b95-5e0e-4d75-9ab5-7fe2d100ddda/image.png" alt="">
ISO를 클릭해 설치해준다.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/ba3001a5-c606-4f6e-8b4f-565d742efa93/image.png" alt=""></p>
<p>메모리 12G, CPU4개 할당해줬다. 시뮬레이션 돌릴거기고 하고, 사양이 괜찮으니까 많이주자.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/f379bd74-7b67-42d8-8903-36e5788978b8/image.png" alt=""></p>
<p>어차피 아예 안쓰는 디스크를 할당했으므로 100기가 정도 낭낭하게 잡았다.</p>
<p>최소 20GB는 필요하다.</p>
<p>20분정도 기다리면 설치가 완료된다.</p>
<p><img src="https://velog.velcdn.com/images/smile_b/post/ad49b57b-4dc5-4370-bf29-afa131c7ebe5/image.png" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>