---
# System prepended metadata

title: 機器人導論
tags: [DIT 11th 教學 -- 新生教學]

---

---
title: 機器人導論
tags: Templates, Talk 
description: View the slide with "Slide Mode".
---
{%hackmd @HungPin/Dark %}
<!-- [toc] -->

# 機器人導論

<!-- Put the link to this slide here so people can follow -->
<!-- slide: https://hackmd.io/p/template-Talk-slide -->

<!-- --- -->
<!-- 
We have a collaborative session

please prepare laptop or smartphone to join! -->



## 機器人的定義

### 什麼是機器人?
基本上沒有絕對的說法，但是就功能性而言可以想像成
-> 感知 + 思考 + 行動 = 機器人 :robot_face:
透過環境的感測，進行一些分析或判斷，再做出決定的機器就是一個機器人。
就像是掃地機器人、火星探測機器人、仿生機器人等等。

### 機器人的分類
機器人可以從移動的方式分類，例如分成水上、陸上、空中機器人，再細分成機械式、仿生式機器人等;也可以直接從產業分類，例如農業機器人、醫療機器人。
::: info
DIT 主要以輪型移動式機器人為主，但也有做人型機器人、空拍機等等的類型。
:::

### 為什麼要製造機器人?
基本上就是要解決一些問題，像是取代人力(無人搬運車)、幫助人類(機器手臂) 等等，是以某個目的或要求來製作這些機器人的。 :star:


---

## 機器人的製造流程

看完機器人的簡介，那麼現在我們來看看如何從頭開始製作出一台機器人。 
首先，我們要列出機器人的功能要求，以及機器人的限制。例如機器人需要把撞球搬運至集貨區、機器人的長寬高限制等等。
接著根據上述列出的條件，分成機構、電路及控制做考量。
### 機構
1. 確認所需的功能與大小限制。
1. 參考現有的解法，分析其優劣與可用性。
1. 發想機構雛形，並利用軟體繪製出構圖。這個步驟相當重要，需要考慮相當多因素，像是組裝的先後順序、鎖螺絲的難易度、機構受力大小與方向等等。
1. 列出所需材料並用 Excel 等等軟體建立物料清單。
1. 訂購材料與組裝。
### 電路
1. 依照所需的功能選擇對應的 致動器 Actuators ( Ex : 步進馬達 ) 、 控制器 Controller ( Ex : Arduino ) 、 感測器 Sensor ( Ex : 雷射測距儀 ) 。
1. 閱讀 DataSheet 與相關資料，瞭解其腳位、使用方式、原理、使用電壓、所需電流、通訊方式等等資訊。
1. 畫出電路圖，確認其走線無誤後製作電路板。
### 控制
1. 根據設計出來的機構，寫出能達到任務要求的程式，並完成各自的除錯。像是分別撰寫底盤、手臂的控制程式，並分別測試，確定可以獨立運行沒有 Bugs。
1. 整合前面寫出來的程式，完成整機的控制。
<!-- {%youtube E8Nj7RwXf0s %} -->

<!-- ---

### 

---


```graphviz
digraph {
  compound=true
  rankdir=RL

  graph [ fontname="Source Sans Pro", fontsize=20 ];
  node [ fontname="Source Sans Pro", fontsize=18];
  edge [ fontname="Source Sans Pro", fontsize=12 ];


  subgraph core {
    c [label="Hackmd-it \ncore"] [shape=box]
  }
  
  c -> sync [ltail=session lhead=session]

  subgraph cluster1 {
     concentrate=true
    a [label="Text source\nGithub, Gitlab, ..."] [shape=box]
    b [label="HackMD Editor"] [shape=box]
    sync [label="sync" shape=plaintext ]
    b -> sync  [dir="both"]
    sync -> a [dir="both"]
    label="An edit session"
  }
}
```

---

### Architecture of extension

---

![](https://i.imgur.com/ij69tPh.png)

---

## Content script

- Bind with each page
- Manipulate DOM
- Add event listeners
- Isolated JavaScript environment
  - It doesn't break things

---

# :fork_and_knife: 

---

<style>
code.blue {
  color: #337AB7 !important;
}
code.orange {
  color: #F7A004 !important;
}
</style>

- <code class="orange">onMessage('event')</code>: Register event listener
- <code class="blue">sendMessage('event')</code>: Trigger event

---

# :bulb: 

---

- Dead simple API
- Only cares about application logic

---

```typescript
import * as Channeru from 'channeru'

// setup channel in different page environment, once
const channel = Channeru.create()
```

---

```typescript
// in background script
const fakeLogin = async () => true

channel.answer('isLogin', async () => {
  return await fakeLogin()
})
```

<br>

```typescript
// in inject script
const isLogin = await channel.callBackground('isLogin')
console.log(isLogin) //-> true
```

---

# :100: :muscle: :tada:

---

### Wrap up

- Cross envornment commnication
- A small library to solve messaging pain
- TypeScript Rocks :tada: 

---

### Thank you! :sheep: 

You can find me on

- GitHub
- Twitter
- or email me
 -->