如何編寫編譯Robocup3D代碼

来源:https://www.cnblogs.com/shiraka/archive/2019/04/19/10739167.html
-Advertisement-
Play Games

[TOC] 開始編寫球隊代碼 裝好了Robocup 3D比賽平臺後,就要開始著手編寫球隊策略代碼了。 我們使用的是utaustinvilla的Robocup 3D球隊代碼,球隊的體態運動等都已經是別人寫好的,我們暫時不要研究。 在下圖中,behaviors文件夾下的strategy.cc文件,就是我 ...


目錄

開始編寫球隊代碼

裝好了Robocup 3D比賽平臺後,就要開始著手編寫球隊策略代碼了。

我們使用的是utaustinvilla的Robocup 3D球隊代碼,球隊的體態運動等都已經是別人寫好的,我們暫時不要研究。

在下圖中,behaviors文件夾下的strategy.cc文件,就是我們需要編寫策略代碼的部分。

void NaoBehavior::beam()

球隊上場階段的函數,這一部分代碼來確定球隊如何上場,最開始的上場的站位在這裡編寫。通過if語句判斷球員編號,根據球員編號返回(x坐標,y坐標,面向角度)。

這裡正好提一下,球場是一個30*20的綠茵場,以中心為坐標原點。滿足x∈[-15,15],y∈[-10,10]。

SkillType NaoBehavior::PlayOnSkill()

球隊上場後,按下K鍵開球。之後球隊就會開始執行這一段函數,這一部分函數是我們目前主要要編寫部分。你們目前看到的這部一部分函數是學長上次比賽寫的,其中部分代碼有英文註釋。之後我會另寫一篇blog,對這一部分代碼詳細註釋。

其他階段函數

比賽的正常流程下有許多比賽狀態,大概流程如下:

比賽狀態 函數
上場 beam()
開球 MyKickOff()OppKickOff()
通常 PlayOnSkill()
罰球 KickIn、CornerKick、GaolKick、FreeKick

所有策略函數註釋如下

/*  正常比賽  */
void beam();                //球隊上場
SkillType MyKickOff();      //我方開球
SkillType OppKickOff();     //對方開球
SkillType PlayOnSkill();    //常規策略
/*  罰球函數  */
SkillType MyKickIn();       //我方界外球
SkillType OppKickIn();      //對方界外球
SkillType MyCornerKick();   //我方角球
SkillType OppCornerKick();  //對方角球
SkillType MyGaolKick();     //我方球門球
SkillType OppGaolKick();    //對方球門球
SkillType MyFreeKick();     //我方自由球
SkillType OppFreeKick();    //對方自由球

註意在下圖的代碼中有一段selectSkill()函數,是這段函數將比賽階段與對應的策略函數對應。例如,worldModel->getPlayMode()== PM_PLAY_ON時,返回return PlayOnSkill()函數。

比賽開始,先是階段執行beam(),然後開球極階段執行MyKickOff()或者OppKickOff(),球離開中圈後進入策略階段執行playOnSkill()。當滿足界外球、角球、球門球的情況下,執行相應函數。(對這三種情況不瞭解的可自行百度。)

修複make異常

這裡要註意的是,我們從學長那裡拿到代碼是不能直接make的。

我們打開終端,cd到球隊代碼目錄下(utaustinvilla3d-master),輸入make指令進行編譯。第一次你可能會看到如下報錯結果:

因為這是從學長電腦拷貝給你們的,你們這個文件的目錄和學長文件目錄可能不一樣。就算同樣是放在桌面,如果是中文系統就是/home/用戶名/桌面,英文就是/home/用戶名/Desktop,而且我們用戶名肯定也不一樣。所以目錄基本上是一定不一樣。

那就必須改目錄!

CMakeFiles下麵有很多文件里都存儲有項目的目錄,為了能運行,都要修改。主要是要修改CMakeFiles/newforces.dir/下麵的文件,然後退回到CMakeFile一級,還有一兩個文件需要修改。

修改時利用sublime編輯器,上面的find-Replace進行全部替換。

這張圖中,我將所有的 桌面 一鍵替換成了 Desktop。那麼你的用戶名也和我不一樣,那你們就應該是 Shiraka/桌面替換成你的用戶名/Desktop。確保替換後,和你的目錄一致就行了。

最後成功運行如下圖:

如果不一樣,依舊報錯,說明還是有地方沒改。再仔細檢查一下CMakeFile下有沒有漏網之魚。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 控制台編程中,使用了滑鼠操作,遇到了控制台無法接收到滑鼠消息的問題,可嘗試一下辦法解決 【win10系統】 在控制台標題欄右鍵-預設值-選項,將一下對勾取消 然後調用如下函數: HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); SetConsoleMode(h ...
  • 一、網路簡介 網路是由節點和連線構成,表示諸多對象及其相互聯繫。 一個人玩: 兩個人玩: 多個人玩: 說明 網路就是一種輔助雙方或者多方能夠連接在一起的工具 如果沒有網路可想單機的世界是多麼的孤單 使用網路的目的 就是為了聯通多方然後進行通信用的,即把數據從一方傳遞給另外一方 前面的學習編寫的程式都 ...
  • Django 模板 === [toc] 模板按照我的理解,就是讓html中內容不固定,讓html內容已後端的方式動態起來(雖然前端mvvm框架也也開始有模板概念,所以廣義說模板概念不限於後端)。但是html基礎的內容還是是固定的。模板通過類編程的模板語法,可以將html模板中的動態內容,通過後端程式 ...
  • 原創不易,如需轉載,請註明出處 "https://www.cnblogs.com/baixianlong/p/10739579.html" ,希望大家多多支持!!! 一、線程基礎 1、線程與進程 線程是指進程中的一個執行流程,一個進程中可以運行多個線程。 進程是指一個記憶體中運行的應用程式,每個進程都 ...
  • 項目文件 01_QtTest.pro 頭文件 mywidget.h 源文件 main.cpp mywidget.cpp 結果顯示 ...
  • 這是最後一條NLP了......來吧 十二,動機和情緒總不會錯,只是行為沒有效果而已 動機在潛意識裡,總是正面的。潛意識從來不會傷害自己,只會誤會的以為某行為可以滿足該動機,而又不知道有其他做法的可能。 情緒總是給我們一份推動力,情緒使我們在該事情之中有所學習,學到了,情緒便會消失。 我們可以接受一 ...
  • 一.Spring概述 Spring是一個JavaEE輕量級的一站式 Java EE的開發框架。 1. Spring是一個一站式的企業級(JavaEE)開發框架,意味著,僅僅使用一個Spring框架就可以滿足JavaEE開發的表示層,服務層,持久層的開發。 2. Spring強調的理念是,輕量級。意味 ...
  • 一、spring簡介 Spring是一個JavaEE輕量級的一站式的開發框架(spring的可插拔特性,企業用於整合其他框架)輕量級:使用最少的代碼啟動程式,根據所需選擇功能選擇模塊使用一站式:提供了表示層,服務層,持久層的所有支持(功能齊全) 二、spring框架的優點 優秀的架構標準: 1.可維 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...