利用Robocon2018 比賽地圖 + OpenCv + matplotlib擬合貝塞爾曲線,并且生成路徑坐標點

本文內(nèi)容:

  • 貝塞爾曲線簡介
  • 代碼算法講解
  • 總結(jié)

貝塞爾曲線簡介:

原理:

Github上一位大佬已經(jīng)總結(jié)得很詳細了, 還有動態(tài)圖的哦,,我這里就直接引用啦Github

計算公式:

此處引用簡書一位大佬的總結(jié):@L_Xian;
該大佬不僅解釋了貝塞爾曲線的原理郭膛,還詳細的推導了貝塞爾曲線各階公式之間的聯(lián)系。

意義:

此處只說一下對于全向機器人運動的意義:
由于貝塞爾曲線是一條光滑的曲線,即高階可導征绸。若機器人的運動軌跡可以擬合在這條曲線上,運動轉(zhuǎn)彎將更加順滑,這就催生了我寫這個小程序的想法管怠。利用 Python強大的科學計算淆衷,圖像處理,繪圖能力渤弛。將一個標準的場地地圖導入祝拯,二值化之后,使用在地圖上點擊的起點與終點已經(jīng)2個控制點她肯,繪制出3階貝塞爾曲線佳头,再經(jīng)過坐標轉(zhuǎn)換,生成適合場地的機器人運動軌跡坐標晴氨。

代碼算法講解:

獲取鼠標點擊的點:

class Get_Point_:
    # 使用OpenCv對圖像進行初步的處理

    # 使用 plt獲取鼠標點擊的坐標
    def Get_Pos(src_img):
        plt.imshow(src_img, cmap=plt.get_cmap("gray"))
        pos = plt.ginput(4)
        return pos

    def Get_Point():
        return Points_List_

    def Get_Image():
        src_img = cv.imread('./img/changdi2.png')
        src_Gray_Image = cv.cvtColor(src_img, cv.COLOR_BGR2GRAY)
        ret, dst_Image = cv.threshold(src_Gray_Image, 98, 255, cv.THRESH_BINARY)
        return dst_Image
  • Get_Pos(src_img):

使用plt顯示圖像康嘉,并且利用.ginput(n)獲取n個鼠標點擊的點的坐標,這樣子的好處是籽前,matplotlib可以很容易的放大縮小圖像亭珍,且坐標軸方向相對使用OpenCv與實際更為接近。

  • Get_Image():

使用OpenCV將圖像灰度化然后二值化,便于觀察繪制的曲線枝哄。

坐標點的解算:

這里直接使用的3階貝塞爾曲線的方程,解算出各個坐標點

    # 解算Bezier方程的系數(shù)
    def Build_Bezier(Point_0, Point_1, Point_2, Point_3, t):
        A_0 = (1 - t) ** 3
        A_1 = ((1 - t) ** 2) * 3 * t
        A_2 = (t ** 2) * (1 - t) * 3
        A_3 = t ** 3

        x = Point_0[0] * A_0 + Point_1[0] * A_1 + Point_2[0] * A_2 + Point_3[0] * A_3
        y = Point_0[1] * A_0 + Point_1[1] * A_1 + Point_2[1] * A_2 + Point_3[1] * A_3
        return [int(x), int(y)]  # 坐標轉(zhuǎn)換

return [int(x), int(y)]可以根據(jù)自己的需要對x块蚌, y進行轉(zhuǎn)換之后再返回。

繪制圖像

此處我繪制了未擬合的坐標點(紅色)膘格,已經(jīng)我們擬合出的路徑(綠色)峭范。
可見上面的演示

增加的功能:

既然已經(jīng)生成了理想的運動軌跡,大可再繪制實際的運動軌跡瘪贱,只需要利用無線串口之類的模塊將機器人的運動軌跡實時傳回電腦纱控,然后在場地上繪制出軌跡。如演示圖中左上角的綠色的菜秦,不太和諧的綠色曲線甜害,,emm球昨,尔店,那個只是我作的一個小實驗,主慰,隨便弄的幾個點嚣州,然后畫在同一張圖中這樣子。共螺。

總結(jié):

其實吧该肴,,這個程序挺簡單的藐不,但是這個至少可以說明匀哄,自己完全可以利用程序?qū)崿F(xiàn)自己的想法了秦效。

GitHub

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市涎嚼,隨后出現(xiàn)的幾起案子阱州,更是在濱河造成了極大的恐慌,老刑警劉巖法梯,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贡耽,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹊汛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門阱冶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刁憋,“玉大人,你說我怎么就攤上這事木蹬≈脸埽” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵镊叁,是天一觀的道長尘颓。 經(jīng)常有香客問我,道長晦譬,這世上最難降的妖魔是什么疤苹? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮敛腌,結(jié)果婚禮上卧土,老公的妹妹穿的比我還像新娘。我一直安慰自己像樊,他們只是感情好尤莺,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著生棍,像睡著了一般颤霎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涂滴,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天友酱,我揣著相機與錄音,去河邊找鬼柔纵。 笑死粹污,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的首量。 我是一名探鬼主播壮吩,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼进苍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鸭叙?” 一聲冷哼從身側(cè)響起觉啊,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沈贝,沒想到半個月后杠人,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡宋下,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年嗡善,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片学歧。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡罩引,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出枝笨,到底是詐尸還是另有隱情袁铐,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布横浑,位于F島的核電站剔桨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏徙融。R本人自食惡果不足惜洒缀,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望欺冀。 院中可真熱鬧帝洪,春花似錦、人聲如沸脚猾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽龙助。三九已至砰奕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間提鸟,已是汗流浹背军援。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留称勋,地道東北人胸哥。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像赡鲜,于是被迫代替她去往敵國和親空厌。 傳聞我的和親對象是個殘疾皇子庐船,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • 貝塞爾曲線開發(fā)的藝術(shù) 一句話概括貝塞爾曲線:將任意一條曲線轉(zhuǎn)化為精確的數(shù)學公式。 很多繪圖工具中的鋼筆工具嘲更,就是典...
    eclipse_xu閱讀 27,718評論 38 370
  • 談?wù)勜惾麪柷€ 最近在做項目的時候筐钟,需要用到一個動畫,非常簡單的動畫赋朦,簡單到就是直接對一個View做平移… 然而雖...
    雨潤聽潮閱讀 6,004評論 1 16
  • 什么是貝塞爾曲線篓冲,它能夠做什么? 貝塞爾曲線的名稱來源于一位就職于雷諾的法國工程師Pierre Bézier宠哄,他在...
    李晨瑋閱讀 2,749評論 2 19
  • 前言 近段時間我在工作中實現(xiàn)了一個動畫功能壹将,其中涉及到動畫元素要按一定的軌跡在屏幕上移動,運動軌跡的生成我使用了P...
    Alexyz123閱讀 6,571評論 0 11
  • 說來話長毛嫉,這一切都得從PhotoShop中的鋼筆工具開始說起... 聲明:本文不含復(fù)雜數(shù)學公式诽俯,學渣放心閱讀吧??(...
    xietao3閱讀 7,246評論 32 135