女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

怎樣對FRC機器人進行編程

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

掃碼添加小助手

加入工程師交流群

步驟1:安裝和設置

怎樣對FRC機器人進行編程

首先,您需要在選擇的計算機上安裝Eclipse。 Eclipse是Oracle流行的IDE。要安裝此程序,請轉到https://www.eclipse.org/downloads/,并找到標有C/C ++開發人員的Eclipse IDE的下載。在完成安裝過程之后,您接下來必須安裝FRC roboRIO工具鏈,可以通過轉到http://first.wpi.edu/FRC/roborio/toolchains/并選擇操作系統的鏈接來下載該工具鏈。安裝工具鏈后,您不會注意到安裝了任何新應用程序?,F在打開Eclipse。您將遇到一個彈出窗口,詢問您要使用哪個工作空間。我建議您在文檔中創建一個名為“ FRCWorkspace”的文件夾。這將是所有源文件以及各種其他文件(例如輸出文件和配置文件)的位置。

如果您想查看或使用FIRST提供的示例程序,請依次選擇“文件”》“新建”》“示例”。 。.》 VxWorks可下載內核模塊示例項目。然后,應該為您提供已為您編寫的項目列表。單擊其中一個選項將顯示有關其內容的更多信息。即使您希望從頭開始編寫所有程序,也應該使用以下示例之一啟動項目,因為它們設置了所有包含,構建配置,標志等。對于本教程而言,選擇IterativeTemplate。首先,您需要稍微整理一下項目。在項目瀏覽器中,右鍵單擊sample.txt并選擇Delete,然后按OK。然后右鍵單擊IterativeTemplate并選擇重命名。將項目名稱更改為所需的任何名稱。避免使用連字符或下劃線以外的空格或特殊字符。我建議您做類似“ TeamName2014”的事情。確定名稱并在提供的文本字段中鍵入名稱后,請按OK。您的窗口現在看起來有些雜亂,所有邊緣的盒子都占據了空間。隨意將各種標簽拖放到任何地方。通常,您希望中間有很多空間供文件編輯器使用,并且始終可以看到項目瀏覽器。

步驟2:經歷默認代碼

現在讓我們開始有趣的部分,實際的編程!在項目資源管理器中雙擊MyRobot.cpp?,F在在您面前的是一個工作程序,該程序將在遙控操作期間以拱廊模式驅動機器人。讓我們快速遍歷代碼以了解到目前為止發生的事情。

#include “WPILib.h”

此行將所有WPILib函數和類添加到您的代碼中。如果您想對機器人執行任何有用的操作,則將需要這些。除了包含WPILib之外,還將方便地包含string.h和iostream。

class RobotDemo : public IterativeRobot

{

這開始了名為RobotDemo的類。您可以將“ RobotDemo”更改為其他名稱,但是只需確保文件中的“ RobotDemo”的每個實例也都更改為您的新名稱。冒號表示IterativeRobot是RobotDemo的父類,而RobotDemo繼承了IterativeRobot的所有方法。

RobotDrive myRobot;

Joystick stick;

這定義了兩個私有變量:myRobot和stick。 myRobot包含驅動機器人的所有功能,stick變量顯然具有從操縱桿讀取輸入的功能。

myRobot.setExpiration(0.1);

這為RobotDrive類中的電動機設置了以秒為單位的到期時間。 。如果電動機的看門狗在這段時間內沒有送電,則將假定您的機器人程序已凍結,并且將自動停止電動機。 0.1秒應該是足夠的時間,但是如果您正在運行視覺處理或其他一些CPU密集型任務,并且在原本不應該的狀態下停止電動機,請嘗試增加失效時間。

this-》SetPeriod(0);

以秒為單位設置兩次調用定期函數之間的時間。如果設置為零,它將與駕駛員站控制數據同步(最終大約每0.02秒調用一次該函數)。如果未調用此函數,則默認值為0.0,因此此行是無用的。

RobotDemo : myRobot(1,2), stick(1)

這是一個初始化列表。正如評論所建議的,它們必須按照您聲明它們的順序進行初始化。 myRobot的參數是:機器人左馬達的端口號,然后是機器人右馬達的端口號。這假定您將Jaguars用作電動機控制器。操縱桿的參數是操縱桿編號。您可以轉到來查看這是什么? “ DriverStation”的“選項卡”選項卡,然后查看操縱桿在列表中的位置。默認游戲桿號為1。

void RobotDemo::RobotInit() {}

此功能由WPILib在機器人開啟時調用,該函數僅被調用一次,這使它成為初始化變量和分配變量的可靠場所。動態內存。

void RobotDemo::AutonomousInit() {}

void RobotDemo::TeleopInit() {}

void RobotDemo::TestInit() {}

每當更改機器人的模式時,WPILib會自動調用這些函數,無論是通過驅動程序站還是FMS(現場消息系統),其初始函數名為稱為新模式。通常,所有自治代碼都是用AutonomousInit函數編寫的。

void RobotDemo::DisabledInit() {}

DisabledInit不遵循其他模式初始化函數的規則。只有在第一次禁用機器人時才調用DisabledInit。這很可能是因為機器人在實際游戲中只會被禁用一次。

void RobotDemo::DisabledPeriodic() {}

void RobotDemo::AutonomousPeriodic{}

void RobotDemo::TeleopPeriodic() {}

void RobotDemo::TestPeriodic() {}

在適當的模式下,每秒將調用這些功能約50次(除非您調用此功能- 》 SetPeriod()的參數不是0.02或0,在這種情況下,周期函數將每秒被調用(1/period)次。

有關init和周期函數的重要說明:周期除非初始化功能完成,否則模式下的功能將無法運行。例如,如果您有這樣的事情:

void RobotDemo::AutomousInit() {

while(true) {

cout 《《 “I like dogs” 《《 endl;

}

}

void RobotDemo::AutonomousPeriodic() {

cout 《《 “But cats are better” 《《 endl;

}

您的機器人將不斷輸出它喜歡狗的東西,即使長時間處于自主模式,它也不會輸出以下事實:貓更好。初始化函數中的長時間運行代碼可能并不明顯,但這始終是在對機器人進行編程時需要注意的重要問題。

};

此括號關閉了RobotDemo類。一堂課的結束是在括號后需要分號的少數情況之一。

START_ROBOT_CLASS(RobotDemo);

這應該始終是MyRobot.cpp文件中的最后一行代碼。它是一個在RobotBase.h中定義的宏,它告訴WPILib的其余部分,RobotDemo類是應用于調用init函數,周期函數等的類。如果沒有此行,您可能會得到No將其部署到cRIO時出現機器人代碼錯誤。

步驟3:添加新功能

對于某些團隊來說,此代碼可能就是他們所需要的。但是,您更經常需要自定義代碼以滿足機器人的需求。由于我不確切知道您的機器人需要什么,因此您需要自己弄清一些。我只能提供一些例子,這些例子是我們團隊今年為改進計劃所做的。盡管可以跳過以下不適用于您的團隊的步驟,但我強烈建議您閱讀所有這些步驟,以使您更好地了解WPILib的工作方式以及如何添加這些功能(或類似功能)

第4步:坦克驅動與街機驅動

重要的是,您和您的團隊的驅動團隊知道街機和坦克駕駛之間的區別。街機驅動器使用一個操縱桿來控制機器人。前后移動操縱桿會改變速度,左右移動操縱桿會改變機器人的旋轉。另一方面,坦克駕駛使用兩個操縱桿。它們每個都對應于機器人一側的輪子。向前移動右控制器時,機器人的右輪將向前移動,而機器人將向左轉。許多人(尤其是游戲玩家)發現坦克駕駛非常令人困惑,但我強烈建議您的團隊使用坦克駕駛。坦克驅動器可以讓您更好地控制機器人的運動,并且通過一點點練習,您的驅動器將像使用街機驅動器一樣驅動機器人。

街機驅動器已設置在模板中為您服務。如果要切換到油箱驅動器,則需要聲明兩個Joystick變量而不是一個。我建議您稱它們為rightStick和leftStick之類的名稱,以便您輕松區分它們。然后將它們都放在初始化列表中,將值1傳遞給第一個操縱桿的構造函數,將值2傳遞給第二個操縱桿的構造函數。最后替換行“ myRobot.ArcadeDrive(stick);”使用“ myRobot.TankDrive(leftStick,rightStick);”。塔哈,您的機器人現在在油箱驅動器中驅動!

第5步:完整的氣動系統

氣動對于改善機器人的功能,并且在構建和編程方面都非常容易實現。要了解氣動的建筑方面,請參見Zaphod Beetlebrox的指導,他在出色地解釋了氣動系統的所有組件以及如何將其組合在一起方面做得很好。讓我們開始通過添加壓縮機來對氣動系統進行編程:

Compressor compressor;

compressor(,);

compressor.Start();

第一行與其余變量定義一起出現,第二行與初始值設定項列表一起出現,第三行與您的變量定義一起出現RobotInit功能。壓縮機的構造函數參數是壓力開關和尖峰繼電器插入數字邊柜的端口號。壓力開關應插入數字IO端口之一,而Spike繼電器應插入繼電器端口之一。這是使壓縮機工作所需的全部代碼,它將自動啟動并繼續運行,直到觸發壓力開關為止。使用AndyMarks的標準壓力開關,該壓力應為120 psi,但實際上通常比該壓力要低一些(我們的觸發壓力為110 psi)。

對氣動系統進行編程的下一步是消防螺線管。型號之間的接線和編程不同,但是有兩種主要類型的螺線管,單螺線管和雙螺線管。單個螺線管只有兩根電線。它們默認將壓力引導至一個輸出,并且僅在螺線管通電時將壓力引導至另一輸出。雙螺線管有兩對線,一對線通向設備的每一側。當一側通電時,螺線管會將其輸出切換到該側。關閉電源后,輸出將保留在任何位置。如果兩個都同時打開,則輸出也將保持不變。如果您使用單個電磁閥,則代碼如下所示:

Solenoid solenoid;

solenoid();

solenoid.Set();

前兩行與示例壓縮機代碼的前兩行位于同一位置。第三行應放置在由按鈕控制的if語句中,或者放置在您的自治代碼中。將“真”值傳遞給“設置”功能會將螺線管的輸出切換為非默認輸出。同樣,當設置為false時,它將使輸出返回其默認位置。如果要使用雙螺線管,只需將螺線管變量的類別更改為DoubleSolenoid而不是電磁閥,然后更改Set功能的參數即可。 Set函數參數不再是布爾值,因為有三個可用選項:僅打開一側,僅打開另一側,然后關閉兩側。要對此進行控制,請使用DoubleSolenoid :: kForward,DoubleSolenoid :: kReverse或DoubleSolenoid :: kOff作為Set函數的參數。

步驟6:操縱桿按鈕

要在操縱桿按鈕正常工作時運行定期代碼,只需將以下代碼插入您的定期模式功能之一:

if(stick.GetRawButton(1)) {

cout 《《 “Button 1 has been pressed” 《《 endl;

}

此代碼將是垃圾郵件僅在按下由stick變量引用的操縱桿上的數字1時,才會出現帶有“已按下按鈕1”的控制臺消息。釋放按鈕后,消息將再次停止。盡管這在某些情況下很有用,但有時您可能只是希望在按下按鈕時只調用一次它。將代碼修改為類似這樣的代碼應該可以達到您想要的結果:

if(stick.GetRawButton(1) != isButtonPressed) {

if(stick.GetRawButton(1)) {

cout 《《 “Button 1 has been pressed” 《《 endl;

isButtonPressed = true;

}

else {

cout 《《 “Button 1 has be released” 《《 endl;

isButtonPressed = false;

}

}

您必須將isButtonPressed定義為具有類范圍的布爾值(與myRobot或stick)。在這種情況下,“按鈕1已被按下”僅在第一次按下時才輸出一次,而“按鈕1已被釋放”則僅在一次按下時輸出一次。

第7步:自定義控制器

您的驅動器團隊可能會找您說,“我們想用它來移動機器人”。在此示例中,我將向您展示將代碼適配到Attack3以外的控制器有多么容易。附帶說明一下,Xbox控制器通常不是驅動機器人的非常好的控制器。不對稱的操縱桿使油箱驅動器直行行駛成為一個挑戰,操縱桿的小尺寸使其控件非常靈巧。首先,下載WPILib的Joystick Explorer實用程序。啟動它并插入游戲桿。確保從下拉菜單中選擇了控制器。移動操縱桿,觀察軸號發生變化。您應該為每個操縱桿記錄一個x軸和y軸(可能還取決于您的特定控制器的z軸)?,F在,您進入代碼并使用這些軸號。刪除當前的myRobot.TankDrive或myRobot.ArcadeDrive函數,并在伸縮定期函數中添加以下代碼。

坦克車:

myRobot.TankDrive(stick.GetRawAxis(), stick.GetRawAxis());

Z軸的坦克車速度:

myRobot.TankDrive(stick.GetRawAxis() * stick.GetRawAxis(), stick.GetRawAxis() * stick.GetRawAxis());

街機驅動器:

myRobot.ArcadeDrive(stick.GetRawAxis(), stick.GetRawAxis());

Z軸街機驅動器用于速度:

myRobot.ArcadeDrive(stick.GetRawAxis() * stick.GetRawAxis(), stick.GetRawAxis());

您當然,將需要使用《》對其進行修改,以匹配您從Joystick Explorer中記錄的軸號。

步驟8:微型開關

它們發出巨大的咔嗒聲,但這并不是唯一的用途!它們可用于檢測自主游戲期間是否將游戲作品加載到您的機器人中或檢測碰撞。也許您有自己的創意用途。無論需要什么,它們都易于接線和編程,因此您應該知道它是如何完成的。這是它們的代碼:

DigitalInput microswitch;

microswitch(1) // This goes in the initialization list

microswitch.Get()

Get函數返回一個無符號的32位整數。如果要從中獲取布爾值以像按鈕一樣進行處理,只需將返回值與零進行比較即可。根據開關的接線,可能必須使用==或!=才能獲得所需的結果。

第9步:最終注釋

其中一些注釋非常有用重要,因此請閱讀它們!

C ++ 11的功能將無法在您的程序中使用,因為Wind River編譯器不支持它。

通常,無法使用cout或printf查看在標準輸出流中放入的任何內容。我強烈建議您使用NetConsole。它需要最少的設置,然后您可以將其與驅動程序站一起運行,它將顯示您輸出的所有內容。它可以是非常有用的工具,有助于診斷出問題所在或為駕駛員提供一些反饋。

如果您需要有關FRC機器人編程的幫助,最好的地方是Chief Delphi。那里總是有經驗和知識淵博的人來幫助您。您也可以對此說明發表評論,我會盡力與您聯系。

確保您的cRIO映像和Wind River工作臺保持最新非常重要。對于cRIO,只需找到FIRST提供的cRIO映像工具的最新副本即可。對于Wind River工作臺,通常在FIRST的“技術資源”頁面上有一個“ C ++更新”。

我還有幾個我想寫的主題,例如編程尖峰繼電器,編碼器arduino通信和視覺處理。我還想詳細介紹將代碼部署到cRIO的細節。因此,請在幾周后再次檢查此說明,以更全面地了解FIRST Robotics的編程。

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

    關注

    213

    文章

    29731

    瀏覽量

    212843
  • 編程
    +關注

    關注

    88

    文章

    3689

    瀏覽量

    95245
  • FRC
    FRC
    +關注

    關注

    1

    文章

    9

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    明遠智睿SSD2351開發板:語音機器人領域的變革力量

    的四核1.4GHz處理器具備強勁的運算性能,能夠高效處理語音機器人運行過程中的復雜任務。語音識別和合成需要大量的計算資源,該處理器可以快速對語音信號進行分析、處理和轉換。在實時語音交互場景中,無論是
    發表于 05-28 11:36

    盤點#機器人開發平臺

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

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

    負責接收旅客的語音指令,以便機器人理解旅客的需求。 環境感知與信息融合 :這些傳感器收集到的信息會進行融合處理。例如,激光雷達提供的距離信息和攝像頭捕捉的視覺信息相結合,能讓機器人更準確地識別周圍環境
    發表于 05-10 18:26

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

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

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

    出有用的信息,如障礙物的位置和形狀。對于攝像頭數據,可以使用 OpenCV 等圖像處理庫進行圖像識別、目標跟蹤等操作,為機器人的導航和決策提供支持。 運動控制:運動控制是機器人開發的核心內容之一。書中
    發表于 04-27 11:24

    KUKA機器人編程說明(英文)

    電子發燒友網站提供《KUKA機器人編程說明(英文).pdf》資料免費下載
    發表于 03-07 14:05 ?0次下載

    使用 Thonny 對 XRP 機器人進行編程

    作者: [Aswin S Babu] 在 SLAM 博客系列[第 1 部分] ,我們討論了什么是 SLAM(同步定位與繪圖)以及機器人如何利用它進行導航。[第 2 部分] 則深入探討了 SLAM
    的頭像 發表于 01-26 17:31 ?552次閱讀
    使用 Thonny 對 XRP <b class='flag-5'>機器人</b><b class='flag-5'>進行</b><b class='flag-5'>編程</b>

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

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

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

    需要專業程序員進行繁瑣的編程工作,這種方式不僅效率低下,還限制了機器人的應用場景。例如,在我們大學工程實訓課程中使用的數控機床,需要人為設定起點、終點、移動方向和移動距離等參數,自動化程度非常有限。而
    發表于 12-29 23:04

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

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

    鴻蒙機器人與鴻蒙開發板聯動演示

    鴻蒙機器人與鴻蒙開發板聯動演示,機器人的角色為迎賓機器人,開發板負責人賓客出現監聽
    發表于 12-02 14:55

    歐姆龍協作機器人TM25S可使用多種方法進行編程

    歐姆龍協作機器人TM25S操作簡便,可使用多種方法進行編程,包括手動引導、流程圖編程以及手動腳本編寫。 ? 先進的手動引導體驗 使用內置手動引導功能可對應用
    的頭像 發表于 11-25 16:36 ?724次閱讀
    歐姆龍協作<b class='flag-5'>機器人</b>TM25S可使用多種方法<b class='flag-5'>進行</b><b class='flag-5'>編程</b>

    工業機器人編程流程及注意事項

    工業機器人在現代制造業中扮演著越來越重要的角色。它們不僅提高了生產效率,還提升了產品質量和一致性。編程是使工業機器人能夠執行特定任務的關鍵步驟。 1. 需求分析 在開始編程之前,首先需
    的頭像 發表于 09-04 09:40 ?2421次閱讀

    工業機器人常用的編程方式

    工業機器人編程是確保機器人能夠執行特定任務的關鍵步驟。編程方式多種多樣,每種方式都有其特定的應用場景和優勢。 工業機器人
    的頭像 發表于 09-04 09:26 ?2482次閱讀

    工業機器人的四種編程(示教編程、離線編程、自增強現實編程編程)剖析!

    當前機器人廣泛應用于焊接、裝配、搬運、噴漆及打磨等領域,任務的復雜程度不斷增加,而用戶對產品的質量、效率的追求越來越高。在這種形式下,機器人編程方式、編程效率和質量顯得越來越重要。降
    的頭像 發表于 08-30 12:14 ?6309次閱讀
    工業<b class='flag-5'>機器人</b>的四種<b class='flag-5'>編程</b>(示教<b class='flag-5'>編程</b>、離線<b class='flag-5'>編程</b>、自增強現實<b class='flag-5'>編程</b>主<b class='flag-5'>編程</b>)剖析!