利用传感器、马达和伺服系统的图书馆,这些都是由hisarc为piwars比赛而设计的

HisarCSPiwars2019的Python项目详细描述


Piwars Turkey 2019:Hisarc提供的分布式机器人套件的Python库

创建这个python库的目的是为了方便hisarc为2019年土耳其pi wars的与会者设计的机器人套件上的软件、传感器和可移动设备之间的理解。

安装

使用以下命令安装库

git clone https://github.com/HisarCS/PiWars2019.git
cd PiWars2019
sudo python setup.py install

用法

importHisarCSPiWars2019

文档

该库包括5个类,现在是:

  • optimizedpicam(使用pi相机和opencv进行简化和优化)
  • kumanda(使用六轴ps3控制器轻松使用pygame操纵杆类)
  • motor control(便于使用带有控制器的覆盆子pi的pololu drv8835电机控制电路)
  • 伺服控制(使用GPIO引脚在覆盆子PI上使用伺服电机的简单方法)
  • 超声波传感器(便于在覆盆子皮上使用HC-SR04超声波距离传感器)

为了提高性能,有些类包含multithtreading。这可以防止代码的某些部分对代码的其他部分没有影响。多线程特别用于优化dicam(用于抓取和显示帧)、controller(用于连续获取控制器值)、servocontrol(用于防止类中的任何睡眠函数影响主线程)。

优化dicam:

  • 方法
updateData()

更新从PI摄像机获取的数据。

startReadingData()

创建一个新线程来调用update data(),以便在不减慢主线程速度的情况下更新数据。

readData()

以numpy数组的形式返回相机的当前数据。

updateShownFrame()

创建并更新opencv窗口,该窗口显示pi相机看到的图像。"Q"键可用于关闭窗口。

showFrame()

在新线程中调用updateshownframe()以创建一个可视窗口,而不会减慢主线程的速度。

  • 示例用法
fromHisarCSPiWars2019importOptimizedPiCamcamera=OptimizedPiCam()camera.startReadingData()camera.showFrame()

上面的例子创建了一个新的optimizedpicam对象,并使用它显示相机看到的图像,直到按下"q"键。

调用构造函数时,相机的默认分辨率为640x480。如果需要不同的分辨率设置,例如1280x720,请按如下方式设置相机对象: 摄像头=优化的摄像头(分辨率=(1280,720))

请记住,如果需要进一步的视觉处理,则必须使用camera.startreadingdata()camera.readdata()camera.currentframe接收数据。camera.current frame是numpy数组中的当前帧变量,函数camera.readdata()返回变量camera.currentframe

下面的示例代码将以numpy数组格式从相机中获取帧,将其灰度化,并在主线程中显示帧。

fromHisarCSPiWars2019importOptmizedPiCamimportcv2camera=OptimizedPiCam()camera.startReadingData()whileTrue:frame=camera.readData()gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)cv2.imshow("gray",gray)

在下面的示例中,灰度帧都被捕获并显示在不同的线程中,而不是在主线程中。强烈建议使用此方法以尽可能提高性能。

git clone https://github.com/HisarCS/PiWars2019.git
cd PiWars2019
sudo python setup.py install
0

库曼达

  • 方法
git clone https://github.com/HisarCS/PiWars2019.git
cd PiWars2019
sudo python setup.py install
1

刷新在while循环内从控制器获取的值。不建议调用主线程,因为程序将卡在该方法中。

git clone https://github.com/HisarCS/PiWars2019.git
cd PiWars2019
sudo python setup.py install
2

在新线程中调用python refresh()。使主线程的while循环更快。

git clone https://github.com/HisarCS/PiWars2019.git
cd PiWars2019
sudo python setup.py install
3

将控制器左操纵杆的值返回为两个浮点值,x和y。

git clone https://github.com/HisarCS/PiWars2019.git
cd PiWars2019
sudo python setup.py install
4

将控制器右操纵杆的值返回为两个浮点值,x和y。

git clone https://github.com/HisarCS/PiWars2019.git
cd PiWars2019
sudo python setup.py install
5

返回所有按下按钮的数值数组。

readData()

返回所有值控制器的(python readLeftValues(),python readRightValues(),python readButtons())

  • 示例用法
git clone https://github.com/HisarCS/PiWars2019.git
cd PiWars2019
sudo python setup.py install
7

上面的代码初始化一个kumanda对象,并在按下按钮时从左操纵杆和右操纵杆以及设置字符串中打印值。请记住,在执行主代码时必须调用一次python startsistering(),否则将无法从控制器读取数据。

电机控制

  • 方法-
git clone https://github.com/HisarCS/PiWars2019.git
cd PiWars2019
sudo python setup.py install
8

使用Pololu-DRV8835-RPI库设置电机速度。速度范围是-480到480,其中-480是倒车时的最大速度。电机1和电机2的左右速度取决于它们所处的侧。

git clone https://github.com/HisarCS/PiWars2019.git
cd PiWars2019
sudo python setup.py install
9

根据控制器中操纵杆的值返回马达的速度。x和y是操纵杆的x和y值,t是布尔值,右马达为true,左马达为false。

  • 示例用法
importHisarCSPiWars2019
0

此代码初始化电机并将其设置为最大速度。

  • 带控制器的示例用法
importHisarCSPiWars2019
1

上述代码初始化电机和控制器并进入while循环。在回路中,使用controllerdatatomotordata()函数获取马达的速度值。Y值设置为负值,因为在PS3控制器上,操纵杆上的"前进"会返回负值。

伺服控制

  • 方法-
importHisarCSPiWars2019
2

分别从连续和非连续切换伺服。连续需要提供动态值,而不是在提供的角度之间连续转动伺服。

importHisarCSPiWars2019
3

将伺服旋转到提供的角度(以度为单位)。当伺服设置为不连续时,提供睡眠语句和单独的线程。

  • 示例用法- 连续:
importHisarCSPiWars2019
4

在这种情况下,伺服设置为连续。while循环用于将伺服角度持续更改1并设置新角度。

  • 示例用法- 非连续:
importHisarCSPiWars2019
5

在这种情况下,伺服设置为非连续。while循环用于设置一分钟睡眠的伺服角度

超声波传感器

  • 方法
importHisarCSPiWars2019
6

返回超声波传感器测量的距离

  • 示例用法
importHisarCSPiWars2019
7

上面的代码显示了距离。类的初始值设定项中的整数是它附加到的管脚。

贡献

欢迎拉取请求。对于重大更改,请先打开一个问题,讨论要更改的内容。

请确保根据需要更新测试。

许可证

麻省理工学院

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android Studio:我的短信应用程序不是默认短信应用程序的选项之一   java处理字符串问题   java为什么我的程序打印“null”而不是字符串?   java为什么要创建一个无限循环?   java循环在一段时间后将布尔值更改为false?   java Android Rest Api Post 400错误请求   java调用另一个方法以获取resultset并正确关闭连接?   java我想在2d数组中添加一行   Java:我需要从outputstream中获取字节数组   C语言中Java元注释的等价物#   java如何在从web下载图像时保持原始图像的dpi?   java中基于输入值的spring boot动态值   java从请求中获取主机名   java可以复制Swing代码并在intelliJ中的designer中查看它吗   spring如何使用java配置多个ldap   安卓如何在Java中使用具有多个类似参数的JSON请求/响应循环?   java LIbGDX如何在语言更改时翻译所有文本?