કોડ શોધો

પાઠ્યક્રમ પાઠ 9 માંથી 10: રાસ્પબેરી પાઈ પીકો 4WD સ્માર્ટ કારનો ઉપયોગ કરીને અવરોધ ટાળવો

પાઠ્યક્રમ પાઠ 9 માંથી 10: રાસ્પબેરી પાઈ પીકો 4WD સ્માર્ટ કારનો ઉપયોગ કરીને અવરોધ ટાળવો

પરિચય

આ માર્ગદર્શિકા, Robojax ના કોર્સ પાઠ 9 માંથી 10 પર આધારિત છે, જે દર્શાવે છે કે SunFounder Raspberry Pi Pico 4WD સ્માર્ટ કાર કિટનો ઉપયોગ કરીને અવરોધ-ટાળતો રોબોટ કેવી રીતે બનાવવો. આ પ્રોજેક્ટ સર્વો-સંચાલિત અલ્ટ્રાસોનિક સેન્સરને મોટર નિયંત્રણ સાથે જોડીને એક રોબોટ બનાવે છે જે તેના વાતાવરણમાં સ્વાયત્ત રીતે નેવિગેટ કરી શકે છે. સેન્સરને રડારની જેમ ફેરવીને, કાર અવરોધો શોધે છે અને આગળ વધવા માટે સ્પષ્ટ માર્ગ બુદ્ધિપૂર્વક પસંદ કરે છે, જે તેને રોબોટિક્સ, સેન્સર એકીકરણ અને સ્વાયત્ત નેવિગેશન માટે ઉત્તમ પરિચય બનાવે છે.

Sunfounder_Pico4DW-09-Obstacle-avoidance સેટઅપ જમીન પર અવરોધ સાથે

આ પ્રોજેક્ટ માત્ર રમકડું નથી; તે ઘણી વ્યવહારુ એપ્લિકેશનો માટે પાયો છે. તમને પ્રેરણા આપવા માટે અહીં કેટલાક વિચારો છે:

  • સ્વાયત્ત સંશોધન રોબોટ: એક રોબોટ બનાવો જે માનવ હસ્તક્ષેપ વિના ઓરડા અથવા બહારના વિસ્તારનો નકશો બનાવી શકે અને સંશોધન કરી શકે.
  • સ્માર્ટ વેક્યુમ ક્લીનર: સમાન સિદ્ધાંતોનો ઉપયોગ કરીને એક રોબોટ બનાવો જે સફાઈ કરતી વખતે ફર્નિચર અને દિવાલોને ટાળીને ઓરડામાં નેવિગેટ કરે.
  • સુરક્ષા ગસ્ત રોબોટ: કારને પરિમિતિની ગસ્ત કરવા માટે પ્રોગ્રામ કરો અને અલ્ટ્રાસોનિક સેન્સરનો ઉપયોગ કરીને અણધાર્યા અવરોધો અથવા ઘૂસણખોરી શોધી અને જાણ કરો.
  • AI માટે શૈક્ષણિક પ્લેટફોર્મ: આ પ્રોજેક્ટનો ઉપયોગ પાથફાઇન્ડિંગ અને સિમ્યુલટેનિયસ લોકલાઇઝેશન એન્ડ મેપિંગ (SLAM) જેવા વધુ જટિલ અલ્ગોરિધમ્સ શીખવા માટે પગથિયા તરીકે કરો.

આ પાઠ મુખ્ય તર્ક અને કોડ પર ધ્યાન કેન્દ્રિત કરે છે જે કારને નિર્ણય લેવા સક્ષમ બનાવે છે. કાર અલ્ટ્રાસોનિક સેન્સરને ફેરવવા માટે સર્વો મોટરનો ઉપયોગ કરે છે, જે 0 થી 180 ડિગ્રી સુધીનું અંતર માપવા માટે રડાર તરીકે કાર્ય કરે છે. કોડ આ ડેટાનું વિશ્લેષણ કરીને સૌથી પહોળો ખાલી માર્ગ શોધે છે અને તે મુજબ કારને આગળ, ડાબે અથવા જમણે ખસેડવા નિર્દેશિત કરે છે. વિડિઓ સંપૂર્ણ પ્રક્રિયા દર્શાવે છે, વ્યક્તિગત ઘટકોના પરીક્ષણથી લઈને વાસ્તવિક દુનિયાના ભુલભુલામણીમાં અંતિમ અવરોધ-ટાળવાના અલ્ગોરિધમ ચલાવવા સુધી.

હાર્ડવેર/ઘટકો

આ પ્રોજેક્ટ SunFounder Raspberry Pi Pico 4WD સ્માર્ટ કાર કિટ પર આધારિત છે. આ પાઠમાં ઉપયોગમાં લેવાતા આવશ્યક ઘટકો છે:

  • Raspberry Pi Pico માઇક્રોકંટ્રોલર બોર્ડ
  • ચાર મોટર્સ સાથે SunFounder 4WD સ્માર્ટ કાર ચેસિસ
  • મોટર ડ્રાઇવર બોર્ડ
  • અલ્ટ્રાસોનિક અંતર સેન્સર (HC-SR04 પ્રકાર)
  • સર્વો મોટર (અલ્ટ્રાસોનિક સેન્સર ફેરવવા માટે)
  • પાવર સપ્લાય (કાર માટે બેટરીઓ)

વાયરિંગ માર્ગદર્શિકા

SunFounder કિટ સરળ એસેમ્બલી માટે ડિઝાઇન કરવામાં આવી છે, અને વાયરિંગ સામાન્ય રીતે સમર્પિત એક્સપાન્શન બોર્ડ દ્વારા પૂર્વ-કનેક્ટેડ હોય છે. અલ્ટ્રાસોનિક સેન્સર સર્વો મોટર પર માઉન્ટ થયેલ છે, જે પછી મુખ્ય નિયંત્રણ બોર્ડ સાથે જોડાયેલ છે. આ સેટઅપ સેન્સરને વાતાવરણ સ્કેન કરવા માટે ફેરવવાની મંજૂરી આપે છે. તમારી કિટ માટે વિગતવાર વાયરિંગ ડાયાગ્રામ માટે, કૃપા કરીને સત્તાવાર SunFounder દસ્તાવેજીકરણનો સંદર્ભ લો.

મુખ્ય જોડાણોમાં અલ્ટ્રાસોનિક સેન્સરના ટ્રિગર અને ઇકો પિન, અને સર્વો મોટરના સિગ્નલ પિનનો સમાવેશ થાય છે, જે બધા Raspberry Pi Pico પર ચોક્કસ GPIO પિન સાથે જોડાયેલા છે. મોટર ડ્રાઇવર પણ ચાર ડ્રાઇવ મોટર્સને નિયંત્રિત કરવા માટે Pico સાથે જોડાયેલ છે. વિડિઓ ઉલ્લેખ કરે છે કે સંપૂર્ણ દસ્તાવેજીકરણ, વાયરિંગ ડાયાગ્રામ સહિત, કિટ સાથે ડાઉનલોડ માટે ઉપલબ્ધ છે.

Sunfounder_Pico4DW-09-Obstacle-avoidance_જ્યારે અલ્ટ્રાસોનિક અવરોધ શોધે છે

કોડ સમજૂતી

આ પાઠ `obstacle_avoid` ઉદાહરણમાં તર્ક પર ધ્યાન કેન્દ્રિત કરે છે. કોડ MicroPython માં લખાયેલ છે. સંપૂર્ણ પ્રોગ્રામ ડાઉનલોડ માટે ઉપલબ્ધ હોવા છતાં, અમે મુખ્ય, વપરાશકર્તા-રૂપરેખાંકિત પરિમાણો પર ધ્યાન કેન્દ્રિત કરીશું જે કારના વર્તનને નિયંત્રિત કરે છે. આ સામાન્ય રીતે સ્ક્રિપ્ટની ટોચ પર જોવા મળે છે.

અહીં મુખ્ય ચલો છે જે તમે તમારા રોબોટના પ્રદર્શનને સમાયોજિત કરવા માટે બદલી શકો છો:


# રડાર અને હિલચાલ પરિમાણો
radar_reference = 20  # સલામત ગણાવા માટે સે.મી.માં લઘુત્તમ અંતર
step_angle = 10       # દરેક રડાર સ્કેન પગલા માટે કોણ વધારો
forward_speed = 30    # આગળ વધવા માટે મોટર ઝડપ (0-100)
turn_speed = 50       # વળવા માટે મોટર ઝડપ (0-100)
forward_scan_angle = 50  # જ્યારે કોઈ અવરોધ શોધાય નહીં ત્યારે સર્વો સ્કેન કરે તે કોણ
  • radar_reference: આ સેન્ટીમીટરમાં નિર્ણાયક સલામતી અંતર છે. જો આ મૂલ્ય કરતાં નજીક અવરોધ શોધાય, તો કાર તેને "જોખમ" ગણશે અને ટાળવાની યુક્તિ શરૂ કરશે. વિડિઓમાં, આ 20 સે.મી. પર સેટ છે.
  • step_angle: આ રડાર સ્કેનનું રિઝોલ્યુશન વ્યાખ્યાયિત કરે છે. નાનું મૂલ્ય (દા.ત., 10 ડિગ્રી) એટલે વધુ વિગતવાર સ્કેન પરંતુ વધુ સમય લે છે. મોટું મૂલ્ય ઝડપી હશે પરંતુ સાંકડા અવરોધો ચૂકી શકે છે.
  • forward_speed & turn_speed: આ મોટર્સને મોકલવામાં આવતી શક્તિને નિયંત્રિત કરે છે. તમે કારની એકંદર ઝડપ અને ચપળતા બદલવા માટે તેમને સમાયોજિત કરી શકો છો. વળવાની ઝડપ ઘણીવાર વધુ સેટ કરવામાં આવે છે તેની ખાતરી કરવા માટે કે કાર અસરકારક રીતે ફરી શકે.
  • forward_scan_angle: જ્યારે આગળ કોઈ તાત્કાલિક જોખમ ન હોય, ત્યારે કાર તેના સ્કેનને આ કોણ સુધી સંકુચિત કરે છે (આગળ કેન્દ્રિત) તેના સીધા માર્ગમાં અવરોધો વધુ વારંવાર તપાસવા માટે, જે સરળ આગળની હિલચાલને મંજૂરી આપે છે.

વિડિયો મુખ્ય નિર્ણય લેવાની તર્કપ્રણાલી પણ સમજાવે છે. એક ફંક્શન `get_direction()` અંતરના રીડિંગ્સની યાદીનું વિશ્લેષણ કરે છે (સલામત/અસુરક્ષિત માટે 1s અને 0s માં રૂપાંતરિત) જેથી "1" નો સૌથી પહોળો સતત માર્ગ શોધી શકાય. આ સૌથી પહોળો માર્ગ ક્યાં છે તેના આધારે, ફંક્શન એક દિશા પરત કરે છે: "આગળ", "ડાબે", અથવા "જમણે". મુખ્ય લૂપ પછી અનુરૂપ ક્રિયા કરે છે, કારને ફેરવે છે અને ફરીથી સ્કેન કરે છે જ્યાં સુધી આગળનો માર્ગ સ્પષ્ટ ન થાય.

લાઇવ પ્રોજેક્ટ/પ્રદર્શન

વિડિયો પ્રોજેક્ટનું સંપૂર્ણ પ્રદર્શન આપે છે. તે અલ્ટ્રાસોનિક સેન્સરનું એકલા પરીક્ષણ કરીને શરૂ થાય છે જેથી બતાવી શકાય કે તે અંતર કેવી રીતે માપે છે અને મૂલ્યો શેલ પર છાપે છે. પ્રશિક્ષક પછી ફ્લોચાર્ટનો ઉપયોગ કરીને અવરોધ ટાળવાની અલ્ગોરિધમ સમજાવે છે, ડાબે અને જમણે વળવાની નિર્ણય લેવાની પ્રક્રિયાની વિગતો આપે છે. છેલ્લે, કારને બોક્સથી બનાવેલા નાના ભુલભુલામણીમાં મૂકવામાં આવે છે જેથી સંપૂર્ણ અવરોધ ટાળવાની વર્તણૂક ક્રિયામાં દર્શાવી શકાય. કાર સફળતાપૂર્વક ભુલભુલામણીમાં ભ્રમણ કરે છે, આગળનો સ્પષ્ટ માર્ગ શોધવા ડાબે અને જમણે વળે છે.

વિડિયો પ્રકરણો

  • [00:00] અવરોધ ટાળવાનો પરિચય
  • [01:31] SunFounder સ્માર્ટ કાર કિટ અને સુવિધાઓની ઝાંખી
  • [02:47] અવરોધ ટાળવાની સુવિધા કેવી રીતે કાર્ય કરે છે
  • [03:34] અલ્ટ્રાસોનિક સેન્સરનું પરીક્ષણ
  • [07:45] અવરોધ ટાળવાની અલ્ગોરિધમ અને ફ્લોચાર્ટ સમજાવવું
  • [12:49] મુખ્ય અવરોધ ટાળવાના કોડનું વિશ્લેષણ
  • [15:43] અવરોધ ટાળવાની તર્કપ્રણાલીનું લાઇવ પ્રદર્શન
  • [22:53] અવરોધોના ભુલભુલામણી સાથે અંતિમ પ્રદર્શન
  • [24:35] નિષ્કર્ષ અને આગળના પગલાં

છબીઓ

pico-4wd_main
pico-4wd_main
PICOBOARDWHITEANGLE2_1200x857
PICOBOARDWHITEANGLE2_1200x857
Sunfounder_Pico4DW-09-Obstacle-avoidance setup with obstacle on the floor
Sunfounder_Pico4DW-09-Obstacle-avoidance setup with obstacle on the floor
Sunfounder_Pico4DW-09-Obstacle-avoidance_when ultrasonic detects obstacle
Sunfounder_Pico4DW-09-Obstacle-avoidance_when ultrasonic detects obstacle
909-Lesson 9/10 Pi Pico 4WD card Python code: obstacle avoid
ભાષા: C++
# Lesson 9/10 Pi Car Pico 4WD: Obstacle avoid
# Download and resource page https://robojax.com/RJT631
import pico_4wd as car
import time

car.RADAR_REFERENCE = 20
car.RADAR_STEP_ANGLE = 10
MOTOR_FORWARD_POWER = 30
MOTOR_TURNING_POWER = 50

FORWARD_SCAN_ANGLE = 50

car.set_radar_scan_angle(FORWARD_SCAN_ANGLE)
status = "Danger"

def get_dir(radar_data):
    # get scan status of 0, 1
    # print(radar_data)
    radar_data = [str(i) for i in radar_data]
    radar_data = "".join(radar_data)
    # Split 0, leaves the free path
    paths = radar_data.split("0")
    # print(paths)
    # print("paths: %s" % paths)
    length_list = []
    # Calculate where is the widest
    for path in paths:
        length_list.append(len(path))
    if max(length_list) < 4:
        return "left"
    # Calculate the direction of the widest 
    i = length_list.index(max(length_list))
    pos = radar_data.index(paths[i])
    pos += (len(paths[i]) - 1) / 2
    delta = len(radar_data) / 3
    
    if pos < delta:
        return "left"
    elif pos > 2 * delta:
        return "right"
    else:
        return "forward"

def main():
    global status
    # General
    while True:
        radar_data = car.radar_scan()
        # print("radar_data: %s" % radar_data)
        # If radar data return a int, means scan not finished, and the int is current angle status
        if isinstance(radar_data, int):
            if radar_data == 0 and status != "Danger":
                print("Danger!")
                status = "Danger"
                car.move("stop")
                car.set_radar_scan_angle(180)
            continue
        else:
            status = "Save"
        
        direction = get_dir(radar_data)

        if direction == "left":
            print("turn left")
            distance = car.get_radar_distance_at(-FORWARD_SCAN_ANGLE/2)
            time.sleep(0.5)
            car.move("left", MOTOR_TURNING_POWER)
            while True:
                distance = car.get_radar_distance_at(-FORWARD_SCAN_ANGLE/2)
                status = car.get_radar_status(distance)
                if status == 1:
                    break
            car.move("stop")
            car.set_radar_scan_angle(FORWARD_SCAN_ANGLE)
        elif direction == "right":
            print("turn right")
            distance = car.get_radar_distance_at(FORWARD_SCAN_ANGLE/2)
            time.sleep(0.5)
            car.move("right", MOTOR_TURNING_POWER)
            while True:
                distance = car.get_radar_distance_at(FORWARD_SCAN_ANGLE/2)
                status = car.get_radar_status(distance)
                if status == 1:
                    break
            car.move("stop")
            car.set_radar_scan_angle(FORWARD_SCAN_ANGLE)
        else:
            print("forward")
            car.set_radar_scan_angle(FORWARD_SCAN_ANGLE)
            car.move("forward", MOTOR_FORWARD_POWER)

try:
    main()
finally:
    car.move("stop")
    car.set_light_off()

તમને જોઈતી વસ્તુઓ

સંસાધનો અને સંદર્ભો

હજી સુધી કોઈ સંસાધનો નથી.

ફાઇલો📁

Raspberry Pi કોડ