jetson nano 小车实现雷达测距和障碍物停车功能 python3.6.9 自动驾驶和启停

jetson nano 小车实现雷达测距和障碍物停车功能
python3.6.9
障碍物距离为40的时候停止转动,拿走障碍物继续转动

1
2 #import LZX_Ultrasonic_ranging_202108V1
3 from Python_Rpi_Ultrasonic_RTech_202108V1 import ultrasonic_distanc
4 import time
5 import sys
6 import GetValueV2
7 from pyvesc.VESC.messages import GetValues, SetDutyCycle,SetRPM
8
9def warn():
10 print("前方有障碍物”)
11
12
13
14 def decelerate():
15 print("前方有障碍物,需要减速”)
16 #Stop SetMode = SetDutyCycle(-0.16)
17 #GetValueV2.get_values_example(Stop_SetMode)
18 #time.sleep(0.01)
19 Static_Setmode = SetDutyCycle(0.05) #减速,占空比改为0.05
20 GetValueV2.get values example(Static Setmode)
21 time.sleep(0.03)
22
23 def stop():
24 print("start stop")
25 # Stop SetMode = SetDutyCycle(-0.1)
26 # GetValueV2.get values example(Stop SetMode)
27 # time.sleep(0.15)
28 Static Setmode = SetDutyCycle(0)#停车,占空比变为0
29 GetValueV2.get values example(Static_Setmode)
30 time.sleep(0.1)
31
32def AEB():
33 ultrasonic data = ultrasonic distance()
34 if ultrasonic data > 90:#距离大于90时,AEB不介入
35
36 SetMode = SetRPM(1000)
37 GetValueV2.get values example(SetMode)
38 time.sleep(0.1)
39

40 ifultrasonic data < 90 and ultrasonic data >= 60:#距离大于60时,AEB不介入
41
42 SetMode = SetRPM(900)
43 GetValueV2.get values_example(SetMode)
44 time.sleep(0.1)

45
46
47 if ultrasonic_data <40:#距离小于40时,完全制动
48 stop()
49 sys.exit()
50
51
52if name. == " main__”:
53 # SetDutyCycle Values =0.1 #占空比控制电机转速,占空比为0.08
54 # SetMode = SetDutyCycle(SetDutyCycle_Values)
55 # GetValueV2.get _values_example(SetMode)
56
57 SetRPM Values =1000
58 SetMode = SetRPM(SetRPM Values)
59 GetValueV2.get values example(SetMode)
60
61 while True:
62 AEB()
63
64

以下为报错

img

引用chatGPT作答,
1.在函数 warn() 和 decelerate() 中, print 函数的左括号使用了中文字符,这会导致语法错误,需要将其改为英文字符。

2.在函数 decelerate() 和 stop()
3.在函数 AEB() 中,变量 ultrasonic data 的命名中间有空格,这也会导致语法错误,需要将其改为 ultrasonic_data。

4.在函数 AEB() 中, SetValue 的值为 1000 和 900,这里需要注意,这些值需要根据具体的电机和车辆进行调整。

5.在函数 AEB() 中,当距离小于 40 时,调用了 stop() 函数,但是这个函数并没有定义,需要在代码前面定义该函数。

基于以上建议,下面是您的代码的修改版:

# Import libraries
from Python_Rpi_Ultrasonic_RTech_202108V1 import ultrasonic_distance
import time
import sys
import GetValueV2
from pyvesc.VESC.messages import GetValues, SetDutyCycle, SetRPM

# Define stop function
def stop():
    print("Start stop")
    Stop_SetMode = SetDutyCycle(0) # Stop the motor
    GetValueV2.get_values_example(Stop_SetMode)
    time.sleep(0.1)

# Define warn function
def warn():
    print("Front obstacle detected")

# Define decelerate function
def decelerate():
    print("Front obstacle detected, decelerating")
    Static_SetMode = SetDutyCycle(0.05) # Slow down the motor
    GetValueV2.get_values_example(Static_SetMode)
    time.sleep(0.03)

# Define AEB function
def AEB():
    ultrasonic_data = ultrasonic_distance()
    if ultrasonic_data > 90:
        SetMode = SetRPM(1000) # Keep the current speed
        GetValueV2.get_values_example(SetMode)
        time.sleep(0.1)

    elif ultrasonic_data < 90 and ultrasonic_data >= 60:
        SetMode = SetRPM(900) # Slow down the motor
        GetValueV2.get_values_example(SetMode)
        time.sleep(0.1)

    elif ultrasonic_data < 40:
        stop() # Stop the car
        sys.exit()

# Set motor speed
if __name__ == "__main__":
    SetRPMValues = 1000
    SetMode = SetRPM(SetRPMValues)
    GetValueV2.get_values_example(SetMode)
    time.sleep(0.1)

    while True:
        AEB()

注意:以上代码只是提供了实现雷达测距和障碍物停车功能的基本框架,具体实现还需要根据硬件设备的连接和调试情况进行相应的调整。同时,为了确保安全性,建议在测试过程中在室内或者安全场所进行测试,切勿在公共道路或人员密集区域进行测试。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
对于代码中的错误,我先给出具体的解释和修改建议:

  1. 第1行和第2行的import语句格式不正确,应该为:
from Python_Rpi_Ultrasonic_RTech_202108V1 import ultrasonic_distance
import time
  1. 第14行和第15行中的print函数的引号不匹配,应该统一使用双引号或单引号。

  2. 第16行和第17行中的代码没有起作用,因为被注释掉了,应该把前面的#删除。

  3. 第20行和第22行的代码中,GetValueV2.get values example应该为GetValueV2.get_values_example。

  4. 第25行和第28行中的占空比值应该为字符串类型,应该为SetDutyCycle("-0.1")和SetDutyCycle("0")。

  5. 第26行到第28行中的代码没有起作用,因为被注释掉了,应该把前面的#删除。

  6. 第37行和第40行及其以下的代码中,SetRPM应该为SetDutyCycle,应该修改为SetDutyCycle,并修改占空比的值。另外,ultrasonic_distance()函数的调用应该改为ultrasonic_distance。

  7. 第48行和第49行中,stop()函数调用前面应该添加一个冒号,表示调用一个函数或执行一个代码块。

  8. 第50行中的sys.exit()应该修改为break,用于跳出while循环。

综上,修改后的代码如下:

from Python_Rpi_Ultrasonic_RTech_202108V1 import ultrasonic_distance
import time
import sys
import GetValueV2
from pyvesc.VESC.messages import GetValues, SetDutyCycle, SetRPM

def warn():
    print("前方有障碍物")

def decelerate():
    print("前方有障碍物,需要减速")
    SetMode = SetDutyCycle("-0.1")
    GetValueV2.get_values_example(SetMode)
    time.sleep(0.03)
    
def stop():
    print("start stop")
    Static_Setmode = SetDutyCycle("0")
    GetValueV2.get_values_example(Static_Setmode)
    time.sleep(0.1)

def AEB():
    ultrasonic_data = ultrasonic_distance()
    if ultrasonic_data > 90:
        SetMode = SetDutyCycle("0.085")
        GetValueV2.get_values_example(SetMode)
        time.sleep(0.1)
    if ultrasonic_data < 90 and ultrasonic_data >= 60:
        SetMode = SetDutyCycle("0.075")
        GetValueV2.get_values_example(SetMode)
        time.sleep(0.1)
    if ultrasonic_data < 40:
        stop()
        break

if __name__ == "__main__":
    SetMode = SetRPM(1000)
    GetValueV2.get_values_example(SetMode)
    while True:
        AEB()

如果我的回答解决了您的问题,请采纳!