Python人工智慧圖控 - 研習交流廳 造訪社團 » 分享

原文網址 石小川
2020-03-22 15:02:17

近期為了ROS(機器人作業系統)相關專案,於是想起了以前的小玩具 - ROVIO,塵封已久的路威機器人在倉庫找了許久,終於抓到這隻小烏龜了,檢查電池、發現零組件狀況不錯,可見保存很好,這個ROVIO機器人麻雀雖小卻五臟俱全,看看下面硬體規格就知道。分享給有興趣製作機器人的朋友做參考。 Rovio機器人主要特點: 內含麥克風及喇叭可以雙向語音交談 可以遙控攝影機頭上下移動 可以手機和電腦或者Pad遠程網路控制 可以自動充電 雷達偵測障礙 硬體規格: 是以三大電路板結合而成:
(1)主ARM 板
Main Processor —科宇KOI-MP802 蓋面
實際為華邦 W99702 內建mpeg壓縮 跑 WEB server ,rtsp , and 主機總控
制 "spook" media streaming server ( [Spook Live Video Streamer]
( http://www.litech.org/spook/ ) )
Clock frequency 200Mhz
Main Memory — 8MB RAM
USB ttl port 與電腦通訊 (以W99100DG實現,負責isp下載)
Audio chip WM8976
Web cam video chip OV7670
SPI FLASH(W25X16) 2MB
OS Open-source "eCos" (2)充電電路板:專用NiMH充電管理芯片LS2516,PWM恆流方式,
電流不詳,穩壓二極體用的是1N5822,估計>1A。 (3)驅動板 MCU:4路BJT H電橋,3個輪子用光柵反饋,攝像頭升降用
可變電阻反饋,紅外線訊號和主控板通過串口通訊。 自動導航電路以紅外線感應運算
充電基座會投射出紅外線導航點,車上再以紅外線感應器做幾何
定位.定位程式由專門晶片負責.再送出串口訊號回應給上位機定位訊息

海闊天
2020-03-22 15:42:03

這台夢幻超跑要賣多少錢啊?小川哥!

海闊天
2020-03-22 15:42:32

海闊天
2020-03-22 15:42:44

石小川
2020-03-22 17:31:46

2013年露天買的, 3000多台幣, 拿來解剖研究用! 哈哈!

詹俊英
2020-03-24 20:58:27


原文網址 石小川
2020-03-02 11:21:45

分享一下不須 VM, 直接在 Win10 安裝 Ubuntu 及 ROS的步驟
https://ithelp.ithome.com.tw/articles/10216435 Win10安装Ubuntu子系统超详细攻略
https://zhuanlan.zhihu.com/p/62658094


原文網址 蔡昇祐
2020-02-29 08:49:30

【文組工程師的轉職心路歷程分享】
#從國際關係轉跳軟體世界 (1/4)
應該很多人跟我一樣,在職場上碰壁了一陣子。可能原本產業的天花板很低,或是對於自己是否具有專業能力感到不安。抱著砍掉重練的決心與些許對未來的不安,我辭去了當時的工作,報名了資策會的Java班,從此開啟了......
閱讀全文: https://bre.is/njvzojQB
#我轉職我驕傲
#沒有無痛轉職這件事
#成為軟體工程師的兩大必備能力


原文網址 石小川
2020-01-04 23:08:58

分享早期做過開源3D掃描器的軟硬體資料給有興趣的朋友們參考,這裡面的掃描演算法就是3D光學雷達的一種,大小掃描器我都製作成功,挺有趣的,過程可學習到軟硬體及光學調校經驗,有實作問題可提出大家討論。

1. 大台3D 掃描器零組件如下(BOM):

(1)鋁擠 640 x 640 x 640mm x 1
(2)雷射頭(5V/5mW) x 2
(3)Logitec C270 Camera x1
(4)42步進馬達驅動的旋轉台 x 1
(5)Arduino UNO + CNC v3 Shield x 1
(6)電源供應器 DC 12V/350W (可拿廢棄電腦電源供應器代替) x 1

因為整個架構是非標準型的Horus CIC Lop, 想要掃描大型物件, 所以軟體部分需要修改Horus 和 Marlin的一些參數, 調校參數也比較花功夫些, 好玩的是Horus是用Python寫的, 可以自行外加一些自行設計的演算法如數位濾波器, 提高掃描影像品質。

2. 小台3D 掃描器零組件如下(BOM):

除了機台需用3D列印外,其餘的與大台零組件相同,如圖。

p.s. 因為檔案豐富有點多,包含安裝說明、Arduino燒寫程式、PC端APP等,容我慢慢上傳!

因臉書限制上傳一些檔案,需要完整程式的朋友請留訊息給我直接用雲端傳。


原文網址 石小川
2019-12-31 10:23:27

火箭、飛機、四軸飛行器等都是高度自動控制的實例,流體力學、機電整合、人工智慧、甚至炸藥裝填的知識都整合了,入坑之後該學的都學了,我是把它們全部簡併成飛行機器人,再找時間成立一個航太單元把這些相關資料整理出來,分享給有興趣的朋友參考切磋。

Don Si
2019-12-31 10:55:51

留意

余致賢
2019-12-31 11:09:30

感謝 ?


原文網址 石小川
2019-12-26 13:20:51

語音辨識是深度學習最好的磨練場所,我們先分享一下基本知識,接下來再一步步探索這個領域的相關技術。 中文約有400個字音,字音有可分為聲母(initial sub-syllable, 又稱子音或前音)及韻母(final sub-syllable, 又稱母音或後音),聲母是輔音(consonant),每個聲母都是音素(phoneme),韻母包含元音(vowel),有些韻母是單音素, 有些則由2~3個音素構成。 聲音模型 分為 21個聲母,36個韻母和一個靜音共60個音素單元。 聲母(22個) : ㄅ、ㄆ、ㄇ、ㄈ、ㄉ、ㄊ、ㄋ、ㄌ、ㄍ、ㄎ、ㄏ、ㄐ、ㄑ、ㄒ、ㄓ、ㄔ、ㄕ、ㄖ、ㄗ、ㄘ、ㄙ。 + @(sil) 韻母(38個) : ㄚ、ㄛ、ㄜ、ㄝ、ㄞ、ㄟ、ㄠ、ㄡ、ㄢ、ㄣ、ㄤ、ㄥ、ㄦ、ㄧ、ㄨ、ㄩ、ㄧㄚ、ㄧㄛ、ㄧㄝ、ㄧㄞ、ㄧㄠ、ㄧㄡ、ㄧㄢ、ㄧㄣ、ㄧㄤ、ㄧㄥ、ㄨㄚ、ㄨㄛ、ㄨㄞ、ㄨㄟ、ㄨㄢ、ㄨㄣ、ㄨㄤ、ㄨㄥ、ㄩㄝ、ㄩㄢ、ㄩㄣ、ㄩㄥ。 早期語料需要人工切割標註子音、母音位置工程浩大,現在的電腦強大以及演算法有很大的進步,這種人工切割法逐漸由電腦學習取代了,以後直接由網路抓影像和語音資料作神經網路深度學習即可。 語料經過MFCC轉換(feature extraction)成聲音的特徵(feature)後,就可輸入遞迴神經網路**RNN(Recurrent Neural Networks)**做訓練(training), 如圖( 勘誤: 圖中Z-1是接Hidden Layer Oj(n), 沒顯示出來),這個議題我們留在下回再說明。 RNN演算法如下: netk(n) = Σj WkjOj(n) (1) Ok(n) = sigmoid(netk(n))) (2) netj(n) = ΣiWjiXi(n) + ΣlrjlOl(n-1) (3) Oj(n) = sigmoid(netj(n))) (4) sigmoid(x) = 1/(1+℮^-x) (5)


原文網址 石小川
2019-12-23 08:25:25

樹莓派都已經來到第四代了,四核心、RAM 4GB,運算能力已大幅提升,便宜的電腦可做很多事,早期 Z80 CPU八位元電腦就可做六軸機器手控制了,相較樹莓派這種等級 ~ Raspberry-Pi 4B根本就是超級迷你微電腦了,同學可要好好利用啊! 有興趣的朋友可玩看看。

分享一下網友安裝過程:

https://william-weng.github.io/…/…/raspberry-pi-helloworld/…

Steve Wu
2019-12-23 08:32:58

目前p3拿來裝recall box ? !給小朋友玩 ? !


原文網址 石小川
2019-12-19 11:59:26

目前自動化機器很多都是用虛擬儀表板來顯示機器狀態,例如飛行儀表板(圖1、2),今天跟大家分享一下如何用Python+ PyQt5設計出夠炫的虛擬儀錶,沒時間寫註解,貼上程式碼,有問題可互相討論! ? ? Step1. 準備一個背景透明的儀表png圖檔(圖3)。 ? Step2. 用Qt Designer設計UI(不熟悉話,可先找我之前寫的文章K一下)(圖4)。 當然也可以不經過PyQt5設計UI,只不過有工具來設計介面程式會省時多了。 ? Step3. 設計虛擬儀表類別class QGauge(QWidget)。 在此雖然表示轉速,但套用不同的公式也可以表示溫度、壓力、高度、流量等。 我直接貼程式(gauge.py)如下: #----------------------------------- # gauge.py #----------------------------------- # -*- coding: utf-8 -*- ''' 石小川 / Michael Shih 光騰高科技工作室 / Quantum Tek. ''' #PyQt5模組 from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget from PyQt5.QtCore import Qt, pyqtSignal, QRect from PyQt5.QtGui import QPixmap, QImage, QIcon, QPainter, QPen, QBrush, QPalette #------------------------------------------------------------------------------ class QGauge(QWidget): rpmValueChanged = pyqtSignal(int) #轉速變化時發射的信號 #------------------------------------------------------------------------- def __init__(self, parent=None): super().__init__(parent) #self .__imageGauge = QImage(r'E:\Instrument\image\rpm.png') self.__imageGauge = QImage(r'rpm.png') self.__rpmValue = 10 self.color = Qt.green self._startAngle = -40 * 16 self._rotateAngle = 260 * 16 #------------------------------------------------------------------------- def rpm2Arc(self, rpm): start = 230 - rpm rotate = rpm return start * 16, rotate * 16 #------------------------------------------------------------------------- def set_rpmValue(self, rpm): self.__rpmValue = rpm self.rpmValueChanged.emit(rpm) self._startAngle, self._rotateAngle = self. rpm2Arc(rpm) self.repaint() #------------------------------------------------------------------------- def get_rpmValue(self): return self.__rpmValue #------------------------------------------------------------------------- def paintEvent(self, event): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) pen = QPen() pen.setWidth(10) if(self.__rpmValue < 115): self.color = Qt.green elif(self.__rpmValue > 115 and self.__rpmValue < 222): self.color = Qt.yellow elif(self.__rpmValue > 222): self.color = Qt.red pen.setColor(self.color) pen.setStyle(Qt.SolidLine) pen.setCapStyle(Qt.FlatCap) painter.setPen(pen) w = self.width() h = self.height() rect = QRect(0, 0, self.width(), self.height()) painter.drawImage(rect, self.__imageGauge) lw = w-50 lh = h-60 rect2 = QRect(85, 88, lw/2, lh/2) painter.drawArc(rect2, self._startAngle, self._rotateAngle)
Step4. 主程式,需引用QGauge類別(from gauge import QGauge)。
我直接貼程式(rpm.py)如下: #----------------------------------- # rpm.py #----------------------------------- # -*- coding: utf-8 -*- ''' 石小川 / Michael Shih 光騰高科技工作室 / Quantum Tek. ''' #引用程式會用到的模組 import sys #引用設計好的UI介面 from panel import Ui_MainWindow from gauge import QGauge #PyQt5模組 from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget from PyQt5 import QtWidgets from PyQt5.QtCore import Qt, pyqtSignal from PyQt5.QtGui import QPixmap, QImage, QIcon, QPainter, QPen, QBrush #------------------------------------------------------------------------------ #定義類別MyWindow繼承自已設計好的介面Ui_MainWindow #------------------------------------------------------------------------------ class MyWindow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): #類別初始化 super(MyWindow, self).__init__(parent) self.setupUi(self) self.setWindowTitle("Gauge - RPM x 1000") self.setWindowIcon(QIcon('COMPASS')) self.setFixedSize(361, 381) self.gauge.set_rpmValue(10) #------------------------------------------------------------------------- #刻度盤變化會執行此函數 def slider_valueChanged(self, value): self.gauge.set_rpmValue(value) #------------------------------------------------------------------------------ def main(): app = QApplication(sys.argv) myWin = MyWindow() myWin.show() sys.exit(app.exec_()) #------------------------------------------------------------------------------ if __name__ == '__main__': main()
Step 5. 執行結果。 轉速超過4000顯示黃色指示燈(圖5)。 ? 轉速超過8000顯示紅色指示燈(圖6)。 ?

林永仁
2019-12-19 12:01:12

哥借分享

Jade Yang
2019-12-19 12:07:53

Pablo Tseng
2019-12-19 12:09:56

哇 這資料找好久 感謝 感謝

Brian Lin
2019-12-20 17:56:04

好強⋯⋯圖控這一部分,我也找了好久。
感謝⋯⋯⋯⋯


原文網址 石小川
2019-12-16 09:18:25

分享給想要了解Mach3及USB控制卡如何通訊的朋友參考,可進一步修改成Python版本。

Mach3 USB程式是以HID裝置類型通訊協定作為溝通管道, 因為現在Windows 作業系統都有內建支援HID裝置的驅動程式, 所以焦點只要設計PC應用程式即可, 省掉很多麻煩事情.

如果用抓封包工具程式(Wireshark 或 Bus Hound)觀察Mach3 USB封包可得知, HID報告描述元(Report)的每次輸入/輸出資料交易是以61個位元組(Byte)為單位送出或接收, 只要解析這些位元組即可直接控制USB Mach3 CNC運動控制卡, 不須Mach3介入, 這樣做的好處是可以自已設計一些人工智慧演算法(例如影像辨識)去直接控制CNC機台做自動光學檢測(AOI), 或改裝CNC成機器手等. 當然有些非Mach3 CNC控制卡廠商有推出API開發包, 應用程式直接呼叫API就更方便了, 這樣就不需要了解煩人的底層封包問題, 不過這篇是要分享給想設計類似Mach3程式或製作USB Mach3 CNC運動控制卡的人參考, 由於資料太多, 不想洗板, 我就列出部分範例提供參考。

我的CNC機器裝置配備是USB Mach3 CNC六軸連動控制卡, 螺桿Pitch=5mm, 步進驅動128細分.

解析後的封包資料如下:
基本上Reset , M code, G Code都要解碼.

(A)繼電器控制
M204/M205碼我是規劃成繼電器控制警示燈
M204 Code(Output 7 ON) :
public string[] Output = { "02 06 58 00 09 20 00 00 f0 f7 19 00 97 b1 9d 06 44 f8 19 00 00 01 00 00 9c b4 9e 06 00 00 00 00 1c f8 19 00 0c f8 19 00 10 80 9d 06 44 f8 19 00 00 01 00 00 9c b4 9e 06 1c f8 19 00 00" };

M205 Code(Output 7 OFF) :
public string[] Output = { "02 06 58 00 09 00 00 00 f0 f7 19 00 97 b1 9d 06 44 f8 19 00 00 01 00 00 9c b4 9e 06 00 00 00 00 1c f8 19 00 0c f8 19 00 10 80 9d 06 44 f8 19 00 00 01 00 00 9c b4 9e 06 1c f8 19 00 00" };

p.s. 標註的02 06 58 是M控制碼, 09 20/09 00 是On/Off作動參數.

(B)步進馬達控制
G0 Xn Code :
public string[][] G0X = {
//G0 X0
new string[]
{"02 0e 55 e6 ff 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 06 df 59 77 34 ef 55 77 f8 5b 38 a0 00 00 00 00 00 c0 2c 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00",
"02 0e 55 b4 ff 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 06 df 59 77 34 ef 55 77 f8 5b 38 a0 00 00 00 00 00 c0 2c 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00",
.
.
};

p.s. 標註的02 0e 55 是G0控制碼, e6 ff/b4 ff 是馬達脈衝參數.

另外值得一提的是Mach3步進馬達的脈衝控制是以圖中(G0 X5)所示的方式控制, 只要遵照斜率及內插數值就可組合出想要馬達移動的距離及速度了, 如果是六軸連動當然更複雜了!

沒圖沒真相, 最後簡單的寫了一個小程式Demo一下, 有興趣的朋友可參考一下囉!


原文網址 石小川
2019-12-15 17:44:44

對於Linux工程師來說內嵌系統交叉編譯環境的建立較複雜, 手動編譯起來時常是一個噩夢, 其實只要資料完備不會很困難, 下面我把一些講義分享出來給有需要的好友參考一下, 期望可以少走一些冤枉路! 我PC的Linux作業系統版本是Fedora 20-i386, Embedded system 是ARM11板子的內嵌系統, 我在PC開發的程式是Qt5.4.1, opencv是3.1.0, PC開發環境下寫好的程式再移植到ARM11板子上, 可正常運作, 沒圖沒真相, 如圖程式是usb camera程式, 可顯示JPG照片及動態顯示攝影機視訊! 由於QT 及 OpenCV arm-linux交叉編譯比較冗長, 我再另闢專欄解說, 這之前我先列出交叉編譯需要用到的一些程式庫的編譯詳細步驟, 有不清楚的地方也可跟我討論一下! //-------------------------------------------------------------------------------
Linux交叉編譯環境建立 講義 交叉編譯(Cross compiler)是在一種處理器架構平台上(如PC-x86架構,此稱PC平台)編譯連結成另一個處理器架構平台(如ARM架構,此稱Target平台)所能執行程式的工具軟體。 A. PC-x86平台環境建立步驟
(1)Install Fedora 20
Download Linux OS,版本為Fedora20-i386-DVD.iso,燒寫
至光碟片,然後安裝作業系統到PC。
先更新作業系統。
yum update -y (2)Install Fedora 20相關工具軟體
yum install –y filezilla putty cmake cmake-gui gcc gcc-c++
yum install –y automake libtool tslib (3)Install arm-linux-gcc
(3-1)解壓縮arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz
執行Fedora 20>>終端機程式,輸入:
tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz –C /opt/,解壓縮將arm-linux-gcc-4.5.1安裝到/opt/FriendlyARM/toolschain/4.5.1。
p.s. 路徑一定要放在此(/opt/),不能更改,否則會錯誤。
(3-2)將arm-linux-gcc的路徑加到系統環境變數中
method 1. 修改檔案.bashrc(個人環境)
用vi 編輯 /root/.bashrc
最後一行加上:
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin
儲存後OS重新登錄User即可作用。
method 2. 修改檔案 /etc/profile(全域環境)
最後一行加上:
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin
儲存後須重新開機始可作用。
(3-3)在終端機輸入arm-linux-gcc –v,如果有gcc相關資訊顯示出來表示設定成功。 (4)交叉編譯相關程式庫
如果沒用到可選擇跳過不安裝,詳細交叉編譯方法請看附錄A。
(4-1)交叉編譯tslib
觸控面板驅動函式庫。
(4-2)交叉編譯ffmpeg
影片播放與轉檔函式庫。
(4-3)交叉編譯gtk
圖形介面開發套件。
(4-4)交叉編譯jpeg
Jpeg功能函式庫。
(4-5)交叉編譯png
Png功能函式庫。
(4-6)交叉編譯x264
X264編碼器函式庫。
(4-7)交叉編譯yasm
編譯ffmpeg時可指定用yasm指令編譯,提高編譯速度。
(4-8)交叉編譯zlib
資料壓縮函式庫。
(4-9)交叉編譯qt5.4.1
跨平台的c++應用程式開發工具。 (5)Install Qt Creator
到Qt官方網站:
https://www.qt.io/download-open-source/#section-2
選擇下載Qt Online Installer for Linux 32-bit 線上安裝Qt Creator相關程式。安裝程式會自動安裝PC平台的Qt,至於Target平台的Qt必須手動交叉編譯來安裝。
(為求系統穩定,盡量以Qt 5.4.1為開發版本。) (6)Install Opecv
到Opencv官方網站:
http://opencv.org/downloads.html
選擇下載Opencv-3.1.0.zip 附錄A
A-1. 交叉編譯tslib
功能: 觸控面板驅動函式庫。
在終端機按照步驟輸入指令如下:
(1)git clone https://github.com/kergoth/tslib
//download tslib source code
(2) cp /root/tslib /opt/ -r
//copy /root/tslib to /opt
(3)cd /opt/tslib
//change dir to /tslib
(4)./autogen.sh
//執行安裝腳本
(5) ./configure CC=arm-linux-gcc CXX=CC=arm-linux-g++ --prefix=/opt/tslib-arm --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
//配置tslib
(5) make
//產生makefile
(6) make install
//編譯完成後函示庫自動安裝到 /opt/tslib-arm A-2. 交叉編譯zlib
功能: 提共資料壓縮之用的函式庫。
在終端機按照步驟輸入指令如下:
(1) download and copy zlib-1.2.8 to /opt
(2) cd /opt/ zlib-1.2.8
(3) CC=arm-linux-gcc ./configure --prefix=/opt/zlib-arm
(4) make
(5) make install A-3. 交叉編譯jpeg
功能: jpeg函式庫。
在終端機按照步驟輸入指令如下:
(1) download and copy jpeg-9 to /opt
(2) cd /opt/ jpeg-9
(3) CC=arm-linux-gcc ./configure --prefix=/opt/jpeg9-arm -- host=arm-linux
(4) make
(5) make install A-3. 交叉編譯png
功能: png函式庫。
在終端機按照步驟輸入指令如下:
(1) download and copy libpng-1.6.23 to /opt
(2) cd /opt/ libpng-1.6.23
(3) ./configure CC=arm-linux-gcc --prefix=/opt/png-arm -- host=arm-linux
(4) make
(5) make install A-4. 交叉編譯yasm
功能: yasm指令可提高編譯ffmpeg速度。
在終端機按照步驟輸入指令如下:
(1)download and copy yasm-1.3.0 to /opt
(2)cd /opt/ yasm-1.3.0
(3)./configure CC=arm-linux-gcc --prefix=/opt/yasm-arm --host=arm-linux
(4)make
(5)make install A-5. 交叉編譯x264
功能: x264編碼器函式庫。
在終端機按照步驟輸入指令如下:
(1)download and copy x264-snapshot-20160220-2245-stable to /opt
(2)cd /opt/x264-snapshot-20160220-2245-stable
(3)./configure CC=arm-linux-gcc --enable-shared --host=arm-linux --disable-asm --prefix=/opt/x264-arm
(4)make
(5)make install A-6. 交叉編譯ffmpeg
功能: 影片播放與轉檔函式庫。
在終端機按照步驟輸入指令如下:
(1) download and copy ffmpeg-3.1.1 to /opt
(或直接下載: git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg)
(2)cd /opt/ ffmpeg-3.1.1
(3)./configure --enable-cross-compile --cc=arm-linux-gcc --arch=arm --target-os=linux --enable-shared --enable-gpl --disable-stripping --enable-pthreads --enable-small --disable-parsers --disable-optimizations --disable-yasm --disable-armv6 --disable-static --disable-amd3dnow --prefix=/opt/ffmpeg-arm
(4)make
(5)make install

Jade Yang
2019-12-15 18:43:39

林永仁
2019-12-16 09:09:29


 

全不選 發文排行