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

python机器人编程——用python调用API控制wifi小车的实例程序

目录

  • 一、前言
  • 二、一个客户端的简单实现
    • 2.1 首先定义一个类及属性
    • 2.2 其次定义连接方法
    • 2.3 定义一些回调函数
    • 2.4 定义发送小车指令方法
    • 2.5 定义一个正常关闭方法
  • 三、python编程控制小车的demo实现
  • 四、小结
  • PS.扩展阅读
    • ps1.六自由度机器人相关文章资源
    • ps2.四轴机器相关文章资源
    • ps3.移动小车相关文章资源
    • ps3.wifi小车控制相关文章资源

一、前言

前一篇博文python机器人编程——用手机web远程视频监控并控制小车驾驶(中篇真机实现)我们实现了手机远程操控小车:
在这里插入图片描述
同样的,由于我们的小车通讯用的时通用的websocket,我们可以用python也能操控小车。下面是客户端的实现及demo示例。

二、一个客户端的简单实现

我们小车实现了简单的控制接收指令,格式是json的。指令如下:

{               'stop': 0,               'allcontrl': 0,'vleft': 0,'vright': 0,   'track': 0}

针对这个指令,我们实现一个websocket客户端,并实现连接、发送心跳、断了自动重新连接等功能。
我们依赖一个库websocket-client实现:

pip install websocket-client

2.1 首先定义一个类及属性

import websocket
import threading
import time
import json
class CarClient:def __init__(self, ip="localhost"):self.ws = Noneself.connected = False self.ip = ip       self.ping_interval = 2  # Ping interval in seconds# Define control commandsself.cmd = {               'stop': 0,               'allcontrl': 0,'vleft': 0,'vright': 0,   'track': 0}self.isSelfClose=Falseself.attempts=0

以上属性包括ip,为小车的远程ip地址。self.attempts为断开连接后尝试重连的次数。

2.2 其次定义连接方法

这里我们通过开启一个新线程实现连接:

    def connect(self):self.ws = websocket.WebSocketApp("ws://" + self.ip + ":9000/ws",on_open=self.on_open,on_message=self.on_message,on_error=self.on_error,on_close=self.on_close)wst = threading.Thread(target=self.ws.run_forever)wst.daemon = Truewst.start()

2.3 定义一些回调函数

主要定义一个on_open,连接后发送心跳包,这里简单的是"ping",发送间隔为2秒。

def on_open(self, ws):print("WebSocket connection opened")self.connected = Trueself.isSelfClose=Falseself.attempts=0self.start_pinger()  # Start the pinger when the connection is openeddef start_pinger(self):# Define a function to send pingdef ping():while self.connected:if self.ws.sock is not None:self.ws.send("ping")print("Sent ping")time.sleep(self.ping_interval)threading.Thread(target=ping).start()

定义异常断开后重连机制:

    def on_close(self, ws, close_status_code, close_msg):print("WebSocket connection closed")self.connected = Falseif self.isSelfClose:returnif self.attempts!=0:returnself.reconnect()def reconnect(self, max_attempts=5):self.attempts = 0while self.attempts < max_attempts and not self.connected:print(f"Attempting to reconnect... (Attempt {self.attempts + 1}/{max_attempts})")try:self.connect()if self.connected:print("Successfully reconnected")breakexcept:print("Reconnection failed")self.attempts += 1time.sleep(2)  # Wait for 2 seconds before next attemptif not self.connected:print("Failed to reconnect after maximum attempts")

2.4 定义发送小车指令方法

定义一个send方法,用于发送左右轮速度及停止指令:

    def send(self, vl, vr, istop=0):if not self.connected:print("WebSocket is not connected. Cannot send message.")return        self.cmd['vleft'] = vlself.cmd['vright'] = vrself.cmd['stop'] = istop        message = json.dumps(self.cmd)self.ws.send(message)print(f"Sent message: {message}")

2.5 定义一个正常关闭方法

    def close(self):if self.ws and self.ws.sock is not None:self.isSelfClose=Trueself.attempts=0self.ws.close()print("WebSocket connection closed manually")self.connected = False

至此,完成了一个远程控制客户端的类。

三、python编程控制小车的demo实现

有了以上的客户端类,我们就可以导入这个类,然后对小车进行控制了,示例程序如下:

# -*- coding: utf-8 -*-
"""
Created on Sat Oct 19 13:02:10 2024@author: JAMES FEI
python API 使用实例
第一步:打开小车的.exe文件,进入运行状态
第二步:打开全局控制开关、打开远程控制开关
第三步: 进入下面编程:
"""
import time
#(1)导入客户端模块
from CarClient import CarClient
#(2)实例化一个类,ip根据小车界面获取,同一个机器为localhost
car=CarClient(ip="localhost")
#(3)连接小车
car.connect()
#(4)等待连接完成
time.sleep(2)
#(5)设置左右轮速度为 10,10 r/min
car.send(10,10)
# (6) 行走运行2秒钟
time.sleep(3)
#(7)慢慢停下来,速度为 0,0 r/min
for i in range(6):time.sleep(0.5)    car.send(10-i*2,10-i*2)

具体操作见以下视频:

无线小车的python的API开发示例

四、小结

小车使用通用websocket的好处是可以进行多语言跨平台的交互,在网络满足实时性的基础上,可以方便的进行二次开发。websocket既可以用html实现,也可以用python等其它语言进行接口实现。这样就有利于掌握不同语言技能的人进行应用扩展。

[------------本篇完-------------]

PS.扩展阅读

————————————————————————————————————————

对于python机器人编程感兴趣的小伙伴,可以进入如下链接阅读相关咨询

ps1.六自由度机器人相关文章资源

(1) 对六自由度机械臂的运动控制及python实现(附源码)
在这里插入图片描述

(2) N轴机械臂的MDH正向建模,及python算法
在这里插入图片描述

ps2.四轴机器相关文章资源

(1) 文章:python机器人编程——用python实现一个写字机器人
在这里插入图片描述

在这里插入图片描述

(2)python机器人实战——0到1创建一个自动是色块机器人项目-CSDN直播

(3)博文《我从0开始搭建了一个色块自动抓取机器人,并实现了大模型的接入和语音控制-(上基础篇)》的vrep基础环境
(3)博文《我从0开始搭建了一个色块自动抓取机器人,并实现了大模型的接入和语音控制-(上基础篇)》的vrep基础环境
(4)实现了语音输入+大模型指令解析+机器视觉+机械臂流程打通
在这里插入图片描述
在这里插入图片描述

ps3.移动小车相关文章资源

(1)python做了一个极简的栅格地图行走机器人,到底能干啥?[第五弹]——解锁蒙特卡洛定位功能-CSDN博客
(2) 对应python资源:源码地址
在这里插入图片描述
在这里插入图片描述

(3)python机器人编程——差速AGV机器、基于视觉和预测控制的循迹、自动行驶(上篇)_agv编程-CSDN博客
(4)python机器人编程——差速AGV机器、基于视觉和预测控制的循迹、自动行驶(下篇)_agv路线规划原则python-CSDN博客
对应python及仿真环境资源:源码链接
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ps3.wifi小车控制相关文章资源

web端配套资源源代码已经上传(竖屏版),下载地址
仿真配套资源已经上传:下载地址
web端配套资源源代码已经上传(横屏版),下载地址

相关文章:

python机器人编程——用python调用API控制wifi小车的实例程序

目录 一、前言二、一个客户端的简单实现2.1 首先定义一个类及属性2.2 其次定义连接方法2.3 定义一些回调函数2.4 定义发送小车指令方法2.5 定义一个正常关闭方法 三、python编程控制小车的demo实现四、小结PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源p…...

面试学习整理-线程池

线程池 简介JUC包线程池介绍线程池最常问也最常用-参数线程执行分析-线程是怎么运行的进程和线程的区别Executors工厂类提供四种线程池Executors和ThreaPoolExecutor创建线程池的区别两种提交任务的方法spring集成的线程池 简介 线程池作为实际使用和面试较多的技能区, 学习是…...

Debian会取代CentOS成为更主流的操作系统吗?

我们知道&#xff0c;其实之前的话&#xff0c;国内用户对centos几乎是情有独钟的偏爱&#xff0c;很多人都喜欢选择centos系统&#xff0c;可能是受到一些原因的影响导致的吧&#xff0c;比如他相当于免费的红帽子系统&#xff0c;或者一些教程和网上的资料都推荐这个系统&…...

网络安全领域推荐证书介绍及备考指南

在网络安全领域&#xff0c;拥有专业认证不仅可以证明个人的专业能力&#xff0c;还能帮助在实际工作中应用先进的技术和知识。以下是几种热门的网络安全证书介绍及备考指南。 1. OSCP (Offensive Security Certified Professional) 证书简介 OSCP是针对渗透测试领域的入门级…...

SpringBoot项目ES6.8升级ES7.4.0

SpringBoot项目ES6.8.15 升级到 ES7.4.0 前言 由于公司内部资产统一整理&#xff0c;并且公司内部部署有多个版本的es集群&#xff0c;所以有必要将目前负责项目的ES集群升级到公司同一版本7.4.0。es6到es7的升级变化还是挺大的&#xff0c;因此在这里做一下简单记录&#xf…...

深度学习 之 模型部署 使用Flask和PyTorch构建图像分类Web服务

引言 随着深度学习的发展&#xff0c;图像分类已成为一项基础的技术&#xff0c;被广泛应用于各种场景之中。本文将介绍如何使用Flask框架和PyTorch库来构建一个简单的图像分类Web服务。通过这个服务&#xff0c;用户可以通过HTTP POST请求上传花朵图片&#xff0c;然后由后端…...

MFC工控项目实例二十六创建数据库

承接专栏《MFC工控项目实例二十五多媒体定时计时器》 用选取的型号为文件名建立文件夹&#xff0c;再在下面用测试的当天的时间创建文件夹&#xff0c;在这个文件中用测试的时/分/秒为数据库名创建Adcess数据库。 1、在StdAfx.h文件最下面添加代码 #import "C:/Program F…...

springmvc源码流程解析(一)

Springmvc 是基于servlet 规范来完成的一个请求响应模块&#xff0c;也是spring 中比较大的一个 模块&#xff0c;现在基本上都是零xml 配置了&#xff0c;采用的是约定大于配置的方式&#xff0c;所以我们的springmvc 也是采用这种零xml 配置的方式。 要完成这种过程&#xff…...

【论文阅读】SRGAN

学习资料 论文题目:基于生成对抗网络的照片级单幅图像超分辨率(Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network)论文地址:https://arxiv.org/abs/1609.04802代码:GitHub - xiph/daala: Modern video compression for the interne…...

kubelet PLEG实现

概述 kubelet的主要作用是确保pod状态和podspec保持一致&#xff0c;这里的pod状态包括pod中的container状态&#xff0c;个数等。 为了达到这个目的&#xff0c;kubelet需要从多个来源watch pod spec的变化&#xff0c;并周期从container runtime获取最新的container状态。比如…...

leetcode49:字母异位词分组

给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat", &…...

一个将.Geojson文件转成shapefile和kml文件的在线页面工具(续)

接上一专栏&#xff1a;这个网址有个bug&#xff0c;每个月只能免费转3次&#xff0c;这等于没用&#xff01; 一个将.Geojson文件转成shapefile和kml文件的在线页面工具_geojson转shp在线-CSDN博客 下面这个网址实测可以免费多次转换&#xff01; Quickmaptools : Geojson to…...

论文阅读(二十四):SA-Net: Shuffle Attention for Deep Convolutional Neural Networks

文章目录 Abstract1.Introduction2.Shuffle Attention3.Code 论文&#xff1a;SA-Net&#xff1a;Shuffle Attention for Deep Convolutional Neural Networks(SA-Net&#xff1a;置换注意力机制)   论文链接&#xff1a;SA-Net&#xff1a;Shuffle Attention for Deep Convo…...

基于YOLOv8深度学习的智能道路裂缝检测与分析系统【python源码+Pyqt5界面+数据集+训练代码】

背景及意义 智能道路裂缝检测与分析系统在基础设施维护和安全监测方面起着非常重要的作用。道路裂缝是道路衰老和破坏的早期迹象&#xff0c;若不及时发现和修复&#xff0c;可能会导致道路结构的进一步恶化&#xff0c;甚至引发安全事故。本文基于YOLOv8深度学习框架&#xff…...

YOLOv11入门到入土使用教程(含结构图)

一、简介 YOLOv11是Ultralytics公司在之前的YOLO版本上推出的最新一代实时目标检测器&#xff0c;支持目标检测、追踪、实力分割、图像分类和姿态估计等任务。官方代码&#xff1a;ultralytics/ultralytics&#xff1a;ultralytics YOLO11 &#x1f680; (github.com)https://g…...

python 爬虫抓取百度热搜

实现思路&#xff1a; 第1步、在百度热搜页获取热搜元素 元素类名为category-wrap_iQLoo 即我们只需要获取类名category-wrap_为前缀的元素 第2步、编写python脚本实现爬虫 import requests from bs4 import BeautifulSoupurl https://top.baidu.com/board?tabrealtime he…...

3.1 > Linux文件管理(基础版)

Linux 的命名规则 相对于其他操作系统&#xff08;如 Windows &#xff09;来说&#xff0c;Linux 的命名规则并没有那么多条条框框&#xff0c;还算是比较自由的。在 Linux 中&#xff0c;它的命名规则有如下几点要求&#xff1a; 首先是大小写敏感&#xff1a;例如在 Linux…...

CTFHUB技能树之文件上传——MIME绕过

开启靶场&#xff0c;打开链接&#xff1a; 直接指明是MIME验证 新建04MIME.php文件&#xff0c;内容如下&#xff1a; <?php echo "Ciallo&#xff5e;(∠・ω< )⌒★";eval($_POST[pass]);?> &#xff08;这里加了点表情&#xff0c;加带点私货&#x…...

4种鼓励创业创新的方法

随着市场趋于饱和&#xff0c;许多企业&#xff0c;尤其是初创企业&#xff0c;很难在竞争中保持领先地位。技术为企业彻底改变其营销和管理策略铺平了道路。另一个经过实践检验的成功渗透特定市场的方法是在办公室内部激发创新&#xff0c;从员工到品牌皆如此。 那么究竟如何…...

C#中的LINQ之美:优雅的数据查询与操作

LINQ&#xff08;Language Integrated Query&#xff0c;语言集成查询&#xff09;是C#中一个强大的工具&#xff0c;它将查询功能直接融入到语言中&#xff0c;使开发者能够以一种更直观、更接近自然语言的方式来操作数据。LINQ不仅能极大地提高开发效率&#xff0c;而且让代码…...

ComfyUI IPAdapter Plus完整指南:5个步骤掌握AI图像风格迁移技术

ComfyUI IPAdapter Plus完整指南&#xff1a;5个步骤掌握AI图像风格迁移技术 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus ComfyUI IPAdapter Plus是ComfyUI平台上功能强大的图像引导生成插件&#x…...

【AI工具推荐】Awesome DESIGN.md - 让AI生成像素级完美UI的设计神器

有兴趣的朋友&#xff0c;点点关注。每天分享一个AI工具。每天分享一个AI工具&#xff0c;今天推荐&#xff1a;Awesome DESIGN.md - 一个让AI代理能够生成像素级完美UI的开源设计系统集合项目简介 Awesome DESIGN.md 是一个精心策划的DESIGN.md文件集合&#xff0c;灵感来源于…...

Go项目安全左移实践:集成Security-Shield实现自动化漏洞与密钥检测

1. 项目概述与核心价值 在当今的软件开发与运维实践中&#xff0c;应用安全已经从“附加题”变成了“必答题”。无论是个人开发者的小型项目&#xff0c;还是企业级的复杂系统&#xff0c;都面临着来自网络的各种潜在威胁。然而&#xff0c;安全工具的引入往往伴随着陡峭的学习…...

Windows和Office激活难题?KMS智能激活脚本让你轻松告别烦恼

Windows和Office激活难题&#xff1f;KMS智能激活脚本让你轻松告别烦恼 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾经因为Windows系统突然弹出激活提示而中断工作&#xff1f;是否遇…...

企业级AI应用如何通过Taotoken统一管理多个大模型API调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业级AI应用如何通过Taotoken统一管理多个大模型API调用 在构建企业级AI应用时&#xff0c;技术团队常常面临一个现实挑战&#x…...

黑客马拉松(Hackathon)文化:是创新工场,还是疲劳表演?

在软件工程的世界里&#xff0c;我们测试人常常站在产品交付的最后一道防线上&#xff0c;习惯了在严谨的流程、详尽的用例和稳定的环境中寻找缺陷。而黑客马拉松&#xff0c;这个充满激情、混乱与极限编程的代名词&#xff0c;对我们来说&#xff0c;既像是一个遥不可及的极客…...

基于Helm与Kubernetes的以太坊节点自动化部署与运维实战

1. 项目概述&#xff1a;当以太坊遇见Kubernetes如果你和我一样&#xff0c;在区块链基础设施领域摸爬滚打多年&#xff0c;从早期手动编译客户端、配置systemd服务&#xff0c;到后来用Docker Compose编排节点&#xff0c;每一步都伴随着大量的重复劳动和运维痛点。当节点数量…...

保边滤波深度学习红外可见光融合算法【附程序】

✨ 长期致力于红外与可见光图像融合、快速引导滤波器、交替引导滤波器、深度学习、卷积神经网络研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;双支流…...

芯片入门必看:CPU、MCU、SoC、GPU、TPU、NPU

本文首先介绍了芯片的基础分类&#xff0c;包括模拟/数字芯片和逻辑/计算芯片。接着&#xff0c;对8类核心芯片进行了通俗解析&#xff0c;包括CPU、MCU、SoC、GPU、TPU、NPU、FPGA和DSP&#xff0c;涵盖了它们的定义、用途、类型和代表性标的。最后&#xff0c;文章从通用性和…...

如何实现微信聊天记录永久保存:WeChatMsg完整备份终极指南

如何实现微信聊天记录永久保存&#xff1a;WeChatMsg完整备份终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...