GCS چیست و چرا به آن نیاز داریم؟
GCS (Ground Control Station) مرکز کنترل زمینی است — مثل کنترل پرواز یک فرودگاه اما برای UGV شما. یک GCS خوب نقشه نشان میدهد، موقعیت UGV را آپدیت میکند، Waypoint میگذاری، تلهمتری را ثبت میکند و هشدار میدهد. ما این سیستم را با Raspberry Pi 4 و یک صفحه ۷ اینچ میسازیم — قابل حمل در صحرا، بدون نیاز به لپتاپ.
🛠️ کارت پروژه
| BOM | Raspberry Pi 4 2GB + نمایشگر ۷” + Ra-02 LoRa + باتری 20000mAh |
| بودجه | ~۳–۴M تومان |
| نرمافزار | Python + Tkinter + folium برای نقشه |
کد Python — GCS با نقشه زنده
import serial, threading, time
import tkinter as tk
from tkintermapview import TkinterMapView
# LoRa از طریق USB-Serial (Arduino گیرنده)
ser = serial.Serial('/dev/ttyUSB0', 9600)
class GCS:
def __init__(self):
self.root = tk.Tk()
self.root.title("UGV Ground Control Station")
self.root.geometry("800x480")
# نقشه
self.map = TkinterMapView(self.root, width=600, height=480)
self.map.pack(side='left')
self.map.set_position(35.7120, 51.4050)
self.map.set_zoom(15)
self.ugv_marker = self.map.set_marker(35.7120, 51.4050, text="UGV")
# پانل اطلاعات
self.info = tk.Frame(self.root, width=200, bg='#1e1e2e')
self.info.pack(side='right', fill='y')
self.lbl_pos = tk.Label(self.info, text="موقعیت:", bg='#1e1e2e', fg='white', font=('Arial',10))
self.lbl_pos.pack(pady=5)
self.lbl_bat = tk.Label(self.info, text="باتری: --V", bg='#1e1e2e', fg='#a5d6a7', font=('Arial',12))
self.lbl_bat.pack(pady=5)
# Thread برای دریافت داده
threading.Thread(target=self.recv_loop, daemon=True).start()
self.root.mainloop()
def recv_loop(self):
while True:
try:
line = ser.readline().decode().strip()
# فرمت: T:50,V:11.8,L:35.712500,N:51.405200
parts = dict(x.split(':') for x in line.split(','))
lat = float(parts.get('L',35.712))
lng = float(parts.get('N',51.405))
bat = float(parts.get('V',0))
self.root.after(0, self.update_ui, lat, lng, bat)
except: time.sleep(0.5)
def update_ui(self, lat, lng, bat):
self.ugv_marker.set_position(lat, lng)
self.lbl_pos.config(text=f"lat:{lat:.5f}\nlng:{lng:.5f}")
self.lbl_bat.config(text=f"باتری: {bat:.1f}V")
GCS()
نصب پیشنیازها روی Raspberry Pi
pip3 install tkintermapview pyserial
# نقشه آفلاین:
python3 -c "from tkintermapview import TkinterMapView; m=TkinterMapView(); m.use_offline_database('offline_tiles.db')"