2011年7月19日 星期二

C/C++ Programming - void *

指標是C/C++的精華所在。今天就來介紹一個特別的指標void *

void * :是定義一個指標,但卻未定義它的資料型態,也就是說
你只知道它指向的記憶體位址,但無法存取它指向的資
料。(因為未定義資料型態,怎麽存取呢....)

至於void * 用途:容易擴展副函式,使程式更加穩定

舉例一下吧!!
首先可以利用emun來定義我們傳入參數的型態。



根據型態,我們可以重新將void *轉型 (用途出現^^)



參考網址:

PS:現在還在研究pthread中.......似乎比想像中的困難....再來!
這個有兩個pthread的參考網址,有興趣者可以一起研究吧!

Penalty Shooting & Obstacle Run

今天思考了一下Penalty shooting和Obstacle比賽項目。
首先來講講Penalty shooting:
基本上,這個想法之前就想實作了,就是指定角度的射門!!
也就是說機器人透過視覺找出最合適的射門點,有可能是大角度,或小角度。
接著機器人就會往那個方向踢球!!同時還需要保持平衡.....

今天測試了DARwIn-OP的踢球動作+旋轉R&L_Hip_Yaw
結果踢球動作非常不穩,也無法達到有角度的射門
目前想到的解法:
(1)重新設計踢球動作
(2)轉動Robot身體的方向,而非R&L_Hip_Yaw
(3)思考中......

Obstacle項目呢?
基本上,參考了http://letsmakerobots.com/node/3816網站的演算法
(感覺上是一個是可以成功)
而實際實作後
首先利用HSV的Color Filter過濾出障礙物和場地(代替Canny演算法)。
接著透過形態學中Erode將可步行範圍縮小(避免機器人撞到障礙物)。
接下來問題來了......
Smooth Hull,是為了將平行線圓弧化,找出頂點。(也就是目標點)
但是目前一直想不到用什麼方式求出最佳的點.....
也想不出如何實作Smooth Hull......
(將圓形與正方形做Convolution呢??.....會是圓弧化的方形嗎??)

影片:


PS: 照片與影片明天在上傳吧.......有點懶了@@

2011年7月17日 星期日

C/C++ Programming - This指標

老實說,我一直搞不懂this這個東西是要如何使用,只知道就是call自己instance的class而已。
但是this這個東西似乎有更好用的功能。

例如:使用this access private members,可以避免與輸入參數搞混。


例如:如果member function回傳this指標 (指向自己),則就可以在呼叫完function後,再次呼叫function。如圖所示,呼叫完add後可以直接呼叫multi。


例如:當然也可以使用 . 運算子去做access,不過member function就要改成回傳Reference了。(不是回傳this指標)


補充一下
第一個方式是回傳this指標,所以要使用->運算子。而第二個方式則是利用Reference(Call by reference),所以是使用 . 運算子。








Linux - 多個檔案中搜尋字串

為了方便在多個檔案中搜尋特定字串,像是在多個.cpp檔中,找某個特定的function
因此可以使用 "grep" & "find" 兩種指令,例如:find .| xargs grep 'string'


2011年7月16日 星期六

Ubuntu install OpenCV2.3

為了測試直線圓弧化,因此就安裝OpenCV2.3來測試了!
  1. 首先安裝OpenCV所需要的Lib和lib-dev
    下載所需lib
    下載所需lib-dev
  2. 接著下載OpenCV2.3的Source Code安裝
    http://sourceforge.net/projects/opencvlibrary
    完成解壓縮,接著就到OpenCV目錄底下,執行cmake ./接著執行make最後執行sudo make install
  3. 設定OpenCV配置文件
    在/etc/ld.so.conf.d底下創建opencv.conf,並輸入/usr/local/lib
  4. 更新動態連結庫輸入sudo ldconfig

  5. 設定環境變數
    改寫/etc/bash.bashrc,在末端加入
    PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
    export PKG_CONFIG_PATH
  6. 最後就來測試一下範例程式
    在OpenCV2.3/samples/c底下,把build_all.sh權限改成使用者可執行權限
    chmod +x build_all.sh
    接著就執行./build_all.sh

    接下來就run一個範例程式./morphology

GoRobot

測試文!!