2014年7月19日 星期六
2014年7月3日 星期四
2014年7月2日 星期三
Desktop Manipulator
Erick and I cooperated and did it in this semester.
We make it from scratch. Erick deal with mechanism design and manufacturing and Im in charge of control.
Our design procedure is followed this flow chart.
Erick cares so many details. One thing we may encounter is that the linkage is quadratic loop equation. When we solve it, two solution will come out that can cause link crossover situation.
Zoom in and see what assembly in detail.
First time test video
We make it from scratch. Erick deal with mechanism design and manufacturing and Im in charge of control.
Our design procedure is followed this flow chart.
Erick cares so many details. One thing we may encounter is that the linkage is quadratic loop equation. When we solve it, two solution will come out that can cause link crossover situation.
Zoom in and see what assembly in detail.
First time test video
2014年6月26日 星期四
Mechanical Experiment Improvement
有幸為母校成大機械系設計一堂機械工程實驗課程 (還有幸今天可以打中文XD)
這堂課的設計目標是因為目前開源硬體非常流行(像是Arduino、Raspberry Pi),售價不斷下降時效能卻大幅提升。我想利用Open-Source的軟體硬體,製作在機械工程中非常重要的PID控制器。
在這堂課程的基礎上,日後可以設計小型的Term Project,利用PID控制馬達來達成應用,像是倒單擺的實踐或是輪型機器人的精準控制等等。
本實驗的核心精神在於利用開源的軟體以及硬體,來實作課程中學到的理論,並且解決其中的問題,讓課堂的學習以及實驗課的操作相輔相成,訓練出實作與理論兼具的機械工程師。
這堂課的設計目標是因為目前開源硬體非常流行(像是Arduino、Raspberry Pi),售價不斷下降時效能卻大幅提升。我想利用Open-Source的軟體硬體,製作在機械工程中非常重要的PID控制器。
上課的流程是這樣的
在硬體方面,系統架構如下
(實作時的紀錄可以參考: 之前)
最後冠冕堂晃的說
在這堂課程的基礎上,日後可以設計小型的Term Project,利用PID控制馬達來達成應用,像是倒單擺的實踐或是輪型機器人的精準控制等等。
本實驗的核心精神在於利用開源的軟體以及硬體,來實作課程中學到的理論,並且解決其中的問題,讓課堂的學習以及實驗課的操作相輔相成,訓練出實作與理論兼具的機械工程師。
2014年6月23日 星期一
Dillon - Thirteen Thirtyfive
Pretty like this song
Strongest taste
loudest drop
head is filled
the thought, unlocked
you'd be thirteen
i'd be thirty-five
gone to find a place for us to hide
be together but alone
as the need for it has grown
a cave or a shed
a car or a bed
a hole in the ground
or a burial mound
a bush or a tree
or the aegean sea will do for me
for you i found a vent
in the bottom of a coal mine
just enough space for your hands in the inside
if you go
do let me know
a den or a dessert
perhaps an ink squirt
a cellar, a wishing well, a war
or a guarantee will do for me
for you i found a cell
on the top floor of a prison
just enough space for you to fit your feet in
if you go
please let me know
Strongest taste
loudest drop
head is filled
the thought, unlocked
you'd be thirteen
i'd be thirty-five
gone to find a place for us to hide
be together but alone
as the need for it has grown
a cave or a shed
a car or a bed
a hole in the ground
or a burial mound
a bush or a tree
or the aegean sea will do for me
for you i found a vent
in the bottom of a coal mine
just enough space for your hands in the inside
if you go
do let me know
a den or a dessert
perhaps an ink squirt
a cellar, a wishing well, a war
or a guarantee will do for me
for you i found a cell
on the top floor of a prison
just enough space for you to fit your feet in
if you go
please let me know
Chinese lyrics refer to: http://www.lyricsmania.com/thirteen_thirty-five_lyrics_dillon.html
2014年6月22日 星期日
New Toy - PX4FLOW
I just received the notice that my toy arrived! It is PX4FLOW, you can find more information here: https://pixhawk.org/modules/px4flow
It is highly sensor-integrated device. The device fused optical flow CMOS camera, sonar sensor and gyro.
Besides, its CPU is STM32F4 which I have some experience about this Cortex M4 core. I want to implement some algorithm on it achieving visual odometry.
Test it on qGrouncontrol-pixhawk
ps. PX4FLOW can be bought here: http://goods.ruten.com.tw/item/show?21405213979317
It is highly sensor-integrated device. The device fused optical flow CMOS camera, sonar sensor and gyro.
Besides, its CPU is STM32F4 which I have some experience about this Cortex M4 core. I want to implement some algorithm on it achieving visual odometry.
Test it on qGrouncontrol-pixhawk
ps. PX4FLOW can be bought here: http://goods.ruten.com.tw/item/show?21405213979317
2014年6月21日 星期六
(Shared) 15 Free eBooks On Machine Learning!
See this great news on: electronisforu
hyperlinks of 15 books are listed below
- The LION Way: Machine Learning plus Intelligent Optimization
- A Course in Machine Learning
- A First Encounter with Machine Learning
- Bayesian Reasoning and Machine Learning
- Introduction to Machine Learning
- The Elements of Statistical Learning: Data Mining, Inference, and Prediction
- Reinforcement Learning
- Machine Learning
- Reinforcement Learning: An Introduction
- Gaussian Processes for Machine Learning
- Machine Learning, Neural and Statistical Classification
- Introduction To Machine Learning
- Inductive Logic Programming: Techniques and Applications
- Practical Artificial Intelligence Programming in Java
- Information Theory, Inference, and Learning Algorithms
2014年6月20日 星期五
PID Performance Indices
When writing the PID Lab program, I need some indices for evaluate the controller.
There are three useful values:
- Rise Time: time duration from 10% to 90% of final value
- Settling Time: time to approach the final value (within the error band)
- Time Constant: when output value approaches 63.2% of desired value
But I encounter a strange phenomenon that sometimes it soon to complete controlling and sometimes not. (about 4-1) And the first run is the longest and is prone to find steady state error.
BBB Serial Debug
Just a quick Note
- J1 = GND (Ground)
- J2 = CTS
- J3 = VCC (5V)
- J4 = RXD (Receive Data)
- J5 = TXD (Transmit Data)
- J6 = RTS
And its pin map
2014年6月19日 星期四
Compiling uROSnode
uROSnode
We can find it on Github: https://github.com/openrobots-dev/uROSnode
It is a great work for MCU can run ROS.
https://dl.dropboxusercontent.com/u/2771793/uros/doc/html/pag_demos.html
One great explainition about this project: pdf
ROSCon: http://vimeo.com/66970254
Problem 1:
Compiling ./src/urosUser.c
In file included from ../../include/urosUser.h:45:0,
from ./src/urosUser.c:42:
./src/urosUser.c: In function 'urosUserParamUpdate':
./src/urosUser.c:353:21: error: 'UrosRpcParam' has no member named 'class'
urosError(paramp->class != UROS_RPCP_INT, return UROS_ERR_BADPARAM,
^
../../include/urosBase.h:323:50: note: in definition of macro 'urosError'
# define urosError(when, action, msgargs) { if (when) { action; } }
^
./src/urosUser.c:368:21: error: 'UrosRpcParam' has no member named 'class'
urosError(paramp->class != UROS_RPCP_INT, return UROS_ERR_BADPARAM,
^
../../include/urosBase.h:323:50: note: in definition of macro 'urosError'
# define urosError(when, action, msgargs) { if (when) { action; } }
^
./src/urosUser.c:383:21: error: 'UrosRpcParam' has no member named 'class'
urosError(paramp->class != UROS_RPCP_INT, return UROS_ERR_BADPARAM,
^
../../include/urosBase.h:323:50: note: in definition of macro 'urosError'
# define urosError(when, action, msgargs) { if (when) { action; } }
^
make: *** [build/obj/urosUser.o] Error 1
Fix:
Find the struct in uROSnode/include/urosRpcCall.h
Problem 2:
/src/lld/lwip/uros_lld_conn.c:784: undefined reference to `netconn_set_sendtimeout'
cause they have no instance.
We can find it on Github: https://github.com/openrobots-dev/uROSnode
It is a great work for MCU can run ROS.
https://dl.dropboxusercontent.com/u/2771793/uros/doc/html/pag_demos.html
One great explainition about this project: pdf
ROSCon: http://vimeo.com/66970254
Problem 1:
Compiling ./src/urosUser.c
In file included from ../../include/urosUser.h:45:0,
from ./src/urosUser.c:42:
./src/urosUser.c: In function 'urosUserParamUpdate':
./src/urosUser.c:353:21: error: 'UrosRpcParam' has no member named 'class'
urosError(paramp->class != UROS_RPCP_INT, return UROS_ERR_BADPARAM,
^
../../include/urosBase.h:323:50: note: in definition of macro 'urosError'
# define urosError(when, action, msgargs) { if (when) { action; } }
^
./src/urosUser.c:368:21: error: 'UrosRpcParam' has no member named 'class'
urosError(paramp->class != UROS_RPCP_INT, return UROS_ERR_BADPARAM,
^
../../include/urosBase.h:323:50: note: in definition of macro 'urosError'
# define urosError(when, action, msgargs) { if (when) { action; } }
^
./src/urosUser.c:383:21: error: 'UrosRpcParam' has no member named 'class'
urosError(paramp->class != UROS_RPCP_INT, return UROS_ERR_BADPARAM,
^
../../include/urosBase.h:323:50: note: in definition of macro 'urosError'
# define urosError(when, action, msgargs) { if (when) { action; } }
^
make: *** [build/obj/urosUser.o] Error 1
Fix:
Find the struct in uROSnode/include/urosRpcCall.h
typedef struct UrosRpcParam {
uros_rpcparamclass_t pclass; /**< @brief Parameter pclass.*/
union {
UrosString string; /**< @brief XMLRPC string.*/
int32_t int32; /**< @brief XMLRPC int/i4.*/
uros_bool_t boolean; /**< @brief XMLRPC boolean.*/
double real; /**< @brief XMLRPC double.*/
UrosString base64; /**< @brief XMLRPC base64.*/
void *mapp; /**< @brief XMLRPC struct (map pointer).*/ /* TODO */
struct UrosRpcParamList *listp; /**< @brief XMLRPC array (list pointer).*/
} value; /**< @brief Parameter value.*/
} UrosRpcParam;
Then, just change the variable name from class to pclass. The error seems caused by typo.
Problem 2:
/src/lld/lwip/uros_lld_conn.c:784: undefined reference to `netconn_set_sendtimeout'
At first, I think it seems the lwip version caused error.
Change from 1.4.0 to 1.4.1
However, problem still exist.
/../../ext/lwip/src/api/api_lib.c:627: undefined reference to `sys_now'build/obj/api_msg.o: In function `do_writemore':/home/kv/rosnode/ChibiOS_2.5.1/demos/uROSnode/demos/turtlesim-chibios+lwip/../../../../ext/lwip/src/api/api_msg.c:1228: undefined reference to `sys_now'collect2: error: ld returned 1 exit statusmake: *** [build/turtlesim.elf] Error 1
Fix:
Then i just do the dirty thing. That I comment sys_now in
lwip/src/api/api_msg.c
and
lwip/src/api/api_lib.c
Finally, the compilation is d
one.
one.
st-flash write build/turtlesim.bin 0x08000000
2014-06-19T16:29:51 INFO src/stlink-common.c: Starting verification of write complete
2014-06-19T16:29:54 INFO src/stlink-common.c: Flash written and verified! jolly good!
But it doesn't Run! Obviously, we have different hardware module with their.
2014年6月18日 星期三
DC Motor Speed PID Control with Arduino
It is a new MechLab for NCKU ME next semester, a PID controller!
Hardware:
Hardware:
- Arduino Mega2560
- Motor Shield: Dual H-brigde VNH2SP30
- Due to there is no lib of this shield, I modify the dual-vnh5019 Lib to fit the goal
- Github: https://github.com/kvzhao/DualVNH2SH30MotorShield
- DC Motor - IG42
- I also write a C++ wrapper for this motor, utilizing Encoder lib(also a little modify for constructor) and VNH2SP30 lib
- Github: https://github.com/kvzhao/DCMotorIG42
Source Code on Github: https://github.com/kvzhao/ME-PIDLab
The crucial part of the PID code is listed below
void loop() { // Run a period to estimate more precise speed Motor.Tick(); // Run for one Second delay(SamplingTime); Motor.Tock(); // Read rotation speed from Encoder Input = Motor.getSpeedRPS(); // PID Compute PID_Controller.Compute(); if ((Output-prevOutput) >= oscGap) { //Output = prevOutput; } Motor.setSpeed(Output); prevOutput = Output; // Show Data /* Serial.print("Input: "); Serial.println(Input); Serial.print("Setpoint: "); Serial.println(Setpoint); Serial.print("Error: "); Serial.println(error); Serial.print("Output: "); Serial.println(Output);*/ Serial.println(error); // wait a little while delay(5); }
My first test result (with KP=98, KI=8, PD=5)
There is almost no steady state error, however overshoot happens.
Next step is to tune the parameters and control the motor smoothly!
Some useful references
- http://www.robotroom.com/PWM5.html
- http://www.precisionmicrodrives.com/application-notes-technical-guides/application-bulletins/ab-012-driving-vibration-motors-with-pwm
- http://lancet.mit.edu/motors/motors3.html
- http://mechatronics.mech.northwestern.edu/design_ref/actuators/motor_theory.html
- http://www.roadtocreate.com/?tag=vnh2sp30
- http://www.pololu.com/product/537
2014年6月17日 星期二
Ypcto Project
參考 :Tutorial from ROS.org
- Ypcto Project
- Yocto Project 是一個協助建立 Linux 嵌入系統的專案,Yocto 專案包含建立客製 Linux 發行版本的各種工具。
- Intel Galileo initial Yocto image install
2014年2月14日 星期五
C your Arduino in different way
Articles about programming Arduino with pure C.
Good tool for building Arduino in command-line mode.
2014年2月13日 星期四
Good articles about Arduino and IMU
Kalman filter is the one of the filter, or signal processing technique that lures me.
I wanna make a small system (via Arduino) to implement it and act as the lab material of embedded system tutorial.
Some useful websites and source code listing here :
I wanna make a small system (via Arduino) to implement it and act as the lab material of embedded system tutorial.
Some useful websites and source code listing here :
2014年1月2日 星期四
Syringe Pump v2 : 6 stage step motor set
從去年開始實作了第一版本的Syringe Pump,幫助材料系的Graphene Lab可以從事薄膜等等的實驗。
功能
硬體
功能
- 讀取腳本,批次的控制六顆馬達
- 手動直接操作
硬體
- 六個壓克力幫浦臺
- Seeedurino MCU
- 6 Steppers
- 6 Easy Driver
軟體
- Arduino IDE
- C# for GUI
Stepper Easy Driver - 設計為自己寫腳本(我們自己定義的語法),讓程式讀取
- 程式會一行一行解析腳本,然後送出指令
- 目前支援
- 控制步伐,轉速,系統待機
- 支援馬達同步 進行相同指令
整體系統
六個幫浦組 |
注射針筒 |
實驗發生的反應槽 |
利用金箔來測試有沒有振動發生 |
NOW, We are moving on!
因為這個系統不強健,有很多帶解決的問題(後面詳述)
由於第一版希望學長能盡快開始實驗,很多功能相當簡陋;另外也因為從頭打造,現實會發生的問題沒有考慮到。
將設計第二版 v2 ,這次重點將已系統的可靠度以及汎用性作考量,有以下的修改及加強。
v2 Modification
- 電路從麵包版換成自己焊接,留下IC座考慮以後容易更換
- 設計電源開關,考慮是否需要 Pull-up Resistor
- 界面首先已Qt4 (or Qt5) 重寫(因為C#檔案已經不見)
- 界面需要一個LabView版本,考慮外包
- 讀檔,一行一行parse然後透過UART送出
- 電路盒子(需屏蔽?)
v2 New Function
主要在韌體上考慮新功能,讓實驗更容易進行
- 兩顆馬達同步
- 待機時不激磁(No holding)
- 慢進快退,馬達進退速度不同要考慮
- 設定Home,當實驗結束可以回到固定地點
- 除了絕對位置以外,提供相對圈數 兩種控制方式
102-2 Courses
理想的課表,1/5選課
- Mon
- 多媒體系統與應用 [1]5~7 F7-128
- [1]7~8 [4]4 DSP N1-035
- Tue
- 輸出入裝置與驅動程式設計 [2]2~4 P7-071
- 嵌入式作業系統設計、實作與移植 [2]7~9 F7-120
- Wed
擴增實境與體感互動系統開發專論 [3]6~8 P7-090- 訊號與系統 [3]6~8 F7-134
- 電子導航 [3] 2~4 N2 019
- Thur
- Fri
- 編譯系統 [5]6~8 F7-106
第一階段選完,預料之為Parallel programming 看起來滿有趣的,最後應該會把Compiler 退掉。
2014年1月1日 星期三
Shopping List : Robot Hardware
訂閱:
文章 (Atom)