ROS系列文整理

由於Robot Operating System(ROS)的中文資源還幾乎不存在,決定先撒下一點麵包屑,之後有寫出新的也會依序整理到這上面. 我覺得機器人在能源不出現問題之前,是必然崛起的一個領域.機器人的存在幫助人類變得更好,被解放的生產力能夠聚焦到更為重要的議題上 – 永續發展,公平正義,世界均富等等,而要在機器人產業做出能推動世界進步的成果,我認為ROS是一個很重要的工具. 希望之後有心做ROS的人學習愉快: D ———————————————– 最近同實驗室的同學黃昭霖也開始寫一些他自己的筆記了,對學習ROS有興趣的朋友來說,能有多一些資源總是好的 https://charlyhuangrostutorial.wordpress.com/ ———————————————– ROS tutorials系列 我的tutorial不詳細go through整個tutorial原文,而是就我認為重要之處詳加說明,而且有些東西原文寫得很清楚我不重複寫,換句話說,我仍預期看這些tutorial時要搭配看原文, 會比較完整 此外我重視連貫性,所以一些零碎的細節觀念我也不會寫,如果重要我會補在最後的tips裡 0. 什麼是ROS?要怎麼使用ROS? (玩ROS前必看!我盡量寫得淺顯,不是工程師應該也看得懂XD) 1. 淺談ROS file system 2. 新增ROS package 3. 建立ROS packages 4. 了解ROS Node ———————————————– ROS觀念文 簡介CRAM(Cognitive Robot Abstract Machine) 簡介Knowrob (機器人知識處理的工具) 比較Topic, Service跟Actionlib ROS Navigation stack 簡介 ———————————————– ROS細節實作文 改launch file中的參數值 launch file中的條件用法 安裝household object database… Read More ROS系列文整理

單核心的重要性

剛剛看了Paul Graham的演講影片,令我茅塞頓開啊! 最近啟動了不少的project,但總覺得好像沒什麼大用,就像是一下學煎牛排的步驟、一下學龍蝦的預處理、一下學甜點的擺盤、一下又學沙拉醬的調製,但我就是做不出一道美味的主菜的感覺。 其實很多事物的本質都很簡單,但是在深入的過程中,會發現這些事物變得越來越複雜,然後很容易迷失在細節當中,就偏掉了、脫離了核心事業的發展,而這會讓自己變得很混亂。 核心事業的發展有幾大要素: 1. 深入學習的能力 – 工作時可以有意識地磨練這一點。 2. 實作到頂尖的能力 – 工作時亦可以磨練此點、也要有好的體力去完成艱難的任務。 3. 將事物分析透徹、建立自己完整體系的能力 – 這一點必須不斷反思&向大師學習。

ROS Navigation stack 簡介

Navigation stack是使用ROS的一個重要工具,所以很有必要來介紹一下這個東西是怎麼運作的。 有部分的材料是來自於David Lu製作的投影片,他是Nav stack的開發者,頗強XD http://roscon.ros.org/2014/wp-content/uploads/2014/07/ROSCON2014_DLu.pdf 首先要介紹一下這個stack的使用情境,可以從下面這張圖中簡單地看出: 在一般的使用情況下,我們假設已經用gmapping package建好了環境中的2D地圖,那在啟動navigation時,就可以將建好的地圖(通常是.pgm檔)當成static map餵給Global planner。啟動Navigation所必須用到的程序可以參考我之前寫的launch檔。 當我們已經啟動navigation,接下來就需要給機器人一個goal(這可以透過Rviz來給定)、或是送一個message到move_base_simple/goal這個topic。當送出goal之後,Global planner會先產生一條不會碰到static map(或者說Global map)中障礙物的軌跡,也就是Global Path。但是,若只有這個Global path,機器人就只能在靜態環境中進行navigation,因為只要場景跟static map有不一樣,Global path就可能會撞到障礙物。 要解決這個問題,在這邊的做法就是以Global path當作大致的行進路線,然後在額外加上一個local planner來進行動態的避障。這個local planner就必須時時注意有沒有新的障礙物出現,這也是為什麼local planner需要有sensor data當作input。 在nav stack裡,預設使用的演算法是S.Thrun提出的DWA (Dynamic Window Approach)演算法,這個演算法主要的概念是說,機器人先隨機產生很多個速度選項(即不同的v & ω),然後模擬讓機器人跟隨這些速度走一小段時間,再對每一個速度選項造成的位置評分,評分的依據包括跟goal的距離、跟障礙物的距離等等,然後選出分數最高的速度選項當做此時的local plan,並且會真正變成command被送到/cmd_vel讓機器人實際移動。等到了下一個位置後,再重新隨機產生多個速度選項,直到完成global plan。 如果你有興趣更深入地了解ROS navigation,可以直接去看看stack網頁,或聽聽下面的演講。

從孫運璿傳學到的重要價值

這一篇文章是我讀完天下雜誌出版的孫運璿傳之後,所得的讀後感。在看這一本書的過程中,有許多令人感動而奮起的時刻,對於這麼一位偉大的前人,實在有太多值得學習的地方,必須寫下這篇讀後感,讓自己真正地學習這位偉人所帶給我們的一切,另一方面也讓這些心得可以跟更多的人分享。 在這篇讀後感中,我有兩個嘗試,第一個是用跟我自身經驗融合的體系來解釋他的行為,希望將他之所以成功的幾個重要特質融進我的價值觀中,對於細節仍有興趣的話,可以去看這本傳記來獲得滿足。第二個則是從他做得未臻完善的地方,進一步地思考我們該如何來改進。 Q1:  孫運璿為何成功? 孫院長的成功,有三個重大的面向: 動機與藍圖 他對於人民的痛苦感同身受,對於人民的關懷是真心誠意,這種動機本身就無可質疑。這解釋了為什麼古人出兵總要師出有名? 因為正當性不足,蓋在上面的東西一點也不令人安心。反之,動機純正不為自己的利益,就是一項近乎無敵的特質。 這種特質再配上兼具遠見與可行性的藍圖,實在是非常強悍(我還不敢說無懈可擊)。書中提到,孫運璿腦海中有一幅國家邁向現代化的藍圖,所以在他任內,包含國賠法實施、擴大立委名額、為了提高國民素質辦的公視、空中大學等等,都是不等輿論壓力,就主動提出,讓政府領導著國家前進。他的動機正確,思想又快你幾步,還能夠付諸實現,這種等級的院長怎麼能不成功? 推動的方法(人和&謙卑感恩) 他深信施政有如工程,必須靠團隊合作,個人英雄絕不能成事。而要團隊合作。領導者首先必須謙虛、不搶功。所以在他任內,有許多閣員都比他出鋒頭,而且好幾位閣員都曾回憶孫運璿對他說”你辦事,我放心”,在這種領導者之下,有才幹者自然赴湯蹈火。此外有一點非常重要,一旦開會有爭議,他都會聽所有人把自己的看法說完,完全釐清之後才做決定,這種做法令不服者也願意放下執著一起推動事務。 這種做法跟他的動機是一致的,因為他非常重視”人”,所以從政的動機一直是從人民出發、推動事情也是從推動的人出發,這種mindset使得他獲得上司、部下的幫助,也獲得人民的愛戴。對於我們來說,應該從學習關心他人、並從中獲得成長出發。很多人應該都有幫助別人,結果反而讓自己學懂更多東西的經驗,這種正向的回饋才能促使你去幫助更多人、也在這過程中讓更多的人願意幫助你。 強健的身體 從孫運璿工作的認真程度,就可以看出他的身體一定很好。既要能長時間不斷地進行高難度的決策跟任務,又要保持超高的正確率,這絕對不是一般人可以做到的,如果身體不夠好早就累壞了。這跟之前看某位羅馬執政官西塞羅的故事是相合的,西塞羅的身體原先也不好,但後來掌握運動的方法、並實行不輟(他每天都極早起床、規律運動),終於讓他做到羅馬帝國中地位最高的執政官。你的身體就是Infrastructure,你做的事情都是建立在這之上,Infrastructure才是最重要的。 Q2: 他有哪邊還做得不夠好?我們可以怎麼改進? 在書中的最末已經提到,他的短處就在於對於社會科學,對於文化不夠了解,他回過頭來看覺得社會太過於功利,金錢至上也許是經濟發展太急所造成的一個弊病。這驗證了之前的一個猜想,台灣經濟奇蹟的部分缺失造成了現在的困局…第一,因為之前的經驗太過成功,大家忙於複製成功經驗不思進取;第二,經濟的奇蹟沒有輔以良好的文化教育,造成這社會流行金錢至上的功利主義。講精確一點,經濟奇蹟本身雖是一件非常好的事情,但是其隱含的兩大問題一直存在,而沒有人預做準備。這兩大問題在經濟發達時還不太會浮現,但等到海水一退(例如現在),就發現我們沒有下一個明星產業,也發現原來有些人的價值觀如此的可怕(而且這些人掌握著巨大的權力)。 因為這問題牽涉到人民最基本的價值觀,所以必須從教育著手。教育有兩個大面向,一是家庭教育、二是義務教育。對於價值觀的建立來說,家庭教育其實才是根本。如果接受這件事情,那問題就變成兩個,1.家庭教育要敎什麼? 2.怎麼傳達這件事給全國人民? 對於第一個問題,我切入的思考點在於為什麼我們需要家庭教育? 很直觀地來說,家庭教育是義務教育的準備,也就是說,若擁有好的家庭教育,我們就能良好地學習義務教育帶給我們的一切,包含更進階的知識、人與人的相處(與同儕、與老師)。所以家庭教育的核心就是價值綱架的建立還有學習的方法。價值綱架的建立非常非常重要,因為這個綱架讓你知道什麼是對什麼是錯,而且可以抵抗誘惑,所以同樣遇到壞朋友,有些人會選擇掉下去、有些人不會,你做的選擇都有動機,這件事情是絕對的,選擇掉下去必定是因為價值綱架有較大的漏洞。所以我們或多或少都會往下掉,但掉得深淺取決於這個價值綱架做出的判斷。學習的方法也同等重要,因為我們隨時幾乎都需要學習,擁有好的學習方法才能夠支撐起良好的價值綱架。因為如果只有好的價值綱架卻不會學習,那就只是一個只能說理論、但不能做出具體貢獻養活自己的人;但如果只有好的學習方法卻沒有好的價值綱架,那就很容易變成目中無人自視甚高的功利主義者,這兩者是需要互補的。 若將以上的想法扣回原本的題目,就會發現,良好的價值綱架將能抵擋金錢至上的功利主義、也較能培育出具有遠見,願意厚積薄發的人才,而良好的學習方法則是讓這些人才能夠將自己的目標付諸實現。這樣的人才即使未能完全達到自己目標,他們的存在、他們對於周遭的影響,都絕對會是非常正面且巨大的。所以Google前總裁施密特才說,只要你的格局夠大、你很難真正失敗,這其中非常值得玩味。 順帶一提,儒家思想的價值事實上就在這個問題中被體現出來,我並沒有研究儒家思想,不敢亂說,但至少我覺得其提倡的價值有很大一部分幫助我們回答如何建立價值綱架這個問題。以我淺薄的認識,儒家思想最起碼能讓社會更加和諧,畢竟其中最提倡的一個重點就是「仁」。而且這種和諧並不是笨蛋式的和諧,否則就不會有「君子和而不同、小人同而不和」(我們可以和諧地討論是非,但我可以不同意你的說法,然後我們在和諧中前進)。現在的台灣已經比以前好,因為問題變得清晰易見,大家不願再把時間花在藍綠對抗、而是要花在對抗擁有錯誤價值觀的一群權力者。這才有了轉機,但人民的價值綱架普遍不具有和諧化解衝突的選項,比起忍耐怒氣坐下來共商國事,更多地是彼此互罵。不過我認為衝進立法院這件事是特例,因為當嘗試和諧化解的選項被一些有心人士無視的時候,選擇對的價值、兩害相權取其輕才是好的決定。 至於第二個問題,我現在還沒什麼想法,因為要傳達給人民,最上策是讓人民感覺到自己真的需要這個東西,才會有動力去吸收跟學習,整天政令宣導的意義並不大。所以如果能有一個典範出現,這個典範既具有相當好的美德、又有巨大的才能推動這個社會最為崇拜的經濟發展,或許人們會起而效尤,真正開始從價值觀的層面去轉動這個社會。但這個典範大概必須是孫運璿這種等級的人,他的品德也必須相當好,而且他要願意去承擔其中的辛苦。(如果認真思考過這個問題,就會知道這其中辛苦,說真的我還是不解陳為廷以前犯的錯跟他從事社運的關係是什麼,他亂摸過女生就導致他的社運有問題? 或是不值得信任? 我希望能夠多給願意出來做事的人鼓勵,不是不批評,但至少動機是為了讓對方更好才批評) 這是我目前的看法,說真的我也是剛剛要寫這篇讀後感才開始想這個問題XD 正確與否我不敢說,但起頭比正確重要,我並沒有打算抱持這些想法一成不變。希望自己之後可以變得更厲害,一方面是對這個問題擁有更深的洞見、另一方面是希望未來的機器人能夠傳達好的價值觀。這種機器人並不是要逼你接受統一價值觀,他是要鼓勵你”用對的方法去探索什麼才是對的”。這件事已經牽涉到”智慧”,因為機器人要承載的不應只是片面而零碎的知識,而是讓你融會貫通並能用來解決問題的智慧。但要讓機器人教人智慧這件事情一點都不容易,因為連我們要敎人智慧都不容易了。不過,這是一個非常值得探討的問題。 ============================ 最後,以一個羅輯思維的影片來警惕自己,成名有兩大代價 – 眾人審視你的道德標準會不合理的高(除非人民素質高到可以完全就事論事),還有你不知道自己的名會傷害到誰。所以在未看清楚前,不要輕易地跳進去。孫院長能成功的一大因素也是在於,他不出風頭,這造就他的人和,讓他能領導強將、也能受老闆信任。共勉之。 https://www.youtube.com/watch?v=QlrzePBtqQo

邊緣偵測

UCB有一個網站比較了目前最state-of-the-art的演算法,好的邊緣偵測對於物體辨識很有幫助。 https://www.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/bench/html/algorithms.html 先記下來好用的學習資源: 投影片: http://www.cs.cmu.edu/~efros/courses/LBMV09/presentations/GlobalPb.pdf 詳細實作: http://www.multimedia-computing.de/mediawiki/images/d/dc/MA2012_ChristianEggert.pdf https://github.com/vrabaud/gPb

我們想要的未來是什麼?

最近的八仙爆炸意外、新北市夜晚的不平靜、醫病糾紛、司法體系不公、立法院失去監督能力、行政帶頭違法亂紀…顯示了台灣有很多很多問題。 看看全世界,其實相似。大家都說台灣是鬼島,但我並不認同,因為有很多國家的爛事是我們不知道的。舉例來說,我上個月才聽說法國居然有大學教授可以上課完全不到,讓學生空等一兩小時,下課才寄信說自己忘記要上課了,重點是完全不會被懲罰。因為教師公會的力量太過強大,使得政府必須順從他們才能獲得選票(嗯?似曾相識?)。再看看現在仍常年處在戰爭中的非洲國家、中東國家,還有越來越緊張的烏克蘭等等,我覺得比上不足、比下已經很有餘。 那我們最大的問題在哪裡? 我們最大的敵人,是無力感。 我們看見問題,覺得傷心、覺得難過、覺得憤怒、覺得沮喪,卻不知道自己能做什麼。我們釐不清問題、看不見目標、所以看不見希望。看不見希望,就只能逃避不去想,只期待有人來改進這一切,因為這比較不痛苦。 但是, 每一分每一秒都在變化,不管現狀怎麼糟糕,隨時都能夠將現況改善得更好一點。 一秒鐘是客觀的。 在這一秒鐘內,我們可以選擇不關注,那我們就是任憑這一秒鐘被浪費,迎接更糟的未來也不令人意外,我們沒有權利期待擺在地上的一堆廚餘會自動變回一桌佳餚;但是我們在這一秒鐘可以思考怎麼在下一秒鐘開始改善現狀;甚至可以嘗試去做點什麼,看看這世界是不是變得更好。 未來,忠實反映你現在的選擇。 覺得沒有希望是因為不知道怎麼改善、不知道怎麼改善是因為訂不出切實可行的目標、訂不出切實可行的目標是因為釐不清問題、釐不清問題不是因為事情太複雜,是因為我們根本沒有花相對應的時間去解決問題。我們願意花50分鐘的時間去寫一份考卷,但我們可曾花50分鐘去想一個議題?你真的坐下來想50分鐘,我不信沒有進展。何況這些問題的難度遠超過考卷上的問題。 另外,有三點我希望警惕自己: 1. 方法絕對不會沒有,歷史上的強盛國家常常都是經由變法,再經過好幾代的歲月才變得非常強,但即使科技發達可以讓變法效率大增,我們也需要時間。目光短淺是重要改革的致命傷。 2. 一定會有很多人看起來像是來阻撓,會有刻意阻撓的人、不關注使得我們熱情被潑冷水的人,但既然這些人本來就會存在,我們又有什麼好擔心的? 可預期的事情並不會阻擋我們,因為心理建設幫助我們冷靜地面對、繼續前進。不可預期的事先擺一邊,先從可預期的事著手,在擴大自己智慧的過程中,更多不可預期的事將會變得清晰而可預測。 3. 將批判的心思放在自己身上就好。有很多人的很多行為令我們不解,但我們自己也有很多行為會令別人不解。每個人本來就有許多面向,你不能要求陳為廷是個完人,他的慾望跟他為社會改革所做的努力根本是兩回事。就像你平常會有認真工作、努力讀書的一面,但你也會有放縱慾望去享樂的一面(而且我相信你不會願意讓社會大眾來檢視),難道你希望別人用你放縱享樂時的行為來推翻你認真工作時的表現?就算你要批判,在你批判的時候,請看清楚自己的動機,你是想藉由批判讓台灣多一個聖人級的政治人物、還是滿足自己想批評的慾望?這麼做有讓這社會變得更好嗎? 最後的問題是,我們想要的未來是什麼? 最近看孫運璿傳,有很深的體會。在經濟的發展上,台灣確實獲得巨大的成功,但這也造成部分上一代的人自以為厲害(如果沒有英明的孫運璿,你們有今天?何苦在問題重重的今天再加上族群對立?)、有不少台灣人把自己的利益放在最前面等等問題。再看郭董,他的立場傾中真的是他的本意?還是因為他已經離不開中國,但又有許多員工要養的不得不為? 一開始的目標就要設定正確,然後一路上審慎地觀察自己往哪個方向走。 其實這些內容都是要寫給我自己看的,隔兩天又忘記這些體會然後從頭來過不怎麼有效率。關於未來的目標,需要另開一篇,不過沒打算公開就是了。

鬱金香可能是花!

昨天報告的時候講到鬱金香不是花這一神奇論述,覺得怪怪的,還是查證一下。 首先我發現我誤會論文了,上面是寫WordNet認為鬱金香不是花(見下圖),但我誤認為他寫的是百科全書中認定鬱金香不是花。這顯然就是一種簡化世界的機制帶來的認知錯誤,因為這一段的開頭提到common sense跟encyclopedic knowledge可能有衝突,我就把後面的例子都簡化成百科全書了。 因為有點好奇,我還是去查了一下,鬱金香是一個屬,依序是: 植物界=>被子植物門=>單子葉植物綱=>百合目=>百合科=>鬱金香屬 雖然沒有找到關於花的嚴格定義,但是鬱金香有花柱、花瓣、花蕊等等構造,應該也算是一種花吧。因為不能確定,所以標題只敢下鬱金香可能是花XD

Fisher Vector簡介

這禮拜因為要上台報告,發現如果沒好好弄懂這東西可能會講不清楚,想說既然有機會那就好好地學一下這個技巧,畢竟由其衍生出來的VLAD聽說是在深度學習出來前,分類準確率最高的image representation方法。 先附上兩個可以供參考的資源: http://blog.csdn.net/breeze5428/article/details/32706507 http://www.duzhongxiang.com/fisher-vector/ 不過最後幫助我弄懂的還是”Fisher Kernel on Visual Vocabularies for Image Categorization”這篇第一個把Fisher Kernel用在影像分類上的論文,如果不排斥的話,還是去看看會比較好。 先不講數學,主要觀念比較重要。Fisher Vector主要的概念是,我先用GMM來model一張影像的local descriptor分佈,所以對不同的影像來說,我都只需要用GMM就可以描述,也就是說每張影像都可以被表現成一個維度一樣的向量(維度就等於GMM的parameter數)。這邊厲害的地方在於,原本每張影像所取出的local descriptor數都不盡相同,但因為用GMM描述,就可以讓每一張影像被表示成維度相同的向量。 但Fisher Vector沒有這麼單純,他不是單純用GMM的每個參數值來表示一張影像,他是先定義一個function,這個function定義了一張影像跟GMM對這張影像的model的相似程度。然後藉由對GMM每個參數做偏微分,就可以得到每個參數變化一點點,這張影像跟GMM對這張影像的model的相似程度的變化量,把每個偏微分都定義成Vector的一個維度,就可以得到一個長度還是跟參數量一樣的Vector。最後,為了分類器的需求,再把這個vector用Fisher Information Matrix做完normalization,就可以得到Fisher vector了。