当前位置: 首页 > news >正文

机器人制作开源方案 | 滑板助力器

我们可以用一块废滑板做些什么   

如今,越来越多的人选择电动滑板作为代步工具或娱乐方式,市场上也涌现出越来越多的电动滑板产品。

(图片来源:Backfire Zealot X Belt Drive Electric Skateboard– Backfire Boards

(图片来源:Electric Skateboards - Boosted USA

那么,这是不是就意味着传统的"原始"滑板会被冷落呢?

      我们团队里有几个滑板爱好者,他们认为可以发明一种滑板助力器,让原始滑板焕发新生命,摆脱对人体能量的依赖。安装滑板助力器之后,我们的原始滑板就可以得到电动助力,延长滑行距离,提高速度,并且不再依赖个人体力续航。同时也要保留传统滑板的操作方式,尽量不改变滑板玩家的操作习惯(比如上下板的动作),这样既能享受电动滑板的便利和效率,又能保留一些“原始情结”。

      既然要做电动的助力器,那么选择一个合适的电机是少不了的。经过对比,我们选择了robodyno一体化可编程电机Pro-P12型。该电机采用驱控一体设计,全钢齿轮组1:12.45行星减速器,14位绝对位置磁编码器,IIC总线接口,额定功率35W,最高转速310rpm,堵转扭矩2.79N·m。借助一块小小的通信模块与电脑连接后,即可使用python语言直接编程,非常适合开发。

曾经用于开发机械臂、机器狗、智能车等开发项目。

电机选定后,接下来的关键就是轮子,我们从网上挑选了一款搅拌机用的摩擦轮,改造后便可作为助力器的轮子。

接下来准备好全套零部件及装配工具。

去掉摩擦轮原先的轮毂并安装上Robodyno Pro-P12电机配套的轮毂零件,以及3D打印的轮毂外圈,轮子部分就完成了。

然后给电机装上轮架侧板,再和轮子装配在一起。

      将轴承、轮架顶板、轮架外板装上(在上图中,轮架顶板和轮架外板已经装成了L型,即图中右侧第一个零件),助力轮便装配完成了。

最后,在滑板板尾和合适位置上打孔,并将助力轮安装在滑板上面。

装配完成。

      下面是我们选择的控制器,采用ESP32-Pico-D4芯片,安装了一块OLED屏幕(用于显示操作界面)以及一个旋钮按键(用于操作)。这个控制器里已经集成一个电机通信模块,因此不需要额外安装电机通信模块了。

我们编写了一套固件,让它可以用于控制滑板。

      通过拨动旋钮,可以控制助力轮的输出力矩,数字越大,力矩越大,旋转速度也就越快,使用者可以根据自身体重和期望的起步速度来选择合适的数值。

点击下方的正方形按钮,就可以控制助力轮启停。

然后接上11.1V动力电池,并将电池和控制器用轧带固定在滑板上。

      我们最期待的功能是要让滑板像普通滑板一样,蹬一脚就能走,用脚摩擦地面就能停。换句话说,就是开机后,电机在未受力的情况下静止,受到一定的推力后开始转动,受到一定的阻力后停止转动。Robodyno Pro电机使用python即可编程,非常方便。

程序源代码如下:

main.py

Python
import lvgl as lv
from ili9XXX import ili9488, LANDSCAPE
SCR_WIDTH = 480
SCR_HEIGHT = 320
disp = ili9488(mosi=4, miso=18, clk=5, cs=14, dc=13, rst=12, \power=-1, backlight=15, backlight_on=1, factor=32, \width=SCR_WIDTH, height=SCR_HEIGHT, rot=LANDSCAPE)
from ft6x36 import ft6x36
touch_rst = Pin(2, Pin.OUT)
touch_rst.on()
touch = ft6x36(sda=27, scl=26, width=SCR_HEIGHT, height=SCR_WIDTH, inv_x=True, swap_xy=True)style = lv.style_t()
style.init()
style.set_radius(0)
style.set_bg_color(lv.color_hex(0x2E3234))
style.set_text_color(lv.color_hex(0xC2C1C1))
style.set_border_width(0)screen = lv.scr_act()
screen.add_style(style, 0)from motor_controller import MotorControllercontroller = MotorController(screen)import time
while True:controller.update()time.sleep(0.01)

 boot.py

Python
# This file is executed on every boot (including wake-boot from deepsleep)
#import esp
#esp.osdebug(None)
#import webrepl
#webrepl.start()
from machine import Pin
import time
power = Pin(32, Pin.OUT)
_roller_btn = Pin(36, Pin.IN)
_enc_a = Pin(37, Pin.IN)
_enc_b = Pin(38, Pin.IN)
_a0 = 1
_b0 = 1
_ab0 = 1
enc_pos = 0
def on_enc_change(pin):global _a0, _b0, _ab0, enc_posa = _enc_a.value()b = _enc_b.value()if not a == _a0:_a0 = aif not b == _b0:_b0 = benc_pos += 1 if a == b else -1if not (a == b) == _ab0:enc_pos += 1 if a == b else -1_ab0 = (a == b)_enc_a.irq(handler = on_enc_change)
time.sleep(2)
power.on()

encoder.py

Python
from machine import Pin
class Encoder:def __init__(self):self.btn_pin = Pin(36, Pin.IN)self.enc_a = Pin(37, Pin.IN)self.enc_b = Pin(38, Pin.IN)self.a0 = 1self.b0 = 1self.ab0 = 1self.pos = 0self.enc_a.irq(handler = self.on_change)def on_change(self, pin):a = self.enc_a.value()b = self.enc_b.value()if not a == self.a0:self.a0 = aif not b == self.b0:self.b0 = bself.pos += 1 if a == b else -1if not (a == b) == self.ab0:self.pos += 1 if a == b else -1self.ab0 = (a == b)

motor_controller.py

Python
from encoder import Encoder
import lvgl as lv
from machine import Pin
import time
from robodyno import *class MotorController:def __init__(self, container):self.running_flag = Falseself.encoder = Encoder()self.container = containerself.power = Pin(32, Pin.OUT)self.can = CanBus()self.motor = Motor(self.can, 0x10, ROBODYNO_PRO_12)self.motor.torque_mode()self.max_torque = 3self.draw_power_btn()self.draw_bar()self.draw_btn()def draw_bar(self):self.label = lv.label(self.container)self.label.set_text(str(self.encoder.pos))self.label.set_style_text_font(lv.font_montserrat_24, 0)self.label.align(lv.ALIGN.TOP_MID, 0, 50)self.bar = lv.bar(self.container)self.bar.set_size(200, 20)self.bar.align(lv.ALIGN.TOP_MID, 0, 90)self.bar.set_value(self.encoder.pos, lv.ANIM.OFF)def draw_btn(self):self.btn = lv.btn(self.container)self.btn.align(lv.ALIGN.TOP_MID, 0, 150)self.btn.set_size(100,100)self.btn.set_style_bg_color(lv.color_hex(0x4EB181), 0)self.btn_label = lv.label(self.btn)self.btn_label.set_style_text_font(lv.font_montserrat_24, 0)self.btn_label.set_text(lv.SYMBOL.PLAY)self.btn_label.center()self.btn.add_event_cb(self.on_btn_click, lv.EVENT.CLICKED, None)def on_btn_click(self, e):btn = e.get_target()label = btn.get_child(0)if self.running_flag:self.motor.set_torque(0)self.motor.disable()self.running_flag = Falsebtn.set_style_bg_color(lv.color_hex(0x4EB181), 0)label.set_text(lv.SYMBOL.PLAY)else:self.motor.set_torque(0)self.motor.enable()self.running_flag = Truebtn.set_style_bg_color(lv.color_hex(0xF44336), 0)label.set_text(lv.SYMBOL.STOP)def draw_power_btn(self):self.power_btn = lv.btn(self.container)self.power_btn.align(lv.ALIGN.TOP_RIGHT, -40, 40)self.power_btn.set_size(40,40)self.power_btn.set_style_bg_color(lv.color_hex(0xF44336), 0)self.power_btn_label = lv.label(self.power_btn)self.power_btn_label.set_style_text_font(lv.font_montserrat_24, 0)self.power_btn_label.set_text(lv.SYMBOL.POWER)self.power_btn_label.center()self.power_btn.add_event_cb(self.on_power_off, lv.EVENT.CLICKED, None)def on_power_off(self, e):self.power.off()def update(self):if self.encoder.pos > 100:self.encoder.pos = 100if self.encoder.pos < 0:self.encoder.pos = 0self.bar.set_value(self.encoder.pos, lv.ANIM.OFF)self.label.set_text(str(self.encoder.pos))if self.running_flag:b = 0.002 + self.encoder.pos / 100 * 0.3vel = self.motor.get_vel()if vel is not None:vel = -veltorque = 0if vel > 3:torque = max(-0.107 - b * vel, -self.max_torque)elif vel < -3:torque = min(0.1 - b * vel, self.max_torque)self.motor.set_torque(torque)

将以上4个程序文件拷贝到控制器的内存中,即可被固件调用。

接下来测试一下起步。

然后再试一下转弯,表现效果还不错。

最后试一下刹车。

这些稳如狗的表现自然是通过一次又一次的调试和数不清的翻车换来的。

现在,我们的报废滑板又获得赛博新生啦~(可以踩着它出去浪了)

本项目已经开源,资料可在下方链接处下载。如果您对本项目有任何建议,欢迎留言。

附:Robodyno Pro一体化可编程电机技术文档

附:Robodyno Pro一体化可编程电机购买链接

附:主要零件清单

序号零件名称数量备注
1普通滑板1
2Robodyno Pro-P12一体化可编程电机1
3搅拌机摩擦轮轮皮1
4Robodyno Pro轮毂零件1
53D打印轮毂外圈1PLA
6Robodyno Pro轮架外板1
7Robodyno Pro轮架侧板1
8Robodyno Pro轮架顶板1
9M2.5*15螺丝9不锈钢
10Robodyno Pro电机线1
11ESP32控制器1ESP32-Pico-D4芯片
12

TFT3.5通信转接板

1安装在ESP32控制器外壳中

附:开源资料

资料清单

序号

内容
1

【A004】-程序源代码

2

【A004】-电路原理图

3

【A004】-控制器电路板生产文件

4

【A004】-控制器外壳3D打印文件

5

控制器固件

更多资料内容下载详见 【A004】滑板助力器项目​​​​​​​

相关文章:

机器人制作开源方案 | 滑板助力器

我们可以用一块废滑板做些什么呢&#xff1f; 如今&#xff0c;越来越多的人选择电动滑板作为代步工具或娱乐方式&#xff0c;市场上也涌现出越来越多的电动滑板产品。 &#xff08;图片来源&#xff1a;Backfire Zealot X Belt Drive Electric Skateboard– Backfire Board…...

飞机打方块(二)游戏界面制作

一、背景 1.新建bg节点 二、飞机节点功能实现 1.移动 1.新建plane节点 2.新建脚本GameController.ts,并绑定Canvas GameControll.ts const { ccclass, property } cc._decorator;ccclass export default class NewClass extends cc.Component {property(cc.Node)canvas:…...

自我理解:精度(precision)和召回(recall)

1、精度(precision) 精度是用于评估分类模型的一个重要指标。它反映了模型预测为正例的样本中&#xff0c;实际真正为正例样本的比例。 【注】正例样本指在二分类问题中&#xff0c;被标注为正类的样本。 例如&#xff1a;在垃圾邮件分类任务中&#xff0c;正例样本就是真实的…...

Nginx 使用 HTTPS(准备证书和私钥)

文章目录 Nginx生成自签名证书和配置Nginx HTTPS&#xff08;准备证书和私钥&#xff09;准备证书和私钥 Nginx生成自签名证书和配置Nginx HTTPS&#xff08;准备证书和私钥&#xff09; 准备证书和私钥 生成私钥 openssl genrsa -des3 -out server.key 2048这会生成一个加密…...

Java:集合框架:Set集合、LinkedSet集合、TreeSet集合、哈希值、HashSet的底层原理

Set集合 创建一个Set集合对象&#xff0c;因为Set是一个接口不能直接new一个对象&#xff0c;所以要用一个实现类来接 HashSet来接 无序性只有一次&#xff0c;只要第一次运行出来后&#xff0c;之后再运行的顺序还是第一次的顺序。 用LinkedSet来接 有序 不重复 无索引 用Tree…...

自定义Taro的navBar的宽度和高度

本方法是计算自定义navbar的宽度和高度&#xff0c;输出的参数有 navBarHeight, menuBottom,menuHeight, menuRectWidth,windowWidth, windowHeight,具体代码如下&#xff1a; export function getCustomNavBarRect():| {navBarHeight: number;menuBottom: number;menuHeight:…...

用Python编程实现百度自然语言处理接口的对接,助力你开发智能化处理程序

用Python编程实现百度自然语言处理接口的对接&#xff0c;助力你开发智能化处理程序 随着人工智能的不断进步&#xff0c;自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;成为了解决文本处理问题的重要工具。百度自然语言处理接口提供了一系…...

系统架构设计专业技能 · 系统工程与系统性能

系列文章目录 系统架构设计专业技能 网络技术&#xff08;三&#xff09; 系统架构设计专业技能 系统安全分析与设计&#xff08;四&#xff09;【系统架构设计师】 系统架构设计高级技能 软件架构设计&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 …...

初识网络原理(笔记)

目录 ​编辑局域网 网络通信基础 IP 地址 端口号 协议 协议分层 TCP / IP 五层网络模型 网络数据传输的基本流程 发送方的情况&#xff1a; 接收方的情况 局域网 搭建网络的时候&#xff0c;需要用到 交换机 和 路由器 路由器上&#xff0c;有 lan 口 和 wan 口 虽…...

嵌入式C语言基本操作方法之经典

C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。 C语言不但执行效率高而且可移植性好&#xff0c;可以用来开发应用软件、驱动、操作系统等。 C语言也是其它众多高级语言的鼻祖语言&#xff0c;所以说学习C语言是进入编程世界的必…...

postgresql \watch实用的使用方法

文章目录 1.介绍2.语法3.实用的使用方法3.1 慢sql监控3.2 长wait事件3.3 日志输出量3.3结合pg_stat_database使用3.4 结合pg_stat_bgwriter使用3.5 其他 1.介绍 \watch Postgres 9.3 版带来的一个有用的命令&#xff0c;与linux watch指令类似&#xff0c;可以帮我们在指定间隔…...

Cocos2d 项目问题记录

环境搭建 正常运行 Android 端的 Cocos2d 项目&#xff0c;本机至少需要 Android SDK、NDK 环境、Android Studio 项目报错总结 CMake Error: CMake was unable to find a build program corresponding to "Ninja" 默认创建工程的 gradle.tools 版本为 3.1.0&…...

系统架构合理性的思考 | 京东云技术团队

最近牵头在梳理部门的系统架构合理性&#xff0c;开始工作之前&#xff0c;我首先想到的是如何定义架构合理性&#xff1f; 从研发的角度来看如果系统上下文清晰、应用架构设计简单、应用拆分合理应该称之为架构合理。 基于以上的定义可以从以下三个方面来梳理评估&#xff1…...

Amelia预订插件:WordPress企业级预约系统

并非所有WordPress预订插件都像他们所设计的那样。其中一些缺乏运行高效预约操作所需的功能&#xff0c;而其他一些则看起来陈旧过时。您不需要其中任何一个&#xff0c;但Amelia预订插件似乎希望确保所有用户都对功能和风格感到满意。 在这篇Amelia企业级预约系统插件评测中&…...

共享门店模式:线下门店的商家如何利用它增加客户

随着数字化时代的到来&#xff0c;商业模式正在不断创新与演变&#xff0c;而共享经济正成为引领这一变革的重要力量。在这个大背景下&#xff0c;共享门店模式作为共享经济的一种体现&#xff0c;正在逐渐走进人们的生活&#xff0c;并为商家和消费者带来了新的商机和体验。 共…...

实现矩阵地图与rviz地图重合

文章目录 一、rviz地图转换矩形地图(只能用于全局规划)二、在rviz上显示地图边界信息,可视化调整,实现重合(只能用于局部规划)一、rviz地图转换矩形地图(只能用于全局规划) 此方法矩形地图可能会与rviz地图不重合,通过改变偏移量x_offset,y_offset接近地图 可以将矩…...

设计模式十九:备忘录模式(Memento Pattern)

备忘录模式是一种行为型设计模式&#xff0c;它允许对象在不暴露其内部状态的情况下捕获和恢复其状态。该模式的主要目标是在不破坏封装性的前提下&#xff0c;实现对象状态的备份和恢复。备忘录模式常用于需要保存对象历史状态、撤销操作或者实现快照功能的情况。 备忘录模式…...

【题解】二叉搜索树与双向链表

二叉搜索树与双向链表 题目链接&#xff1a;二叉搜索树与双向链表 解题思路1&#xff1a;递归中序遍历 首先题目最后要求的是一个的递增的双向链表&#xff0c;而二叉搜索树也是一类非常有特色的树&#xff0c;它的根节点大于所有左侧的节点&#xff0c;同时又小于所有右侧的…...

【真实案例】解决后端接口调用偶尔超时问题

文章目录 背景分析代码分析二次日志分析排查Gateway服务解决解决办法1:添加重试机制解决办法2:优化网关内存分配解决办法3:调整OOM策略背景 项目从虚拟机迁移到k8s云原生平台(RainBond)后,发现偶尔会出现接口调用超时的问题。 统计了一下从上线到现在近一个月的调用失败…...

操作符详解(1)

1. 操作符分类&#xff1a; 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 1. 除了 % 操作符之外&#xff0c;其他的几个操作符可以作用于整数和浮点数。 2. 对…...

<指针进阶>指针数组和数组指针傻傻分不清?

✨Blog&#xff1a;&#x1f970;不会敲代码的小张:)&#x1f970; &#x1f251;推荐专栏&#xff1a;C语言&#x1f92a;、Cpp&#x1f636;‍&#x1f32b;️、数据结构初阶&#x1f480; &#x1f4bd;座右铭&#xff1a;“記住&#xff0c;每一天都是一個新的開始&#x1…...

无代码集成飞书连接更多应用

场景描述&#xff1a; 基于飞书开放平台能力&#xff0c;无代码集成飞书连接更多应用&#xff0c;打通数据孤岛。通过Aboter可轻松搭建业务自动化流程&#xff0c;实现多个应用之间的数据连接。 支持包括飞书事件监听和接口调用的能力&#xff1a; 事件监听&#xff1a; 用…...

三分钟解决AE缓存预览渲染错误、暂停、卡顿问题

一、清除RAM缓存&#xff08;内存&#xff09; 你应该做的第一件事是清除你的RAM。这将清除当前存储在内存中的所有临时缓存文件。要执行此操作&#xff0c;请导航到编辑>清除>所有内存。这将从头开始重置RAM缓存 二、清空磁盘缓存 您也可以尝试清空磁盘缓存。执行此操作…...

朴实无华的数据增强然后训练一下应用在电网异物检测领域,好像有自己的数据集就能发文了

RCNN-based foreign object detection for securing power transmission lines (RCNN4SPTL) Abstract 本文提出了一种新的深度学习网络——RCNN4SPTL (RCNN -based Foreign Object Detection for Securing Power Transmission lines)&#xff0c;该网络适用于检测输电线路上的…...

【使用教程】在Ubuntu下运行CANopen通信PMM伺服电机使用教程(NimServoSDK_V2.0.0)

本教程将指导您在Ubuntu操作系统下使用NimServoSDK_V2.0.0来运行CANopen通信的PMM系列一体化伺服电机。我们将介绍必要的步骤和命令&#xff0c;以确保您能够成功地配置和控制PMM系列一体化伺服电机。 NimServoSDK_V2.0.0是一款用于PMM一体化伺服电机的软件开发工具包。它提供了…...

vue3+ts+vite项目页面初始化loading加载效果

简介 一分钟实现 vue-pure-admin 同款项目加载时的 loading 效果 一、先看效果 1.1 静态效果 1.2 动态效果 二、上代码 核心代码在body里面&#xff0c;代码中已标明。找到你项目的 index.html &#xff0c;复制粘贴进去即可 <!DOCTYPE html> <html lang"en…...

ElasticSearch 数据聚合、自动补全(自定义分词器)、数据同步

文章目录 数据聚合一、聚合的种类二、DSL实现聚合1、Bucket&#xff08;桶&#xff09;聚合2、Metrics&#xff08;度量&#xff09;聚合 三、RestAPI实现聚合 自动补全一、拼音分词器二、自定义分词器三、自动补全查询四、实现搜索款自动补全&#xff08;例酒店信息&#xff0…...

神经网络基础-神经网络补充概念-18-多个样本的向量化

概念 多个样本的向量化通常涉及将一组样本数据组织成矩阵形式&#xff0c;其中每一行代表一个样本&#xff0c;每一列代表样本的特征。这种向量化可以使你更有效地处理和操作多个样本&#xff0c;特别是在机器学习和数据分析中。 代码实现 import numpy as np# 多个样本的数…...

*看门狗1

//while部分是我们在项目中具体需要写的代码&#xff0c;这部分的程序可以用独立看门狗来监控 //如果我们知道这部分代码的执行时间&#xff0c;比如是500ms&#xff0c;那么我们可以设置独立看门狗的 //溢出时间是600ms&#xff0c;比500ms多一点&#xff0c;如果要被监控的程…...

nginx防盗链

防盗链介绍 通过二次访问&#xff0c;请求头中带有referer&#xff0c;的方式不允许访问静态资源。 我们只希望用户通过反向代理服务器才可以拿到我们的静态资源&#xff0c;不希望别的服务器通过二次请求拿到我们的静态资源。 盗链是指在自己的页面上展示一些并不在自己服务…...

8月16日上课内容 第二章 部署LVS-DR群集

本章结构&#xff1a; 数据包流向分析: 数据包流向分析&#xff1a; &#xff08;1&#xff09;客户端发送请求到 Director Server&#xff08;负载均衡器&#xff09;&#xff0c;请求的数据报文&#xff08;源 IP 是 CIP,目标 IP 是 VIP&#xff09;到达内核空间。 &#xf…...

ViT模型架构和CNN区别

目录 Vision Transformer如何工作 ViT模型架构 ViT工作原理解析 步骤1&#xff1a;将图片转换成patches序列 步骤2&#xff1a;将patches铺平 步骤3&#xff1a;添加Position embedding 步骤4&#xff1a;添加class token 步骤5&#xff1a;输入Transformer Encoder 步…...

发布python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api,以及安卓接入案例代码

python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api&#xff0c;以及原生安卓接入案例代码案例 源码地址:keyxh/newsapi: python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api&#xff0c;以及安卓接入案例代码 (github.com) 目录 1.环境配…...

adb command

查看屏幕分辨率 adb shell wm size 查看dpi adb shell dumpsys window | grep ‘dpi’ WIFI调试&#xff1a; adb tcpip 5555adb connect 设备ip 注意&#xff0c;USB拔插会断掉&#xff0c;所以插上USB后再 adb connect 设备ip。【注意】华为手机自建热点的ip一般是192.1…...

在ARM服务器上一键安装Proxmox VE(以在Oracle Cloud VPS上为例)(甲骨文)

前言 如题&#xff0c;具体用到的说明文档如下 virt.spiritlhl.net 具体流程 首先是按照说明&#xff0c;先得看看自己的服务器符不符合安装 Proxmox VE的条件 https://virt.spiritlhl.net/guide/pve_precheck.html#%E5%90%84%E7%A7%8D%E8%A6%81%E6%B1%82 有提到硬件和软…...

KMP算法(JS)

KMP算法 什么时KMP算法 KMP算法是一种改进的字符串匹配算法 由D.E.Knuth&#xff0c;J.H.Morris和 V.R.Pratt提出的&#xff0c;因此人们称它为克努特—莫里斯—普拉特操作&#xff08;简称KMP算法&#xff09;。 KMP的主要思想是当出现字符串不匹配时&#xff0c;可以知道…...

恢复NuGet包_解决:System.BadImageFormatException:无法加载文件或程序集

C#工程 主要是开发了一个 web api接口&#xff0c;这个工程源码去年还可以的&#xff0c;今年换了一个电脑打开工程就报错。 错误提示如下&#xff1a; 在 Microsoft.CodeAnalysis.CSharp.CommandLine.Program.Main(String[] args) Test1 System.BadImageFormatEx…...

Django学习笔记(2)

创建app 属于自动执行了python manage.py 直接在里面运行startapp app01就可以创建app01的项目了 之后在setting.py中注册app01 INSTALLED_APPS ["django.contrib.admin","django.contrib.auth","django.contrib.contenttypes","django.c…...

高德地图开发者平台Python应用实践:快速入门周边商业环境信息查询

高德地图开发平台提供了丰富的API接口&#xff0c;可以方便地进行地图数据的开发和分析。在商业分析数据采集中&#xff0c;使用高德地图开发平台的周边查询功能可以快速获取周边商圈、小区等信息&#xff0c;为商业决策提供数据支持。 针对您的需求&#xff0c;我建议采用以下…...

【ES6】—let 声明方式

一、不属于顶层对象window let 关键字声明的变量&#xff0c;不会挂载到window的属性 var a 5 console.log(a) console.log(window.a) // 5 // 5 // 变量a 被挂载到window属性上了 &#xff0c; a window.alet b 6 console.log(b) console.log(window.b) // 6 // undefin…...

【数据分析入门】Jupyter Notebook

目录 一、保存/加载二、适用多种编程语言三、编写代码与文本3.1 编辑单元格3.2 插入单元格3.3 运行单元格3.4 查看单元格 四、Widgets五、帮助 Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算&#xff1a;开发、文档编写、运行代码和展示结果。 …...

反射知识总结

1、反射概述 反射是指对于任何一个Class类&#xff0c;在"运行的时候"都可以直接得到这个类全部成分。在运行时&#xff0c;可以直接得到这个类的构造器对象&#xff1a;Constructor在运行时。可以直接得到这个类的成员变量对象&#xff1a;Field在运行时&#xff0c…...

MongoDB 安装 linux

本文介绍一下MongoDB的安装教程。 系统环境&#xff1a;CentOS7.4 可以用 cat /etc/redhat-release 查看本机的系统版本号 一、MongoDB版本选择 当前最新的版本为7.0&#xff0c;但是由于7.0版本安装需要升级glibc2.25以上,所以这里我暂时不安装该版本。我们选择的是6.0.9版本…...

什么是KNN( K近邻算法)

什么是KNN( K近邻算法) 虽然名字中有NN&#xff0c;KNN并不是哪种神经网络&#xff0c;它全名K-Nearest-Neighbors&#xff1a;K近邻算法&#xff0c;是机器学习中常用的分类算法。 物以类聚&#xff0c;人以群分。KNN的基础思想很简单&#xff0c;要判断一个新数据的类别&…...

Linux查看命令总结

1.动态实时查找命令 使用以下命令的前提是需要在找到日志位置 tail -f server.log 实时展示日志末尾内容&#xff0c;默认最后10行,相当于增加参数 -n 10 tail -n filename; tail命令扩展 查看日志最后20行内容并实时更新日志 tail -f -n 20 server.log或者 tail -fn 20 ser…...

npm报错 Cannot find module ‘@vuepress\core\node_m

通常是由于缺少依赖包或者依赖包版本不兼容引起的。可以尝试以下步骤来解决这个问题&#xff1a; 确保您的项目的依赖包是最新的&#xff0c;可以运行 npm update 命令来更新依赖包。 如果更新依赖包后仍然有问题&#xff0c;可以尝试删除 node_modules 文件夹&#xff0c;并重…...

mybatis入门环境搭建及CRUD

一、MyBatis介绍 1.1 MyBatis的定义 MyBatis是一个开源的Java持久化框架&#xff0c;它可以帮助开发人员简化数据库访问的过程。它提供了一种将SQL语句与Java代码进行映射的方式&#xff0c;使得开发人员可以通过简单的配置文件来定义SQL语句&#xff0c;而无需编写繁琐的JDB…...

小程序变化历史记录

2023年8月26 小程序机号快速验证组件将需要付费使用 自2023年8月26日起&#xff0c;手机号快速验证组件将需要付费使用。标准单价为&#xff1a;每次组件调用成功&#xff0c;收费0.03元 https://blog.csdn.net/qq_37215621/article/details/131453551 自2023年9月1日起&…...

jstack(Stack Trace for Java)Java堆栈跟踪工具

jstack&#xff08;Stack Trace for Java&#xff09;Java堆栈跟踪工具 jstack&#xff08;Stack Trace for Java&#xff09;命令用于生成虚拟机当前时刻的线程快照&#xff08;一般称为threaddump或者javacore文件&#xff09;。 线程快照就是当前虚拟机内每一条线程正在执…...

linux面试题整理

目录标题 基础篇1.说下企业为什么用linux而不用windows&#xff1f;2.linux学过什么&#xff0c;怎么学习的&#xff1f;3.linux基本命令4.linux查看端口、进程、文件类型、挂载5.使用top命令之后前五行会显示什么内容&#xff1f;6.linux怎么查找一个文件7.vim进去后的各种操作…...