My Welcome Picture

Junhan Zhou

Hello, my name is Junhan Zhou, I'm a ECE master student graduating at Carnegie Mellon. I have a wide range of interests as you may find out by the various kinds of projects I have done throughout the years. I use this website to archive them, as well as any other relevant things that I can brag about that I find.


Projects


skinTrack thumbnail

SkinTrack: Using the Body as an Electrical Waveguide for Continuous Finger Tracking on the Skin

Yang Zhang, Junhan Zhou, Gierad Laput, Chris Harrison (CHI 2016)

SkinTrack enables continuous touch tracking on the skin. It consists of a ring, which emits a continuous high frequency AC signal, and a sensing wristband with multiple electrodes. SkinTrack measures phase differences to compute a 2D finger touch coordinate. Our approach is compact, non-invasive, low-cost and low-powered. We envision the technology being integrated into future smartwatches, supporting rich touch interactions beyond the confines of the small touchscreen.

Kernel thumbnail

Writing a Kernel From Scratch

Class project for 15-410/605 Operating System Design and Implementations

Implemented a working kernel for the x86 single core architecture with the usual thread management, virtual memory management, system call services and driver implementations. Also implemented a bare bone Flood-it game, a user level thread library providing synchronization APIs along the way and finally modified the kernel to support user level thread message passing and user level device drivers.

Skyline thumbnail

FPGA-based Continous Skyline Computation

Class project for 18-643 Reconfigurable Logic: Technology, Architecture and Applications (MEMOCODE 2015)

Using the Zedboard with the ZYNQ™-7000 SoC which contains a Dual ARM® Cortex™-A9 MPCore™ and programmable logic on a single chip, implemented the computation of the continous skyline problem on the ARM core while using the programmable logic as a hardware accelerator kernel to speedup the core computation.

MIPS thumbnail

Implementation of a MIPS machine

Class project for 18-447 Introduction to Computer Architecture

Using System Verilog, wrote a working synthesizable MIPS machine that can take in MIPS opcodes, later extended it to be five stages pipelined and have local and global branch predictions or data caches. At the end also wrote a functional C timing simulator for the MIPS machine to simulate the timing behaviors with branch predictions and caching.

person track thumbnail

Person Tracking Under Projector Noise

Class project for 16-720 Computer Vision

Given a stream of video with a person in front of a projected screen and the actual stream of the projector input, implemented an extracting algorithm that can extract the foreground person from the background image dealing with the noise introduced by the projector overlaying the foreground person, and then can produce a video with the foreground person overlayed with the original projected screen so that people taking courses at home can see clearly where the instructor is pointing to while not seeing a blurry background presentation slide.

how much did it rain thumbnail

How Much Did It Rain

Class project for 10-701 Introduction to Machine Learning (A Kaggle Competition)

Given snapshots of polarimetric radar values over fields, first did data processing to get rid of erroneous data and outliers, then used several machine learing algorithms to predict the hourly rain gauge total.

sumobot thumbnail

Sumobot Competition

My Bachelor Capstone Project done in Concordia University, Montreal Canada

Compete in a sumobot competition where in a round arena two contestant and a referee robot stands, the goal is push the opponent out of the ring while staying in the ring and not touching the referee. The robot is autonomous using an ATmega8 as the main controller, reading inputs from various IR, contact and line sensors while controlling four motors and a servo. The robot have to perserve enough power to finish all the competition at one charge, so it dynamically adjust its output speed using PWM depending on combat, patrol or tracking mode. This is a limit of the budget for the robot so everything have to be used to the spot.

cellrobot thumbnail

Cellrobot: A Modular Robot From the Future

2013 Capital Challange Cup Extraordinary Prize

Cellrobot is a modular robot, where the basic module aka "cell" can be attached to one another to form robots of all kinds of shapes and functions. Each "cell" have six attachable faces and a motor to allow it to spin by itself. By attaching cells together it gains DoF and can perform various actions as required. This version also had a detachable camera that can be installed to further expand it's capabilities. This project have later evolved into a startup company.

ballball thumbnail

Ballball: A Metamorphosis Multipurpose Robot

2013 Beihang University Fengru Cup First Prize

Ballball is a sphere shaped robot that can not only walk on its six legs but can also roll as a ball, it is remotely controlled using Zigbee and is capable of carrying a lightweight drone in its upper half sphere which can be dispatched.

ellie thumbnail

Ellie: A Robotic Elephant Nose Using SMA

2013 Beihang University Fengru Cup Second Prize

Ellie is a robotic elephant nose mode with SMA (Shape Memory Alloy aka Muscle Wire), without using any electromechanicial moving parts and just relaying on the SMA itself, Ellie is capable of bending around like a real elephant nose, the tip of Ellie also have grasps that can grip onto things just like an elephant nose. The heating rate of the SMA is controlled to produce various stiffness of the SMA spring resulting in different bendings of the robotic nose.

pTouch thumbnail

A Novel HCI Interface Based on Computer Vision

Funded by the National Undergraduate Training Programs for Innovation and Entrepreneurship in China

Turning every surface into a touchscreen. Using a camera positioning at a surface, when a hand enters it can track the hand. Laying a microphone on the surface, it can pick up when that surface is touched. Combining those two and when and where the hand is touching is known, effectively making any surface a interactable touch screen. If intending to make a moniter a touchscreen, it can self calibrate the angle of the camera to get the perspective of the moniter, and when the finger is touched using Win32 APIs the system can treat this action as a normal mouse click. This later inspired my other project to get rid of projector overlaying noise to be able to also work with projector surfaces.

ICM thumbnail

A Network of Networks on Earth’s Health

Honorable Mention for Interdisciplinary Contest in Modeling (ICM) in 2013

Built a two layer network model to predict Earth's health, where the networks on the first layer is the node on the second layer. The first layer is for modeling at the regional level, where each country have it's own policies to deal with it's own envirnment as well as the differences in natural and artificial envirnments. But the earth also acts as a whole as air and water polution etc. wouldn't be bounded by a region, it expands, so we also modeled a second network connecting all the regions together. We also experienced by enforcing or removing several policies how it would affect the outcome.

oscilloscope thumbnail

A Working Oscilloscope Prototype

Just For Fun...

A working but low refresh rate oscilloscope. The input is first preprocessed using several relay channels for coarse granularity adjustment, then going through a DAC op amp circuit for fine tuning, then the input is being sampled by a fast pipelined ADC and buffered into a FIFO, after a burst of sampling the microcontroller reads the data out of the FIFO and displays it on a 320x240 LCD screen.

msp430 thumbnail

Fixed Amplitude Amplifier

Second Prize for 2012 Beijing College-student Electronics Design Contest (TI Cup)

Implemented a controlled gain amplifier that first sample the raw signal, then the msp430 microcontroller adjust the gain ratio so that the output signal's amplitude stays the same. It have to deal with signals in different frequency ranges.

gsm thumbnail

Remote LED Display Monitor

2012 Beihang University Fengru Cup Fourth Prize

By attaching this device on to an LED display's pins and reading it's high/low level signals, it can infer what the LED is displaying. It can be setup that when the value goes below a certain reading to send a SMS to a given phone number alerting of the event. It can be used in places like setting this up onto an ammeter so that when the available electricity is below a certain level warns the user about it to buy more electricity. A GSM module is used to send SMS and is controlled via AT commands by the microcontroller.

calculator thumbnail

A Calculator for Common China High School Math Problems

Written to do my high school math homework more efficiently...

Written in VB, this program is a combination of several problems which each address a commonly met math problem, functionality includes: solving linear equations with two unknown variables, deciding if given number is a prime or factor it, getting the area of any triangle given the three side length, solving quadratic equation with single unknown variable, getting the greatest common divisor and least common multiple of two given numbers, switching bases for numbers (supporting binary up to the 35th base (used by z)), summing of common sequence numbers, an everyday basic calculator, solving the mean and variance of several numbers...

program thumbnail

A Function Plotter and my Nickname as a Function

My first ever written program! (Aside from hello world)

Written in VB, this program can plot any functions you give it, supports advanced functions like modulus, signed operations etc. Later added support for plotting in polar coordinates. The default function it plots is my nickname. By using a fast growing function like xx and taking the modulus of it by a constant number say 2, we can see that there seems to be more then one line appearing at the same time, and by expanding this phenomenon I was able to draw my nickname out with a function.


Capabilities


My "brief" technical story. For more see timeline

All I can do is coding. I never wanted to be just a coder sitting all day long in front of a monitor (or several). It was fun typing code and seeing things coming to action on the other side of the screen, but then I wanted more, I wanted things on this side to also automate, so I chose automation when entering university. Along the way, I've learnt how to use microcontrollers, first the basics, then after various prototypes, projects and contest, I was confident that I was good at it. When I was entering my junior year, I was really inspired by Sixsense and later by OmniTouch which showed me a completely different way of grasping the virtual to the physical world. So naturally I tried doing something alike, trying to make every surface interactable in the real world. Also I took upon pattern recognition as my specific major to get a sense of the world of computer vision, maching learning, artificial intelligence etc. At the same time, I was also involved in several robotic projects. I was the main charge for the control system, dealing with various tasks in the MCU like controlling servos, reading sensor inputs and communicating with the host which I was also in charge of. It was at that time that I realized some sort of a system was needed to sort out all the various tasks, so I wrote a basic one after playing around with μC/OS. Later when I graduated and was admitted by CMU, I took Introduction to Computer Systems which opened me up in the systems level of the computer, which was really what I needed. So when I came here, I took courses that made me understand the lower level of the computer, like Computer Architecture and Operation Systems. It was also coincidence that I had a chance to serve as a research assistant for the summer at Figlab, which was directed by the author of OmniTouch. While here at CMU, I also took the chance to bring my skills to the next level, taking PhD level courses on Computer Vision and Maching Learning, getting to know FPGA and parallel computing for accelerating computations, not forgetting the basics of algorithms and data structures, and is now peeping into LLVM to know more about compilers. Below are some knowledge and skills that I have accumulated over the years.

Knowledge and Skills

As a general coder...
  • I can code in a variety of different languages (C, C++, C#, Java, Visual Basic, matlab...), and is fast to pick up more (imperative, object-oriented, scientific, hardware descriptive,scripting, functional etc.).
  • Know some algorithms and data structures, thinking not only about the asymptotic complexity, but also the cache hit rate, the span and parallelism for parallel computing, various race condition handling etc. and do not believe in hashes most of the time
  • Try to make my code as readable and modular as possible, used doxygen before, and easy to reuse and modify to fit various changes. Aka not suitable for fast prototyping, and I mean fast...
  • Very good at debugging. Self claimed at least.
  • Uses git for version control in various projects.
As an embedded engineer...
  • Used various different microcontrollers( 8051, AVR Atmega series, msp430, STM32), can just read the corresponding datasheet to get used to a new one.
  • Understand various common used protocols(SPI, I2C, UART etc.), basic peripherals (ADC, DAC, timer etc.), knows interrupt too well and can hardcode their drivers from scratch if required
  • Good with reading a datasheet to see how to use a new given chip, and can also write drivers for it if necessary.
  • Know basic circuit designs, how to exploit the op amp, the basic circuit for a MCU system etc. Unless dealing with high frequency circuits.
  • Dealt with μC/OS, can built a basic system to manage various basic on chip tasks. Touched WinCE and Linux on an embedded ARM system before.
  • Can manage the communication between MCUs, or MCU and the computer, whether using UART(and modules that can function like UART like Zigbee, Wifi, classic Bluetooth etc.), Bluetooth Low Energy, custom protocols etc.
  • Have used arduino, though do not favor it.
As a system software engineer...
  • Written a basic OS kernel(thread management, drivers, memory management, system calls, message passing etc.), as assignments also written malloc functions, a threading library(with mutexes), a shell, a proxy server etc. before.
  • Knows how the CPU works inside out (written one using Verilog), how the caller callee convention works on the stack, and exploited it extensively during kernel project.
  • Knows what is IPC/RPC and handcrafted both before, for RPC extended the local library to having caching capabilities that dealt with file inconsistency.
  • Dealt with an automic scaling up/down system that considers both response latency and running costs as a class project.
  • Dealt a lot with concurrency, using locks, avoiding deadlock, starvation. Fair scheduling. Some current methods like transactional memory and test and set, lock free data structures with a garbage collector that holds the biggest lock ever.
  • Also have a brief insight on how the hardware maintain coherency(MOESI), how the hardware REALLY executes instructions(OoO), various compiler optimizations, vertor processing(AVX instruction set) and how the GPU is just a big vector processor, alternatice VLIW architecture. And tries exploit these features.
As someone who majored in pattern recognition before...
  • Knows common machine learning algorithms and techniques, can handcraft various algorithms in matlab( exploiting parfor/bsxfun/arrayfun if able), or just use the Weka Java library to integrate it into own applications.
  • Knows common image processing algorithms concepts and algorithms, e.g. edge filters, compressing, camera perspective and image merging.
  • Along with image processing, also knows some common computer vision techniques, like interest point detection and tracking, image segmentation, classification etc.
  • Knows basic concepts of intelligent systems and artificial intelligence, like basic search algorithms, deductive method and used prolog. The more I learn about it, the more unintelligent I think it is.
As an application software engineer...
  • Programmed on the Android phone and wear before, know it's concepts and quick to pick up specific parts if required, worked with it's BLE module before.
  • Used Java SWT and C#/Visual Basic to create nice looking UI programs, programs using event driven concepts and delegates.
  • Used processing to make research prototyping applications.
  • Worked with Java sshj library to make a bulletin board for inner dorm member communcations, it can also auto update itself!
As a not so hardcore hardware engineer...
  • Used Verilog wrote a working MIPS pipelined machine with branch predictions or data cache.
  • Knows the main features that makes modern processors, like out of order execution with renaming buffers, memory controls and caching, modern features like vector processing units etc.
  • Knows the memory model, from DIMM to ranks to rows, the cost of a charge and row open, what the memory refresh influences etc.
  • Knows the basic architecture of an FPGA, can make a very very basic one out of LUTs.
  • Can use the FPGA as more then just glue logic, make it a hardware accelarator. Used Vivado and Vivado HLS.
As someone who worked on robots before...
  • Understand and know how to calculate the kinematic direct problem. The Inverse Problem is beyond my current scope.
  • Knows some basic concept of robotics, like the static indeterminacy stable is much harder then all the fancy static determinacy stable robots out there.
  • Have an insight of the basic structure of a robot.
  • Played with sequences of motions for how a robot can move.
  • Have excessive experience with the sensors and various motors used in the robot.
As a website constructor...
  • Made this personal webpage from scratch.
  • Used Asp.net before to make a dynamic webpage that served as a query for displaying of the processed result for the minimal vocabulary problem, where a user enters a word and the webpage displays recursively the minimal vocabulary that makes up that word.
As a person...
  • Love life. Love to learn new things!
  • Leaded small teams before, can dispatch basic tasks to others.
  • Might seem casual, but with a sense of responsibility.
  • Prefer contract spirit rather than dealing with complex interpersonal relationships.
  • Good and quick at providing counter examples or scenarios at other's thoughts.
  • Struggling to be an early bird (wake up at 5am, sleep at 9pm), but sometimes the nature of a late nighter kicks in.
  • Can be a little lazygeeky sometimes who rather spend more time automating a repetitive action then actual doing it, like automatic grabbing of lucky money in chat groups!

Timeline


2016 
February 9SkinTrack got best paper nomination for CHI 2016!
January 11My last semester here at Carnegie Mellon starts!
January 10Flew back to Pittsburgh.
January 9Finally some time to look around all those cool techs!
January 6-9CES in action, our booth is pretty popular and attractive!
January 4Bid farewell to friends came to Las Vagas for CES with Keyi Tech, met my high school classmate at the border check!
2015 
December 23Met everyone back at Keyi Tech.
December 19Went on plane back home after a year of changes.
December 14-17Refined SkinTrack video.
December 14SkinTrack got accepted by CHI!
NovemberVisited Atlanta during Thanksgiving break.
SeptemberCHI project final struggle!
August 31Starting my fall semester! Taking OS class this semester, going to be an even tougher semester!
August 21-25Taking a break, visited Buffalo and finally the US side of Niagara Falls!
JuneAiming to get something out for the CHI conference!
May 27Started as a research assistant here at Figlab for the summer.
MayFirst semester ended! three A and one A-, not bad!
January 12Class starts. First day as a graduate student here at Carnegie Mellon! This is really going to be a full loaded semester taking four heavy loaded courses!
January 9Attended my graduate student orientation.
January 7Arrived at Pittsburgh!
2014 
November 6Finally got my own driver's license!
SeptemberJoined Keyi Tech., a startup company evolved from the Cellrobot project.
SeptemberSigned up for driving lessons to get my own driver's license.
August 4Finally finished 15213 Computer Systems and can have my summer holidays back to me.
June 24Sorted all my undergraduate pictures. I wore the exact same clothing the first and last day of my undergraduate life!
June 20Day to move out, my dad came and took all my stuff in the morning, I stayed and helped others moving their stuff, had a final dinner with roommates, phone battery drained so missed chance to see one of my dear friends one last time.
June 19Graduation ceremony, I've ......graduated! Took many photos with fellow friends, classmates, teammates, staff and instuctor.
June 18Finally finished my exchange report, nothing more required to be done before graduation, suddenly feeling a bit empty.
June 17Had a class farewell dinner...
June 14Went back to Shahe campus and toured it one last time before graduating, too bad the 5th building is not open to us for the CET test is held there.
June 12Had a tradition graduation dinner with Prof Qin's all lab members.
June 12Had my thesis defense, got a fine paper nomination!
June 5Finally finished my bachelor's thesis after working three days and nights on it, the LateX template was really helpful!
May 24Began taking the online course 15213 Computer Systems from Carnegie Mellon and doing assignments while preparing for graduation.
May 20Came back to Beijing packed with souvenirs for others.
May 19Transfer at Vancouver, stayed there for a night, took upon the chance to revisit where I had left fourteen years ago.
May 4-9Traveled to Ottawa, Toronto and Niagara Falls with my teammate as our graduation trip.
April 18Teammate from Ballball project came to join me for my final month stay here.
April 15The day of the sumobot competition, the referee always chases our bot! But in the end we did very good in the competition!
MarchStarting building our sumobot.
March 5Got admitted into Carnegie Mellon......starting the spring semester due to limited resource in campus.
February 19-21Spring break, revisited Ottawa, all the places I had been ten years ago, almost nothing changed!
FebruaryStarted building basic applications for the atmega8, feels so good to be the only person in class who have touched MCUs before!
January 20Met my teammates for our sumobot competition!
January 6School starts at Concordia University!
2013 
December 25First christmas at a new place.
December 23-24Went to Concordia, Montreal Canada for my final semester as an exchange student!
December 18Launched "Junhan" Cup finals, went there as host and commentator.
November 15Greeted nobel prize winner Sheldon Glashow when he was visiting Beihang University!
November-DecemberRegularly going back to Shahe campus giving lectures on the basics of robot making, sensors, MCU programming etc.
NovemberLaunched "Junhan" Cup(yes, named after me), a robotic competition aimed at our sophomore to compete in.
October 15Went to Shahe campus to recruit for our Automation Science Club from the new freshmen!
August 6Volunteered for the Beihang stop of the Hongkong future president plan high school student tour event.
July 23Joined the Cellrobot team aiming for the Challange Cup.
JulyWent to Xi'an with my class for a three week school organized internship there.
May 31Celebration buffet dinner!
May 31First prize defense for our Ballball robot project! Seized first prize!
March-AprilFinal push for all my "Fengru" Cup projects and video shooting.
February 1-3Participated in the Interdisciplinary Contest in Modeling.
2012 
October 27Celebrated Beihang University's 60th anniversary and watched on site the celebration show.
October 13Attended a whole day elective class playing with an embedded ARM system, downloaded my own customed version of WinCE onto it.
OctoberProf. Qin gave me a place in his lab!
OctoberJoined two seperate groups each making their own robot project for the next "Fengru" Cup, all needed me as the charge for the control system.
SeptemberStarted my junior year in main campus, first class is ...... heading back to Shahe campus to take!
AugustMade my own basic digital oscilloscope!
JulyStayed at campus during holidays preparing for my GRE test.
June 20Finished sophomore year and finally moved back to the main campus!
June 6Got accepted to do my HCI project under the National Undergraduate Training Program for Innovation and Entrepreneurship and got several thousands for funding!
May 19Participated in the electronics design contest and made a fixed amplitude amplifier.
April 24Signed up for the Beijing College-student Electronics Design Contest and started training and using the msp430 MCU.
April 21Second prize for the "Fengru" Ideas Cup, forked over first prize when asked what is the practical use for my method of showing everything within a function.
MarchFinally submitted two projects for the "Fengru" Cup and one for the "Fengru" Ideas cup.
JanuaryLearning Asp.net and starting to make a showcast website for Prof. Qin's minimal vocabulary problem's research result.
2011 
December 9Performed in our school's 12.9 event.
OctoberStarting my "Fengru Cup" projects.
August-SeptemberVolunteered as assistant for freshman unity training.
July 19Finished soldering my first 8051 system board and function board!
JuneGot Prof. Zengchang Qin as my bachelor mentor.
May 30Lead my team to first place in Beijing English Vocabulary Contest.
March 5Attended the "Sexy Robots" event by Songshuhui.
2010 
November 25Led my team and got first prize in Beihang English Short Play Contest!
September 28Started class as a university student!
September 31Elected as class study secretary!
September 16Met my roommates and all my classmates!
September 15Reported to Beihang University, Shahe campus, at the deserted north corner of Beijing.
September 1-3Toured the Shanghai 2010 World Expo. Perfect timing where school starts and the place is the least crowded!
AugustTraveled to Indonesia to visit my aunt! Stayed at Jakarta and Bali.
July 14Got admisson offer by Beihang University as automation major! Guess my point bonuses came into action!
June 27Got admitted by Beihang University as mechanical engineering major.
June 24Got my scores back, acceptable.
June 6-7Took the College Entrance Examination.
MaySigned up for the College Entrance Examination with Beihang University as first favorable choice.
MayRanked 23th in Chaoyang district's second simulation of college entrance examination!
March-AprilOffered point bonuses for the College Entrance Examination by Peking, Beihang, Tianjing and Nankai University for the independent recruitment process.
MarchFirst prize in 22th Beijing English High School competition.
JanuarySkipped some of the 10 day long mandatory review classes to take the interview session of the independent recruitment of Peking and Beihang University.
JanuarySkipped English finals, stayed at Tianjing for a week to take the independent recruitment test and interview for Tianjin University and Nankai University, met the same cab driver twice!
2009 
NovemberTaken the 3.5+2 hours long independent recruitment test for Peking University and Beihang University. Oh my bladder!
NovemberThrid prize in the National High School Chemistry Competition.
OctoberSecond prize in the 26th National High School Physics Competition.
SeptemberLast year as a high school student!
MayFirst prize in Beijing Chemistry High School competition.
AprilSecond prize in National Applied Physics Competition.
AprilSecond prize in "Hope" Cup. 20th National Mathematical Competition.
2008 
NovemberMade some annoying popup programs for fun.
NovemberMade my first ever function plotting program!
NovemberStarted self learning Visual Basic.
AugustWatched the Olympics! Went to the National Stadium and Aquatic Center! The Olympic park is also a nice place to explore around!
MayFirst prize in the 21th Beijing Mechanical-physical high school competition final round.
AprilSecond prize in Beijing Chemistry High School competition.
2007 
SeptemberStarted high school officially, stayed at class one where the school covers tuition through scholarship.
July-AugustCame to the US with the school for 3 weeks, stayed at a homestay family in Camarillo for two weeks and visited Los Angeles and San Francisco.
FebruaryAdmitted to high school directly from middle school within same school.
2006 
JulyAn even shorter summer holiday.
2005 
JulyShortest summer holiday ever.
MarchLearnt how to make flash animations!
JanuaryPassed all finals and started first winter break here.
2004 
December 31A year of changes for me.
NovemberAs expected, failed LA and aced in English mid-term.
SeptemberStarted middle school.
AugustWent around seeing all the relatives that I haven't seen and don't remember for ages.
JulyNoooo!!! Loads of homework are unleased for the summer.
JulyFinally got accepted by Beijing Chaoyang Foreign Language School
JulyHard time finding a middle school to accept me with little to no local elementary school background.
July 1Came back to China after more than 5 years outside.
JuneBid farewell to friends and getting all packed up.
2003 
August 14Experienced the northeast blackout, played badminton and games with friends at Mooney's Bay until the sky was dark, a truly unforgettable fun day.
1993-2002 
Jan-DecTime goes by so fast.
1992 
MayBorn in Beijing.