2019年3月31日 星期日

BubbleRob tutorial中文操作手冊

BubbleRob tutorial中文操作手冊

1.建立BubbleRob本體
新增一個SphereX-size0.2(單位為m)
object common properties下的object special properties(特殊屬性參數)將Collidable(可碰撞)、Measurable(可測量)、Renderable(可渲染)、Detectable(可檢測)都打勾,將本體位置設定在Z軸(Along Z)0.02(必須確認本體是依照world去移動)
接著在選單雙擊Sphere將物件名稱改為BubbleRob就完成本體設定。


2.建立Proxmity sensor(接近傳感器)
在選單中建立一個Proximity sensor且選為Cone type(錐形)
將sensor利用旋轉功能在Around Y及Z輸入90
位置為X-coord輸入0.1Z-coord輸入0.12


接著設定sensor感應範圍,在選單點擊感測器符號開啟它的設定框,點擊show volume 
parameter(體積參數)開啟選單設定Offset=0.005Angle=30Range=0.15

點擊Show detection parameters(檢測參數),將"Don't allow detections if distance smaller than"選項取消打勾。
將感測器名稱設定為bubbleRob_sensingNose,就完成感測器設定了。
Scene hireachy(場景等級)將完成設定的sensor放在bubbleRob下
最後將兩項物件Edit->"Make last selected object parent"連結成一個物件。

3.建立bubbleRob的輪子
建立一個cylinder尺寸為(0.08,0.08,0.02),跟本體一樣將object common properties內的特殊屬性都打開,設定位置(0.05,0.1,0.04)和旋轉(-90,0,0),此物件命名為bubbleRob_leftWheel,然後將完成的物件複製一份且將位置參數Y設定為-0.1,此物件命名為bubbleRob_RightWheel
設定joint(motor)
Add->joint->Revolute(迴轉)建立一個軸,建立完成按住ctrl選擇剛剛的bubbleRob_leftWheel然後在postion(位置)及 orientation(方向)內選擇apply to selection來複製輪子的參數,這樣軸的位置就會跟左邊輪子一樣了。
點擊開啟軸參數的設定框,將 Show dynamic parameters(動態參數)內的enable the motor以及底下的Lock motor when target velocity is zero都打勾,完成左邊輪軸設定後,用同樣方式製作右輪軸。
最後將輪子層級放置在輪軸底下,輪軸層級則置於本體下


4.建立slider(滑塊)
開始模擬後發現機器人會向後翻轉,因為少了第三個接地點
建立一個圓形物件(設定0.05),一樣打開所有特殊屬性,將此物件命名為 bubbleRob_slider,在shape dynamics properties裡將物件設定為無摩擦
摩擦力相關的係數都調成0

接著建立Force sensor(力感測器)命名為bubbleRob_connection,將它往上提0.05
,再跟剛剛的滑塊接合成一個物件,這個物件的位置設定X=(-0.07),此物件的層級則放在bubbleRob底下,這樣就完成第三個接地點了,但是執行模擬後會發現滑塊會微微震動,那是因為滑塊跟本體互相碰撞了,為了避免這種狀況,開啟滑塊及本體的shape dynamics propertieslocal respondable mask分別設定為00001111及
11110000這樣兩個物件就不會互相碰撞了。
滑塊設定

本體設定


5.增加穩定性(stability)及目標速度(Target velocity)測試
點擊dynamic對話框內的M=M*2選項三次將輪子以及第三個支點的重量變成8倍,接著在軸的dynamic對話框將Target velocity設至50後開始演算,會發現bubbleRob會穩定的直線前進最後掉出平台,然後再將速度重置為0,測試就完成了。


6.collection object(物品集)及Calculation module properties(計算模組)
在collection對話框內用Add new collection,新增的集合是空的,將列表上的bubbleRob選擇後點選Add加進collection,命名為 bubbleRob_collection ,這樣bubbleRob底下的零件都包含集合裡。
在選單點選Calculation moduledistance(距離)下Add new distance object,選擇剛剛新增的bubbleRob_collectionall other measurable objects in the scene
命名為bubbleRob_distance,這個設定在之後會測量本體以及其他可碰撞物件之間的最小距離。


7.Graph(圖表)設定
新增一個Graph命名為bubbleRob_graph在列表上放置於bubbleRob底下將graph位置設定在(0,0,0.005)開啟graph properties,將Display XYZ-planes選項取消打勾,接著Add new data stream to record,視窗上方(Data stream type)選擇Object: absolute x-position下方(Object / item to record)選擇bubbleRob_graph,在Data stream recording list會出現剛剛新增的設定,Y軸跟Z軸也用同樣方式做設定。
為了能夠測量機器人跟環境之間的最小距離再新增一個設定上面選擇Distance:segment length下方選擇bubbleRob_distance

將XYZ軸及距離設定分別命名為bubbleRob_xpos、bubbleRob_ypos、bubbleRob_zpos、 bubbleRob_obstacle_dist。

選擇bubbleRob_xpos在底下的Time graph properties將Visible取消掉,其他兩軸也用相同方式操作。
接著在Edit 3D curves點選 Add new curve設定如圖

Curve width(線寬)設定為4,然後改成Relative to world,完成後測試就會發現機器人的路徑會以線顯示在螢幕上。


8.建立cylinder
增加數個(0.1,0.1,0.2)的cylinder包圍bubbleRob,將cylinder的特殊屬性參數全部打開,移動cylinder途中按著shift可以進行更細微的移動,按住ctrl則可以讓物件可以在正交方向移動。

9.model設定
選擇bubbleRob後在object common properties內將Object is model baseObject/model can transfer or accept DNA都打勾,這樣bubbleRob邊界框就包含底下所有的物件在內了。

接著將兩個joint、sensor跟graph都選起來然後將參數設定ignored by model bounding box,讓模型的邊界框略過sensor跟joint然後將joint跟sensor的camera visibility layer 2取消打勾改為打勾
10,這樣在畫面上就不會看見軸跟sensor範圍了,最後將感測器、兩個輪子、支點、圖表的Select base of model instead都打勾,這項設定讓我們只能一次移動整個機器人而不是單個零件,能避免定位好的零件被移動。

(vrep版本3.6.1沒有Don't show as inside model selection按鈕)

10.感測器(vision sensor)
增加一個新的感測器,位置、角度跟BubbleRob's proximity sensor同樣,在畫面上點選增加Perspective type的sensor,然後放到proximity sensor底下,新的sensor設定如下

接著點擊Show filter dialog開啟filter對話框,選擇Edge detection on work image然後按Add,新增的過濾組件要上移至第二層,移動完後點擊兩下剛剛設定的組件將Threshold(閾值)設定為0.2,設定到這邊基本上就完成了。

完成sensor設定後新增一個floating view然後在它上面右鍵選擇(view->Associate view with selected vision sensor)將視窗綁定到剛剛設定完的sensor上(操作中間要確保sensor是被選擇的狀況),接著試著開始模擬,視窗上能夠看見目標就成功了。


11.程式:位於工具列的script功能可以編輯code

最後的步驟要將code放進完成的模型內,選擇bubbleRob點選(Add->Associated child script --> Non threaded)

新增一個non-threaded child script,接著點選bubbleRob旁邊的圖示(如附圖)就能打開script,將code複製在原本的code後面關掉視窗就完成了。

需注意code內部
 
leftMotor=sim.getObjectHandle("bubbleRob_leftMotor") -- Handle of the left motor
rightMotor=sim.getObjectHandle("bubbleRob_rightMotor") -- Handle of the right motor
noseSensor=sim.getObjectHandle("bubbleRob_sensingNose") -- Handle of the proximity sensor
紅框內的名稱,如果大小寫或是名稱不同程式就沒辦法成功執行。

成功的bubbleRob在模擬時會自動避開路徑上的物件,並且畫面會有能調節速度的面板。

隨機分組介面成品

完成啦- 69MB左右
完全沒想到轉成exe檔會大成這樣...
不過上星期到這次改版差了很多,不但整合了項目一與二 , 還修改了save as 按鈕(可用) , 還轉成了exe檔...很難想像因為一個enter換行導致一串的bug , 不過還是成功修改好了。
改版Save as 按鈕成可用code , 並可直接存成.txt檔案

之後利用pyinstaller(官方下載說明頁面)測試看看能否轉py成exe檔案 , 但是明顯的出了幾個bug
(1) cffi 過舊或是未安裝 --->需更新檔案---->pip cffi 就可以了     ( 沒記錯的話
(2)接下來是下方這個 , 黑窗表示 : 語法錯誤

上網查後發現是下方這個.py檔的198行的空白行的問題...

刪除開白行即可

之後就可正常用行囉 , pyinstaller會生成很多檔案而主要的exe檔在dist資料夾中

之後到要轉檔的目錄位置打
pyinstaller -F -w -i 圖.ico 主程式.py -p 其餘程式 -p 其餘程式  -p 其餘程式  -p 其餘程式 
以下為pyinstaller常用參數介紹
  1. pyinstaller -h 來查看參數
  2. -F : 打包成一個exe文件
  3. –i 圖.ico : 更改ico圖示
  4. -w : 使用視窗,無控制台
  5. -c : 使用控制台,無視窗
  6. -D : 創建一個目錄,包含exe以及其他一些依賴性文件


完成品~

2019年3月24日 星期日

ungit使用手冊

1.下載 ungit 與 node.js 程式碼

首先下載 kmol_2019.7z, 接著再下載 nodejs_with_ungit.7z, 兩者分別解開壓縮檔案, 然後將 nodejs 放入 kmol_2019 的 data 目錄中.
2.設定命令列搜尋路徑
接下來設定啟動 start.bat 中的 ungit 命列列搜尋路徑:
新增set path8=%Disk%:\nodejs;%Disk%:\nodejs\appdata\roaming\npm;(抓取nodejs主程式路徑)
path=%path%;%path1%;%path2%;%path3%;%path4%;%path5%;%path6%;%path7%;%Disk%:\p37\site-packages\scipy\extra_dll;%Disk%:\scite\bin;%path8%;
3.設定 USERPROFILE 環境變數
讓 node.js 能夠使用 y:\home 作為使用者目錄, 在 start.bat 中加入

set USERPROFILE=%Disk%:\home
4.以 SciTE 編輯器存入 Y:\kungit.bat 批次檔案中
為了對應 "C:\Program Files (x86)", 針對目前所在的倉儲目錄, 以 Google Chrome 瀏覽器開啟 ungit 的網際倉儲連結.
新增批次檔
ungit --launchBrowser=0 --launchCommand "C:\PROGRA~2\Google\Chrome\Application\chrome.exe  %%U"
(指令內的PROGRA~2為Program file(x86)之縮寫,此外PROGRA~1為Program Flies縮寫)
為了跟ungit做一個區別批次檔名稱改成kungit並存在y:/底下
5.開啟start.bat,輸入kungit後,會在瀏覽器中開啟ungit頁面
6.利用ungit進行協同作業比原本使用cmd來的快速也較容易能判斷版本之間的改動
Title :可以輸入中文標題
Body :可以增加內容 讓其他協同組員知道這個版本增加什麼
Commit按鈕 : 可以不使用cmd指令就直接commit以節省時間
Push按鍵 : commit完成之後只要按版本旁邊的push就能將版本推到遠端
每項commit在紅框內的視窗都有檔案的詳細資訊
總結 : 這真的很方便,唯二碰到的問題都是start的路徑沒有設定好

隨機分組介面半成品

算是半成品的GUI介面

說是半成品理由是 太多的理想面想法但能力不足...我要把自己淘汰掉了。

原本來想設計有存檔 、分行、直接編輯等功能 , 但真的沒那個能力可能要問問學長他們 , 之後還想轉成.exe檔 , 但現階段光下載 pyinstaller就一堆error啦...而且也要換成pyside2了可能就先放著去研究其他東西吧。

還想用個GUI介面 , 是關於start.bat的 , 點擊後只跳出黑白窗各一個&一個點擊介面可以直接叫各程式的介面然後還能自己添加程式的功能 ( ( ( 科技進步出於人類的慾望--懶惰。

-----------------------------------------------------------

利用大一學過的eric6設計生成的介面code


這段code位於Ui_task.py下方 , 主要是為了與下方程式task.py作聯結的code


按鈕主要的code設計 , 部分作小修改
PBsave鈕目前只有裝飾功能 , 尚未編譯


這是執行後面介面樣子


執行.txt檔後分出的組別排序 , 意想不到的是竟然可以讀取中文檔名的文件

w1~w8課程心得

week-1




week-5

week-6

week-7

week-8

這幾周的課程心得 , 有什麼想法或意見的話 , 可以提出來

2019年3月3日 星期日

手足球準最終版本

完成手足球程式編譯,剩下場地修改,由於組員軌道製作時間過長所以先用程式寫回球。 當中有很多版本,從{多桿件設定與測試} →{多桿件回位設定與測試}→{導入電腦對打&第二桿件電腦判斷添加}→{加入電腦對打&第二及三桿件電腦對打code}→{第四桿件電腦回擊設定}→...