jetson@yahboom:~$ roscore
jetson@yahboom:~$ roslaunch yahboomcar_nav yahboomcar_map.launch use_rviz:=false map_type:=gmapping
yahboom@VM:~$ roslaunch yahboomcar_nav view_map.launch
jetson@yahboom:~$ roslaunch yahboomcar_nav laser_astrapro_bringup.launch
jetson@yahboom:~$ rosrun joy joy_node
jetson@yahboom:~$ rosrun map_server map_saver -f ~/yahboomcar_ws/src/yahboomcar_nav/maps/my_map
jetson@yahboom:~$ roslaunch yahboomcar_nav laser_bringup.launch
yahboom@VM:~$ roslaunch yahboomcar_nav view_navigate.launch
jetson@yahboom:~$ rosrun joy joy_node
jetson@yahboom:~$ roslaunch yahboomcar_nav laser_astrapro_bringup.launch
jetson@yahboom:~$ roslaunch yahboomcar_nav yahboomcar_navigation.launch use_rviz:=false map:=my_map
yahboom@VM:~$ roslaunch yahboomcar_nav view_navigate.launch
# RTAB-Map 3D Mapping
jetson@yahboom:~$ roscore
jetson@yahboom:~$ roslaunch yahboomcar_nav laser_astrapro_bringup.launch
yahboom@VM:~$ roslaunch yahboomcar_nav view_rtabmap.launch
jetson@yahboom:~$ roslaunch yahboomcar_nav yahboomcar_rtabmap.launch use_rviz:=False
# Save
jetson@yahboom:~$ rosrun map_server map_saver -f ~/yahboomcar_ws/src/yahboomcar_nav/maps/my_bedroom
# View Save
jetson@yahboom:~$ ls ~/yahboomcar_ws/src/yahboomcar_nav/maps/
jetson@yahboom:~$ roscore
jetson@yahboom:~$ roslaunch yahboomcar_nav yahboomcar_map.launch use_rviz:=false map_type:=gmapping (?my_server)
yahboom@VM:~$ roslaunch yahboomcar_nav view_map.launch
jetson@yahboom:~$ roslaunch yahboomcar_nav laser_astrapro_bringup.launch
jetson@yahboom:~$ rosrun map_server map_saver -f ~/yahboomcar_ws/src/yahboomcar_nav/maps/my_server
// jetson@yahboom:~$ rosrun map_server map_saver -f ~/yahboomcar_ws/src/yahboomcar_nav/maps/my_map
jetson@yahboom:~$ roslaunch yahboomcar_nav laser_bringup.launch
yahboom@VM:~$ roslaunch yahboomcar_nav view_navigate.launch
jetson@yahboom:~$ rosrun joy joy_node
jetson@yahboom:~$ roslaunch yahboomcar_nav laser_astrapro_bringup.launch
jetson@yahboom:~$ roslaunch yahboomcar_nav yahboomcar_navigation.launch use_rviz:=false map:=my_map
yahboom@VM:~$ roslaunch yahboomcar_nav view_navigate.launch
หลังจากเข้าหน้า Destop Ubuntu แล้วให้เช็คอัพเดทและอัพเกรดก่อนการทำงานทุกครั้ง โดยใช้คำสั่งต่อไปนี้
$Sudo apt update //เป็นการเช็คการอัพเดทก่อนอัพเกรด
$Sudo apt upgrade //อัพเกรดเพื่อให้เป็นปัจจุบัน แต่หากไม่ขึ้นอะไรหลังจากอัพเดทถือว่า Ubuntu เป็นปัจจุบันและพร้อมใช้งาน
$cd catkin_ws/ //เข้าไปที่พื้นที่การทำงานของคุณ
$cd src/ //เข้าไปที่พื้นที่จัดเก็บของแพ็คเกจงานของคุณ
$cd bbrobot/ //โดยเบื้องต้นผมจะยกตัวอย่างแพ็คเกจเป็น bbrobot แต่หากคุณแพ็คเกจอื่นก็ใช้ชื่อแพ็คเกจนั้น
$cd src/ //เข้าไปที่พื้นที่การทำงานของแพ็คเกจคุณ
$touch (ชื่อไฟล์ที่คุณต้องการ.py) //เป็นการสร้างไฟล์ Python ขึ้นมาเพื่อรองรับการเขียนโค้ดและเรียกใช้โค้ด
$gedit (ชื่อไฟล์ของคุณ.py) //เพื่อเริ่มการเขียนโค้ด
#!/usr/bin/env python3
import cv2
from pyzbar.pyzbar import decode
import numpy as np
import csv
import os
class QRCodeData:
def __init__(self, data, image_filename):
self.data = data
self.image_filename = image_filename
class ObjectDetectorAndQRCode:
def __init__(self, video_device='/dev/video2'):
self.cap = cv2.VideoCapture(video_device)
if not self.cap.isOpened():
print(f"Error: Could not open video device {video_device}.")
exit()
self.cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
self.aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_6X6_50)
self.aruco_params = cv2.aruco.DetectorParameters_create()
self.aruco_params.adaptiveThreshWinSizeMin = 13
self.aruco_params.adaptiveThreshWinSizeMax = 23
self.aruco_params.adaptiveThreshWinSizeStep = 10
self.output_folder = "output_images"
if not os.path.exists(self.output_folder):
os.makedirs(self.output_folder)
self.csv_filename = "qr_code_data.csv"
self.csv_file = open(self.csv_filename, 'w', newline='')
self.csv_writer = csv.writer(self.csv_file)
self.csv_writer.writerow(['QR Code Data', 'Image Filename'])
def adjust_brightness_contrast(self, image, brightness=10, contrast=50):
beta = brightness
alpha = contrast / 127 + 1
adjusted_image = cv2.convertScaleAbs(image, alpha=alpha, beta=beta)
return adjusted_image
def enhance_sharpness(self, image):
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
sharpened_image = cv2.addWeighted(image, 1.5, blurred_image, -0.5, 0)
return sharpened_image
def detect_and_display(self):
frame_count = 0
while self.cap.isOpened():
ret, frame = self.cap.read()
if not ret:
print("Failed to grab frame")
break
frame_count += 1
if frame_count % 5 != 0:
continue
resize_factor = 0.6
width = int(frame.shape[1] * resize_factor)
height = int(frame.shape[0] * resize_factor)
dim = (width, height)
frame = cv2.resize(frame, dim, interpolation=cv2.INTER_AREA)
frame = self.enhance_sharpness(frame)
frame = self.adjust_brightness_contrast(frame, brightness=10, contrast=30)
qr_codes = decode(frame)
for qr_code in qr_codes:
data = qr_code.data.decode('utf-8')
x, y, w, h = qr_code.rect
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.putText(frame, data, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
image_filename = self.save_image(frame)
self.csv_writer.writerow([data, image_filename])
print(f"QR Code Detected: {data}, saved as {image_filename}")
gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
corners, ids, _ = cv2.aruco.detectMarkers(gray_img, self.aruco_dict, parameters=self.aruco_params)
if ids is not None and len(corners) > 0:
frame = cv2.aruco.drawDetectedMarkers(frame, corners, ids)
image_filename = self.save_image(frame)
self.csv_writer.writerow(['ArUco Marker Detected', image_filename])
print(f"ArUco Marker Detected, saved as {image_filename}")
cv2.imshow('Processed Image', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
self.cap.release()
cv2.destroyAllWindows()
def save_image(self, image):
filename = os.path.join(self.output_folder, "detected_image_{:.6f}.jpg".format(cv2.getTickCount() / cv2.getTickFrequency()))
cv2.imwrite(filename, image)
return filename
def close_csv_file(self):
self.csv_file.close()
if __name__ == '__main__':
detector = ObjectDetectorAndQRCode(video_device='/dev/video2')
detector.detect_and_display()
detector.close_csv_file()
Open-cv //Command ในการติดตั้ง
$pip3 install opencv-python opencv-contrib-python
Pyzbar //Command ในการติดตั้ง
$pip3 install pyzbar
Numpy //Command ในการติดตั้ง //จำเป็นต้องใช้ pip3 เพราะ Ubuntu รองรับ Python3
$pip3 install numpy
ก่อนเริ่มต้นอะไรควรเปิด ROSMASTER ทุกครั้ง
$roscore //เปิดใช้งาน ROSMASTER
นำไฟล์ที่เขียนมาเบื้องต้นมาใช้งาน โดยจำเป็นต้องรู้ว่าแพ็คเกจและไฟล์มีชื่ออะไร
$rosrun bbrobot (ชื่อไฟล์ของคุณ.py) //นำไฟล์ที่เขียนโค้ดมาเรียกใช้งาน