분류 전체보기
CUDA(쿠다)
CUDA는 그래칙 카드를 이용한 GPGPU의 통합 개발 환경 제공을 목적으로 함. NVIDIA사에서 GPGPU에 대한 흐름을 먼저 인식하고 그래픽 카드를 범용적인 용도로 사용할 때 발생하는 어려움을 해결하기 위한 노력을 시작하였다. 이전의 그래픽 카드는 3D처리를 위해 다양한 기능이 추가되었지만 모두 그래픽 처리를 위한 것으로 범용적인 용도로 쓰이는 것들은 아니었다. 이런 문제를 해결하기 위해 NVIDIA사는 기존의 GeForce 시리즈를 그래픽 전용처리를 위한 구조에서 유연성을 향상시켜 범용적인 프로그램을 처리할 수 있도록 변경하였다. 그리고 GPU를 이용한 범용적인 프로그램을 개발할 수 있도록 '프로그램 모델', '프로그램 언어', '컴파일러', '라이브러리', '디버거', '프로파일러'를 제공하는 ..
urdf를 이용하여 로봇청소기 만들기
https://durian9s-coding-tree.tistory.com/162 원통좌표형 매니퓰레이터 URDF 만들기 cd ~/catkin_ws/src/testbot_description/urdf vim testbot_homework.urdf urdf파일을 작성하고 아래의 코드를 실행시킨다. $ roslaunch testbot_description testbot_homework.launch roslaunch를 실행시킨 상.. durian9s-coding-tree.tistory.com 어제 원통 좌표형 매니퓰레이터를 만들었었고, 오늘은 로봇 청소기 모양의 매니퓰레이터를 만들었다. 모양은 비교적 쉽에 만들었으나 조인트를 조정하여 바퀴를 만져봤을 때 생각지도 못한 부분의 디버깅으로 인해 시간이 다소 소요되었..
원통좌표형 매니퓰레이터 URDF 만들기
cd ~/catkin_ws/src/testbot_description/urdf vim testbot_homework.urdf urdf파일을 작성하고 아래의 코드를 실행시킨다. $ roslaunch testbot_description testbot_homework.launch roslaunch를 실행시킨 상황에서 새 터미널로 rviz를 실행함. 베이스 링크 실린터형으로 만들고 바닥에 반이 묻히는 것을 방지하기 위해 Yaw를 0.1 만큼 높여주었다.(원점이 length의 반절부에 있기 때문에) joint1 revolute와의 차이점을 찾기위해 continuous를 선택해서 만들었지만 큰 차이는 없었다. link1 원통형 링크1을 사용, 마찬가지로 yaw를 주었다. link1과 link2의 joint는 움직이..
Manipulator 모델링
ROS 설치할 때 완경설정도 같이 했었습니다. 다시 한번 환경설정을 확인하고 진행하겠습니다. 1. 환경설정 파일 불러오기 $ source /opt/ros/melodic/setup.bash 2.작업폴더 초기생성 및 초기화 $ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/src $ catkin_init_workspace $ cd ../ #catkin_ws로 $ catkin_make $ ls # build, devel, src 폴더의 유무 확인 저는 이 모든걸 확인하고 진행했음에도 새로 생성한 폴더가 패키지로 인식이 되지않아 build 폴더와 devel 폴더를 다시 지우고 진행했습니다. $ sudo apt install ros-melodic-joint-state-publisher..
Manipulator
좌표변환(TF) Manipulators - 인간의 팔과 유사한 동작을 제공하는 기계적 장치 기저 (base) - 매니퓰레이터가 고정되어있는 부분 링크(link) - 기저, 관절, 말달장치를 연결해주는 강체 역할 관절(joint) - 로봇의 움직임을 만들어냄.(회전 운동현 / 병진 운동형) 말단장치(end effector) - 사람 손에 해당하는 부분 또는 장비 joint의 종류 revolute joint - ex)선풍기 Prismatic Joint - ex) 스캐너, 자동화장비 등 이 두가지가 가장 기본적이며, 다른 종류는 대게 변형된 것. DOF(Degreee of freedom) - 자유도 6개의 변수로 물체의 위치/ 자세가 표현 가능 == 6자유도로 표현이 가능 6개의 변수로 로봇의 말단 장치의 위..
로봇의 활용 분야
로봇은 이미 우리 삶에 스며들어있다. 산업현장에서의 자동화기계, 배달로봇, 서빙로봇 심지어 가정 내의 자동청소로봇 까지. 로봇이 우리 삶에 제공해 줄 수 있는 가치를 조사해봤다. 일본, 미국, 유럽 등은 이미 정부차원으로 프로잭트를 진행하는 등 큰 투자를 진행하고있다. 산업용 로봇과 서비스용 로봇의 발전은 빠르게 진행되고있고 앞으로의 성장 또한 큰 폭으로 진행될 것으로 예상된다. 실버케어 로봇의 경우 부족한 인력을 보완하고 의료 및 사회 안전 등 전문서비스용 로봇, 개인활동 보조 및 우울증 해소를 위해 활용되고있다. 실버케어 로봇은 개인의 활동 보조, 우울증 해소를 위한 개인 로봇 서비스를 제공하고, 전문서비스용 로봇은 원격진료, 거동이 불편하거나 근력보조를 통해 업무 효율을 높여주는 로봇 슈트등으로 활..
ROS 설치
ROS 설치 사용하고 있는 우분투의 버전은 18.04입니다. ROS Melodic을 설치합니다. 연결되어있는 명령어를 한줄 보기좋게하려고 한줄 내려서 적으면 햇갈려서 길게적었습니다~ 확인해주세요 #Source.list설정 $ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' #Key 설정하기 $ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 #Decian 설치하기 $ sudo ap..
ROS란 / 왜 ROS를 배워야 하는가? / 다른 로봇 플랫폼은?
ROS란? 로봇 운영체제(ROS,Robot Operating System)는 로봇 응용 프로그램을 개발할 때 필요한 하드웨어 추상화, 하위 디바이스 제어, 일반적으로 사용되는 기능의 구현, 프로세스간의 메시지 패싱, 패키지 관리, 개발환경에 필요한 라이브러리와 다양한 개발 및 디버깅 도구를 제공한다. ROS는 로봇 응용 프로그램 개발을 위한 운영체제와 같은 로봇 플랫폼이다. 하드웨어 플랫폼을 하드웨어 추상화로 포함하고 있으며, 로봇 응용 소프트웨어 개발을 지원을 위한 소프트웨어 플랫폼이면서 이기종의 하드웨어에서 사용 가능한 운영 체제와 같은 기능을 갖추고 있다. 쉽게 말하자면 로봇운영시스템이라고는 하지만 OS가 아닌 로봇과 로봇 사이의 통신을 만들어주거나, 로봇과 센서의 통신을 이어주거나, 사람들의 코드..
ubuntu 듀얼부팅 환경설정/ 듀얼부팅 문제해결
ubuntu dual booting 환경 제 글을 참고하여 따라하실 분들은 아래의 블로그들을 보고 따라해주세요! 1. Disk Image 확보 in windows cmd에 / diskmgmt.msc 입력 MRC / 볼륨축소 (우분투 설치 공간확보) 2. 우분투 이미지 다운로드 (18.04) - ubuntu-18.04.4-desktop-amd64.iso ref. https://releases.ubuntu.com/18.04/ Ubuntu 18.04.5 LTS (Bionic Beaver) Select an image Ubuntu is distributed on three types of images described below. Desktop image The desktop image allows you to..
YOLO 두바이 운전 영상 객체인식
TFOD 환경설정부터 객체인식 동영상으로 돌리는 것 까지 다 해봤다. 영상을 보기 위해서는 아래의 mp4파일을 다운로드 해야한다. 동영상은 https://www.youtube.com/watch?v=TE2tfavIo3E 두바이의 도로주행 모습이다. 화질이 좋을수록 객체인식이 잘되고, 차만 나오는게 아니라 트럭, 신호등, 사람, 표지판 등을 잘 인식한다.
TensorFlow Object Detection 환경구축
TFOD를 사용하기 위한 환경설정을 처음부터 끝까지 진행해보도록 하겠습니다. 1. 가상환경 설정 및 텐서플로우 설치 - conda(cmd)에 코드 작성 (저는 리마인드용이라 tfod_self로 만들었지만 보시는분들은 tfod로 만드셔도 무방합니다) conda create -n tfod_self python=3.8 conda activate tfod_self pip install tensorflow==2.2.0 python import tensorflow as tf 2. document폴더에 텐서플로우 폴더를 만들어 git 설치함. cd Documents (문서 폴더로 이동) mkdir Tensorflow (텐서플로우 파일 생성) git 설치 git clone https://github.com/tensor..
라즈베리파이3 세팅하기
몇번을 다시 하는지 모르겠다. https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit Operating system images – Raspberry Pi The Raspberry Pi is a tiny and affordable computer that you can use to learn programming through fun, practical projects. Join the global Raspberry Pi community. www.raspberrypi.org 라즈베리파이 os다운을 받는다. 다운 후 압축을 풀면 이미지 파일이 나오는데 알집으로 안풀려서 뭐지 싶었다. 이것 자체를 사용할 것. https:..
MCU(Micro Controller Unit) 와 MPU(Micro Processor Unit)
MPU와 MCU는 모두 명령어 처이를 위한 장치이다. MPU(마이크로 프로세서)는 프로세서 내부에 레지스터, 제어장치, 연산장치를 포함하여 연산에 특화된 기능을 갖는 장치이다. 개별 연산수행만 가능하고, ROM, RAM과 같은 입출력 포트같은 출력장치 등의 주변장치가 있어야만 사용 가능하다. MCU(마이크로 컨트롤러)는 마이크로 프로세서와 이를 사용하기 위한 메모리, 입력장치등의 필요 기능이 함께 집적된 장치를 말한다. 단독으로 사용이 가능하여 마이컴 또는 작은 컴퓨터로 불리기도 하고, 아두이노에도 마이크로 컨트롤러가 포함된다. 결론. MPU는 저장장치, 출력장치와 함꼐 사용해야하는 연산목적의 CPU. MCU는 저장장치와 출력장치가 내장되어 단독 사용이 가능한 CPU이다. 출처 - devicemart.b..
YOLO ( You Only Look Once )란 무엇인가
YOLO란 You Only Look Once의 약자로, 다른 모델들에 비해 빠를 처리속도를 보여 실시간으로 객체탐지가 가능하다. SSD와 같이 하나의의 이미지 데이터를 여러개의 이미지 데이터로 나누어 분석하는것이 아닌, 전체의 이미지를 이용해 학습하고 예측하기 때문이다. (배경의 노이즈 부분에서 물체를 인식하는 오류가 발생할 확률이 낮음) 모델의 구조는 아래와 같다 YOLO의 신경망은 확실히 SSD와 다르게 간단한 신경망으로 구성되어있는 모습을 볼 수 있다. 입력한 이미지 데이터는 7x7x30의 데이터로 변환된다.( 가로세로 7개의 격자로 나뉜 30개의 행렬 데이터. 격자로 구분된 셀을 그리드셀이라고 부른다. ) 1. 하나의 이미지 데이터를 입력하면 물체들을 찾아 bounding box와 가장 높은 확률..
SSD(Single Shot Multibox Detector)란 무엇인가
Object Detection의 방법 중엔 SSD와 YOLO가 있다. 두 방식은 서로 엎치락 뒤치락 하며 계속해 발전해왔다. 두가지 Object Detection에 대해 설명하기 전, 공통으로 사용되는 개념인 IOU( Intersection over Union )에 대해 먼저 설명해야 하는데, IOU란 두 영역이 겹칠때, 얼마만큼이 겹쳐졌는지에 대한 값이다. 겹치는 부분이 많을수록 값은 커지며, 겹치는 부분이 적다면 값이 적어진다. ( 교집합의 개념이며, 0 ~ 1 로 나타냄 ) 즉, IOU = (두 영역의 교집합) / (두 영역의 합집합) 이다. SSD란 Single Shot Multibox Detector의 약자로, 하나의 이미지데이터에 들어있는 여러 사물들을 찾는다. 즉, Input은 이미지 데이터..
TFOD( Tensorflow Object Detection )
TFOD는 하나의 Object가 아닌 여러개의 Object를 Detection할 수 있다. TFOD 환경 만들기 https://durian9s-coding-tree.tistory.com/151 TensorFlow Object Detection 환경구축 TFOD를 사용하기 위한 환경설정을 처음부터 끝까지 진행해보도록 하겠습니다. 1. 가상환경 설정 및 텐서플로우 설치 - conda(cmd)에 코드 작성 (저는 리마인드용이라 tfod_self로 만들었지만 보시는분 durian9s-coding-tree.tistory.com Protobuff란 jeong-pro.tistory.com/190 Protocol Buffer 원리로 배우는 고성능 직렬화, 역직렬화 전략! Protocol Buffer 예제 테스트(구글이..
Semantic Segmentation( feat. E-net )
Semantic Segmentation이란 물체들을 분할해서 표시하되 같은 물체들을 묶어서 분할하는 방법이다.( 같은 색으로 처리해 표현.) 즉, 한 이미지 데이터에 여러개의 객체를 구분하기 위해 Semantic Segmentation기법을 이용한다. 그 중 OpenCV DNN module인 E-net을 사용해 프로그래밍해보겠다. E-net은 Blob이미지 데이터를 입력받는다. Blob은 동일한 방식으로 전처리된 동일한 너비, 높이 및 채널수를 가진 이미지를 말한다. 순서 1. 이미지를 Blob 이미지 데이터로 변환. 2. E-net모델을 사용해 Semantic Segmentation한다. 3. softmax방식을 이용하기 때문에 클래스의 개수만큼의 데이터가 나오는데 하나의 이미지 데이터로 처리. (ar..
Semantic Segmentation_video
import numpy as np import pandas as pd import imutils import time import cv2 import os import matplotlib.pyplot as plt DEFAULT_FRAME = 1 SET_WIDTH = int(600) sv = cv2.VideoCapture('data4/video/video.mp4') try : prop = cv2.cv.CV_CAP_PROP_FRAME_COUNT if imutils.is_cv2() else cv2.CAP_PROP_FRAME_COUNT total = sv.get(prop) # print("[INFO] {} total frames in video.".format(total)) except : # print("[I..
road_marking_detection
import cv2 import numpy as np import matplotlib.image as mpimg import matplotlib.pyplot as plt # 칼라이미지. image_color = cv2.imread('data2/image.jpg') # cv2.imshow("ori",image_color) # 우리가 필요한건 그레이 스케일 image_gray = cv2.cvtColor(image_color, cv2.COLOR_BGR2GRAY) # cv2.imshow("gray", image_gray) image_copy = image_gray.copy() # 값이 195 미만인 것들은, 0으로 셋팅. # print(image_color.shape) # print(image_copy.shap..
find contures
import cv2 import numpy as np import random #허프 트렌스폼 threshold = 0 maxThreshold = 255 * 3 random.seed(12345) def callback(): # 캐니 에지로, 에지 검출하고, imCanny = cv2.Canny(img, threshold, threshold*2, apertureSize=3) # 컨투어스 연결시킨다. 에지를 연결시킴 contours, heirarchy = cv2.findContours(imCanny, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 연결시켜서 그린다. display = np.zeros( (imCanny.shape[0], imCanny.shape[1]) ) for i ..
Canny
import cv2 import numpy as np #캐니 커널은 그레이스케일로 엣지를 효율성 때문에 판단한다. img = cv2.imread('data/images/sample.jpg',0) cv2.imshow('img',img) #threshold값에 따라 결과가 달라진다. threshold_1 = 130 #high : 0~255중에 설정 threshold_1 = 100 #low result =cv2.Canny(img, threshold_1,threshold_1) cv2.imshow('result', result) cv2.waitKey(0) cv2.destroyAllWindows() import cv2 import numpy as np highThreshold = 100 lowThreshold = ..
sobel
import cv2 import numpy as np #이미지를 부드럽게~ img = cv2.imread('data/images/truth.png') #가로선의 edge를 나타냄 sobelX = cv2.Sobel(img, cv2.CV_32F,1,0) #세로선의 edge를 나타냄 sobelY = cv2.Sobel(img, cv2.CV_32F,0,1) cv2.imshow('ori', img) cv2.imshow('sobelX', sobelX) cv2.imshow('sobelY', sobelY) cv2.waitKey(0) cv2.destroyAllWindows()
bilateral Filter
import cv2 import numpy as np #이미지를 부드럽게~ img = cv2.imread('data\images\gaussian-noise.png') result = cv2.bilateralFilter(img, 15, 80,80) combined = np.hstack([img,result]) cv2.imshow('comb', combined) cv2.waitKey(0) cv2.destroyAllWindows()
Median Blur
import cv2 import numpy as np #이미지를 부드럽게~ img = cv2.imread('data\images\gaussian-noise.png') #blur는 컨볼루션까지 다해줘 #3x3커널 사용 des1 = cv2.medianBlur(img, 5) dst2 = cv2.medianBlur(img, 25) combined = np.hstack([img,des1,dst2]) cv2.imshow('comb', combined) cv2.waitKey(0) cv2.destroyAllWindows()
gaussianBlur
import cv2 import numpy as np #이미지를 부드럽게~ img = cv2.imread('data\images\gaussian-noise.png') #blur는 컨볼루션까지 다해줘 #3x3커널 사용 des1 = cv2.GaussianBlur(img, (3,3),1) dst2 = cv2.GaussianBlur(img, (25,25),50) combined = np.hstack([img,des1,dst2]) cv2.imshow('comb', combined) cv2.waitKey(0) cv2.destroyAllWindows()
boxfilter
import cv2 import numpy as np #이미지를 부드럽게~ img = cv2.imread('data\images\gaussian-noise.png') #blur는 컨볼루션까지 다해줘 #3x3커널 사용 des1 = cv2.blur(img, (3,3)) #7x7 커널 사용 dst2 = cv2.blur(img, (7,7)) combined = np.hstack([img,des1,dst2]) cv2.imshow('comb', combined) cv2.waitKey(0) cv2.destroyAllWindows()
convolution
import cv2 import numpy as np img = cv2.imread('data\images\gaussian-noise.png') kernel_size = 3 kernel = np.ones((kernel_size,kernel_size)) #컨볼루션 시행 cv2.filter2D함수 result = cv2.filter2D(img,-1,kernel) cv2.imshow('img',img) cv2.imshow('result',result) cv2.waitKey(0) cv2.destroyAllWindows()