chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于RaspberryPi Zero W的機器人的制作

454398 ? 來源:wv ? 2019-10-22 09:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

第1步:準備

步驟2:代碼結構

我將代碼劃分為這些文件,我將一一解釋:

aum2.py

l298NDrive.py

remoteControl.py

utils.py

在接下來的步驟中,我將一步一步地解釋這些文件

第3步:Aum2.py

這是應用程序的主要入口點,包含機器人

import RPi.GPIO as GPIO

from twisted.internet import reactor, task

import l298NDrive

import remoteControl

import logging

import utils

logging.basicConfig(level=logging.WARN)

log = logging.getLogger(‘Aum2’)

enableMotors = True # Motors can be disabled for testing with this

runFrequency = 1 # The frequency on wich the main Task will be ran

class Aum2(object):

def __init__(self):

log.debug(“Initializing Aum2 robot.。.”)

# Configuration

self.port = 5555 # Port to open so the remote can connect

GPIO.setmode(GPIO.BOARD)

# Configure min and max servo pulse lengths

# Keep in mind these are not pins but servo outs

self.motors = l298NDrive.L298NDrive(10, 11, 12, 13, 14, 15, enableMotors)

self.rc = remoteControl.RemoteControl(self.port)

def processRemoteCommand(self, cmd):

vr, vl) = utils.joystickToDiff(cmd.x, cmd.y, -9.8, 9.8, -4095, 4095)

self.motors.setSpeeds(int(vr), int(-vl))

def run(self):

print(“running.。.”)

def start(self):

self.rc.start(self.processRemoteCommand)

l = task.LoopingCall(self.run)

l.start(runFrequency) # run will be called with this frequency

# Gather our code in a main() function

def main():

robot = Aum2()

robot.start()

reactor.run()

# Standard boilerplate to call the main() function to begin

# the program.

if __name__ == ‘__main__’:

main()

有些我要對此文件發(fā)表評論的要點:

我正在使用扭曲庫來協(xié)調來自UDP的遠程控制訂單服務器(將在相應的源文件中顯示)和機器人的主要Run方法。如您所見,該方法現(xiàn)在什么也不做,但是其想法是在其中添加代碼以使機器人更具自治性。

processRemoteCommand 方法將是

開始方法是在我配置需要協(xié)調的兩件事時:監(jiān)聽

第4步:RemoteControl.py

此文件包含兩個類,即RemoteControl類, RCCommand類

import logging

import traceback

from twisted.internet.protocol import DatagramProtocol

from twisted.internet import reactor

import utils

log = logging.getLogger(‘RemoteControl’)

class RemoteControl(DatagramProtocol):

def __init__(self, port):

self.port = port

def start(self, onCommandReceived):

log.debug(“Initializing RemoteControl.。.”)

self.onCommandReceived = onCommandReceived

reactor.listenUDP(self.port, self)

def datagramReceived(self, data, addr):

try:

log.debug(“Received %r from %s” % (data, addr))

command = RCCommand(data)

self.onCommandReceived(command)

except (KeyboardInterrupt, SystemExit):

raise

except:

traceback.print_exc()

class RCCommand(object):

# Timestamp [sec], sensorid, x, y, z, sensorid, x, y, z, sensorid, x, y, z

# 890.71558, 3, 0.076, 9.809, 0.565, 。..

def __init__(self, message):

self.x = 0

self.y = 0

self.z = 0

self.values = message.split(“,”)

if len(self.values) 》= 5 and self.values[1].strip() == “3”:

self.x = -float(self.values[3].strip())

self.y = -float(self.values[2].strip())

self.z = float(self.values[4].strip())

log.debug(“x={} y={} z={}”.format(self.x, self.y, self.z))

else:

log.warn(“Invalid message: {}”.format(message))

同樣是RemoteControl類,它使用扭曲的框架來偵聽運行Wireless IMU應用的Android手機發(fā)送的UDP程序包。此應用程序發(fā)送具有以下結構的消息:

890.71558, 3、0.076、9.809、0.565 ,4,-0.559、0.032,-0.134、5 -21.660,-36.960, -28.140

我只對上面突出顯示的消息部分感興趣,這就是傳感器ID 3 ,以及加速度計提供的三個測量值( 0.076、9.809、0.565 )。

您可以在代碼中看到,類 RCCommand 將此消息的有用參數(shù)轉換為機器人所需的x和y值,其中

x 是從前到后的軸,而

y 則是從一側到另一側。

我也有z軸的代碼,但是我暫時不使用它。

步驟5:L298NDrive.py

這是負責控制電動機的文件。為此,它將命令發(fā)送到16伺服驅動器,該驅動器連接到L298N電動機驅動器。我想我可能會在我構建的每個Raspberry Pi機器人上重用該類。它確實很簡單,并且不需要復雜的處理即可完成它的工作。

import Adafruit_PCA9685

import logging

import math

import utils

log = logging.getLogger(‘L298NDrive’)

class L298NDrive(object):

def __init__(self, enA, in1, in2, in3, in4, enB, enabled):

log.debug(“Initializing L298Drive.。.”)

self.minPwm = 0

self.MaxPwm = 4095

self.enA = enA

self.in1 = in1

self.in2 = in2

self.in3 = in3

self.in4 = in4

self.enB = enB

self.enabled = enabled

if enabled:

self.enable()

def enable(self):

self.enabled = True

# Initialise the PCA9685 using the default address (0x40)。

self.pwm = Adafruit_PCA9685.PCA9685()

self.setSpeeds(0, 0)

def disable(self):

self.enabled = False

self.setSpeeds(0, 0)

# Initialise the PCA9685 using the default address (0x40)。

self.pwm = None

def setSpeeds(self, rSpeed, lSpeed):

self.setSpeed(1, rSpeed)

self.setSpeed(2, lSpeed)

def setSpeed(self, motor, speed):

pwm = int(math.fabs(speed))

log.info(“Motor: {} speed: {} pwm: {}”.format(motor, speed, pwm))

if motor == 1:

if speed 》= 0:

if self.enabled:

self.pwm.set_pwm(self.in1, 0, 0)

self.pwm.set_pwm(self.in2, 0, self.MaxPwm)

else:

if self.enabled:

self.pwm.set_pwm(self.in1, 0, self.MaxPwm)

self.pwm.set_pwm(self.in2, 0, 0)

if self.enabled:

self.pwm.set_pwm(self.enA, 0, pwm)

else: # motor == 2

if speed 》= 0:

if self.enabled:

self.pwm.set_pwm(self.in3, 0, 0)

self.pwm.set_pwm(self.in4, 0, self.MaxPwm)

else:

if self.enabled:

self.pwm.set_pwm(self.in3, 0, self.MaxPwm)

self.pwm.set_pwm(self.in4, 0, 0)

if self.enabled:

self.pwm.set_pwm(self.enB, 0, pwm)

可以看出,代碼的主要部分在setSpeed(self,motor,speed)方法中,該方法接收要配置的電動機編號(1 =右,2 =左),并告訴伺服驅動器如何處理與該電動機關聯(lián)的引腳。

也許應該給出一些解釋以了解我為什么要執(zhí)行我的工作

L298N電機驅動器

使用6個引腳驅動兩個電機

enA 用來告訴速度(使用PWM),我們要使電動機啟動1。通電后,告訴駕駛員電動機1應該沿一個方向移動(in2應該處于關閉狀態(tài))

in2 通電時,告訴駕駛員電動機1應當沿相反方向移動(in1應該處于關閉狀態(tài))

in3 通電時,告知駕駛員電機2應該沿一個方向移動(in4應該關閉)

in4 告訴駕駛員,電動機2應該沿相反方向移動(in4應該關閉)

enB 用于告訴速度(使用PWM),我們希望電動機轉動

所以在我們的例子中,因為我對所有引腳都使用了伺服驅動器(只有其中兩個需要PWM):

當我做到這一點:

self.pwm.set_pwm(self.in1, 0, 0)

我真的是在告訴伺服驅動器,在所有PWM期間,該引腳(in1)應該為OFF,(所以我將該引腳設為OFF)

當我這樣做時:

self.pwm.set_pwm(self.in1, 0, self.MaxPwm)

我實際上是在告訴伺服驅動器,在所有PWM周期中,該引腳(in1)應該處于ON位置(所以我將其打開

然后,當我這樣做時:

self.pwm.set_pwm(self.enA, 0, pwm)

我使用真正的PWM引腳,并使用速度參數(shù)設置我所要求的脈沖。

步驟6:Utils.py

最后,這是最后的平安。它不包含類,但是我認為我會在其他地方重用的所有有用功能。

import math

import logging

log = logging.getLogger(‘utils’)

def map(v, in_min, in_max, out_min, out_max):

# Check that the value is at least in_min

if v 《 in_min:

v = in_min

# Check that the value is at most in_max

if v 》 in_max:

v = in_max

return (v - in_min) * (out_max - out_min) // (in_max - in_min) + out_min

def joystickToDiff(x, y, minJoystick, maxJoystick, minSpeed, maxSpeed):

# If x and y are 0, then there is not much to calculate.。.

if x == 0 and y == 0:

return (0, 0)

# First Compute the angle in deg

# First hypotenuse

z = math.sqrt(x * x + y * y)

# angle in radians

rad = math.acos(math.fabs(x) / z)

# and in degrees

angle = rad * 180 / math.pi

# Now angle indicates the measure of turn

# Along a straight line, with an angle o, the turn co-efficient is same

# this applies for angles between 0-90, with angle 0 the coeff is -1

# with angle 45, the co-efficient is 0 and with angle 90, it is 1

tcoeff = -1 + (angle / 90) * 2

turn = tcoeff * math.fabs(math.fabs(y) - math.fabs(x))

turn = round(turn * 100, 0) / 100

# And max of y or x is the movement

mov = max(math.fabs(y), math.fabs(x))

# First and third quadrant

if (x 》= 0 and y 》= 0) or (x 《 0 and y 《 0):

rawLeft = mov

rawRight = turn

else:

rawRight = mov

rawLeft = turn

# Reverse polarity

if y 《 0:

rawLeft = 0 - rawLeft

rawRight = 0 - rawRight

# minJoystick, maxJoystick, minSpeed, maxSpeed

# Map the values onto the defined rang

rightOut = map(rawRight, minJoystick, maxJoystick, minSpeed, maxSpeed)

leftOut = map(rawLeft, minJoystick, maxJoystick, minSpeed, maxSpeed)

log.debug(“x={} y={}, rOut={}, lOut={}”.format(x, y, rightOut, leftOut))

return (rightOut, leftOut)

這里只有兩種方法,第一種是從地圖功能的Arduino。它將指定輸入限制(in_min,in_max)內的值(v)轉換為輸出范圍(out_min,out_max)內的相應值。

我為輸入值添加了限制,所以我只接受av,位于in_min和in_max之內。

我擁有的另一個函數(shù)( joystickToDiff )稍微復雜一點,但是其目的是從輸入的操縱桿對轉換值,以達到差動驅動機器人左右電機所需的速度。此輸出已交付,已轉換為指定為參數(shù)的速度范圍。

您可以在我的博客中找到有關此部分的更多詳細信息

步驟7:更多圖片

這里還有Aum2機器人的更多圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器人
    +關注

    關注

    213

    文章

    29748

    瀏覽量

    212941
  • 樹莓派
    +關注

    關注

    121

    文章

    2009

    瀏覽量

    107483
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    肇觀電子推出W系列水下機器人視覺模組

    在此背景下,肇觀電子推出全球首創(chuàng)W系列水下機器人視覺模組,以光學視覺革命突破水下感知瓶頸!
    的頭像 發(fā)表于 06-17 14:58 ?444次閱讀
    肇觀電子推出<b class='flag-5'>W</b>系列水下<b class='flag-5'>機器人</b>視覺模組

    盤點#機器人開發(fā)平臺

    地瓜機器人RDK X5開發(fā)套件地瓜機器人RDK X5開發(fā)套件產品介紹 旭日5芯片10TOPs算力-電子發(fā)燒友網(wǎng)機器人開發(fā)套件 Kria KR260機器人開發(fā)套件 Kria KR260-
    發(fā)表于 05-13 15:02

    詳細介紹機場智能指路機器人的工作原理

    機場智能指路機器人主要依靠感知系統(tǒng)、定位系統(tǒng)、導航系統(tǒng)、智能交互系統(tǒng)和運動系統(tǒng)協(xié)同工作,來實現(xiàn)為旅客準確指路和提供服務的功能,以下是其詳細工作原理: 感知系統(tǒng) 傳感器類型 :機器人配備了多種傳感器
    發(fā)表于 05-10 18:26

    【「# ROS 2智能機器人開發(fā)實踐」閱讀體驗】機器人入門的引路書

    ROS的全稱:Robot Operating System 機器人操作系統(tǒng) ROS的 目的 :ROS支持通用庫,是通信總線,協(xié)調多個傳感器 為了解決機器人里各廠商模塊不通用的問題,讓機器人快速開發(fā)
    發(fā)表于 04-30 01:05

    【「# ROS 2智能機器人開發(fā)實踐」閱讀體驗】+內容初識

    《ROS 2智能機器人開發(fā)實踐》內容閱讀初體驗 《ROS 2 智能機器人開發(fā)實踐》是一本針對 ROS 2(Robot Operating System 2)這一先進機器人開發(fā)框架的實用指南。隨著
    發(fā)表于 04-27 11:24

    你聽說過嘛?用樹莓派機器人遠程逗貓...

    簡單的RaspberryPi網(wǎng)絡控制的視頻直播機器人!硬件清單硬件模塊RaspberryPiZero無線×1RaspberryPi攝像頭模塊×14AA電池盒×1USB電池(4.000mAh
    的頭像 發(fā)表于 04-20 09:07 ?208次閱讀
    你聽說過嘛?用樹莓派<b class='flag-5'>機器人</b>遠程逗貓...

    海康機器人布局關節(jié)機器人業(yè)務

    關節(jié)機器人領域迎來一位實力選手。繼布局移動機器人、機器視覺業(yè)務后,???b class='flag-5'>機器人正在拓展新的產品線。
    的頭像 發(fā)表于 03-20 10:47 ?729次閱讀

    名單公布!【書籍評測活動NO.58】ROS 2智能機器人開發(fā)實踐

    資格! 從 PC 到智能手機,下一個更大的計算平臺是什么? 最佳答案可能是 機器人 ! 如果設想成真,則需要有人為機器人“造腦”,即打造適配的計算平臺及操作系統(tǒng)。 就像以計算機為平臺的計算機時代,和以
    發(fā)表于 03-03 14:18

    【「具身智能機器人系統(tǒng)」閱讀體驗】2.具身智能機器人的基礎模塊

    具身智能機器人的基礎模塊,這個是本書的第二部分內容,主要分為四個部分:機器人計算系統(tǒng),自主機器人的感知系統(tǒng),自主機器人的定位系統(tǒng),自主機器人
    發(fā)表于 01-04 19:22

    【「具身智能機器人系統(tǒng)」閱讀體驗】2.具身智能機器人大模型

    近年來,人工智能領域的大模型技術在多個方向上取得了突破性的進展,特別是在機器人控制領域展現(xiàn)出了巨大的潛力。在“具身智能機器人大模型”部分,作者研究并探討了大模型如何提升機器人的能力,大模型存在
    發(fā)表于 12-29 23:04

    【「具身智能機器人系統(tǒng)」閱讀體驗】1.初步理解具身智能

    感謝 感謝電子發(fā)燒友網(wǎng)社區(qū)給予《具身智能機器人系統(tǒng)》試讀機會。在這知識的盛宴中,我感受到社區(qū)的關懷與支持。定不負期望,認真研讀,分享所學,回饋社區(qū)。 一、本書大綱 《具身智能機器人系統(tǒng)》是一本
    發(fā)表于 12-28 21:12

    【「具身智能機器人系統(tǒng)」閱讀體驗】+初品的體驗

    《具身智能機器人系統(tǒng)》 一書由甘一鳴、俞波、萬梓燊、劉少山老師共同編寫,其封面如圖1所示。 本書共由5部分組成,其結構和內容如圖2所示。 該書可作為高校和科研機構的教材,為學生和研究人員提供系統(tǒng)
    發(fā)表于 12-20 19:17

    鴻蒙機器人與鴻蒙開發(fā)板聯(lián)動演示

    鴻蒙機器人與鴻蒙開發(fā)板聯(lián)動演示,機器人的角色為迎賓機器人,開發(fā)板負責人賓客出現(xiàn)監(jiān)聽
    發(fā)表于 12-02 14:55

    開源項目!用ESP32做一個可愛的無用機器人

    簡介 作者在完成碩士論文答辯后,利用空閑時間制作了一個他一直想做的機器人——可愛無用機器人。 無用機器人原理是一個連接到開關的電機,通過邏輯門控制。當開關被推到“開”時,
    發(fā)表于 09-03 09:34

    開源項目!用ESP32做一個可愛的無用機器人

    簡介 作者在完成碩士論文答辯后,利用空閑時間制作了一個他一直想做的機器人——可愛無用機器人。 無用機器人原理是一個連接到開關的電機,通過邏輯門控制。當開關被推到“開”時,
    發(fā)表于 08-30 14:50