<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Autonomous</title>
        <link>https://velog.io/</link>
        <description>안녕하세요. 자율주행을 공부하고 있는 학생입니다.</description>
        <lastBuildDate>Tue, 27 May 2025 01:03:54 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. Autonomous. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/macaron_6pjm" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Boosting Cross-spectral Unsupervised Domain Adaptation for Thermal
Semantic Segmentation (Seokjun Kwon
, Jeongmin Shin
, Namil Kim
, Soonmin Hwang
, Yukyung Choi)(황순민 교수)]]></title>
            <link>https://velog.io/@macaron_6pjm/Boosting-Cross-spectral-Unsupervised-Domain-Adaptation-for-ThermalSemantic-Segmentation-Seokjun-Kwon-Jeongmin-Shin-Namil-Kim-Soonmin-Hwang-Yukyung-Choi%ED%99%A9%EC%88%9C%EB%AF%BC-%EA%B5%90%EC%88%98</link>
            <guid>https://velog.io/@macaron_6pjm/Boosting-Cross-spectral-Unsupervised-Domain-Adaptation-for-ThermalSemantic-Segmentation-Seokjun-Kwon-Jeongmin-Shin-Namil-Kim-Soonmin-Hwang-Yukyung-Choi%ED%99%A9%EC%88%9C%EB%AF%BC-%EA%B5%90%EC%88%98</guid>
            <pubDate>Tue, 27 May 2025 01:03:54 GMT</pubDate>
            <description><![CDATA[<p>Abstract— In autonomous driving, thermal image semantic
segmentation has emerged as a critical research area, owing
to its ability to provide robust scene understanding under
adverse visual conditions. In particular, unsupervised domain
adaptation (UDA) for thermal image segmentation can be an
efficient solution to address the lack of labeled thermal datasets.
Nevertheless, since these methods do not effectively utilize
the complementary information between RGB and thermal
images, they significantly decrease performance during domain
adaptation. In this paper, we present a comprehensive study on
cross-spectral UDA for thermal image semantic segmentation.
We first propose a novel masked mutual learning strategy that
promotes complementary information exchange by selectively
transferring results between each spectral model while masking
out uncertain regions. Additionally, we introduce a novel prototypical self-supervised loss designed to enhance the performance
of the thermal segmentation model in nighttime scenarios.
This approach addresses the limitations of RGB pre-trained
networks, which cannot effectively transfer knowledge under
low illumination due to the inherent constraints of RGB sensors.
In experiments, our method achieves higher performance over
previous UDA methods and comparable performance to stateof-the-art supervised methods.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ PCSCNet: Fast 3D semantic segmentation of LiDAR point cloud for autonomous car using point convolution and sparse convolution network. Expert Systems with Applications, 2023  (AI LAB)]]></title>
            <link>https://velog.io/@macaron_6pjm/PCSCNet-Fast-3D-semantic-segmentation-of-LiDAR-point-cloud-for-autonomous-car-using-point-convolution-and-sparse-convolution-network.-Expert-Systems-with-Applications-2023-AI-LAB</link>
            <guid>https://velog.io/@macaron_6pjm/PCSCNet-Fast-3D-semantic-segmentation-of-LiDAR-point-cloud-for-autonomous-car-using-point-convolution-and-sparse-convolution-network.-Expert-Systems-with-Applications-2023-AI-LAB</guid>
            <pubDate>Fri, 09 May 2025 01:42:59 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Collision Probability Field Based Interaction-Aware
Longitudinal Motion Prediction (AI LAB 조기춘 교수)]]></title>
            <link>https://velog.io/@macaron_6pjm/Collision-Probability-Field-Based-Interaction-AwareLongitudinal-Motion-Prediction-AI-LAB-%EC%A1%B0%EA%B8%B0%EC%B6%98-%EA%B5%90%EC%88%98</link>
            <guid>https://velog.io/@macaron_6pjm/Collision-Probability-Field-Based-Interaction-AwareLongitudinal-Motion-Prediction-AI-LAB-%EC%A1%B0%EA%B8%B0%EC%B6%98-%EA%B5%90%EC%88%98</guid>
            <pubDate>Fri, 09 May 2025 01:40:30 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[AutoKU: An Autonomous Driving System Design for the World's First Mass-Produced Vehicle in Multi-Vehicle Racing Environment. IEEE Intelligent Vehicles Symposium, 2024   (AI LAB 조기춘 교수)]]></title>
            <link>https://velog.io/@macaron_6pjm/AutoKU-An-Autonomous-Driving-System-Design-for-the-Worlds-First-Mass-Produced-Vehicle-in-Multi-Vehicle-Racing-Environment.-IEEE-Intelligent-Vehicles-Symposium-2024</link>
            <guid>https://velog.io/@macaron_6pjm/AutoKU-An-Autonomous-Driving-System-Design-for-the-Worlds-First-Mass-Produced-Vehicle-in-Multi-Vehicle-Racing-Environment.-IEEE-Intelligent-Vehicles-Symposium-2024</guid>
            <pubDate>Fri, 09 May 2025 01:37:28 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[MOSAIC: Generating Consistent, Privacy-Preserving Scenes from Multiple Depth Views in Multi-Room Environments 황순민 교수 ]]></title>
            <link>https://velog.io/@macaron_6pjm/MOSAIC-Generating-Consistent-Privacy-Preserving-Scenes-from-Multiple-Depth-Views-in-Multi-Room-Environments-%ED%99%A9%EC%88%9C%EB%AF%BC-%EA%B5%90%EC%88%98</link>
            <guid>https://velog.io/@macaron_6pjm/MOSAIC-Generating-Consistent-Privacy-Preserving-Scenes-from-Multiple-Depth-Views-in-Multi-Room-Environments-%ED%99%A9%EC%88%9C%EB%AF%BC-%EA%B5%90%EC%88%98</guid>
            <pubDate>Fri, 09 May 2025 01:24:55 GMT</pubDate>
            <description><![CDATA[<p><a href="https://scholar.google.com/citations?view_op=view_citation&amp;hl=ko&amp;user=XkY5-sUAAAAJ&amp;sortby=pubdate&amp;citation_for_view=XkY5-sUAAAAJ:qxL8FJ1GzNcC">MOSAIC: Generating Consistent, Privacy-Preserving Scenes from Multiple Depth Views in Multi-Room Environments</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Personalized Driving Data-based Bump Prediction Using a Cloud-based Continuous Learning for Preview Electronically Controlled Suspension 조기춘 교수]]></title>
            <link>https://velog.io/@macaron_6pjm/Personalized-Driving-Data-based-Bump-Prediction-Using-a-Cloud-based-Continuous-Learning-for-Preview-Electronically-Controlled-Suspension</link>
            <guid>https://velog.io/@macaron_6pjm/Personalized-Driving-Data-based-Bump-Prediction-Using-a-Cloud-based-Continuous-Learning-for-Preview-Electronically-Controlled-Suspension</guid>
            <pubDate>Fri, 09 May 2025 00:57:26 GMT</pubDate>
            <description><![CDATA[<p><a href="https://scholar.google.com/citations?view_op=view_citation&amp;hl=en&amp;user=uj95Nj0AAAAJ&amp;sortby=pubdate&amp;citation_for_view=uj95Nj0AAAAJ:YTuZlYwrTOUC">Personalized Driving Data-based Bump Prediction Using a Cloud-based Continuous Learning for Preview Electronically Controlled Suspension</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ISTQB SW 테스팅 자격시험 ]]></title>
            <link>https://velog.io/@macaron_6pjm/ISTQB-SW-%ED%85%8C%EC%8A%A4%ED%8C%85-%EC%9E%90%EA%B2%A9%EC%8B%9C%ED%97%98</link>
            <guid>https://velog.io/@macaron_6pjm/ISTQB-SW-%ED%85%8C%EC%8A%A4%ED%8C%85-%EC%9E%90%EA%B2%A9%EC%8B%9C%ED%97%98</guid>
            <pubDate>Tue, 07 Jan 2025 11:49:38 GMT</pubDate>
            <description><![CDATA[<p><a href="https://www.kstqb.org/sw/sw3.asp#tabs_in2">KSTQB 홈페이지</a></p>
<p>정식 자격명은 ISTQB Certified Tester Foundation Level이다. 
시험은 한글/영어 두가지 방식으로 진행할 수 있다. 
<img src="https://velog.velcdn.com/images/macaron_6pjm/post/fcbf55f3-9707-476f-89a3-371bec1bf3bb/image.png" alt=""></p>
<h1 id="공부방법">공부방법</h1>
<h2 id="책--개발자도-알아야할-소프트웨어-테스팅-실무-제3판--문제로-배우는-소프트웨어-테스팅">책 : 개발자도 알아야할 소프트웨어 테스팅 실무 제3판 &amp; 문제로 배우는 소프트웨어 테스팅</h2>
<p><img src="https://velog.velcdn.com/images/macaron_6pjm/post/a0c265c5-5468-49cc-b1df-f45948ba8f15/image.png" alt=""></p>
<h2 id="실라버스">실라버스</h2>
<p>실라버스와 문제가 홈페이지에 나와있다. 
실라버스와 문제는 아이패드에 넣어 2번정도 훑어볼 예정이며, 책을 3번 정독할 예정이다. 
추가로 문제풀이 책을 구매하여 2번정도 풀 예정이다. </p>
<p>출처 
<a href="https://www.kstqb.org/sw/sw3.asp#tabs_in2">https://www.kstqb.org/sw/sw3.asp#tabs_in2</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[UDL 1. Introduction (Kor)]]></title>
            <link>https://velog.io/@macaron_6pjm/UDL-1.-Introduction-Kor</link>
            <guid>https://velog.io/@macaron_6pjm/UDL-1.-Introduction-Kor</guid>
            <pubDate>Tue, 07 Jan 2025 08:52:59 GMT</pubDate>
            <description><![CDATA[<h1 id="chapter-1">Chapter 1</h1>
<h2 id="introduction">Introduction</h2>
<p>인공지능(AI)은 지능적인 행동을 모방하는 시스템을 구축하는 데 중점을 둡니다. 
이는 논리, 탐색, 확률적 추론 등을 기반으로 하는 다양한 접근 방식을 포함합니다. 
머신러닝은 AI의 하위 분야로, 관찰된 데이터를 기반으로 수학적 모델을 학습하여 결정을 내리는 방법을 연구합니다. 이 분야는 폭발적인 성장을 이루었으며, 현재는 ai라는 용어와 거의 동의어로 사용되고 있습니다. </p>
<p>** <em>deep neural network</em>( 간단히 deep network)는 머신러닝 모델의 한 종류이며, 이러한 모델을 데이터에 맞게 학습시키는 과정을 딥러닝이라고 합니다.** 딥 네트워크는 가장 강력하고 실용적인 머신러닝 모델로, 일상생활에서 자주 접할 수 있습니다. 예를 들어, 자연어 처리 알고리즘을 사용하여 텍스트를 다른 언어로 번역하거나, 컴퓨터 비전 시스템을 통해 특정 객체의 이미지를 검색하거나, 음성 인식 인터페이스를 통해 디지털 어시스턴트와 대화하는 등의 응용 분야가 모두 딥러닝 기술에 의해 구동됩니다. </p>
<p>이 책 제목에서 알 수 있듯이, 이 분야를 처음 접하는 독자가 딥러닝의 원리를 이해할 수 있도록 돕는 것을 목표로 합니다. 이 책은 지나치게 이론적이지도 않고(증명 없음), 지나치게 실용적이지도 않습니다 (코드 거의 없음). 목표는 근본적인 아이디어를 설명하는 것이며, 이 책을 읽은 후 독자는 기존의 성공적인 사례가 없는 새로운 상황에도 딥러닝을 적용할 수 있는 능력을 갖추게 될 것입니다.</p>
<p>*<em>머신러닝 방법은 크게 세 가지 영역으로 나눌 수 있습니다. 지도 학습, 비지도 학습, 강화 학습 입니다. *</em> 작성 시점기준 이 세 가지 영역의 최첨단 방법은 모두 딥러닝에 의존하고 있습니다. 이 introduction 1장에서는 세 가지 영역을 높은 수준에서 설명하며, 책의 구성에서도 대략적으로 반영됩니다. 
<img src="https://velog.velcdn.com/images/macaron_6pjm/post/6325830e-d7e1-4986-b86f-974f66f4fec2/image.png" alt=""> 그림 1.1</p>
<h3 id="11-supervised-learning">1.1 Supervised learning</h3>
<p>지도 학습 모델은 입력 데이터로부터 출력 예측으로의 매핑을 정의합니다. 
다음 섹션에서는 입력, 출력, 모델 자체, 그리고 &quot;모델 학습(training)&quot;의 의미에 대해 논의합니다.</p>
<h3 id="111-regression-and-classification-problems">1.1.1 Regression and classification problems</h3>
<p>그림 1.2는 여러 회귀와 분류 문제를 보여줍니다. 각 사례에서, 실세계에세 의미 있는 입력(문장,음성 파일, 이미지 등)이 숫자 벡터로 인코딩됩니다. 이 벡터는 모델의 입력을 형성합니다. 모델은 입력을 출력 벡터로 매핑한 현재로서는 입력과 출력에 초점을 맞추며, 모델을 숫자 벡털를 입력받아 또 다른 숫자 벡터를 반환하는 블랙박스(Black Box)로 취급합니다.</p>
<p>그림 1.2a의 모델은 집의 면적과 침실 수와 같은 입력 특성에 기반해 집의 가격을 예측합니디다. 
이는 모델이 연속적인 숫자(카테고리 할당이 아닌)를 반환하므로 회귀 문제(regression problem)입니다. </p>
<p>그림1.2c의 모델은 레스토랑 리뷰가 포함된 텍스트 문자열을 입력받아 리뷰가 긍정적인지 부정적인지를 예측합니다. 이는 입력을 두개의 카테고리 중 하나로 할당하려 하기 때문에 이진 분류 문제(binary classification problem)입니다. 출력 벡터는 입력이 각 카테고리에 속할 확률을 포함합니다. </p>
<p>그림 1.2d와 1.2e는 다중 클래스 분류 문제(multiclass classification problems)를 나타냅니다. 여기서 모델은 입력을 <em>N</em>&gt;2개의 카테고리 중 하나로 할당합니다. 첫 번째 사례에서는 입력이 오디오 파일이며, 모델은 파일이 어떤 음악 장르인지 예측합니다. 두 번째 사례에서는 입력이 이미지이고, 모델은 이미지가 어떤 객체를 포함하고 있는지 예측합니다. 각 경우에서 모델은 N개의 카테고리에 대한 확률을 포함하는 크기 <em>N</em>의 벡터를 반환합니다. </p>
<p><img src="https://velog.velcdn.com/images/macaron_6pjm/post/a0cdbd30-6f09-4247-a69b-ab96009566c3/image.png" alt=""> 그림 1.2</p>
<p>출처 
<a href="https://udlbook.github.io/udlbook/">https://udlbook.github.io/udlbook/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Understanding Deep Learning Contents]]></title>
            <link>https://velog.io/@macaron_6pjm/Understanding-Deep-Learning</link>
            <guid>https://velog.io/@macaron_6pjm/Understanding-Deep-Learning</guid>
            <pubDate>Tue, 07 Jan 2025 07:35:01 GMT</pubDate>
            <description><![CDATA[<p>UDL을 매주 공부해 볼 예정입니다.</p>
<p>simon J.D. Prince 의 책으로 공부를 진행하겠습니다. </p>
<p>UDL의 목차를 살펴봅시다. </p>
<h2 id="contents">contents</h2>
<h3 id="1introduction">1.Introduction</h3>
<h3 id="2supervised-learning">2.Supervised learning</h3>
<h3 id="3-shallow-neural-networks">3. Shallow neural networks</h3>
<h3 id="4-deep-neural-networks">4. Deep neural networks</h3>
<h3 id="5-loss-functions">5. Loss functions</h3>
<h3 id="6-fitting-models">6. Fitting models</h3>
<h3 id="7-gradients-and-initialization">7. Gradients and initialization</h3>
<h3 id="8-measuring-performance">8. Measuring performance</h3>
<h3 id="9-regularization">9. Regularization</h3>
<h3 id="10-convolutional-networks">10. Convolutional networks</h3>
<h3 id="11-residual-networks">11. Residual networks</h3>
<h3 id="12-transformers">12. Transformers</h3>
<h3 id="13-graph-neural-networks">13. Graph neural networks</h3>
<h3 id="14-unsupervised-learning">14. Unsupervised learning</h3>
<h3 id="15-generative-adversarial-networks">15. Generative Adversarial Networks</h3>
<h3 id="16-normalizing-flows">16. Normalizing flows</h3>
<h3 id="17-variational-autoencoders">17. Variational autoencoders</h3>
<h3 id="18-diffusion-models">18. Diffusion models</h3>
<h3 id="19-reinforcement-learning">19. Reinforcement learning</h3>
<h3 id="20-why-does-deep-learning-work">20. Why does deep learning work?</h3>
<h3 id="21-deep-learning-and-ethics">21. Deep learning and ethics</h3>
<p>A. Notion 
B. Mathematics
C. Probability </p>
<p>UDL을 공부하는데 도움이 되는 사이트를 소개합니다. 
출처 
<a href="https://udlbook.github.io/udlbook/">https://udlbook.github.io/udlbook/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ROS 기초 9장 10장 11장 (TF 기초, ]]></title>
            <link>https://velog.io/@macaron_6pjm/ROS-%EA%B8%B0%EC%B4%88-9%EC%9E%A5-10%EC%9E%A5-11%EC%9E%A5-TF-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@macaron_6pjm/ROS-%EA%B8%B0%EC%B4%88-9%EC%9E%A5-10%EC%9E%A5-11%EC%9E%A5-TF-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Thu, 23 May 2024 14:25:19 GMT</pubDate>
            <description><![CDATA[<h1 id="ros-기초-9장-10장-11장-notion-정리"><a href="https://cypress-mule-a78.notion.site/ROS-74393563598948e4940c931f1b97e14f?pvs=4">ROS 기초 9장 10장 11장 Notion 정리</a></h1>
]]></description>
        </item>
        <item>
            <title><![CDATA[Chapter4, 5, 7. ROS 기초(Topic, Publisher, Subscriber, 커스텀 메시지 생성, launch, Network)]]></title>
            <link>https://velog.io/@macaron_6pjm/Ros</link>
            <guid>https://velog.io/@macaron_6pjm/Ros</guid>
            <pubDate>Tue, 21 May 2024 14:37:50 GMT</pubDate>
            <description><![CDATA[<h2 id="chapter4-ros-topic-기초"><a href="https://www.youtube.com/watch?v=4RjtS8yp7X4">Chapter4. ROS Topic 기초</a></h2>
<h3 id="ros-topic-기초">ROS Topic 기초</h3>
<p>ros 토픽이란 ros에서 노드와 노드 사이에 연속적으로 데이터를 주고받을 수 있는 방법 중 하나입니다. 특정 노드에서 토픽 형태로 데이터를 뿌리면 다른 여러 개의 노드에서 그 데이터를 받아서 처리하는 것이 가능합니다. ros 토픽 명령어를 배워봅시다. 이전에 노드 기초 시간에 실행했던 거북이 노드를 실행해 봅시다. 이 노드는 turtlesim 이름으로 이 노드는 teleop_turtle 이름으로 실행되고 있습니다.
두 노드는 토픽을 통해 데이터를 주고받아 움직입니다. 토픽 리스트를 확인해 보겠습니다. 여러 개의 토픽이 있습니다만, 이 중 거북이를 움직이게 하는 토픽은 터틀 1 cmd_vel 토픽입니다. 이 토픽의 정보를 보겠습니다 누가 토픽을 발신하고 있고 누가 수신하고 있는지 보여줍니다. 그림으로 표현하면 다음과 같습니다. 또한 토픽의 타입을 알 수 있습니다. 지오메트리 메시지 트위스트는 ros에서 기본으로 제공하는 메시지 타입으로 구조는 다음과 같습니다. 토픽 데이터를 확인해 보겠습니다. 델로 업데이터틀에서 방향키를 눌렀을 때 토픽 데이터를 확인할 수 있습니다 현재 토픽 값에 따라 거북이가 어떻게 움직이는지 확인해 보세요. 기타 여러가지 토픽 명령어는 영상 설명란에 링크를 참고하시기 바랍니다.</p>
<h2 id="chapter4-1-publisher-node-생성"><a href="https://www.youtube.com/watch?v=V3ntb4l4mRQ">Chapter4-1. Publisher Node 생성</a></h2>
<h3 id="publisher-node-생성">Publisher Node 생성</h3>
<p>퍼블리셔 노드란 ros에서 토픽을 발신하는 노드를 의미합니다. 
퍼블리셔 노드 작성 워크스페이스의 src 경로에서 퍼블리셔 노드 작성을 위한 ros 패키지를 생성합시다. 패키지 이름은 베이직 퍼블리시 튜토리얼 종속성 패키지는 roscpp 로 하겠습니다.
퍼블리셔 노드 작성은 다음에 순서로 진행합니다.
첫 번째 씨메이크 리스트에 find 패키지 수정 
씨메이크 리스트를 텍스트 에디터로 열어 find 패키지에 토픽 사용을 위한 종속성 패키지를 추가해야 합니다.
이 영상에서는 ros에서 기본으로 제공하는 메시지 패키지 중 하나인 geometry_msgs를 추가하여 진행하겠습니다.
두 번째 package.xml 수정 패키지에 있는 패키지 package.xml을 텍스트 에디터로 열어 시메이크 리스트에 파인드 패키지에 추가한 패키지 이름을 다음에 새 항목에 대해서 추가해줍시다. 저장하고 나와 줍시다. 
세번째 퍼블리셔 노드 소스 코드 작성
패키지의 src 경로에서 cpp 파일을 생성합시다. 이름은 베이직 퍼블리시로 하겠습니다. 이전에 ros 노드 생성에서 작성한 basic_turtorial 패키지에 basic.cpp 소스코드를 복사 후 붙여넣어줍시다. 토픽을 퍼블리시 하기 위한 부분을 추가하겠습니다 이 영상에서는 지오메트리 메시지 패키지에 트위스트 메시지 타입을 사용할 것입니다이를 위한 헤더 파일추가입니다. 노드 이름을 베이직 퍼블리시 노드로 수정하겠습니다. 지오메트리 트위스트 형식의 메시지를 cmd별 이름으로 선언하겠습니다. 퍼블리셔를 선언하는 내용입니다. 노드 핸들 n에 어드벨타이즈를 통해 정의할 수 있으며 괄호 안에는 어떤 메시지 타입을 사용할 것인지를 정리하고 이곳은 로스토픽 리스트를 입력할 때 나오는 토픽 이름을 정의할 수 있습니다. 여기서는 cmd_vel 이름으로 정의되었습니다. 1000은 메시지 대기열의 크기입니다. 메시지 대기열에 대한 자세한 설명은 영상 설명란을 참고해주세요. cmd_vel의 값을 할당합니다. cmd벨의 메시지 타입인 지오메트리 트위스트의 구조는 다음과 같습니다.</p>
<p>ros 퍼블리셔에 퍼블리시를 호출하면 ros의 토픽이 퍼블리시됩니다. 인자의 전달된 메시지의 값을 퍼블리시하며 인자의 타입은 퍼블리셔의 정의를 메시지 타입과 같아야 합니다. 스핀 원스는이 노드에서 아무런 기능을 하지 않기 때문에 다음 영상에서 설명하겠습니다. 저장하고 나오겠습니다.
네 번째 CMakelists.txt의 add_executable, target_link_libraries 추가
패키지에 씨메이크 리스트를 텍스트 에디터로 열어 소스코드 컴파일 및 실행 파일을 만들기 add_executable과 타겟 링크 라이브러리를 추가합시다. 저장하고 나와주면 모든 단계가 끝납니다. 컴파일 후 실행해줍시다. 작성된 퍼블리셔 노드가 실행되었습니다 로스토픽 리스트를 통해 토픽 이름을 확인합시다. 정의한대로 cmd별 이름으로 퍼블리시 되고 있습니다. 로스토픽 에코 명령을 통해 cmd_vel의 값을 확인해 보겠습니다. 할당된 값 리니어 x와 앵귤러 g의 10으로 퍼블리시 되고 있는 것을 확인할 수 있습니다. </p>
<h2 id="chapter4-2-subscriber-node-생성"><a href="https://www.youtube.com/watch?v=28KRjIj-G3Y">Chapter4-2. Subscriber Node 생성</a></h2>
<p>ROS 기초 subscriber node 생성 
subscriber node란 ros에서 토픽을 수신하는 노드를 의미합니다.</p>
<h3 id="서브스카이버-노드-작성">서브스카이버 노드 작성</h3>
<p>워크스페이스의 src 경로에서 서스카이버 노드 작성을 위한 ros 패키지를 생성합시다. 패키지 이름은 basic_subscribe_tutorial 종속성 패키지는 roscpp로 하겠습니다. subs카이버 노드 작성은 다음에 순서로 진행합니다</p>
<h4 id="첫-번째-cmakeliststxt의-find_package-수정">첫 번째 CMakelists.txt의 find_package 수정</h4>
<p>씨메이크 리스트를 텍스트 에디터로 열어 find 패키지에 토픽 사용을 위한 종속성 패키지를 추가해야 합니다. 이 영상에서는 ros에서 기본으로 제공하는 메시지 패키지 중 하나인 지오메트리 메시지를 추가하여 진행하겠습니다.</p>
<h4 id="두번째-packagexml-수정">두번째 package.xml 수정</h4>
<p>패키지에 있는 package.xml을 텍스트 에디터로 열어 시메이크 리스트에 find 패키지에 추가한 패키지 이름을 다음에 세 항목에 대해서 추가해줍시다. 저장하고 나와 줍시다.</p>
<h4 id="세-번째-subscriber-node-소스코드-작성">세 번째 Subscriber Node 소스코드 작성</h4>
<p>패키지에 src 경로에서 cpp 파일을 생성합시다. 이름은 베이직 서스카이브로 하겠습니다. 이전에 ros 노드 생성에서 작성한 베이직 튜토리얼 패키지에 basic.cpp 소스코드를 복사 후 붙여 넣어줍시다. 토픽을 subscribe 하기 위한 부분을 추가하겠습니다.
이 영상에서는 geometry_msgs 패키지의 Twist 메시지 타입을 사용할 것입니다.
이를 위한 헤더 파일 추가입니다
노드 이름을 베이직 서스카이브 노드로 수정하겠습니다. 서브스카이버를 선언하는 내용입니다.
선언한 서스카이버를 정의하는 내용입니다. 노드 핸들 n의 subscriber를 통해 정의할 수 있으며 세계의 인자를 입력받습니다. 첫 번째 인자는 수신할 토픽 이름입니다. 두 번째 인자는 메시지 대기열의 크기입니다. 메시지 대기열에 대한 자세한 설명은 영상 설명란을 참고해주세요. 세 번째 인자는 토픽이 수신되었을 때 호출할 함수입니다. 호출할 함수를 작성하겠습니다. 토픽이 수신되었을 때 호출되는 함수는 일반적으로 void 타입으로 정의되며 const 수신하는 토픽의 메시지 타입 그리고 ros에서 제공하는 스마트 포인터를 이용한 Constptr에 &amp;를 붙여 매개변수를 정의합니다. 포인터를 사용한 것이기 때문에 문법적 해석은 어려울 수 있습니다만 궁금하신 분은 영상 설명란을 참고해주세요.
토픽의 값을 로스 인포를 통해 출력하는 부분을 작성하겠습니다. subscriber를 정의했다고 해서 토픽을 수신하고 함수가 실행되는 것이 아니고 SpinOnce가 실행되는 순간에 토픽이 수신되고 함수가 실행됩니다.저장하고 나오겠습니다</p>
<h4 id="네-번째-cmakelisttxt의-add_executable-target_link_libraries-추가">네 번째 CMakelist.txt의 add_executable, target_link_libraries 추가</h4>
<p>패키지에 씨메이크 리스트를 텍스트 에디터로 열어 소스코드 컴파일 및 실행 파일을 만들기 위한 add_executable 과 target_link_libraries 를 추가합시다. 저장하고 나와주면 모든 단계가 끝납니다. 컴파일 후 실행해줍시다. 작성된 서브스카이버 노드가 실행되었습니다. 수신하고자 하는 토픽이 퍼블리시 되고 있지 않기 때문에 아무런 반응이 없습니다. 작성한 서스카이버 노드에서 수신하고자 하는 토픽은 geometry_msgs/Twist 타입의 cmd_vel 이었습니다.
이를 퍼블리시하는 노드는 이전 영상에서 작성한 Publisher Node 입니다. 실행해 봅시다. 토픽이 퍼블리시되자 Suscriber node에서 토픽이 쓰신 되어 반응이 나타났습니다. 토픽에 대한 이해가 되었고 퍼블리셔 노드와 서브스카이브 노드 작성 방법을 익혔으면 터틀심에 거북이가 자동으로 움직이도록 거북이가 움직일 때 속도 데이터가 출력되도록 하는 노드를 작성해 보시는 것을 권장드립니다. </p>
<h2 id="chapter4-3-커스텀-메시지-생성"><a href="https://www.youtube.com/watch?v=FuZp8WsGR8g">Chapter4-3. 커스텀 메시지 생성</a></h2>
<h3 id="커스텀-메시지-생성">커스텀 메시지 생성</h3>
<h4 id="ros-커스텀-메시지란">ROS 커스텀 메시지란?</h4>
<p>ros에서 기본적으로 사용 가능한 메시지 유형이 있지만 때때로 사용자 지정된 데이터 유형에 대한 메시지 정의가 필요할 수 있습니다 이러한 사.용자 정의 메시지를 ros 커스텀 메시지라고 합니다 ros 커스텀 메시지는 .msg 파일 형식으로 정의됩니다 메시지 파일은 독립된 패키지로 만드는 것을 권장합니다. 커스텀 메시지 파일이 포함된 퍼블리처 노드 패키지와 서스카이브 노드 패키지가 있을 때 해당 패키지에서이 메시지 파일을 사용하기위해선 불필요한 퍼블리셔 노드를 설치해야 합니다. 그러나 독립된 메시지 패키지를 만들면 불필요한 노드 설치를 없앨 수 있습니다. </p>
<h4 id="커스텀-메시지-패키지-생성">커스텀 메시지 패키지 생성</h4>
<p>워크스페이스의 src 경로에서 커스텀 메시지 패키지 작성을 위한 ROS 패키지를 생성합시다.
패키지 이름은 tutorial_msgs 종속성 패키지는 roscpp로 하겠습니다.</p>
<p>패키지 생성 후 다음의 순서로 진행합니다.</p>
<h4 id="1msg-파일-생성">1.msg 파일 생성</h4>
<h4 id="2cmakeliststxt-수정">2.CMakelists.txt 수정</h4>
<h4 id="3packagexml-수정">3.package.xml 수정</h4>
<h4 id="4catkin_make">4.catkin_make</h4>
<h4 id="첫-번째-메시지-파일-생성">첫 번째 메시지 파일 생성</h4>
<p>패키지에서 msg 폴더를 생성 후 그 안에 msg 파일을 생성합시다. 저는 TutorialMsg 이름으로 생성하겠습니다. ros의 msg에서 사용할 수 있는 기본적인 유형은 다음과 같습니다.
<img src="https://velog.velcdn.com/images/macaron_6pjm/post/f42ed03b-a8d5-4209-bfbb-699f8e8b5be7/image.png" alt=""></p>
<p>이 유형들을 사용해 보겠습니다. 저장하고 나와줍시다. </p>
<h4 id="두번째-시메이크-리스트-수정">두번째 시메이크 리스트 수정</h4>
<p>CMakelists.txt를 텍스트 에디터로 열어 커스텀 메시지 사용을 위한 부분을 추가해야 합니다. find 패키지에 message_generation과 std_msgs를 추가합시다.message_generation은 RS 메시지와 관련된 코드를 자동으로 생성하는 패키지입니다. std_msgs는 ros 메시지에서 자주 사용되는 일반적인 데이터 유형을 정의하는데 사용합니다. 애드메시지 파일에 메시지 폴더 아래에 생성한 메시지 파일의 이름을 적어줍시다. generate_messages에 std_msgs를 추가합시다. 캡틴 패키지에 캡틴 디펜드에 find 패키지에 추가한 부분을 추가합시다 그리고 메시지 런타임을 추가합시다 메시지 런타임은 메시지 제네레이션 단계에서 생성된 메시지를 다른 ros 노드가 사용할 수 있게 하는데 필요한 패키지입니다 이곳에 메시지 런타임을 추가함으로써이 패키지가 생성한 메시지를 다른 ros 노드에서 참조하고 사용할 수 있게 됩니다 세번째 패키지 xml 수정 패키지에 있는 패키지 xml을 텍스트 에디터로 열어 시메크 리스트에 find 패키지에 추가한 패키지 이름을 다음에 새 항목에 대해서 추가해줍시다.
그리고 마지막 항목에 대해서만 메시지 런타임을 추가해줍시다. 저장하고 나와 줍시다.
네 번째 캡틴 메이크 커스텀 메시지 패키지를 컴파일하여 메시지 라이브러리를 생성합시다.
생성된 메시지 라이브러리는 컴파일된 결과물 아래에 인클루드 폴더에서 커스텀 메시지 패키지 이름의 폴더 아래에 존재합니다.
ros 노드 작성 시 커스텀 메시지를 사용하려는 경우 생성된이 메시지 라이브러리를 헤더 파일로 선언하여 사용합니다 커스텀 메시지 패키지 작성을 완료하였으니이를 사용한 노드 생성 방법을 알아보겠습니다.
워크스페이스의 src 경로에서 커스텀 메시지 패키지 사용을 위한 ros 패키지를 생성합시다 패키지 이름은 베이직 메시지 스토리얼 정숙성 패키지는 노스 cp로 하겠습니다. 패키지 생성 후 다음의 순서로 진행합니다 첫 번째 시메이크 리스트에 마인드 패키지 수정 패키지에 씨메이크 리스트를 텍스트 에디터로 열어 find 패키지에 커스텀 메시지 패키지 이름을 추가합시다. 두 번째 패키지 xml 수정 패키지 xml을 텍스트 에디터로 열어 스메이크 리스트에 find 패키지에 추가한 패키지 이름을 다음에 새 항목에 대해서 추가해줍시다 저장하고 나와줍시다
세번째 커스텀 메시지 노드 소스코드 작성 패키지에 src 경로에서 cpp 파일을 생성합시다 퍼블리스 노드부터 작성해보겠습니다 이름은 베이직 메시지 퍼블리시로 하겠습니다 이전에 ros 퍼블리셔 노드 생성에서 작성한 베이직 퍼블리시 스토리얼 패키지에 베이직 퍼블릭 시점 cpp 소스코드를 복사 후 붙여 넣어줍시다 이 소스 코드를 커스텀 메시지에 유형에 맞게 변환하면 됩니다 커스텀 메시지에 헤더 파일은 다시 한번 설명합니다만 컴파일된 결과물 아래 인클루드 폴더에서 커스텀 메시지 패키지 이름에 폴더 아래 존재하는 이것을 선언하여 사용합니다 일반적으로 커스텀 메시지 패키지 이름 슬러시 메시지 8 이름.h로 생성되어 있습니다 변환을 완료했습니다. 저장하고 나오겠습니다.
네 번째 씨메이크 리스트에 링크 라이브러리 추가 패키지에 씨메이크 리스트를 텍스트 에디터로 열어 소스코드 컴파일 및 실행 파일을 만들기 위한 에듀 이스크 테이블과 타겟 링크 라이브러리를 추가합시다 다섯 번째 씨메이크 리스트에 애드 디펜던트 추가 애드 디펜던스를 추가합시다 커스텀 메시지를 사용한 노드는
메시지가 먼저 생성이 되어야 노드 컴파일이 가능합니다이를 추가함으로써 해당 노드는 컴파일 하기 전에 메시지가 먼저 생성되도록 합니다 저장하고 나와주면 모든 단계가 끝납니다 컴파일 후 실행해줍시다 작성된 커스텀 메시지에 퍼블리셔 노드가 실행되었습니다 토픽의 값을 확인해 봅시다 커스텀 메시지는 소스 명령을 먼저 입력해 주어야 인식할 수 있습니다 커스텀 메시지에 서스커버 노드 또한 이전에 rus suscriver 노드 생성에서 작성한 베이직 서브스카이버 튜토리얼 패키지에 베이직 서스 카이브 점 cpp 소스코드를 복사 후 붙여 놓고 커스텀 메시지에 유형에 맞게 변환 후 씨메이크 리스트에 등록하여 컴파일하고 실행하면 됩니다</p>
<h2 id="chapter5-ros-launch-기초"><a href="https://www.youtube.com/watch?v=tH3_xl5IOjY">Chapter5. ROS launch 기초</a></h2>
<h3 id="ros-launch-기초">ROS launch 기초</h3>
<h4 id="ros-런치란">ros 런치란</h4>
<p>여러 개의 ros 노드를 한 번의 명령으로 실행할 수 있게 해주는 도구입니다.
ros launch 파일은 노드 1에 대한 실행 명령..
2에 대한 실행 명령 등등..으로 구성되어 있습니다.</p>
<h4 id="ros-런치-특징">ros 런치 특징</h4>
<ol>
<li>여러개의 Node 실행 가능</li>
<li>실행 시 roscore 자동 실행</li>
<li>Node의 이름을 변경하여 실행 가능</li>
<li>여러가지 옵션 사용 가능 </li>
<li>파라메터 설정 가능 </li>
</ol>
<h4 id="1-여러개의-node-실행-가능">1. 여러개의 Node 실행 가능</h4>
<p>ros 런치를 이용하면 여러 개의 노드를 실행할 때 더 이상 rosrun명령을 여러번 입력할 필요가 없습니다.</p>
<h4 id="2-실행-시-roscore-자동-실행">2. 실행 시 roscore 자동 실행</h4>
<p>ros 런치는 실행시 roscore가 실행되어 있지 않다면 자동으로 roscore를 실행합니다.
이미 실행되어 있으면 기존의 실행되어 있는 roscore를 유지합니다.</p>
<h4 id="3-node의-이름을-변경하여-실행-가능">3. Node의 이름을 변경하여 실행 가능</h4>
<p>ros에서 같은 이름의 노드는 2개 이상 실행할 수 없습니다. 그러나 로스 런치를 이용하면 컴파일 없이 노드의 이름을 변경하여 실행할 수 있으며, 이를 통해 같은 노드를 다른 이름으로 여러 실행하는 것이 가능합니다.</p>
<h4 id="4-여러가지-옵션-사용-가능">4. 여러가지 옵션 사용 가능</h4>
<p>ros 런치를 통해 노드 실행시 사용할 수 있는 옵션이 존재합니다. 노드의 출력을 본다 안 본다 노드가 종료되면 다시 실행하게 하는 옵션 등등 여러가지가 있습니다.</p>
<h4 id="5-파라미터-설정-가능">5. 파라미터 설정 가능</h4>
<p>ros의 기능 중 하나인 파라미터의 값을 설정할 수 있습니다. 이 부분은 RS 파라미터 영상에서 자세히 다루겠습니다.</p>
<h2 id="5장-7장-노션-정리"><a href="https://cypress-mule-a78.notion.site/ROS-74393563598948e4940c931f1b97e14f?pvs=4">5장, 7장 노션 정리</a></h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[Study c/cpp]]></title>
            <link>https://velog.io/@macaron_6pjm/Study-cpp</link>
            <guid>https://velog.io/@macaron_6pjm/Study-cpp</guid>
            <pubDate>Tue, 21 May 2024 14:37:13 GMT</pubDate>
            <description><![CDATA[<p>Now we r going study cpp</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ROS 기초 강의] Chapter3. ROS 환경 구조]]></title>
            <link>https://velog.io/@macaron_6pjm/ROS-%EA%B8%B0%EC%B4%88-%EA%B0%95%EC%9D%98-Chapter3.-ROS-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%A1%B0</link>
            <guid>https://velog.io/@macaron_6pjm/ROS-%EA%B8%B0%EC%B4%88-%EA%B0%95%EC%9D%98-Chapter3.-ROS-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%A1%B0</guid>
            <pubDate>Mon, 20 May 2024 14:21:41 GMT</pubDate>
            <description><![CDATA[<p><a href="https://www.youtube.com/watch?v=6iQEnVgpHmo&amp;list=PLoc4bSmQajN-y88btKBK6lvAbrTtJDrYs&amp;index=5">[ROS 기초 강의] Chapter3. ROS 환경 구조</a></p>
<h2 id="chapter3-ros-환경-구조">Chapter3. ROS 환경 구조</h2>
<p>catkin_ws -&gt; src -&gt; 안에 여러 패키지 존재 </p>
<h3 id="소스코드-결과물은">소스코드 결과물은?</h3>
<p>cakin_make를 입력하면 컴파일이 실행됨 
결과물은 devel 폴더 내에 존재 </p>
<p>실행파일은 lib안에 패키지 이름의 폴더 아래 존재 
ex) ~/catkin_ws/devel/lib/basic_tutorial
ls
basic_node
./basic_node # 이명령어로 실행 가능 
-&gt; rosrun 명령어와 실행한 결과와 같음 
rosrun basic_tutorial basic_node </p>
<h3 id="turtlesim은-어디에">Turtlesim은 어디에?</h3>
<p>ROS가 설치된 경로에 있음 
-&gt; opt/ros/noetic 
이곳에 미리 컴파일된 파일들이 있고 이 안에 turtlesim 패키지가 있음</p>
<h3 id="source-setupbash">source setup.bash?</h3>
<p>Node를 실행하기 전 입력하는 명령어 
-&gt; ROS 패키지 경로를 설정하는 환경설정 명령어 입니다.
ros 패키지 경로를 설정해야 rosrun 명령에서 패키지와 노드를 인식하고 실행할 수 있음 </p>
<h4 id="but-turtlesim을-실행할-때는-source-setupbash를-입력하지-않았는데-어떻게-인식하고-실행하게">but Turtlesim을 실행할 때는 source setup.bash를 입력하지 않았는데 어떻게 인식하고 실행하게??</h4>
<p>home 경로에서 숨김 파일들을 보면 
ls 
ls - all
bashrc라는 파일이 있음 
bashrc는 터미널이 실행될 때 실행되는 스크립트 파일임
마지막줄에 source opt/ros/noetic/setup.bash 
추가하면 터미널이 실행될 때 자동으로 명령어가 실행</p>
<h4 id="ros-패키지-경로는-어떻게-만들어지는가">ROS 패키지 경로는 어떻게 만들어지는가?</h4>
<p>source setup.bash는 ROS패키지 경로를 설정하는 환경설정 명령어 입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ROS 기초 강의 Chapter2-2. ROS란 무엇인가?]]></title>
            <link>https://velog.io/@macaron_6pjm/ROS-%EA%B8%B0%EC%B4%88-%EA%B0%95%EC%9D%98-Chapter2-2.-ROS%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80</link>
            <guid>https://velog.io/@macaron_6pjm/ROS-%EA%B8%B0%EC%B4%88-%EA%B0%95%EC%9D%98-Chapter2-2.-ROS%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80</guid>
            <pubDate>Mon, 20 May 2024 14:19:25 GMT</pubDate>
            <description><![CDATA[<h3 id="chapter-2-2-ros-node-생성">chapter 2-2 ROS Node 생성</h3>
<h4 id="터미널-창을-열고-워크-스페이스-폴더를-생성해줌">터미널 창을 열고 워크 스페이스 폴더를 생성해줌</h4>
<p>code:
mkdir catkin_ws # catkin_ws라는 이름으로 생성
cd catkin_ws/ # catkin_ws 패키지로 경로를 이동하여 
mkdir src # src 폴더를 생성
cd src # src 폴더로 이동 
catkin_create_pkg basic_tutorial roscpp
&#39;&#39;&#39;
ros 패키지를 생성 (catkin_create_pkg [패키지이름] [의존성패키지n])
ROS 사용을 위한 의존성 패키지는 roscpp
&#39;&#39;&#39;
cd basic_tutorial/ # 생성된 패키지로 이동 
&#39;&#39;&#39;
ls 명령어를 치면 다음과 같은 파일과 폴더가 있음 
CMakeList.txt include package.xml src
&#39;&#39;&#39;
cd src
ls
nano basic.cpp #소스코드를 작성 </p>
<p>씨메이크 <del>~</del> 4분 57초 
add_executable(basic_node src/basic.cpp)
target_link_libraries(basic_node ${catkin_wsLIBRARIES}</p>
<p><a href="https://www.youtube.com/redirect?event=video_description&amp;redir_token=QUFFLUhqbU52dmFlMzJySUVEOGtJVjlfRjhCRVpscWhoUXxBQ3Jtc0ttZElMa19ncDI4aTdsZTJhUGJucGlFdW81eDVZbkFISmthVzJGUEJZc1dCc3I5X2FMVmxKN1RyTEM4eHQxa3IwMmxkbFdUMXNLd2Y2NmV4TTU3QjJ4RC1xdDh4UGtTUXVGR0x0ajZGQ1hxQUN1S05RUQ&amp;q=https%3A%2F%2Fgithub.com%2FPigeonSensei%2Fpigeon_ros_tutorial%2Ftree%2Fmaster%2Fbasic%2Fbasic_tutorial&amp;v=bRTmMrRx4cM">소스코드</a></p>
<p><a href="https://www.youtube.com/redirect?event=video_description&amp;redir_token=QUFFLUhqbXl1eFo2QkZmMng1ZS1hZjZWaVNoOGl6Qnl6QXxBQ3Jtc0ttd0FFalBFRjdpWXU1YXd6UGs3RkxMd0F1b3pBc0ZFd3FhZHVUZ0F1UU54ZmxlcTU2V0FRajg0OUxhQ2hDYktqTG1tQ2R3N3otQ3NmRTVqbGFmNVNQRjB1NjZ2dk9WcmNrMUpjOXdHTldQZk10VE9Gbw&amp;q=https%3A%2F%2Fdrive.google.com%2Ffile%2Fd%2F13W8_qJMnsT2W5NDxZs17ByRhisTnd1Xu%2Fview%3Fusp%3Dsharing&amp;v=bRTmMrRx4cM">자주 사용하는 리눅스 명령어</a></p>
<p><a href="https://www.youtube.com/redirect?event=video_description&amp;redir_token=QUFFLUhqblExQkx2NFV4YmhhODJBdTV6SWU0b2t4bElid3xBQ3Jtc0tuT01zd2F2SFEtWGFfSU9UQXplY0dfY3hPOWRBSHh2aGFyWEVpd2dmbE5Gd01XcjZ2UVh0R3BMTklBanVuNU9sUFNfUUhuZ29BWnlzckRlR1RvUHc1WU9JcnQ0UXFEYWJBTGhvSnVEZVk1Y181YnV3QQ&amp;q=https%3A%2F%2Fdrive.google.com%2Ffile%2Fd%2F1VQWhmSg3KB3WuWe8J4rDpbiyViIq8Lnx%2Fview%3Fusp%3Dsharing&amp;v=bRTmMrRx4cM">자주 사용하는 nano 명령어</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ROS 기초 강의 Chapter2-1. ROS란 무엇인가?]]></title>
            <link>https://velog.io/@macaron_6pjm/ROS-%EA%B8%B0%EC%B4%88-%EA%B0%95%EC%9D%98-Chapter2-1.-ROS%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80</link>
            <guid>https://velog.io/@macaron_6pjm/ROS-%EA%B8%B0%EC%B4%88-%EA%B0%95%EC%9D%98-Chapter2-1.-ROS%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80</guid>
            <pubDate>Mon, 20 May 2024 13:36:10 GMT</pubDate>
            <description><![CDATA[<p><a href="https://www.youtube.com/watch?v=IbGid_qvByM&amp;list=PLoc4bSmQajN-y88btKBK6lvAbrTtJDrYs&amp;index=3">ROS 기초 강의 Chapter2-1. ROS란 무엇인가?</a></p>
<h4 id="ros-node-기초">ROS Node 기초</h4>
<p>ㅡ ROS에서 실행하는 단위 프로세스 
소스코드를 작성하고 실행하면 그것이 노드가 됩니다. </p>
<h4 id="ros-node-실행-방법">ROS Node 실행 방법</h4>
<p>ㅡ roscore가 실행중인 상태여야 함 
ㅡ 노드는 rosrun 명령어를 통해 실행할 수 있음 
ㅡ&gt; rosrun (패키지 이름) (실행파일 이름)
ros에 기본으로 설치되어 있는 패키지의 turtlesim 패키지가 있음 
ex) 
rosrun turtlesim turtlesim_node 
rosrun turtlesim turtle_teleop_key </p>
<h4 id="ros-node-관리-명렁어">ROS Node 관리 명렁어</h4>
<p>ㅡ 실행 중인 Node 보기 
rosnode list
rosout은 roscore 실행 시 기본으로 실행되는 노드 
ㅡ Node 정보 보기 
rosnode info [노드 이름]
뭘 펍 섭 하는지 알 수 있음 
ㅡ Node 종료 
rosnode kill [노드 이름]</p>
<p><a href="http://wiki.ros.org/rosnode">ROS Node 명령어</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ROS 기초 강의 Chapter1. ROS란 무엇인가?]]></title>
            <link>https://velog.io/@macaron_6pjm/ROS-%EA%B8%B0%EC%B4%88-%EA%B0%95%EC%9D%98-Chapter1.-ROS%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80</link>
            <guid>https://velog.io/@macaron_6pjm/ROS-%EA%B8%B0%EC%B4%88-%EA%B0%95%EC%9D%98-Chapter1.-ROS%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80</guid>
            <pubDate>Mon, 20 May 2024 12:35:02 GMT</pubDate>
            <description><![CDATA[<p><a href="https://www.youtube.com/watch?v=1UGs5PML5Ag&amp;list=PLoc4bSmQajN-y88btKBK6lvAbrTtJDrYs&amp;index=2">ROS 기초 강의 Chapter1. ROS란 무엇인가?</a></p>
<h4 id="ros란">ROS란?</h4>
<p>ㅡ Robot Operating System 의 약자 
ㅡ 로봇 소프트웨어를 구축하는데 도움이 되는 라이브러리 </p>
<h4 id="왜-ros를-사용하는가">왜 ROS를 사용하는가?</h4>
<p>ㅡ 모듈화의 이점 
ㅡ slam 및 nvigation 등 다양한 오픈소스 제공 
ㅡ 개발 및 유지보수 시간 단축 </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ROS 기초 강의 Chapter0. 강의소개]]></title>
            <link>https://velog.io/@macaron_6pjm/ROS-%EA%B8%B0%EC%B4%88-%EA%B0%95%EC%9D%98-Chapter0.-%EA%B0%95%EC%9D%98%EC%86%8C%EA%B0%9C</link>
            <guid>https://velog.io/@macaron_6pjm/ROS-%EA%B8%B0%EC%B4%88-%EA%B0%95%EC%9D%98-Chapter0.-%EA%B0%95%EC%9D%98%EC%86%8C%EA%B0%9C</guid>
            <pubDate>Mon, 20 May 2024 11:51:38 GMT</pubDate>
            <description><![CDATA[<p>[ROS 기초 강의 Chapter0. 강의소개] (<a href="https://www.youtube.com/watch?v=Twsi0XNSsnY&amp;list=PLoc4bSmQajN-y88btKBK6lvAbrTtJDrYs">https://www.youtube.com/watch?v=Twsi0XNSsnY&amp;list=PLoc4bSmQajN-y88btKBK6lvAbrTtJDrYs</a>)</p>
<p>강의 목차<br>Chapter1. ROS란 무엇인가?
Chapter2. ROS란 Node
Chapter3. ROS란 환경구조
Chapter4. ROS란 Topic
Chapter5. ROS란 Launch
Chapter6. ROS란 Service
Chapter7. ROS Network
Chapter8. ROS Parameter
Chapter9. TF와 URDF
Chapter10. 유용한 ROS 도구 소개 
Chapter11. 마치며</p>
<p>개발환경 : 우분투 20.04 ROS Noetic 
강의는 c언어로 진행, 소스코드는 영상 설명란에 있음 </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[배열, 행렬, 벡터 ]]></title>
            <link>https://velog.io/@macaron_6pjm/%ED%96%89%EB%A0%AC-%EB%B0%B0%EC%97%B4-%EB%B2%A1%ED%84%B0</link>
            <guid>https://velog.io/@macaron_6pjm/%ED%96%89%EB%A0%AC-%EB%B0%B0%EC%97%B4-%EB%B2%A1%ED%84%B0</guid>
            <pubDate>Wed, 15 May 2024 09:08:51 GMT</pubDate>
            <description><![CDATA[<h1 id="배열array-행렬matrix-벡터vector">배열(array), 행렬(matrix), 벡터(vector)</h1>
<p>다음은 배열(array), 행렬(matrix), 벡터(vector)에 관한 검색 결과이다.</p>
<h3 id="배열">배열</h3>
<h4 id="array-configure-프로그래밍-언어에서-지원하는-자료형-또는-컴퓨터공학에서-사용하는-자료구조의-하나이다-순서대로-번호가-붙은-원소들이-연속적인-형태로-구성된-구조를-뜻하며-이때-각-원소에-붙은-번호를-흔히-첨자인덱스-index라고-부른다-원소들이-연속적으로-배치되어-있기에-임의의-첨자로-각-원소를-접근하는-데에-드는-시간복잡도는-o1이다-따라서-임의-접근random-access이-가능한-자료구조에-속한다-메모리-주소가-연속될-것을-요구하기-때문에-배열의-크기를-늘리는-것은-절대-불가능하며-배열의-크기를-늘릴-필요가-있을-때에는-크기가-큰-새-배열을-만들고-기존-내용을-복사하거나-배열의-일부를-연결-리스트-등으로-다른-곳과-연결하는-등의-방법이-쓰인다">Array, Configure. 프로그래밍 언어에서 지원하는 자료형 또는 컴퓨터공학에서 사용하는 자료구조의 하나이다. 순서대로 번호가 붙은 원소들이 연속적인 형태로 구성된 구조를 뜻하며, 이때 각 원소에 붙은 번호를 흔히 첨자(인덱스, index)라고 부른다. 원소들이 연속적으로 배치되어 있기에, 임의의 첨자로 각 원소를 접근하는 데에 드는 시간복잡도는 O(1)이다. 따라서 임의 접근(random access)이 가능한 자료구조에 속한다. 메모리 주소가 연속될 것을 요구하기 때문에 배열의 크기를 늘리는 것은 절대 불가능하며, 배열의 크기를 늘릴 필요가 있을 때에는 크기가 큰 새 배열을 만들고 기존 내용을 복사하거나, 배열의 일부를 연결 리스트 등으로 다른 곳과 연결하는 등의 방법이 쓰인다.</h4>
<h3 id="행렬">행렬</h3>
<h4 id="수학에서-행렬行列-영어-matrix은-수-또는-다항식-등을-직사각형-모양으로-배열한-것이다-예를-들어-실수-1-9-−13-20-5-−16을-2×3-직사각형-위에-배열한-행렬은-다음과-같다">수학에서 행렬(行列, 영어: matrix)은 수 또는 다항식 등을 직사각형 모양으로 배열한 것이다. 예를 들어, 실수 1, 9, −13, 20, 5, −16을 2×3 직사각형 위에 배열한 행렬은 다음과 같다.</h4>
<p><img src="https://velog.velcdn.com/images/macaron_6pjm/post/19e6af8a-b973-4d19-b9de-7126004be37d/image.png" alt=""></p>
<h4 id="행렬은-함수나-숫자를-직사각형-형태로-배치하고-대괄호또는-소괄호로-묶은-배열로-정의한다행렬을-구성하는-있는-숫자-또는-함수를-행렬의-성분element라고-한다-행렬의-가로-줄을-행row-세로-줄을-열column이라고-한다">행렬은 함수나 숫자를 직사각형 형태로 배치하고 대괄호(또는 소괄호)로 묶은 배열로 정의한다.행렬을 구성하는 있는 숫자 또는 함수를 행렬의 성분(element)라고 한다. 행렬의 가로 줄을 행(row), 세로 줄을 열(column)이라고 한다.</h4>
<h3 id="백터">백터</h3>
<h4 id="대중적인-정의는-고등학교-혹은-물리학에서의-크기와-방향을-가진-물리량을-가리키지만-이는-유클리드-기하적-벡터만을-가리키는-좁은-정의다-수학에서-벡터-공간의-종류는-이보다-다양하므로-물리적-직관만을-함부로-적용하기-어려운데-n개의-변량의-선형결합으로-이루어진-벡터-공간을-기본으로-해서-함수들로-이루어진-벡터공간도-존재하고-벡터-공간으로-이루어진-벡터-공간도-존재한다">대중적인 정의는 (고등학교 혹은 물리학에서의) 크기와 방향을 가진 물리량을 가리키지만, 이는 유클리드 기하적 벡터만을 가리키는 좁은 정의다. 수학에서 벡터 공간의 종류는 이보다 다양하므로 물리적 직관만을 함부로 적용하기 어려운데, n개의 변량의 선형결합으로 이루어진 벡터 공간을 기본으로 해서 함수들로 이루어진 벡터공간도 존재하고, 벡터 공간으로 이루어진 벡터 공간도 존재한다.</h4>
<hr>
<p>이 배열 행렬 벡터는 컴퓨터 언어에서도 쓰인다. 이를 조금 더 공부해보자!! </p>
<h4 id="배열array은-컴퓨터에서-일반적으로-사용하는-개념으로-수를-포함한-어떤-데이터의-묶음을-의미함">배열(array)은 컴퓨터에서 일반적으로 사용하는 개념으로 수를 포함한 어떤 데이터의 묶음을 의미함.</h4>
<h4 id="1차원으로-묶은-수를-수학에서-벡터vector라-부르며-행만-구성된-것을-행벡터-열만으로-구성된-것을-열벡터라고-부른다">1차원으로 묶은 수를 수학에서 벡터(vector)라 부르며, 행만 구성된 것을 행벡터, 열만으로 구성된 것을 열벡터라고 부른다.</h4>
<h4 id="2차원으로-묶은-수를-수학에서-행렬matrix이라고-부르며-많은-행렬-계산식에-사용된다">2차원으로 묶은 수를 수학에서 행렬(matrix)이라고 부르며, 많은 행렬 계산식에 사용된다.</h4>
<h4 id="행벡터-열벡터">행벡터, 열벡터</h4>
<p>행벡터(Row Vector = Row Matrix)는  한 개의 행을 갖는 1 x n 행렬을 의미합니다. 아래와 같이 표기할 수 있습니다.
  <img src="https://velog.velcdn.com/images/macaron_6pjm/post/dc07cb6c-4842-4837-b1a8-96c8f9514926/image.png" alt=""></p>
<p>열벡터(Column Vector = Column Matrix)는 한 개의 열을 갖는 m x 1 행렬을 의미합니다. 아래와 같이 표기할 수 있습니다.
<img src="https://velog.velcdn.com/images/macaron_6pjm/post/3f75294b-8d75-49ab-a7b0-217e3cf57ce4/image.png" alt=""></p>
<h3 id="q-파이썬-numpy에서-배열과-행렬의-차이는-무엇인가">Q. 파이썬 Numpy에서 배열과 행렬의 차이는 무엇인가?</h3>
<p>A. array는 수를 포함한 여러 자료의 묶음, matrix는 계산을 위한 수의 다차원 묶음이다.
배열(array)은 파이썬 뿐만아니라 일반적으로 컴퓨터 언어에서 여러종류의 데이터의 묶음을 의미하며, 행렬(matrix)는 이들중 다차원으로 수를 묶은 것을 의미한다.
우리가 수학에서 사용하는 matrix는 엄밀하게 행렬이며 파이썬에서는 numpy라이브러리의 matrix자료형으로 정의 또는 변환하여 사용하면 보다 손쉽게 행렬계산을 수행 할 수 있다.</p>
<p>numpy 라이브러리에서 matrix 자료형은 array 자료형에서 상속된 하위클래스 개념이며, 수학계산에서 좀더 편리하게 사용하기 위해 matrix 자료형으로 변환하여 사용하면 좋다. 이렇게 생성한 matrix는 좀더 편리하게 수많은 계산식을 사용할 수 있으나, 꼭 matrix로 변환해서 연산할 필요는 없다. 다만 몇가지 연산에서 다른 결과를 나타낼 수 있다.</p>
<p>행렬(matrix)을 사용하면 배열(array)보다 연산이 간단함
matrix 자료형은 array형 보다 손쉽게 행렬곱 (matrix multiplication, dot product; matrix*matrix) 연산과 복소공액 행렬(conjugated matrix; matrix.H) , 전치행렬(transpose matrix; matrix.T), 역행렬(Inverse matrix; matrix.I) 등 연산을 편리하게 사용 할 수 있다. 즉, 연속해서 수식을 만들어 연산을 수행하는 경우에 함수를 사용하면 불편하고, 이해도도 떨어지게된다. 이럴때 수기로 표현하는 것과 가능한 유사한 형태의 표기를 사용하면 매우 편리할 것이다. 이러한 편리함을 위해 matrix 자료형을 사용하게 되는 것이다.</p>
<h3 id="배열array과-행렬matrix-벡터vector-의-생성">배열(array)과 행렬(matrix), 벡터(vector) 의 생성</h3>
<p>배열 생성 : 
numpy.array()함수를 사용
<img src="https://velog.velcdn.com/images/macaron_6pjm/post/615fae8f-e89b-44dc-ac64-eda621cd1d61/image.png" alt=""></p>
<p>행벡터와 열백터의 생성 :
1차원 리스트를 입력하는 방법으로 응용
<img src="https://velog.velcdn.com/images/macaron_6pjm/post/bd477b9a-61b6-4ff3-81b8-447563a68e49/image.png" alt=""></p>
<p>열벡터 생성 : 
ndmin의 변수를 주어 2차원 배열로 변경하고 .T 속성을 사용
<img src="https://velog.velcdn.com/images/macaron_6pjm/post/9348ad9a-0946-4af7-a69b-f798100b2d56/image.png" alt=""></p>
<p>a=[1,2,3]은 파이썬에서 배열이 아닌 list자료형이다. numpy에서 배열은 리스트형을 array()함수로 변환하여 만드는 것이다. 아래의 코드를 보고 의미를 한번 확인해 보자.<img src="https://velog.velcdn.com/images/macaron_6pjm/post/601d9a99-6509-403f-86ed-8708e144c318/image.png" alt=""></p>
<h4 id="배열array과-행렬matrix의-생성과-변환">배열(array)과 행렬(matrix)의 생성과 변환</h4>
<p>행렬을 생성하기위해서는 크게 배열을 생성하여 행렬로 변환하는 방법과 한번에 행렬을 생성하는 두가지 방법이 있다. 한번에 생성하는 것이 편리해보이지만 꽤 많은 함수가 배열(array)형태를 입력변수로 사용하므로 행렬을 사용하여 변환하는 방법이 더 유용하기도 하다.</p>
<p>배열은 아래와 같이 변환한다.</p>
<p><img src="https://velog.velcdn.com/images/macaron_6pjm/post/d9ce1a90-e7d4-40d4-999e-cb5f6060447d/image.png" alt=""></p>
<p>여기서 a는 배열이고, b는 행렬이다. asmatrix()함수를 사용하여 배열(array)를 행렬(matrix)로 변환할 수도 있고, 처음부터 matrix()함수로 정의할 수도 있다.</p>
<p><img src="https://velog.velcdn.com/images/macaron_6pjm/post/e65472fe-60e3-4b07-9e4e-28c2b853ece7/image.png" alt=""></p>
<p>matrix()함수는 mat()라고 약어로 사용하여도 동일하게 동작한다.</p>
<p>배열(array)과 행렬(matrix) 연산 결과의 차이</p>
<p>행렬(matrix)이 아닌데도 배열을 사용하여 arrayarray와 같이 를 사용할경우 에러가 발생하는 것이 아니라 다른 결과를 나타내기 때문에 논리적인 오류를 발생할 수 있다.</p>
<p>a=(1324), b=[1324],</p>
<p><img src="https://velog.velcdn.com/images/macaron_6pjm/post/7c34396b-9c6f-418c-bf1f-f803846580fb/image.png" alt=""></p>
<p>배열형에서는 연산으로 배열곱이 잘 수행되는 것을 볼 수 있다. 이러한 문제로 dot()함수를 쓰자는 사람들이 있을수 있지만, 연속된 많은 계산을 해야하는 경우 행렬의 곱 은 매우 유용하게 사용할 수 밖에 없다. 논리적 오류가 발생되지 않도록 주의하자.
이런 실수와 편이성을 높이기 위해서 Python 3.5버전 이상에서 부터는 배열형에서 행렬곱을 @을 사용하여 구현할 수 있도록 되었다.</p>
<h4 id="출처">출처</h4>
<p><a href="">https://developer0hye.tistory.com/18</a>
<a href="">https://numpy.org/devdocs/user/basics.broadcasting.html</a>
<a href="">https://techreviewtips.blogspot.com/2018/08/05-03-python-array-matrix.html</a>
<a href="">https://yganalyst.github.io/data_handling/memo_5/#1-2-3%EC%B0%A8%EC%9B%90-%EB%B3%80%ED%99%98</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[How to use LiDAR ]]></title>
            <link>https://velog.io/@macaron_6pjm/How-to-use-LiDAR</link>
            <guid>https://velog.io/@macaron_6pjm/How-to-use-LiDAR</guid>
            <pubDate>Tue, 14 May 2024 10:50:03 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요. 
오늘은 라이다를 사용하는 방법에 대해 알려드리겠습니다.</p>
<p>우분투 20.04 noetic 버전과 ros1 기준이며 
velodyne lidar VLP16 장비를 사용함을 가정하고 설명된 글 입니다.</p>
<h3 id="-라이다-초기-설정-방법-및-환경-세팅">-라이다 초기 설정 방법 및 환경 세팅</h3>
<h4 id="1-네트워크-설정">1. 네트워크 설정</h4>
<p><strong>sudo ifconfig enp3s0 192.168.3.100
sudo route add 192.168.1.201 enp3s0</strong></p>
<p>enp3s0 이 부분은 
 ifconfig 명령어를 터미널에서 실행한 뒤 나오는 첫번째 인터페이스로 대체해줘야합니다.</p>
<p><img src="https://velog.velcdn.com/images/macaron_6pjm/post/47d5bad9-a076-4fda-89e1-9fe247ed9bfc/image.png" alt=""></p>
<h4 id="2-ros-dependencies-설치하기">2. ROS dependencies 설치하기</h4>
<p>sudo apt-get install ros-VERSION-velodyne
VERSION에 자신의 ROS버전에 맞는 버전이름을 입력해주면 됩니다. 
저는 noetic version을 사용 중이기에 다음과 같이 입력했습니다.</p>
<p><strong>sudo apt-get install ros-noetic-velodyne</strong></p>
<h4 id="3-vlp16-driver-설치하기">3. VLP16 driver 설치하기</h4>
<p><strong>cd ~/catkin_ws/src/ &amp;&amp; git clone <a href="https://github.com/ros-drivers/velodyne.git">https://github.com/ros-drivers/velodyne.git</a>
cd ..
rosdep install --from-paths src --ignore-src --rosdistro YOURDISTRO -y
cd ~/catkin_ws/ &amp;&amp; catkin_make</strong></p>
<h4 id="4-data-시각화">4. Data 시각화</h4>
<p><strong>roslaunch velodyne_pointcloud VLP16_points.launch
rosnode list
rostopic echo /velodyne_points
rosrun rviz rviz -f velodyne</strong></p>
<p>이를 통해 rviz로 라이다 데이터를 확인 할 수 있게 되었습니다.<br>rivz 들어가서 fixed frame 은 velodyne으로 수정해야하지만 <strong>rosrun rviz rviz -f velodyne</strong> 이렇게 실행시키면 수정 안해줘도 됩니다.</p>
<h4 id="토픽-발행해보기">토픽 발행해보기</h4>
<p><strong>rostopic echo /velodyne_points</strong> 
이 명령어를 통해서 라이다 데이터가 잘 들어오는지 확인할 수 있다.</p>
<h3 id="-라이다-백파일-저장-방법">-라이다 백파일 저장 방법</h3>
<p>rosbag은 ROS에서 제공하는 로깅 툴입니다. rosbag을 이용하여 센서에서 들어는 모든 메시지들을 시간 순서에 맞게 저장 하고 재생 할 수 있습니다. 저장시 확장자는 *.bag입니다.</p>
<p><strong>rosbag record -O velodyne_data.bag /velodyne_points</strong>
이 명령은 ROS에게 &#39;/velodyne_points&#39; 토픽의 메시지를 기록하고 이를 &#39;velodyne_data.bag&#39;라는 이름의 백 파일에 저장하도록 지시합니다.
&#39;velodyne_data.bag&#39;을 원하는 파일 이름으로 바꿀 수 있습니다.</p>
<ol>
<li><strong><code>rosbag Record</code></strong> 명령이 실행되는 동안 지정된 주제에 게시된 메시지를 계속해서 bag 파일에 저장합니다.</li>
<li>충분한 데이터를 녹음한 후 &#39;rosbag Record&#39;가 실행 중인 터미널에서 &#39;Ctrl + C&#39;를 눌러 녹화를 중지할 수 있습니다.</li>
</ol>
<p>모든 토픽을 포함하는 bag 파일을 저장하려면 <code>rosbag record -a</code> 명령어를 사용하면 됩니다.
예를 들어 gps 토픽도 받아오고 싶은데 토픽이름을 모르면 일단 -a로 다 받아오는 방법도 있습니다.</p>
<p><strong>명령어 설명:</strong></p>
<ul>
<li><strong>rosbag:</strong> ROS bag 파일 관련 명령어를 사용하는 툴</li>
<li><strong>record:</strong> ROS 토픽 데이터를 bag 파일에 저장하는 명령</li>
<li><strong>a:</strong> 모든 토픽을 포함하도록 지정하는 옵션</li>
</ul>
<p><strong>사용 예시:</strong></p>
<p><code>rosbag record -a /my_bag_file.bag</code></p>
<h3 id="-라이다-백파일-실행-방법">-라이다 백파일 실행 방법</h3>
<p>백 파일(이 경우 <strong><code>velodyne_data.bag</code></strong>)이 있으면  <strong><code>rosbag play</code></strong>를 사용하여 재생할 수 있습니다. RViz에서 고정 프레임을 &#39;velodyne&#39;으로 설정하고 토픽을 &#39;/velodyne_points&#39;로 설정하여 LiDAR 데이터를 시각화할 수 있습니다.</p>
<p><strong>rosbag play [저장경로]</strong>
여기에 play 뒤에 -l을 붙여서 <strong>rosbag play -l [저장경로]</strong> 라고 하면 bag파일이 무한히 재생됩니다. </p>
<h3 id="-rosbag-info">-rosbag info</h3>
<p><img src="https://velog.velcdn.com/images/macaron_6pjm/post/fc2e5b77-d1da-4245-b2f7-669bf610f97e/image.png" alt="">
여기서 중요한것은 마지막 줄의 topics입니다. </p>
<h4 id="velodyne_points-토픽과-sensor_msgspointcloud2-메시지-설명">/velodyne_points 토픽과 sensor_msgs/PointCloud2 메시지 설명</h4>
<h4 id="1-velodyne_points-토픽">1. /velodyne_points 토픽:</h4>
<p>이 토픽은 LiDAR (Light Detection and Ranging) 센서로부터 수집된 3D 데이터를 나타냅니다. LiDAR 센서는 레이저 펄스를 발사하여 주변 환경의 표면 거리를 측정하고, 이 정보를 사용하여 3D pointcloud를 생성합니다.</p>
<p>pointcloud는 주변 환경의 표면을 나타내는 수백만 개의 데이터 포인트로 구성됩니다. 각 데이터 포인트에는 x, y, z 좌표 (3D 공간에서의 위치) 및 강도 (레이저 펄스의 반사 강도)와 같은 정보가 포함됩니다.</p>
<p>/velodyne_points 토픽은 이러한 LiDAR 점 구름 데이터를 로봇 시스템에 전달하는 데 사용됩니다. </p>
<h4 id="2-sensor_msgspointcloud2-메시지">2. sensor_msgs/PointCloud2 메시지:</h4>
<p>sensor_msgs/PointCloud2는 ROS에서 3D pointcloud 데이터를 표현하는 데 사용되는 표준 메시지 형식입니다. 이 메시지는 다음과 같은 정보를 포함합니다.</p>
<p>헤더(header): 메시지의 시간, 프레임 ID 및 기타 메타데이터를 포함합니다.
필드(field): pointcloud 데이터를 구성하는 각 데이터 포인트에 대한 정보를 포함합니다. 일반적으로 필드에는 x, y, z 좌표, 강도 및 기타 추가 정보가 포함됩니다.</p>
<p>오늘은 라이다 드라이버를 설치하는 방법, 라이다 데이터 백 파일 저장, 백 파일 실행 그리고 토픽과 메시지에 대한 이야기를 하였습니다. </p>
<p>다시 한번 리마인드 해보면서 직접 vlp 16으로 사용해보시다가 모르는 부분이 생기면 댓글 남겨주세요. 
감사합니다.</p>
<p>good morning ~</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[LiDAR 데이터 처리 ]]></title>
            <link>https://velog.io/@macaron_6pjm/LiDAR-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC</link>
            <guid>https://velog.io/@macaron_6pjm/LiDAR-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC</guid>
            <pubDate>Sun, 12 May 2024 08:11:03 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요 
오늘 이야기 해볼 주제는 lidar data process 입니다. </p>
<p>velodyne lidar vlp 16 이라는 라이다 장비를 이용해서 pointcloud를 받아오게 됩니다.
이 row data(가공하지 않은 데이터)에는 수많은 점들이 찍혀있습니다. (대략 20000~30000개)</p>
<p>row data를 처리 하는 일련의 과정은 다음과 같습니다.</p>
<ol>
<li><p>voxelization</p>
</li>
<li><p>roi 설정</p>
</li>
<li><p>ransac</p>
</li>
<li><p>dbscan</p>
</li>
</ol>
<p>1~3까지는 rowdata의 점의 개수를 줄이는 과정이고, 4번은 군집화를 해주는 과정입니다.</p>
<p>즉 data process = downsamplig + clustering  이라고 볼 수 있습니다.</p>
<p>downsamplig과 clustering 방법에는 여러가지가 있습니다. 
1~4번의 과정은 여러 방법 중 하나입니다.</p>
<p>오늘은 1~4번의 진행과정을 자세히 들여다 보겠습니다.</p>
<p>1~4번의 과정을 수행하기 위해 c++/python 등으로 구현이 가능하지만, 저는 python으로 구현해보았습니다.</p>
<p>python에서도 어떤 라이브러리(pcl, open3d, scikit-learn ..)를 활용하느냐에 따라 방법이 나뉘겠지만 저는 open3d와 사이킷런을 활용하였습니다.</p>
<p>-
import open3d as o3d
open3d 라이브러리를 활용한 1-3번 과정
<img src="https://velog.velcdn.com/images/macaron_6pjm/post/c5bc42a9-dffa-4b93-bceb-bccc99605957/image.png" alt=""></p>
<p>-
from sklearn.cluster import DBSCAN
사이킷런에서 디비스캔을 활용한 4번 과정 <img src="https://velog.velcdn.com/images/macaron_6pjm/post/ace376f1-e082-4cd7-8256-21329ea447ab/image.png" alt=""></p>
<p>voxel의 개념
복셀은 복셀그리드 모양에서 점 1개만을 놔두고 나머지를 제거하는 방법이다.
앞선 예시로 복셀 사이즈를 0.05m로 설정하였음
아래 이미지에 색칠된 모양이 복셀그리드 입니다.
<img src="https://velog.velcdn.com/images/macaron_6pjm/post/1bbe6fdf-8d3b-48c5-a317-df5ed4940ac4/image.png" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>