분류 전체보기 14

[OpenCV] 3. 객체 탐지를 위한 이미지 전처리 프로세싱 (Image Processing)

서론상자를 분류하기 위해서는 가장 먼저 해당 상자의 길이를 측정할 수 있어야 한다. 상자의 길이를 측정해야 특정 값을 기준으로 상자를 분류할 수 있기 때문이다. 그래서 이번 글에서는 상자의 길이를 측정하기 전에 이미지 프로세싱을 통해서 이미지를 가공하는 방법에 대해서 알아볼 것이다.객체 길이 측정 방법객체의 길이를 측정하기 위한 알고리즘을 한 번 생각해 보자. 가장 간단한 방법은 이미 알고 있는 물체의 길이를 사용해서 비례적으로 타겟 객체의 길이를 계산하는 방법이다. 하지만 이렇게 간단한 방법을 하기 위해서 우리가 해야 할 작업이 몇 가지가 있다. 객체 탐지 알고리즘이미 우리가 길이를 알고 있는 객체가 있다고 하더라도, 우리는 그 객체를 탐지하고 인식해야 그 길이 정보를 사용할 수 있다. 또한, 우리가 ..

Robotics 2024.12.03

[Ball Balancing] 2. 인벤터 도면으로 3D 프린터 (3DP-110F) 출력하기

서론이전 글에서 우리는 Ball Blancing을 위한 프레임을 모두 설계하고 모델링했다. 그리고 시뮬레이션을 통해서 해당 기구 설계가 동작하는데 문제가 없다는 것을 확인했다. 그렇다면 이제 우리는 3D 프린터를 가지고 원하는 모델을 출력할 수 있다. 만약 3D 프린터가 없었다면, 우리는 이렇게 모델링한 것을 업체에 보내서 가공을 해달라고 해야 한다. 그렇게 주문 제작을 할 경우에는 꽤나 비싼 비용이 필요하다. 만약 우리가 이것을 가공을 통해서 직접 제작을 한다면, 전문가가 아니기에 여러 오차가 발생할 수밖에 없다. 하지만 이제 우리에겐 3D 프린터가 있다. 학교의 동아리나 과방 등에 3D 프린터가 한 대쯤은 있을 것이다. 그것을 활용해서 우리가 만들고자 하는 기구를 직접 설계하고 제작할 수 있다.Cub..

Robotics 2024.11.23

[Ball Balancing] 1. 인벤터로 동작 시뮬레이션 확인하기

서론설계라는 과정은 머릿속에 있는 것을 그리거나 모델링해서 실제로 눈으로 볼 수 있게 하는 과정이다. 아무리 머릿속에서 완벽하게 상상했다고 하더라도 실제로는 공차가 맞지 않다거나 단차가 생기는 등의 변수가 발생할 수 있다. 따라서 직접 그려보고, 더 정확하게는 치수를 입력해서 모델링한 뒤 시뮬레이션을 통해서 동작을 확인하는 것이 가장 좋다. 나는 3D 프린터로 출력을 하기 위해서 모델링을 했다. 하지만 시뮬레이션을 돌리지 않았고, 나의 설계가 완벽할 것이라고 믿었다. 하지만 실제로 3D 프린터로 출력을 한 뒤, 조립을 해서 확인을 해보니 내가 생각했던 움직임이 나오지 않았다. 사실 약간의 공차와 단차는 사포질을 통해서 해결할 수 있다. 하지만 애초에 불가능한 관절의 움직임을 해결하는 것은 쉽지 않다. 따..

Robotics 2024.11.22

[Ball Balancing] 0. 아두이노 프로젝트로 공 균형 잡기 도전

서론나는 기계공학과 학생이다. 이번 기계공학실험 수업을 들으며 미니 프로젝트가 주어졌다. 주제는 아두이노를 사용하여, 두 개의 서보모터를 사용하여, plate 위에 있는 공의 균형을 잡는 것이다. 흔히, Ball Balancing 혹은 Balancing Ball 등으로 불리며, PID 제어를 공부할 때 많이 하는 주제이다. 난이도는 조금 높지만 그래도 흔한 아두이노 프로젝트로 알려져 있다. (참고 영상: https://www.youtube.com/shorts/PfjV1vAq0rU) 보통은 이미 주어진 모델이 있고, 학생들이 PID 제어만을 연습하기 위해서 코딩을 한다. 하지만 이번 실험 수업에서는 그저 아두이노 우노(Arduino UNO)와 서보 모터 두 개, 가속도 센서 한 개만을 제공해주었다. 즉, ..

Robotics 2024.11.15

[OpenCV] 2. 아루코마커 인식하기 (ArUco marker)

서론오늘은 OpenCV로 아루코마커 (ArUco marker)를 인식하는 것을 해보려고 한다. 아루코마커란 로봇 비전 혹은 컴퓨터 비전에서 많이 사용하는 마커이다. 마치 QR 코드처럼 우리가 카메라로 아루코마커를 인식하면 그 아루코마커가 가지고 있는 ID를 반환받아서 읽을 수 있다. 우리가 아루코마커를 사용하는 이유는 간편하기 때문이다. 간단히 아루코마커를 출력해서 붙여두면, 특정 위치에서 아루코마커를 인식할 수 있다. 물론, 우리가 객체인식 모델을 가지고 있다면, 굳이 아루코마커를 사용하지 않더라도 원하는 것을 인식하고 활용할 수 있다. 하지만 그렇게 딥러닝 모델을 만드는 것보다는 간단히 아루코마커를 출력해서 사용하는 편이 좋다.아루코마커 (ArUco marker)아루코마커를 간단히 만들 수 있는 사이..

Robotics 2024.11.14

[OpenCV] 1. 카메라 캘리브레이션 (Camera Calibration)

서론OpenCV를 사용하여 로봇 비전을 하기 전에 가장 먼저 해야 하는 작업이 있다. 바로 카메라 캘리브레이션 (Camera Calibration)이다. 이것은 말 그대로 카메라를 교정하는 것이다.우리가 카메라를 보면 보통 이미지가 왜곡되어 있다. 이것은 카메라의 원리가 핀홀 효과를 사용하기 때문에 주변부가 둥글게 왜곡되기 때문이다. 그리고 우리는 이것을 보정하여 오른쪽 이미지처럼 직선이 되도록 펼쳐줄 것이다. 그리고 이것을 위해 카메라의 내부 파라미터와 외부 파라미터를 보정할 것이다.카메라 파라미터카메라의 파라미터에는 크게 두 가지가 있다.카메라 렌즈 시스템의 내부 파라미터(Internal parameters): 초점 거리 (focal length), 광학 중심 (optical center), 렌즈의 ..

Robotics 2024.11.13

[OpenCV] 0. 로봇 비전을 활용한 상자 분류 프로젝트

서론로봇과 기계의 차이는 무엇일까? 로봇과 기계의 가장 큰 차이는 로봇이 스스로 센서로 무언가를 인지하고, 그것에 대한 피드백의 유무이다. 즉, 로봇에게는 센서가 있어야 한다. 그리고 그 센서의 종류에는 촉각 센서, 초음파 센서, 온도 센서 등 다양한 센서들이 있지만, 나는 그중에서 카메라를 센서로 사용하려고 한다. 카메라를 센서로 사용하는 이유에는 여러가지가 있다. 카메라는 로봇, 감시, 우주 탐사, 자동화 등 여러 산업과 여러 영역에서 이미 많이 사용하고 있다. 또한, 인간이 가장 중요시하는 감각 기관인 시각을 사용함으로써 직관적이고 확실하다. 이러한 이유로 로봇 비전 혹은 컴퓨터 비전과 관련한 개발이 많이 진행되었다. 가장 대표적으로는 이미지와 동영상을 가공하고 분석하는 OpenCV가 있다. 이것 ..

Robotics 2024.11.12

[로봇공학] 3. Inverse Kinematics로 2DOF 로봇팔 계산하기

서론이전 글에서 DH Parameter를 가지고 로봇팔을 표현하는 방법을 알아보았다. 우리는 DH 파라미터 표를 가지고 우리의 로봇팔이 어떻게 생겼는지도 알 수 있다. 그렇다면 로봇팔의 각도로 끝점의 위치를 계산하는 방법과 로봇팔을 표현하는 방법을 알았으니, 우리가 원하는 위치로 로봇이 움직일 수 있도록 해보자. 이를 위해서 우리는 Inverse Kinematics(역기구학)를 사용할 것이다.Inverse Kinematics역기구학은 쉽게 말해서 끝 점의 좌표와 각 관절의 길이를 가지고 각 관절의 각도를 계산하는 방법이다. 우리는 이미 Forward Kinematics를 다루었다. 이것은 Joint space를 Task space로 바꾸는 방법이었다. 그리고 오늘 알아볼 방법은 Task space를 Jo..

Robotics 2024.10.30

[동역학] Ch 1.1 질점의 직선운동 - 예제 1.1

예제 1.1)직선 위를 움직이는 질점의 위치가 $x = t^3 - 6t^2 - 15t + 40$의 식으로 정의된다. 여기에서 $x$는 미터, $t$는 초의 단위로 주어졌다. (a) 속도가 0이 되는 시간, (b) 그때 질점의 위치와 이동한 거리, (c) 그 순간 질점의 가속도, (d) $t = 4$초부터 $t = 6$초까지 질점이 이동한 거리를 각각 구하라. 풀이질점의 위치에 대한 식이 주어졌기 때문에 우리는 그것을 미분하여 속도와 가속도에 대한 식을 구할 수 있다. $$x = t^3 - 6t^2 - 15t + 40$$$$v = 3t^2 - 12t - 15$$$$a = 6t - 12$$ (a)속도가 0이 되는 시간은 $v = 0$일 때의 $t$를 구하면 된다. $$v = 3t^2 - 12t - 15 = ..

Robotics 2024.10.15

[동역학] Ch 1.1 질점의 직선운동

서론동역학(dynamics)은 운동 중인 물체를 해석하는 방법이다. 아마 기계공학을 전공하거나 관련 전공을 하고 있다면 정역학(statics)을 배웠을 것이다. 정역학이 정지되어 있는 물체를 해석했다고 한다면, 동역학은 움직이는 물체를 해석한다. 동역학은 진동학, 로봇공학 등 여러 분야를 공부하기 위해서 반드시 필요한 기초 학문이다. 이에 따라 동역학을 다시 공부해 보면서 내용을 정리하고, 관련 예제들을 풀어보는 시간을 가지려고 한다. 그리고 동역학의 아주 기초적인 것을 알려주기 보다는 놓치기 쉬운 부분이나 중요한 부분을 중점으로 이야기할 것이다.질점의 직선운동질점 (particles)동역학을 가장 먼저 공부하기 전에, 우리는 질점의 동역학(dynamics of particles)을 먼저 다룰 것이다. ..

Robotics 2024.10.09