ROBOVİSİONTECH

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ı

🤖 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>
URDF araba görseli (simple_car)
URDF Robot Tanımı sonrası önizleme (simple_car)

🖼️ 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.

1. OpenCV ile Temel Görüntü İşleme

OpenCV kullanarak görüntü okuma, gri tonlama, blur ve kenar tespiti işlemleri.

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()
OpenCV işlem adımları: Original, Grayscale, Blurred, Edges
OpenCV temel işleme adımları: Original, Grayscale, Blurred, Edges

2. Yüz Tespiti ve Tanıma

OpenCV Cascade Classifier kullanarak gerçek zamanlı yüz tespiti ve tanıma sistemi.

Yüz Tespiti Kodu

import cv2

# Cascade sınıflandırıcı yükleme
face_cascade = cv2.CascadeClassifier(
    cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
)

# Video yakalama
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # Yüz tespiti
    faces = face_cascade.detectMultiScale(gray, 1.1, 4)
    
    # Tespit edilen yüzlere dikdörtgen çizme
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
        cv2.putText(frame, 'Face', (x, y-10), 
                    cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 0), 2)
    
    cv2.imshow('Face Detection', frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

3. Görüntü Segmentasyonu

OpenCV ve Python kullanarak görüntü segmentasyonu ve nesne ayırma işlemleri.

Segmentasyon Kodu

import cv2
import numpy as np

def segment_image(image_path):
    # Görüntü yükleme
    image = cv2.imread(image_path)
    
    # HSV renk uzayına dönüştürme
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    
    # Mavi renk aralığı tanımlama
    lower_blue = np.array([100, 50, 50])
    upper_blue = np.array([130, 255, 255])
    
    # Mavi renk maskesi oluşturma
    mask = cv2.inRange(hsv, lower_blue, upper_blue)
    
    # Morfolojik işlemler
    kernel = np.ones((5,5), np.uint8)
    mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
    mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
    
    # Maskeyi uygulama
    result = cv2.bitwise_and(image, image, mask=mask)
    
    return result, mask

# Kullanım
segmented, mask = segment_image('image.jpg')
cv2.imshow('Original', cv2.imread('image.jpg'))
cv2.imshow('Segmented', segmented)
cv2.imshow('Mask', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()