视觉小车:
旭日x3派专注于视觉任务,可以部署yolo系列算法,小车底盘的PID控制可以放在STM32上进行,通过串口x3派可以接收stm32上传的速度信息、位姿信息等,也可以下发速度、转向等控制来控制小车运动轨迹。
硬件:
旭日x3派
type-c供电线
16GB以上SD卡
0.96寸oled液晶屏
STM32f103c8t6
ST-Link/J-Link烧录器
软件:
x3派烧录ubantu20.04桌面版的镜像
江协科技stm32例程
x3派最好先进行串口的回环测试:https://developer.horizon.cc/documents_rdk/python_development/40pin_user_guide/uart
x3派:
①接收
#!/usr/bin/env python3
import sys
import signal
import os
import time
# 瀵煎叆python涓插彛搴?
import serial
import serial.tools.list_ports
def serialTest():
print("List of enabled UART:")
os.system('ls /dev/tty[a-zA-Z]*')
try:
ser = serial.Serial("/dev/ttyS3", int(9600), timeout=1) # 1s timeout
except Exception as e:
print("!\n")
return 1
print(ser)
try:
while True:
# Read data from STM32
received_data = ser.readline().decode('ascii').strip()
if received_data:
print("接收到的数据 ",received_data )
time.sleep(1)
except KeyboardInterrupt:
pass
finally:
ser.close()
return 0
if __name__ == '__main__':
if serialTest() != 0:
print("!")
else:
print("!")
②发送
#!/usr/bin/env python3
import sys
import os
import time
import serial
import serial.tools.list_ports
class SerialSender:
def __init__(self, port, baudrate=9600):
self.ser = serial.Serial(port, baudrate)
def send_data(self, data):
try:
# 将数据转换为十六进制字符串并发送
hex_data = ' '.join(format(val, '02X') for val in data)
self.ser.write(bytes.fromhex(hex_data))
print(f"Sent data in hex: {hex_data}")
except Exception as e:
print(f"Error during sending data: {e}")
def close_serial(self):
self.ser.close()
if __name__ == '__main__':
# 请根据实际情况修改串口号
sender = SerialSender("/dev/ttyS3", 9600)
try:
# 示例数据,根据实际需求修改
data_to_send = [0x02]
sender.send_data(data_to_send)
except KeyboardInterrupt:
pass
finally:
sender.close_serial()
STM32:
接收和发送的代码直接使用江协科技的例程:
①发送:
②接收:
①stm32向x3派发送数据:
②x3派向STM32发送数据:
①代码编写:不知道为什么不用记事本写就会报错,应该保存的文件格式需要是utf-8格式的。
②x3派发送数据时最好是16进制格式发送,不然容易数据紊乱和报错
③波特率都是9600