Projeler
RoboVisionTech'de teknoloji, robotik ve elektronik alanlarında çeşitli projeler bulabilirsiniz. Her proje detaylı açıklamalar, kod örnekleri ve uygulama adımları içerir.
Proje Geliştirme Kaynakları
- Arduino IDE: Arduino.cc
- Python: Python.org
- OpenCV: OpenCV.org
- Raspberry Pi: RaspberryPi.org
🤖 Robotik Projeler
ROS, Arduino, Raspberry Pi ve diğer platformlar kullanarak geliştirilebilecek robotik projeler ve kod örnekleri.
1. ROS ile Basit Publisher/Subscriber
ROS'ta temel mesajlaşma sistemi ile basit bir publisher ve subscriber node'u oluşturma.
Publisher Node (Python)
#!/usr/bin/env python3
import rospy
from std_msgs.msg import String
def talker():
# ROS node'u başlatma
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous=True)
rate = rospy.Rate(10) # 10Hz
while not rospy.is_shutdown():
hello_str = "hello world %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
Subscriber Node (Python)
#!/usr/bin/env python3
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
def listener():
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("chatter", String, callback)
# Node'u çalışır durumda tutma
rospy.spin()
if __name__ == '__main__':
listener()
2. URDF ile Basit Araç
URDF (Unified Robot Description Format) kullanarak 4 tekerlekli Mars rover robotu tanımlama ve simülasyon.
URDF Robot Tanımı
<?xml version="1.0"?>
<robot name="simple_car">
<!-- Materials -->
<material name="CarRed">
<color rgba="0.8 0.1 0.1 1.0"/>
</material>
<material name="WheelBlack">
<color rgba="0.05 0.05 0.05 1.0"/>
</material>
<material name="Glass">
<color rgba="0.6 0.8 1.0 0.8"/>
</material>
<!-- Chassis -->
<link name="base_link">
<inertial>
<origin xyz="0 0 0"/>
<mass value="12.0"/>
<!-- Approx inertia for 1.0 x 0.5 x 0.2 m box -->
<inertia ixx="0.29" ixy="0.0" ixz="0.0" iyy="1.04" iyz="0.0" izz="1.25"/>
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="1.0 0.5 0.2"/>
</geometry>
<material name="CarRed"/>
</visual>
<!-- Cabin / windshield -->
<visual>
<origin xyz="0.05 0 0.2" rpy="0 0 0"/>
<geometry>
<box size="0.5 0.45 0.2"/>
</geometry>
<material name="Glass"/>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="1.0 0.5 0.2"/>
</geometry>
</collision>
</link>
<!-- Front Left Wheel -->
<link name="front_left_wheel">
<inertial>
<origin xyz="0 0 0"/>
<mass value="2.0"/>
<inertia ixx="0.0123" ixy="0" ixz="0" iyy="0.0225" iyz="0" izz="0.0123"/>
</inertial>
<visual>
<!-- Rotate cylinder so its axis aligns with Y -->
<origin xyz="0 0 0" rpy="1.5708 0 0"/>
<geometry>
<cylinder radius="0.15" length="0.08"/>
</geometry>
<material name="WheelBlack"/>
</visual>
<collision>
<origin xyz="0 0 0" rpy="1.5708 0 0"/>
<geometry>
<cylinder radius="0.15" length="0.08"/>
</geometry>
</collision>
</link>
<joint name="front_left_wheel_joint" type="continuous">
<origin xyz="0.35 0.30 -0.15" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="front_left_wheel"/>
<axis xyz="0 1 0"/>
</joint>
<!-- Front Right Wheel -->
<link name="front_right_wheel">
<inertial>
<origin xyz="0 0 0"/>
<mass value="2.0"/>
<inertia ixx="0.0123" ixy="0" ixz="0" iyy="0.0225" iyz="0" izz="0.0123"/>
</inertial>
<visual>
<origin xyz="0 0 0" rpy="1.5708 0 0"/>
<geometry>
<cylinder radius="0.15" length="0.08"/>
</geometry>
<material name="WheelBlack"/>
</visual>
<collision>
<origin xyz="0 0 0" rpy="1.5708 0 0"/>
<geometry>
<cylinder radius="0.15" length="0.08"/>
</geometry>
</collision>
</link>
<joint name="front_right_wheel_joint" type="continuous">
<origin xyz="0.35 -0.30 -0.15" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="front_right_wheel"/>
<axis xyz="0 1 0"/>
</joint>
<!-- Rear Left Wheel -->
<link name="rear_left_wheel">
<inertial>
<origin xyz="0 0 0"/>
<mass value="2.0"/>
<inertia ixx="0.0123" ixy="0" ixz="0" iyy="0.0225" iyz="0" izz="0.0123"/>
</inertial>
<visual>
<origin xyz="0 0 0" rpy="1.5708 0 0"/>
<geometry>
<cylinder radius="0.15" length="0.08"/>
</geometry>
<material name="WheelBlack"/>
</visual>
<collision>
<origin xyz="0 0 0" rpy="1.5708 0 0"/>
<geometry>
<cylinder radius="0.15" length="0.08"/>
</geometry>
</collision>
</link>
<joint name="rear_left_wheel_joint" type="continuous">
<origin xyz="-0.35 0.30 -0.15" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="rear_left_wheel"/>
<axis xyz="0 1 0"/>
</joint>
<!-- Rear Right Wheel -->
<link name="rear_right_wheel">
<inertial>
<origin xyz="0 0 0"/>
<mass value="2.0"/>
<inertia ixx="0.0123" ixy="0" ixz="0" iyy="0.0225" iyz="0" izz="0.0123"/>
</inertial>
<visual>
<origin xyz="0 0 0" rpy="1.5708 0 0"/>
<geometry>
<cylinder radius="0.15" length="0.08"/>
</geometry>
<material name="WheelBlack"/>
</visual>
<collision>
<origin xyz="0 0 0" rpy="1.5708 0 0"/>
<geometry>
<cylinder radius="0.15" length="0.08"/>
</geometry>
</collision>
</link>
<joint name="rear_right_wheel_joint" type="continuous">
<origin xyz="-0.35 -0.30 -0.15" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="rear_right_wheel"/>
<axis xyz="0 1 0"/>
</joint>
</robot>

🖼️ Görüntü İşleme Projeleri
OpenCV, TensorFlow, PyTorch ve diğer kütüphaneler kullanarak geliştirilebilecek görüntü işleme projeleri ve kod örnekleri.
URDF Araçta Renk Algılama — Kısa Blog
Geçenlerde URDF ile modellediğimiz basit aracı yeniden açtık ve şunu denedik: ‘Aracın rengini otomatik çıkarabilir miyiz?’ OpenCV ile küçük bir deneme yaptık; BGR’den HSV’ye geçip kırmızı/yeşil/mavi aralıklarını maskeledik, gürültüyü temizledik ve sonuçları kontur çizimleriyle vurguladık. Kısacası, aracın rengini (ve gövde üzerindeki belirgin renk bölgelerini) kolayca ortaya çıkaran hafif bir işleme hattı kurduk.
Aşağıdaki ‘Renk Tespiti (Resim Üzerinden)’ kodu bu yaklaşımın kalbi. Işık koşulları değiştiğinde yalnızca HSV eşiklerini ve küçük alan filtresini ayarlayarak sağlam sonuçlar almak mümkün. Sonraki adımda bunu gerçek zamanlı akışa bağlayıp aracın rengini anlık olarak takip etmeyi planlıyoruz.
1. Renk Tespiti (Resim Üzerinden)
HSV renk uzayı ile kırmızı, yeşil ve mavi gibi renkleri tespit ederek maskeleme ve kontur çizimi yapma.
Python Kodu
import cv2
import numpy as np
# Görüntüyü yükle (aynı klasörde 'image.jpg' olmalı)
image = cv2.imread('image.jpg')
if image is None:
raise FileNotFoundError('image.jpg bulunamadı')
# BGR'den HSV'ye dönüştür
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# Renk aralıkları (HSV)
color_ranges = {
'Kirmizi': [(np.array([0, 120, 70]), np.array([10, 255, 255])),
(np.array([170, 120, 70]), np.array([180, 255, 255]))], # iki aralık
'Yesil': [(np.array([35, 80, 70]), np.array([85, 255, 255]))],
'Mavi': [(np.array([95, 80, 70]), np.array([130, 255, 255]))]
}
output = image.copy()
for name, ranges in color_ranges.items():
# Renk için maskeyi oluştur (kırmızı 2 aralıklı)
mask = None
for low, high in ranges:
part = cv2.inRange(hsv, low, high)
mask = part if mask is None else cv2.bitwise_or(mask, part)
# Gürültüyü azalt (aç-kapa morfoloji)
kernel = np.ones((5, 5), np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
# Konturları bul ve kontur çiz
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
area = cv2.contourArea(cnt)
if area < 500: # küçük gürültüleri ele
continue
# Konturu çiz
cv2.drawContours(output, [cnt], -1, (0, 255, 0), 2)
# Etiketi kontur merkezine yakın yaz
M = cv2.moments(cnt)
if M.get('m00', 0) != 0:
cx = int(M['m10'] / M['m00'])
cy = int(M['m01'] / M['m00'])
# Sonuçları göster
cv2.imshow('Orjinal', image)
cv2.imshow('Renk Tespiti', output)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. OpenCV Temelleri (Hızlı Özet)
OpenCV kullanarak görüntü okuma, gri tonlama, blur ve kenar tespiti işlemlerinin kısa özeti.
Python Kodu
import cv2
import numpy as np
# Görüntü okuma
image = cv2.imread('image.jpg')
# Gri tonlama dönüşümü
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Gaussian blur uygulama
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# Canny kenar tespiti
edges = cv2.Canny(blurred, 50, 150)
# Sonuçları görüntüleme
cv2.imshow('Original', image)
cv2.imshow('Grayscale', gray)
cv2.imshow('Blurred', blurred)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
