<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Poyu39</title><description>Personal website</description><link>https://www.poyu39.tw/</link><language>zh_TW</language><item><title>The Hidden Attention of Mamba Models</title><link>https://www.poyu39.tw/posts/seminar/arxiv240301590/</link><guid isPermaLink="true">https://www.poyu39.tw/posts/seminar/arxiv240301590/</guid><description> </description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Ameen Ali&lt;/code&gt;, &lt;code&gt;Itamar Zimerman&lt;/code&gt;, &lt;code&gt;Lior Wolf&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Paper link: https://arxiv.org/abs/2403.01590&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;::pdf[Slide]{src=&quot;https://drive.google.com/uc?id=1K8DK1fkPbWK0nas42zBecFwvt8LKGsVB&quot;, height=&quot;460&quot;}&lt;/p&gt;
</content:encoded></item><item><title>FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness</title><link>https://www.poyu39.tw/posts/seminar/arxiv220514135/</link><guid isPermaLink="true">https://www.poyu39.tw/posts/seminar/arxiv220514135/</guid><description>Three Part of FlashAttention: Part 1</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Tri Dao, Daniel Y. Fu, Stefano Ermon, Atri Rudra, Christopher Ré&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Paper link: https://arxiv.org/abs/2205.14135&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;::pdf[Slide]{src=&quot;https://drive.google.com/uc?id=1K6CCcxDIJvRe5U-yvqlQKTVKs7BIqWmn&quot;, height=&quot;460&quot;}&lt;/p&gt;
</content:encoded></item><item><title>Optimizing the Softmax loss</title><link>https://www.poyu39.tw/posts/seminar/optimizing_the_softmax_loss/</link><guid isPermaLink="true">https://www.poyu39.tw/posts/seminar/optimizing_the_softmax_loss/</guid><description>Distance-based loss function for deep feature space learning of convolutional neural networks &amp; Pairwise Gaussian Loss for Convolutional Neural Networks</description><pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Pairwise Gaussian Loss for Convolutional Neural Networks&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Yuxiang Qin , Chungang Yan , Guanjun Liu , Zhenchuan Li , Changjun Jiang
Paper link: https://ieeexplore.ieee.org/document/8947983&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Distance-based loss function for deep feature space learning of convolutional neural networks&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Eduardo S. Ribeiro , Lourenço R.G. Araújo , Gabriel T.L. Chaves , Antônio P. Braga
Paper link: doi.org/10.1016/j.cviu.2024.104184&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;::pdf[Slide]{src=&quot;https://drive.google.com/uc?id=1CLtVY8XoyfCQCT1fBYBxqKMNaitS893T&quot;, height=&quot;460&quot;}&lt;/p&gt;
</content:encoded></item><item><title>Transformers are SSMs: Generalized Models and Efficient Algorithms Through Structured State Space Duality</title><link>https://www.poyu39.tw/posts/seminar/arxiv240521060/</link><guid isPermaLink="true">https://www.poyu39.tw/posts/seminar/arxiv240521060/</guid><description>Three Part of Mamba: Part 3</description><pubDate>Fri, 26 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Tri Dao, Albert Gu&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Paper link: https://arxiv.org/abs/2405.21060&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;::pdf[Slide]{src=&quot;https://drive.google.com/uc?id=1QgLHnXhQTCtj4dkZh-qRt2C4zUnwVJa_&quot;, height=&quot;460&quot;}&lt;/p&gt;
</content:encoded></item><item><title>Mamba: Linear-Time Sequence Modeling with Selective State Spaces</title><link>https://www.poyu39.tw/posts/seminar/arxiv231200752/</link><guid isPermaLink="true">https://www.poyu39.tw/posts/seminar/arxiv231200752/</guid><description>Three Part of Mamba: Part 2</description><pubDate>Fri, 07 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Albert Gu, Tri Dao&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Paper link: https://arxiv.org/abs/2312.00752&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;::pdf[Slide]{src=&quot;https://drive.google.com/uc?id=1AZDxQVpb6C_65xRWtkiGFh_4nfE_H8VX&quot;, height=&quot;460&quot;}&lt;/p&gt;
</content:encoded></item><item><title>Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention</title><link>https://www.poyu39.tw/posts/seminar/arxiv200616236/</link><guid isPermaLink="true">https://www.poyu39.tw/posts/seminar/arxiv200616236/</guid><description>Three Part of Mamba: Part 1</description><pubDate>Wed, 03 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Angelos Katharopoulos, Apoorv Vyas, Nikolaos Pappas, François Fleuret&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Paper link: https://arxiv.org/abs/2006.16236&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;::pdf[Slide]{src=&quot;https://drive.google.com/uc?id=1eKxApYT0iikyJzE4TexkGLypQ4W_E2zH&quot;, height=&quot;460&quot;}&lt;/p&gt;
</content:encoded></item><item><title>連我都可以畢業，你也可以。</title><link>https://www.poyu39.tw/posts/my_story/%E9%80%A3%E6%88%91%E9%83%BD%E5%8F%AF%E4%BB%A5%E7%95%A2%E6%A5%AD%E4%BD%A0%E4%B9%9F%E5%8F%AF%E4%BB%A5/</link><guid isPermaLink="true">https://www.poyu39.tw/posts/my_story/%E9%80%A3%E6%88%91%E9%83%BD%E5%8F%AF%E4%BB%A5%E7%95%A2%E6%A5%AD%E4%BD%A0%E4%B9%9F%E5%8F%AF%E4%BB%A5/</guid><description>逢甲大學資訊工程學系 - 學生專欄</description><pubDate>Wed, 23 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;./cover.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;你好，我是 113 級畢業生：邱柏宇，這是一個不會讀書，連我都可以畢業的真人實事，你也可以。&lt;/p&gt;
&lt;h2&gt;轉系不嫌晚&lt;/h2&gt;
&lt;p&gt;在大二時我從機械與電腦輔助工程學系轉系到資訊工程學系，當時是透過機器人相關的經歷，特殊選才後進入到機電系，在大一發現比起機械硬體還是更喜歡開發機器人的靈魂：程式，而下定決心轉系到本系，印象深刻的是在轉系面試時系主任問說「那為甚麼當初不直接申請資工系呢？」...，我：「發現寫程式更有趣，至少是大二轉系不算晚吧？XD，我保證我會準時畢業的。」&lt;/p&gt;
&lt;h2&gt;主線任務：修課&lt;/h2&gt;
&lt;p&gt;轉系因為要補修很多課程，很不巧資工系的程式設計和其他課很容易衝堂，所以助教也提醒我們轉系有一半人會延畢。為了準時畢業，每個學期我幾乎都修滿 25 學分，甚至超修，因為從機電系轉系到資工系其實能抵的學分只有微積分和計算機概論，基本上都得補修，像是程式設計等等，像我就是先修了大二的資料結構，再回頭修程式設計，不過正因為折抵的不多，剛好彌補了系外選修的學分，最後甚至提早在大四上幾乎修滿畢業學分了。&lt;/p&gt;
&lt;p&gt;雖然過程中很累，而且本身也不是很會讀書的學霸，我抱持的過就好的原則，在夾縫中求生存，除此之外我會盡量擅長的實作較多的課，功課、期中專題和期末專題花心思下去認真做，基本上都可以順利通關，同時對我來說課程內容也比較有趣。&lt;/p&gt;
&lt;h2&gt;支線任務：校內外兼職&lt;/h2&gt;
&lt;p&gt;除了修課以外，在升大一直到大二時我的重心擺在校外和兼職上，我回到當初高中的機器人研究社的母校和臨校，不過是從原本的社長變成社團老師回去帶學弟妹，在過程中，製作教材幫助我統整資料的能力，帶領隊伍的壓力鍛鍊我的心智，也是在這一時期我累積了不少教材以及帶隊參加競賽的經驗，為日後履歷和教學能力加分不少。如果可以，建議多多參加跟自己專業或有興趣的兼職內容，不要因為時薪較低而不敢踏出去第一步，&lt;/p&gt;
&lt;p&gt;在大二時修了薛念林老師的網頁開發，可能是表現出很有興趣，課後老師詢問我和另外一個同學有沒有意願維護系上的網頁服務，也是從那漸漸開始從校外的兼職變成校內的兼職了，接著是學校資訊處幫忙優化打卡系統等等，題外話那位同學（Kokoro）也是跟我從機電系轉過來的，但我們在原系根本沒講過話，現在呢，則是一路上每次專題爆肝的戰友。&lt;/p&gt;
&lt;p&gt;最後在大三時修了王益文老師的微處理機系統，這堂課我認為是四年大學的課中最有趣的，每次實習課都要實際寫出一個小 Demo，興趣激發動力，課餘時間我甚至會繼續研究其中底層的點點細節，修完課之後，大四開始擔任邏輯設計和微處理機系統的助教，我不認為我在上班，反而像是跟學弟妹們交流，就像回到當初在校外兼職教學生機器人一樣快樂。&lt;/p&gt;
&lt;h2&gt;最終考驗：畢業專題&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;./final_project.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;轉系到資工系之後，我很幸運有一個互補性很高的小組，有一個和我一起從機電系轉過來的同學，還有另外兩個也是轉系的同學，我們一路破關到畢業專題，理論好的扛教其他人，實作好的扛期末專題，我認為轉系不分系的丁班雖然沒有像是其他班的整體凝聚力，但恰恰小組的濃縮達成了更高的執行協作力。&lt;/p&gt;
&lt;p&gt;一切在大三下迎來了最終考驗，我們決定跟著劉怡芬老師投了大專生研究計畫，此後也成為了畢業專題，長達一年多的專題開始了，從讀論文補足背景知識開始，也是這時啟蒙我機器學習，大量的實驗讓我慢慢習慣了研究步調，從收集資料到訓練模型和最後的包裝應用，就像兩年來的期末專題，我們彼此團隊合作，創意加上運氣，很榮幸最後獲得第一名。&lt;/p&gt;
&lt;h2&gt;實戰：公司實習&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;./mp.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;每學期幾乎修滿學分，讓我在大四上基本上修完 128 的畢業學分，因此我申請了系上與微程式資訊的企業實習，這是我第一次到公司正職上班，但與此同時，其實還有畢業專題和助教的壓力，所以大四上我度過了壓力最大的時期，很累但也是最充實的一個學期。&lt;/p&gt;
&lt;p&gt;在微程式的嵌入式軟體開發實習中，我主要參與了電子投幣器和YouBike微笑單車專案，第一次將課堂知識學以致用，雖然企業和學術有不小的差別，但我認為微處理機系統的訓練，使我在實際開發底層程式時也不會感到特別吃力。在實習結束過後，也會與公司還有外包上的往來，希望自己保持著一定的開發能力。&lt;/p&gt;
&lt;h2&gt;NEXT：預研生&lt;/h2&gt;
&lt;p&gt;直到現在我還是在跟著當初喜歡事物的路上，在一個學期的實習後，在四下時我回到了逢甲，順利準時畢業以外，從原本的轉系生到以預研生先修碩班的課，以我自身的例子說明就算轉系只要願意辛苦一點，還是可以準時畢業！&lt;/p&gt;
&lt;p&gt;最後我決定跟著劉怡芬老師繼續做研究，接下來我會繼續在逢甲大學資訊工程學系研究所完成我的碩士學位～&lt;/p&gt;
&lt;p&gt;祝天天開心
113 級畢業生邱柏宇鞠躬&lt;/p&gt;
</content:encoded></item><item><title>特殊選才回顧</title><link>https://www.poyu39.tw/posts/my_story/%E7%89%B9%E6%AE%8A%E9%81%B8%E6%89%8D/</link><guid isPermaLink="true">https://www.poyu39.tw/posts/my_story/%E7%89%B9%E6%AE%8A%E9%81%B8%E6%89%8D/</guid><description>在大學畢業前，回顧當初的特殊選才經歷。</description><pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;廢話不多說，讓我們把時間倒轉回 2018 的夏天吧～&lt;/p&gt;
&lt;h3&gt;2018 ~ 2021 | 高中&lt;/h3&gt;
&lt;p&gt;啟蒙是在國小時開始自學程式和模型手作，讓我在軟體和硬體上都有接觸，我想這也間接影響到後來從機械硬體設計到電機控制和目前研究領域都不排斥。之後在高中時有幸參加了機器人研究社後，認識到許多貴人，其中包含推薦我走特殊選才這個管道的學長和老師。&lt;/p&gt;
&lt;p&gt;最初見到機器人研究社中特殊選才的學長們，有這麼豐富的競賽經驗以及名列前茅的成績，說實話當下我認為自己沒有辦法走特殊選才這個管道，我只是有比他人更多熱忱在喜歡的事物而已，所以一開始也沒先特別規劃特殊選才。&lt;/p&gt;
&lt;p&gt;之後就在社團開心地玩，參加了不少機器人相關競賽後，最終還是面臨升學的壓力...，看到我過往的成績爛到不行，才決定開始規劃走特殊選才這個管道。我算是不會讀書那類人，注意力不在學業上面真的讀不起來。&lt;/p&gt;
&lt;p&gt;在準備特殊選才的階段，我首先是花了很大功夫將過往的大大小小的專案收集起來，並且挑出幾個相關性高的，把它補充完善，像是畫出簡單的電路圖、程式碼歸納出其中所用到的公式原理還有重拍好多照片。&lt;/p&gt;
&lt;p&gt;在準備備審時，我其實同時還有在準備其他競賽，所以在收集競賽資料上，做的比較倉促，最後是決定只挑出亮點的競賽，從專案的角度展開說明其中做了甚麼。在校活動上也著重描述擔任機器人研究社社長的經歷，以準備教案的心路歷程循序寫下去。&lt;/p&gt;
&lt;p&gt;另外很不幸，我的文筆不太行，這裡很感謝當初的老師，一直和我反覆的修改，甚至認為這是最難的一關，從結果回來看，我總結出幾個小技巧。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;放入一些問題點（像是公式、硬體細節）在最後面試時增加被問這些有準備的點上。&lt;/li&gt;
&lt;li&gt;重點放 Demo 的畫面和照片，不單只放獎狀等證明類的。&lt;/li&gt;
&lt;li&gt;從時間線切入高中三年，更細到每個專案的心路歷程，像是小段故事？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上是高中的部分，蠻多記憶模糊的地方請見諒～&lt;/p&gt;
&lt;h3&gt;2021 ~ 2025 | 大學&lt;/h3&gt;
&lt;p&gt;首先來談談為甚麼我從機電系轉到資工系，主要是在機電系感受不到課程上有很吸引我，雖然說大一必修就是理論偏枯燥，但以感興趣的計算機概論來說，上完課之後落差感蠻重的，好像課程的內容跟課名好像搭不上...，不過在機電系還是有我很喜歡的工程圖學，在之後系外選修學分上幫了不少忙。最後的最後決定轉系的稻草還是認為我感興趣的軟硬體結合可能比一開始預想的還要遙遠，在機電系大概需要到專題或是研究生才有辦法接觸到。&lt;/p&gt;
&lt;p&gt;在大一二時期重心擺在校外和兼職上，又回到當初機器人研究社的母校和臨校，不過是從原本的社長變成社團老師回去帶學弟妹，也是在這一時期我累積了不少教學以及帶隊參加競賽的經驗，為日後的轉系資料上也新增不少材料。&lt;/p&gt;
&lt;p&gt;我怎麼轉進資工系的呢？因為是大一平轉大二，所以打算從特殊選才的備審再次整理後入手，加重講軟體的部分，並加上大一的競賽以及兼職經驗，資工系的轉系其實還蠻激烈的，在面試過程中還發生一個小插曲，面試的教授（個資就不提姓名）問說「你當初怎麼不直接來逢甲資工的特殊選才呢？」，直接爆擊我了，幸好前面面試是比較有說有笑，最後好像是說回頭是岸還是甚麼至少是大一轉系的玩笑 ww。&lt;/p&gt;
&lt;p&gt;最後談談我在資工的三年好了，我在大二的時候學了一門網頁相關的課和另外一個同學被教授邀請到要不要維護系上的網頁服務，也是從那漸漸開始從校外的兼職變成校內的兼職了，接著是學校資訊處等等，題外話他也是跟我從機電系轉過來的同學，但我們在原系根本沒講過話，現在呢，則是一路上每次專題爆肝的戰友。&lt;/p&gt;
&lt;p&gt;在資工系的捲捲氛圍底下雖然真的真的很肝，轉系的原因，常常每學期學分都是滿或超修，「一個晚上一個奇蹟」是座用銘了，但很享受這種能看到自己進步的成就感。同時在系上也接了助教，認識到很多有趣的學弟妹，教學對我來說與其是工作，更像是互相交流交朋友吧～&lt;/p&gt;
&lt;p&gt;最後在畢業專題上，題目是語音深度偽造相關的研究，組員有四個人，都是轉系進資工系的，四個人從大二專題就報團到現在，最後蠻幸運拿到了系上第一。&lt;/p&gt;
&lt;p&gt;直到現在我還是在跟著當初喜歡事物的路上，如今又到了畢業的升學壓力，成績還是依舊跟高中一樣很爛，目前我繼續跟著專題指導老師繼續研究，直升逢甲資訊工程研究所再待兩年了～&lt;/p&gt;
&lt;p&gt;感謝看到這邊，希望能幫助到你/妳在參加特殊選才時一帆風順。&lt;/p&gt;
</content:encoded></item><item><title>Python X Ev3 （EV3DEV）</title><link>https://www.poyu39.tw/posts/ev3/python_ev3/</link><guid isPermaLink="true">https://www.poyu39.tw/posts/ev3/python_ev3/</guid><description>使用 Python 來撰寫 EV3 程式～</description><pubDate>Fri, 28 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.ev3dev.org/&quot;&gt;&lt;img src=&quot;./assets/llFSUtc.png&quot; alt=&quot;&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;參考資料：&lt;a href=&quot;https://education.lego.com/en-us/product-resources/mindstorms-ev3/teacher-resources/python-for-ev3/&quot;&gt;Program in Python with EV3&lt;/a&gt; | &lt;a href=&quot;https://www.ev3dev.org/&quot;&gt;www.ev3dev.org&lt;/a&gt; | &lt;a href=&quot;https://github.com/ev3dev&quot;&gt;ev3dev&lt;/a&gt; | &lt;a href=&quot;https://pybricks.com/ev3-micropython/startinstall.html&quot;&gt;EV3DEV API&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;介紹&lt;/h2&gt;
&lt;h3&gt;Visual Studio Code&lt;/h3&gt;
&lt;p&gt;Visual Studio Code 是一款由微軟開發且跨平台的免費原始碼編輯器，支援語法突顯、程式碼自動補全、程式碼重構功能，並且內建了命令列工具和 Git 版本控制系統，也可以透過安裝額外套件增加功能，支援 Windows 、 MacOS 和 Linux 。&lt;/p&gt;
&lt;h3&gt;vscode-ev3dev-browser&lt;/h3&gt;
&lt;p&gt;與 LEGO® MINDSTORMS EV3Lab 的積木語言不同，使用 Visual Studio Code 進行編寫程式，安裝 EV3DEV 所推出的 &lt;a href=&quot;https://github.com/ev3dev/vscode-ev3dev-browser&quot;&gt;vscode-ev3dev-browser&lt;/a&gt; 擴充插件後，可以直接上傳程式到 EV3 主機，也支援使用 SSH 等控制台。&lt;/p&gt;
&lt;h3&gt;EV3DEV&lt;/h3&gt;
&lt;p&gt;EV3DEV 是基於 Debain Linux-based 系統下運行，可在多個 LEGO® MINDSTORMS 兼容平台上運行，包括 LEGO® MINDSTORMS EV3 和基於 Raspberry Pi 的 BrickPi。&lt;/p&gt;
&lt;h3&gt;Python&lt;/h3&gt;
&lt;p&gt;Python 是一種高階程式語言，也是一種解釋型語言，強調程式碼的可讀性、簡潔的語法。Python為了讓程式碼具備高度的可閱讀性，在設計時盡量使用了其它語言常用的符號和英文單字。&lt;/p&gt;
&lt;p&gt;Python 支援使用反斜槓作為行接續符，將多個物理行合成為一個邏輯行，作為通用型的程式語言，運用在 YouTube 、 Google 、 Yahoo! 、 Facebook 、 Dropbox 、Gmail 等等知名平台都在大量使用的程式語言，其特色是支援多種編寫方式，包括物件導向、命令式、函數式、程序式，也和Python和Ruby、Perl、Scheme一樣，擁有動態語法、強制縮排、Garbage Collection 和自動記憶體管理等等諸多的優勢，於未來的需求量也越來越多，涉獵的領域像是大數據分析、自動化腳本、人工智慧。&lt;/p&gt;
&lt;p&gt;而 EV3DEV 所使用的 MicroPython 是一款小型的 Python 直譯器，它擁有自己的 Python 直譯器，在保留絕大部分 Python 的核心特色同時縮減周邊模組（函式庫），好讓 Python 這種出了名的吃記憶體的語言也能在像是 EV3 這樣的微控制板上運行。&lt;/p&gt;
&lt;h2&gt;安裝&lt;/h2&gt;
&lt;h3&gt;EV3DEV&lt;/h3&gt;
&lt;p&gt;EV3DEV 是基於 Debain Linux-based 系統下的 MicroPython ，因此需要另外準備記憶卡當作系統碟，一般容量建議在 4GB 。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;準備一張 microSD 記憶卡，建議容量 4GB 以下。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;下載映像檔 &lt;a href=&quot;https://education.lego.com/v3/assets/blt293eea581807678a/blt9df409c9a182ab9c/5f88191a6ffd1b42dc42b8af/ev3micropythonv200sdcardimage.zip&quot;&gt;EV3 MicroPython micro SD card image&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;下載燒錄軟體 &lt;a href=&quot;https://www.balena.io/etcher&quot;&gt;Etcher&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;將記憶卡插入電腦後，依照下方步驟將映像檔燒錄至記憶卡。&lt;img src=&quot;./assets/TBjZbxx.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;燒錄完成後，確認 EV3 在關機狀態下將記憶卡插入到側邊的 MicroSD 插槽並開機。&lt;img src=&quot;./assets/28wkCfG.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;VScode 延伸模組&lt;/h3&gt;
&lt;p&gt;為了讓 Python 程式檔案可以傳送至 EV3 ，需要安裝額外的延伸模組。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;點選左邊延伸模組商店，輸入 EV3 點選 LEGO® MINDSTORMS® EV3 MicroPython。&lt;img src=&quot;./assets/rcIA3BV.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;重啟 IDE。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安裝成功會在左側欄中出現擴充的延伸模組。
&lt;img src=&quot;./assets/u64SaHe.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Python&lt;/h3&gt;
&lt;p&gt;和 MicroPython 語法基本一致，可以在燒錄記憶卡時先安裝在電腦上練習撰寫程式～&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先到官網下載 Python 的安裝檔。
&lt;img src=&quot;./assets/7QBRLQT.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;點選 Downloads 進到下載頁面。
&lt;img src=&quot;./assets/5qPG2Wb.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;目前最新版本是 3.11，這邊是直接安裝此版本到環境中，因此如果有多個版本會需要額外設定，也有許多版本可下載，不同版本之間的語法有些小差異。
&lt;img src=&quot;./assets/0q2m7VA.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;開啟安裝執行檔，並勾選 &quot;Add python.exe to PATH&quot; 自動設定路徑，並點選 Install Now 開始安裝。
&lt;img src=&quot;./assets/6tIsSc0.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安裝完後可以開啟 CMD ，並輸入 &lt;code&gt;python&lt;/code&gt; ，如果安裝成功就可以進入到 Python，
&lt;img src=&quot;./assets/YgU7HX8.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;撰寫第一個程式來測試看看吧！&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;print(&quot;Hello World&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;快看! 電腦在向世界說 Hello 呢! (＠＾０＾)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;連線 EV3&lt;/h2&gt;
&lt;p&gt;首先將 EV3 開機並且透過數據線連接至電腦，可以看見開機後的 EV3 主畫面也不同了，不過不用擔心，只要關機並且將記憶卡取出後再開機，就可以回到官方系統了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/qy511GZ.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;接著創建一個新的專案，並輸入檔名。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/rxzHs2I.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;接著左下方的可以看到我們剛剛所安裝的 EV3DEV Device Browser，點選 &lt;code&gt;Click here to connect to a device&lt;/code&gt; 並選擇 ev3dev 。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/TevU4qJ.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;等待出現綠色圓圈和 &lt;code&gt;Status&lt;/code&gt; 可以顯示狀態就表示成功了！&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/BMHmE35.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;EV3DEV Device Browser 功能&lt;/h2&gt;
&lt;h3&gt;尋找設備&lt;/h3&gt;
&lt;p&gt;自動發現任何連接的 ev3dev 主機，不需要額外設定。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/9pBd4bQ.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/n9lNkzh.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;遠程瀏覽文件&lt;/h3&gt;
&lt;p&gt;每個設備的文件都列在 Brickman 中。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/BVyct26.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;將文件下載到設備&lt;/h3&gt;
&lt;p&gt;單擊一下即可將當前 VS Code 項目發送到 ev3dev 設備。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/edAIXKX.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;遠程運行程序&lt;/h3&gt;
&lt;p&gt;單擊任何可執行文件以運行它。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/299umkz.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;也可以右鍵點擊選擇 &lt;code&gt;Run&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/6z0bSxD.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;錯誤消息將顯示在輸出窗格中。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/NjWwUFT.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;單擊一次（或 F5）即可構建、下載和運行&lt;/h3&gt;
&lt;p&gt;需創建一個 &lt;code&gt;ev3devBrowser &lt;/code&gt;的 launch.json 文件以使用此功能。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
    &quot;version&quot;: &quot;0.2.0&quot;,
    &quot;configurations&quot;: [
        {
            &quot;name&quot;: &quot;Download and Run&quot;,
            &quot;type&quot;: &quot;ev3devBrowser&quot;,
            &quot;request&quot;: &quot;launch&quot;,
            &quot;program&quot;: &quot;/home/robot/${workspaceRootFolderName}/hello&quot;,
            &quot;preLaunchTask&quot;: &quot;build&quot;
        }
    ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;啟動遠程 SSH&lt;/h3&gt;
&lt;p&gt;可以通過右鍵單擊設備在控制台中啟動 SSH 。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo hostnamectl set-hostname &amp;lt;name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;./assets/3Qmaywi.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;營幕截圖&lt;/h3&gt;
&lt;p&gt;可以通過右鍵單擊設備輕鬆截取營幕。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/Ve6th4X.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/0yZkFNp.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;來撰寫 EV3 的第一個 Python 程式吧！&lt;/h2&gt;
&lt;p&gt;首先來介紹自動生成的 &lt;code&gt;main.py&lt;/code&gt; ，這個檔案室 EV3 程式開始的地方，我們先來了解一下 Python 的語法以及這自動生成的程式碼是甚麼吧！&lt;/p&gt;
&lt;p&gt;粉紅色框內所表示的是 &lt;code&gt;from ... import ...&lt;/code&gt; 這段程式碼是代表匯入「函式庫」，函式庫像是外部的我們之前 EV3Lab 積木語言所學到匯入 MyBlock ，將外部的程式碼匯入就可以在這個檔案中的程式使用。&lt;/p&gt;
&lt;p&gt;藍色框內所表示的是設定硬體的物件，當我們需要使用馬達或是感測器時，需要告訴 EV3 主機，我的硬體是插在哪個 port 。&lt;/p&gt;
&lt;p&gt;黃色框內就是我們主要撰寫程式碼的地方了！&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/nJNFvFi.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;首先來撰寫我們在 EV3 上的第一個 Python 程式吧！&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;ev3.speaker.beep()&lt;/code&gt; 後方加上&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;print(&quot;Hello World&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接著點選左側邊欄中的偵測與執行，接著點選上方的開始鍵，就可以將剛剛所撰寫的程式下載至 EV3 並且執行。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/7Q3V21m.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;可以看到下面的輸出欄位，印出了 &lt;code&gt;Hello World&lt;/code&gt; ，這次換 EV3 打招呼了喔～&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/MqQoEd9.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;那有沒有辦法將 &lt;code&gt;Hello World&lt;/code&gt; 顯示到 EV3 螢幕上呢？&lt;/p&gt;
&lt;p&gt;試試看剛剛改成下方這段程式碼吧，並且下載到 EV3 執行看看。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ev3.screen.print(&quot;Hello World!&quot;)    # 在螢幕上顯示 Hello World
wait(5000)    # 等待 5000 毫秒
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;成功了！&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/MDNsQEZ.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Q. 為甚麼要加上 &lt;code&gt;wait(5000)&lt;/code&gt; ，等待 5000 毫秒呢？&lt;/p&gt;
&lt;p&gt;A. 如果不加上的話，程式會印出Hello World! 結束，程式一結束便會回到主畫面，如此一來就來不及看到是否有印出了。&lt;/p&gt;
&lt;h2&gt;Python 流程控制&lt;/h2&gt;
&lt;h3&gt;while&lt;/h3&gt;
&lt;p&gt;在Python中，while是一種迴圈語句，它允許在滿足特定條件的情況下重複執行程式碼塊。while語句的基本構造是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;while 條件:
    程式碼
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在這個語句中，當條件為True時，程式碼將被執行。每次執行完程式碼塊後，Python都會檢查條件是否仍為True，如果是，則再次執行程式碼。這個過程將繼續，直到條件變為False為止。&lt;/p&gt;
&lt;p&gt;以下是一個while循環的簡單範例，該範例使用while循環顯示一系列數字，直到達到指定數字：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;num = 0
while num &amp;lt; 5:
    print(num)
    num += 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;這段程式碼將從0開始顯示一系列數字，每個數字之間相差1，直到顯示數字5之前，因為條件“num &amp;lt; 5”仍然為True。在顯示數字5之後，條件變為False，因此while循環將停止執行。&lt;/p&gt;
&lt;p&gt;需要注意的是，如果while循環的條件永遠不為False，則程式碼將陷入無限循環，這種情況應盡量避免。&lt;/p&gt;
&lt;h4&gt;小試身手&lt;/h4&gt;
&lt;p&gt;Q. 請使用 while 印出五個 &lt;code&gt;Hello World!&lt;/code&gt; 在 EV3 螢幕上。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# ans
num = 0
while num &amp;lt; 5:
    ev3.screen.print(&quot;Hello World!&quot;)    # 在螢幕上顯示 Hello World
    num += 1
    wait(1000)  # 等待 1 秒
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;for&lt;/h3&gt;
&lt;p&gt;for 迴圈是一個重要的控制流程工具，與剛才介紹的 &lt;code&gt;while&lt;/code&gt; 相似，新增了用於對序列物件（例如列表、元組、字串等）進行迭代的主要功能。&lt;/p&gt;
&lt;p&gt;使用 for 迴圈的語法為：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;for 變數 in 序列:
    # 程式碼
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在上述語法中，變數是用來存放每次迭代中序列中的一個元素，而包裹其中的程式碼是在每次迭代時需要執行的一段程式碼。當迭代完成後，for 迴圈也就結束了。&lt;/p&gt;
&lt;p&gt;以下是一個使用 for 迴圈遍歷列表的範例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fruits = [&apos;蘋果&apos;, &apos;香蕉&apos;, &apos;橘子&apos;]
for fruit in fruits:
    print(fruit)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在上述範例中，我們使用了一個名為 fruits 的列表，並使用 for 迴圈來遍歷這個列表中的每個元素。在每次迭代中，變數 fruit 會被賦值為列表中的一個元素，然後進入程式碼塊中執行 print 函式，將 fruit 輸出到螢幕上。&lt;/p&gt;
&lt;p&gt;for 迴圈也可以和其他控制流程結構（例如 if、else 等）結合使用，來實現更複雜的邏輯運算。使用 for 迴圈，可以輕鬆地對序列物件進行迭代，讓我們可以更加靈活地處理大量資料。&lt;/p&gt;
&lt;h3&gt;if else&lt;/h3&gt;
&lt;p&gt;if else 是最常見的條件判斷工具，可以用來根據不同的條件執行不同的程式碼。使用 if else 的語法為：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if 條件1:
    # 條件1成立時要執行的程式碼
else:
    # 條件1不成立時要執行的程式碼
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;條件1 是一個 &lt;code&gt;bool&lt;/code&gt; 布林值（True 或 False），如果條件1 為 True，則執行 if 後的程式碼，否則執行 else 後的程式碼。&lt;/p&gt;
&lt;p&gt;以下是一個使用 if else 判斷 &lt;code&gt;Touch Sensor&lt;/code&gt; 是否按下的程式。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;btn = TouchSensor(Port.S1)    # 創建一個連結在Port.S1的TouchSensor
while True:    # 使用無限迴圈讓程式持續執行
    if btn.pressed():    # 當按鈕按下
        ev3.screen.print(&quot;btn pressed&quot;)
    else:
        ev3.screen.print(&quot;btn not pressed&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;./assets/Az4ZjOX.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/ficvPWU.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;程式實作&lt;/h2&gt;
&lt;h3&gt;馬達緩加減&lt;/h3&gt;
&lt;p&gt;首先我們先來拼裝出簡單的循跡車&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/3wYsCef.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://drive.google.com/drive/folders/1-OdZlftMtYUOCPeAOonF-JetDtFlFsgs?usp=sharing&quot;&gt;模型下載連結&lt;/a&gt; | &lt;a href=&quot;https://education.lego.com/v3/assets/blt293eea581807678a/bltc0dd681a7b3bfa8b/5ec7c6a6cd4cf750c888fa6f/ev3-rem-driving-base.pdf&quot;&gt;PDF組裝說明書&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;馬達緩加減是指讓馬達在啟動或停止的時候，逐漸地加速或減速，不是瞬間就開始或停止。這樣做的原因是因為如果馬達瞬間啟動或停止，會對機器和電子元件產生很大的應力，導致損壞或壞掉，更會導致馬達的精準度不佳。&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;EV3&lt;/code&gt; 的輪型機器人上則是會輪子的打滑，起步和煞車如果過快，機器會因慣性和摩擦力導致行走起來不完整。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;緩減速&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;bMotor = Motor(Port.B)

target = 1000                                       # 目標角度
bMotor.reset_angle(0)                               # 將現在的角度歸零
while bMotor.angle() &amp;lt; target:                      # 當現在的角度小於目標角度時
    speed = (target - bMotor.angle()) * 0.5         # 計算速度
    if speed &amp;gt; 100:                                 # 限制速度在 10~100 之間
        speed = 100
    elif speed &amp;lt; 10:
        speed = 10
    bMotor.dc(speed)                                # 設定速度
    ev3.screen.print(bMotor.angle())                # 顯示現在的角度
bMotor.hold()                                       # 停止馬達
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;緩加減速&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;# 緩動函數 cos
def easeInOutSine(x):
    return -(math.cos(math.pi * x) - 1) / 2

# 彈跳函數
def easeOutBounce(x):
    n1 = 7.5625
    d1 = 2.75
    
    if x &amp;lt; 1 / d1:
        return n1 * x * x
    elif x &amp;lt; 2 / d1:
        x -= 1.5 / d1
        return n1 * x * x + 0.75
    elif x &amp;lt; 2.5 / d1:
        x -= 2.25 / d1
        return n1 * x * x + 0.9375
    else:
        x -= 2.625 / d1
        return n1 * x * x + 0.984375

# 映射區間
def mapping(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min

# 緩加減速
def smoothMove(time, distance, minSpeed, maxSpeed):
    i = 0
    step = time / 100 / 2
    target = bMotor.angle() + distance
    while i &amp;lt;= 1:
        t_angle = mapping(easeInOutSine(i), 0, 1, 0, target)
        error = t_angle - bMotor.angle()
        t_speed = error * 1.5
        bMotor.dc(t_speed)
        i += 0.01
        wait(step)
    while bMotor.angle() &amp;lt; target:
        bMotor.dc(20)
    bMotor.stop()
    bMotor.hold()

# 使用範例 在3秒內移動到1000度
smoothMove(3000, 1000)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;循跡&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 初始化馬達
left_motor = Motor(Port.B)
right_motor = Motor(Port.C)

# 初始化顏色感應器
line_sensor = ColorSensor(Port.S3)

# 初始化Drive
robot = DriveBase(left_motor, right_motor, wheel_diameter=55.5, axle_track=104)

# 計算反射光閥值
BLACK = 9
WHITE = 85
threshold = (BLACK + WHITE) / 2

# 設定移動速度為每秒 100 毫米。
DRIVE_SPEED = 100

# 設定比例控制器的增益。這意味著對於每一個光強度百分比偏離閥值，
# 我們就將駕駛座的轉向速度設置為 1.2 度/秒。

# 例如，如果反光值偏離閥值 10，則機器人的轉向速度為 10*1.2 = 12 度/秒。
PROPORTIONAL_GAIN = 1.2

# 開始無限地跟隨線條。
while True:
    # 計算光線強度與閥值之間的偏差。
    # 加負號可以走在線的另一邊
    deviation = line_sensor.reflection() - threshold

    # 計算轉向速度。
    turn_rate = PROPORTIONAL_GAIN * deviation

    # 設置駕駛座速度和轉向速度。
    robot.drive(DRIVE_SPEED, turn_rate)

    # 您可以在此循環中等待一小段時間或做其他事情。
    wait(10)
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item></channel></rss>