ESP32智能小车+PS2无线遥控器+麦克纳姆轮+microPython

news2024/11/17 1:36:29
from machine import Pin,PWM
from ps2 import PS2Controller
import time
import os

# #############################################
# PS2 遥控器
# #############################################
ps2ctl = PS2Controller(di_pin_no=26, do_pin_no=27, cs_pin_no=14, clk_pin_no=12)
ps2ctl.init()

# #############################################
# 小车轮子控制
# #############################################
pin1=PWM(Pin(19),freq=1000)  #左前 红1
pin2=PWM(Pin(18),freq=1000)
pin3=PWM(Pin( 5),freq=1000)  #左后 红3
pin4=PWM(Pin(17),freq=1000)
pin5=PWM(Pin(16),freq=1000)  #右前 黑5
pin6=PWM(Pin( 4),freq=1000)
pin7=PWM(Pin( 0),freq=1000)  #右后 黑7
pin8=PWM(Pin( 2),freq=1000)

#前进
def car_forward(speed):
  pin1.duty(speed)  #左前
  pin2.duty(0)
  pin3.duty(speed)  #左后
  pin4.duty(0)
  pin5.duty(speed)  #右前
  pin6.duty(0)
  pin7.duty(speed)  #右后
  pin8.duty(0)  

#后退、倒车、倒转
def car_back(speed):
  pin1.duty(0)     #左前
  pin2.duty(speed)
  pin3.duty(0)     #左后
  pin4.duty(speed)
  pin5.duty(0)     #右前
  pin6.duty(speed)  
  pin7.duty(0)     #右后
  pin8.duty(speed)  

# 普通左转 = 左前、左后后退, 右前、右后前进
def car_left(speed):
  pin1.duty(0)     #左前
  pin2.duty(speed)
  pin3.duty(0)     #左后
  pin4.duty(speed)
  pin5.duty(speed)     #右前
  pin6.duty(0)  
  pin7.duty(speed)     #右后
  pin8.duty(0)  

# 普通右转 = 左前、左后前进, 右前、右后后退  
def car_right(speed):
  pin1.duty(speed)   #左前
  pin2.duty(0)
  pin3.duty(speed)   #左后
  pin4.duty(0)
  pin5.duty(0)     #右前
  pin6.duty(speed)  
  pin7.duty(0)     #右后
  pin8.duty(speed)  

#停车、停止
def car_stop():
  pin1.duty(0)
  pin2.duty(0)
  pin3.duty(0)
  pin4.duty(0)
  pin5.duty(0)
  pin6.duty(0)
  pin7.duty(0)
  pin8.duty(0)

#  左平移=左前倒转、左后前进、右前前进、右后倒转
def car_left_pingyi(speed):
  pin1.duty(0)  #左前
  pin2.duty(speed)
  pin3.duty(speed)  #左后
  pin4.duty(0)
  pin5.duty(speed)  #右前
  pin6.duty(0)
  pin7.duty(0)  #右后
  pin8.duty(speed)  
  
#  右平移=左前前进、左后倒转、右前倒转、右后前进
def car_right_pingyi(speed):
  pin1.duty(speed)  #左前
  pin2.duty(0)
  pin3.duty(0)  #左后
  pin4.duty(speed)
  pin5.duty(0)  #右前
  pin6.duty(speed)
  pin7.duty(speed)  #右后
  pin8.duty(0) 

# 左上角 = 左前不动、左后前进、右前前进、右后不动
def car_left_up(speed):
  pin1.duty(0)  #左前
  pin2.duty(0)
  pin3.duty(speed)  #左后
  pin4.duty(0)
  pin5.duty(speed)  #右前
  pin6.duty(0)
  pin7.duty(0)  #右后
  pin8.duty(0)  
  
# 左下角 = 左前倒退、左后不动、右前不动、右后倒退
def car_left_down(speed):
  pin1.duty(0)  #左前
  pin2.duty(speed)
  pin3.duty(0)  #左后
  pin4.duty(0)
  pin5.duty(0)  #右前
  pin6.duty(0)
  pin7.duty(0)  #右后
  pin8.duty(speed)  
  
# 右上角 =  左前前进、左后不动、右前不动、右后前进
def car_right_up(speed):
  pin1.duty(speed)  #左前
  pin2.duty(0)
  pin3.duty(0)  #左后
  pin4.duty(0)
  pin5.duty(0)  #右前
  pin6.duty(0)
  pin7.duty(speed)  #右后
  pin8.duty(0)    
  
# 右下角 =  左前不动、左后倒退、右前倒退、右后不动
def car_right_down(speed):
  pin1.duty(0)  #左前
  pin2.duty(0)
  pin3.duty(0)  #左后
  pin4.duty(speed)
  pin5.duty(0)  #右前
  pin6.duty(speed)
  pin7.duty(0)  #右后
  pin8.duty(0)   
  
# ##################################################  
# 主循环开始!!!
# ##################################################
i=1  #循环次数
speed=400   #初始速度,最高1000. 低于400容易电压太低驱动不了
print("小车程序开始运行,正在等待PS2遥控器按键(按start停车)")
try:
  while True:

    key_car= ps2ctl.read_once()   # 收到的字符格式为 keys:UP,RIGHT: pos(lx,ly):0,-1: pos(rx,ry): 0,-1:
    #print("检测到按键:",key_car)    
    key_list= key_car.split(':')  # 用:来将字符串进行分割,写入数组key_list中
    # key_list[1]  输入的按键
    # key_list[3]  左摇杆坐标
    # key_list[5]  右摇杆坐标

    # 停止 = 遥控器 start = 4    
    if key_list[1]=="START" : 
      print(key_car," 停止.......")
      car_stop()

    # 前进 = 遥控器 左摇杆 上 = 5
    # 前进 = 遥控器 右摇杆 上 = 13    
    if key_list[1]=="UP" or key_list[1]=="TRIANGLE": 
      print(key_car," 前进")
      car_forward(speed)
      
    # 后退 = 遥控器 左摇杆 下 = 7 
    # 后退 = 遥控器 右摇杆 下 = 15          
    if key_list[1]=="DOWN" or key_list[1]=="CROSS": 
      print(key_car," 后退")
      car_back(speed)

    # 左平移 = 遥控器 左摇杆左 = 8
    if key_list[1]=="LEFT": 
      print(key_car," 左平移")
      car_left_pingyi(speed)
      
    # 右平移 = 遥控器 左摇杆右 = 6
    if key_list[1]=="RIGHT": 
      print(key_car," 右平移")
      car_right_pingyi(speed)
      
    # 左转 = 遥控器 右摇杆 左 = 16
    if key_list[1]=="SQUARE" : 
      print(key_car," 左转")
      car_left(speed)
    
    # 右转 = 遥控器 右摇杆 右 = 14
    if key_list[1]=="CIRCLE": 
      print(key_car," 右转")
      car_right(speed) 
      
    # 左上方 = 遥控器 左L1 = 11
    if key_list[1]=="UP,LEFT": 
      print(key_car," 左上方")
      car_left_up(speed) 
      
    # 左下方 = 遥控器 左L2 = 9
    if key_list[1]=="DOWN,LEFT": 
      print(key_car," 左下方")
      car_left_down(speed) 
      
    # 右上方 = 遥控器 右R1 = 12
    if key_list[1]=="UP,RIGHT": 
      print(key_car," 右上方")
      car_right_up(speed) 

    # 右下方 = 遥控器 右R2 = 10  
    if key_list[1]=="RIGHT,DOWN": 
      print(key_car," 右下方")
      car_right_down(speed) 
      
    # L1 加速
    if key_list[1]=="L1"  and speed<1000: 
      speed=speed+100
      print("当前速度已经加速至:",speed)
      
    # L2 减速
    if key_list[1]=="L2"  and speed>400: 
      speed=speed-100
      print("当前速度已经降低至:",speed)  
      
    # 右侧 三角+X,同时按下,删除main.py 取消自动启动
    if key_list[1]=="TRIANGLE,CROSS" : 
      os.remove("main.py")
      print("-----------  main.py 已经删除 ----------")       
      car_stop()

    # SELECT = 1    L3 = 2    R3 = 3    START = 4    
    # UP = 5    RIGHT = 6    DOWN = 7    LEFT = 8    
    # L2 = 9    R2 = 10    L1 = 11    R1 = 12
    # TRIANGLE = 13    CIRCLE = 14    CROSS = 15    SQUARE = 16
  
    i=i+1
    time.sleep(0.1)
    
except KeyboardInterrupt:
    print('KeyboardInterrupt 程序被人为中止....')
finally:
    pin1.deinit()
    pin2.deinit()
    pin3.deinit()
    pin4.deinit()
    pin5.deinit()
    pin6.deinit()
    pin7.deinit()
    pin8.deinit()    
    print('Exit 程序共运行了'+str(i)+'次,程序结束。') 

需要用到ps2.py文件,可查看ESP32+PS2 无线手柄转接板+microPython-CSDN博客

 ps2.py

import time
from machine import Pin
 
class PS2Controller:
    # These are our button constants
    SELECT = 1
    L3 = 2
    R3 = 3
    START = 4
    UP = 5
    RIGHT = 6
    DOWN = 7
    LEFT = 8
    L2 = 9
    R2 = 10
    L1 = 11
    R1 = 12
    TRIANGLE = 13
    CIRCLE = 14
    CROSS = 15
    SQUARE = 16
    KEYS = dict([
                  (SELECT, "SELECT"),        (L3, "L3"),        (R3, "R3"),        (START, "START"),
                  (UP, "UP"),        (RIGHT, "RIGHT"),        (DOWN, "DOWN"),        (LEFT, "LEFT"),
                  (L2, "L2"),        (R2, "R2"),        (L1, "L1"),        (R1, "R1"),
                  (TRIANGLE, "TRIANGLE"),        (CIRCLE, "CIRCLE"),        (CROSS, "CROSS"),        (SQUARE, "SQUARE")  ])
 
    CTRL_CLK = 10
    CTRL_BYTE_DELAY = 16
 
    CMD_SHORT_POLL   = [0x01, 0x42, 0x00, 0x00, 0x00]
    CMD_ENTER_CONFIG = [0x01, 0x43, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00]
    CMD_SET_MODE     = [0X01, 0x44, 0x00,
                        0x01,  # 00 normal; 01 red or analog
                        0x03,  # 03 lock; ee no lock
                        0x00, 0x00, 0x00, 0x00]
    CMD_SET_BYTES_LARGE = [0x01, 0x4F, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00]
    CMD_EXIT_CONFIG     = [0x01, 0x43, 0x00, 0x00, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A]
    CMD_ENABLE_RUMBLE   = [0x01, 0x4D, 0x00, 0x00, 0x01]
    CMD_TYPE_READ       = [0x01, 0x45, 0x00, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A]
    CMD_READ_DATA       = [0X01, 0X42, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00]
 
    MAX_READ_DELAY = 1500
 
    VALID_MODES = [0X41, 0X73]
 
    def __init__(self, di_pin_no=26, do_pin_no=27, cs_pin_no=14, clk_pin_no=12):  # DI=DAT、DO=CMD 可以在此处将针脚调整为你自己对应的针脚
        self.di_pin_no = di_pin_no
        self.do_pin_no = do_pin_no
        self.cs_pin_no = cs_pin_no
        self.clk_pin_no = clk_pin_no
        self.di  = Pin(self.di_pin_no, Pin.IN)  # DI = DAT
        self.do  = Pin(self.do_pin_no, Pin.OUT) # DO = CMD
        self.cs  = Pin(self.cs_pin_no, Pin.OUT)
        self.clk = Pin(self.clk_pin_no, Pin.OUT)
        self.buff_out = [0x01, 0x42]
        self.buff_in = [0] * 9
        self.pressed_keys = []
        self.read_delay = 1
        self.last_read_ms = 0
        self.lx = 0
        self.ly = 0
        self.rx = 0
        self.ry = 0
 
    @property
    def red_mode(self):  # analog mode
        return self.buff_in[1] & 0xf0 == 0x70
 
    def do_h(self):
        self.do.value(1)
 
    def do_l(self):
        self.do.value(0)
 
    def cs_h(self):
        self.cs.value(1)
 
    def cs_l(self):
        self.cs.value(0)
 
    def clk_h(self):
        self.clk.value(1)
 
    def clk_l(self):
        self.clk.value(0)
 
 
    # noinspection PyUnresolvedReferences
    def delay_byte(self):
        time.sleep_us(self.read_delay)
 
    # noinspection PyUnresolvedReferences
    def delay_clk(self):
        time.sleep_us(self.CTRL_CLK)
 
    # noinspection PyUnresolvedReferences
    def delay_read(self):
        time.sleep_us(self.CTRL_BYTE_DELAY)
        # time.sleep_ms(self.read_delay)
 
    def cmd(self, cmd):
        ret = 0
        for i in range(8):
            if cmd & 1 << i:
                self.do_h()
            else:
                self.do_l()
            self.clk_l()
            self.delay_clk()
            if self.di.value():
                ret |= 1 << i
            self.clk_h()
        self.do_h()
        self.delay_byte()
        return ret
 
    """
    :param 
    pure True means not delay
    """
 
    def cmd_group(self, cmds):
        self.cs_l()
        self.delay_byte()
        for cmd in cmds:
            self.cmd(cmd)
        self.cs_h()
        self.delay_read()
 
    def init(self):
        self.di  = Pin(self.di_pin_no, Pin.IN)
        self.do  = Pin(self.do_pin_no, Pin.OUT)
        self.cs  = Pin(self.cs_pin_no, Pin.OUT)
        self.clk = Pin(self.clk_pin_no, Pin.OUT)
        self.do_h()
        self.clk_h()
 
        self.read_once()
        self.read_once()
        #
        if self.buff_in[1] not in [0x41, 0x73]:
            print("control type not ok, expect 41 73 79, bug get ", "{:02x}".format(self.buff_in[1]))
            return 1
 
        self.read_delay = 1
 
        for i in range(10):
            # self.cmd_group(self.CMD_SHORT_POLL)
            # self.cmd_group(self.CMD_SHORT_POLL)
            # self.cmd_group(self.CMD_SHORT_POLL)
            self.cmd_group(self.CMD_ENTER_CONFIG)
            self.delay_byte()
 
            self.do_h()
            self.clk_h()
            self.cs_l()
 
            self.delay_byte()
            #
            temp = [0] * len(self.CMD_TYPE_READ)
            for j in range(9):
                for cmd in self.CMD_TYPE_READ:
                    temp[j] = self.cmd(cmd)
            self.cs_h()
 
            self.cmd_group(self.CMD_SET_MODE)
            # self.cmd_group(self.CMD_ENABLE_RUMBLE)
            self.cmd_group(self.CMD_EXIT_CONFIG)
            self.read_once()
            if self.buff_in[1] in self.VALID_MODES:
                print("read_delay configed,", self.read_delay)
                break
            else:
                self.read_delay += 1
                print("read_delay++,", self.read_delay)
 
    def reconfig(self):
        print("reconfig")
        self.cmd_group(self.CMD_ENTER_CONFIG)
        self.cmd_group(self.CMD_SET_MODE)
        self.cmd_group(self.CMD_EXIT_CONFIG)
 
    def p(self, debug=True):
        if debug:
            for d in self.buff_in:
                print("{:08b}".format(d))
 
        key_raw = (self.buff_in[4] << 8) | self.buff_in[3]
        for i in range(1, 17):
            if not key_raw & 1 << i - 1:
                self.pressed_keys.append(i)
 
        if self.red_mode:
            self.rx = self.buff_in[5] - 128
            self.ry = self.buff_in[6] - 128
            self.lx = self.buff_in[7] - 128
            self.ly = self.buff_in[8] - 128
        if self.pressed_keys:
            out = "keys:" + ','.join(self.KEYS[k] for k in self.pressed_keys) + "; "
        else:
            out = ""
        # for key in self.pressed_keys:
        #     print(key, self.KEYS[key])
        if self.red_mode and (out or any(x != 0 for x in [self.rx, self.ry, self.lx, self.ly])):
            out += "pos: (lx,ly):{},{};  (rx,ry): {},{}".format(self.lx, self.ly, self.rx, self.ry)
 
        if out:
            print(out)
 
    def read_once(self, debug=False):
        now = time.ticks_ms()
        delay = now - self.last_read_ms
        if delay > self.MAX_READ_DELAY:
            print(now, self.last_read_ms, delay)
            self.reconfig()
        elif delay < self.read_delay:
            # noinspection PyUnresolvedReferences
            time.sleep_ms(self.read_delay - delay)
 
        self.buff_in = [0] * 9
        self.pressed_keys.clear()
 
        for j in range(5):
            # for i in range(1):
            self.do_h()
            self.clk_h()
            self.cs_l()
            self.delay_byte()
 
            for i, c in enumerate(self.CMD_READ_DATA):
                self.buff_in[i] = self.cmd(c)
 
            self.cs_h()
 
            if self.buff_in[1] in self.VALID_MODES:
                break
            else:
                print("mode: {:08b}, retry_J: {}".format(self.buff_in[1], j))
                self.reconfig()
                self.delay_read()
        if self.buff_in[1] not in self.VALID_MODES and self.read_delay < 10:
            self.read_delay += 1
 
        self.last_read_ms = time.ticks_ms()
        #self.p(debug)
 
        #以下为自己添加 ,原P()内的代码
        key_raw = (self.buff_in[4] << 8) | self.buff_in[3]
        for i in range(1, 17):
            if not key_raw & 1 << i - 1:
                self.pressed_keys.append(i)
 
        if self.red_mode:
            self.rx = self.buff_in[5] - 128
            self.ry = self.buff_in[6] - 128
            self.lx = self.buff_in[7] - 128
            self.ly = self.buff_in[8] - 128
        if self.pressed_keys:      #注意下面这几行的:和,千万不要修改,后面要他们做标记分割使用!
            out = "keys:" + ','.join(self.KEYS[k] for k in self.pressed_keys) + ": "
        else:
            out = "keys:无:"
        # for key in self.pressed_keys:
        #     print(key, self.KEYS[key])
        if self.red_mode and (out or any(x != 0 for x in [self.rx, self.ry, self.lx, self.ly])):
            out += "pos(lx,ly):{},{}:  pos(rx,ry):{},{}:".format(self.lx, self.ly, self.rx, self.ry)
        if out:
            print(out)
            
        #return self.buff_in
        return out
 
'''
# 调用方法,将以下几行代码新建一个文件如:ps2_test.py
from ps2 import PS2Controller
import time
ps2ctl = PS2Controller(di_pin_no=26, do_pin_no=27, cs_pin_no=14, clk_pin_no=12)
ps2ctl.init()
while True:
    key_car= ps2ctl.read_once()   # 收到的字符格式为 keys:UP,RIGHT: pos(lx,ly):0,-1: pos(rx,ry): 0,-1:
    #print("检测到按键:",key_car)    
    key_list= key_car.split(':')  # 用:来将字符串进行分割,写入数组key_list中  key_list[1]输入的按键、key_list[3]左摇杆坐标、key_list[5]右摇杆坐标
    if key_list[1]=="UP": 
      print(key_car," 前进")
      
    if key_list[1]=="UP,LEFT": 
      print(key_car," 左上方")
    time.sleep(0.2)
''' 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1139198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity中Shader的模型网格阴影

文章目录 前言一、网格阴影原理1、在世界空间下&#xff0c;把角色模型在Y轴上压缩成一个面片&#xff0c;把颜色修改成像影子的颜色2、把压缩后的面片&#xff0c;移动到合适的位置&#xff0c;把模型和阴影面片错开3、实现距离脚近的阴影偏移少&#xff0c;距离脚远的阴影偏移…

【已解决】AttributeError: module ‘cv2‘ has no attribute ‘bgsegm‘

问题 使用cv2.bgsegm.createBackgroundSubtractorMOG()去除背景的时候&#xff0c;遇到如下问题&#xff1a; AttributeError: module cv2 has no attribute bgsegm原因 报错原因&#xff1a;使用的python环境中没有安装扩展包contrib 解决方法 可以通过pip或者conda安装 …

QT中文乱码解决方案与乱码的原因

相信大家应该都遇到过中文乱码的问题&#xff0c;有时候改一改中文就不乱码了&#xff0c;但是有时候用同样的方式还是乱码&#xff0c;那么这个乱码到底是什么原因&#xff0c;又该如何彻底解决呢&#xff1f; 总结 先总结一下&#xff1a; Qt5中&#xff0c;将QString()的构…

Java实现Csv文件导入导出

Java实现Csv文件导入导出 什么是.csv文件&#xff1f; CSV&#xff08;Comma-Separated Values&#xff0c;逗号分隔的值&#xff09;是一种简单、实用的文件格式&#xff0c;用于存储和表示包括文本、数值等各种类型的数据。CSV 文件通常以 .csv 作为文件扩展名。这种文件格…

基于蜣螂优化算法DBO优化的VMD-KELM光伏发电短期功率预测MATLAB代码

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; VMD适用于处理非线性和非平稳信号&#xff0c;例如振动信号、生物信号、地震信号、图像信号等。它在信号处理、振动分析、图像处理等领域有广泛的应用&#xff0c;特别是在提取信号中的隐含信息和去除噪声方面…

字符串中的strcpy和strncpy区别

strcpy:函数原型是char *strcpy(char* dest, const char *src)&#xff0c;含义是将src中的字符串复制到dest中。 strncpy:函数原型是char *strncpy(char *dest const char *src,int n&#xff09;&#xff0c;表示把src所指向的字符串中以src地址开始的前n个字节复制到dest所…

香港施政报告人才引进政策2023全面解读,对优才计划申请是否有影响?

香港施政报告人才引进政策2023全面解读&#xff0c;对优才计划申请是否有影响&#xff1f; 香港第二份施政报告10月25日出来了&#xff01;这次真的是“走进民生”啊&#xff0c;什么路都帮你想好了&#xff01; 总结就是&#xff1a;继续抢人才、留人才&#xff01;在昨天的《…

103.linux5.15.198 编译 firefly-rk3399(2)

1. 平台&#xff1a; rk3399 firefly 2g16g 2. 内核&#xff1a;linux5.15.136 &#xff08;从内核镜像网站下载&#xff09; 3. 交叉编译工具 gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 4. 宿主机&#xff1a;ubuntu18.04 5. 需要的素材和资料&#xff…

MySQL 单表查询 多表设计

目录 数据库操作-DQL(单表查询)语法基本查询&#xff08;不带任何条件&#xff09;条件查询&#xff08;where&#xff09;聚合函数分组查询&#xff08;group by [having]&#xff09;&#xff08;重点&#xff09;排序查询&#xff08;order by&#xff09;&#xff08;重点&…

MySQL数据库基本操作2

文章目录 主要内容一.DQL1.语法格式代码如下&#xff08;示例&#xff09;: 2.数据准备代码如下&#xff08;示例&#xff09;: 3.简单查询代码如下&#xff08;示例&#xff09;: 4.运算符5.运算符操作-算术运算符代码如下&#xff08;示例&#xff09;: 6.运算符操作-条件查询…

Spring Cloud Sentinel整合Nacos实现配置持久化

sentinel配置相关配置后无法持久化&#xff0c;服务重启之后就没了&#xff0c;所以整合nacos&#xff0c;在nacos服务持久化&#xff0c;sentinel实时与nacos通信获取相关配置。 使用上一章节Feign消费者服务实现整合。 版本信息&#xff1a; nacos:1.4.1 Sentinel 控制台 …

【DRAM存储器十七】DDR2介绍-DDR2的新增技术-Post CAS、ODT、RDQS、OCD

&#x1f449;个人主页&#xff1a;highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 参考资料&#xff1a;《镁光DDR数据手册》 目录 Post CAS ODT RDQS OCD Post CA…

方舟生存进化ARK个人服务器搭建教程保姆级

方舟生存进化ARK个人服务器搭建教程保姆级 大家好我是艾西&#xff0c;在很久之前我有给大家分享过方舟生存进化的搭建架设教程&#xff0c;但时间久远且以前的教程我现在回头看去在某些地方说的并不是那么清楚。最近也是闲暇无事打算重新巩固下方舟生存进化的搭建架设教程&…

[计算机提升] Windows文件系统类型介绍

1.13 文件系统 在Windows系统中&#xff0c;文件系统是一种用于组织和管理计算机上存储的文件和目录的方法。它提供了一种结构化的方式来访问、存储和检索数据。 以下是Windows系统中常见的文件系统&#xff1a; FAT&#xff08;FAT16、FAT32&#xff09;&#xff1a;FAT&…

2023年中国研磨液需求量、市场规模及行业竞争格局分析[图]

研磨是半导体加工过程中的一项重要工艺&#xff0c;它主要是应用化学研磨液混配磨料的方式对半导体表面进行精密加工&#xff0c;研磨液是平坦化工艺中研磨材料和化学添加剂的混合物&#xff0c;研磨材料主要是石英、二氧化铝和氧化铈&#xff0c;研磨液是影响半导体表面质量的…

endnote设置

问题1&#xff1a;参考文献的tab太长 首先要在endnote里面这样设置&#xff0c;file->output->edit "XXX" 保存之后&#xff0c;在word更新目录。 在word里面设置悬挂缩进 结果&#xff1a; Endnote参考编号与参考文献距离太远怎么调整 endnote 文献对齐方式…

LibTorch实战一:MNIST的python代码

目录 一、下载MNIST-demo的cpp、python版本代码 二、五分钟读懂pytorch代码 三、下载MNIST数据集、训练模型 四、模型序列化、可视化分析 本文借用mnist这个相对简易深度学习任务来开始讲解libtorch如何部署模型。因此&#xff0c;这是一个如何编写libtorch代码的实战教程。…

Linux权限大揭秘:深入理解系统安全

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; &#x1f354;前言&#xff1a; 在之前的内容中&#xff0c;我们了解了Linux中的一些简单权限&#xff0c;如root超级账号与普通账户的区别、Linux文件权限管理、文件类型和访问权限以及许多关于修改权限的指令及其规则…

源发行版17 需要目标发行版 17问题解决

java: 警告: 源发行版 17 需要目标发行版 17 问题描述&#xff1a;解决办法&#xff1a;总结 问题描述&#xff1a; 解决办法&#xff1a; 1.将 Settings --> Build, Execution, Deployment --> Complier --> Java Complier 配置下的 Project bytecode version: 17 改…

为爱出发,与善同行丨纬创软件2023北京善行者圆满收官

2023年10月21日&#xff0c;北京善行者徒步活动在昌平正式开走。800支队伍3200名善行者队员进行32公里的公益行走。纬创软件组建「北京台协纬创软件队」&#xff0c;4名队员踏上32公里的征程&#xff0c;通过徒步筹款的方式传递善行理念&#xff0c;为贫困山区的孩子们建立“爱…