# ROS 實作共筆
[TOC]
## 檯燈設定 (Raspberry Pi)
### 下載 Raspberry Pi 映像檔
#### 方式一:直接下載包好的 Ubuntu 16.04 (LXDE) with ROS image
[Ubiquity Robotics Downloads](https://downloads.ubiquityrobotics.com)
#### 方式二:安裝 Raspberry Pi Ubuntu MATE 16.04 image + 手動安裝 ROS
1. [Raspberry Pi Ubuntu MATE 16.04 image 安裝](https://ubuntu-mate.org/raspberry-pi/)
2. [在 Ubuntu 上安裝 ROS](http://wiki.ros.org/kinetic/Installation/Ubuntu)
#### 方式三:安裝 Raspberry Pi Raspbian Jessie image + 手動安裝 ROS(步驟較繁瑣)
1. [Raspberry Pi Raspbian Jessie image 安裝](https://www.raspberrypi.org/downloads/raspbian/)
2. [在 Raspbian 上安裝 ROS](http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Kinetic%20on%20the%20Raspberry%20Pi)
### 安裝 I2C 驅動套件
sudo apt-get install libi2c-dev
為了讓之後 Adafruit 16-Channel 12-bit PWM/Servo HAT 在經由 I2C 控制馬達時順利,要更改權限讓 sudo 不用密碼
sudo visudo
sudo ALL=(ALL) NOPASSWD: ALL
### 推薦 USB to TTL serial 控制工具
#### Minicom(Linux / Mac OSX)
Linux 安裝
sudo apt-get install minicom
Mac OSX 安裝
brew install minicom
#### PuTTY(Windows)
[Download PuTTY: latest release (0.70)](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)
## 電腦設定 (虛擬機)
### 安裝含有 ROS 的 image
https://downloads.ubiquityrobotics.com

### 建立 catkin_ws 工作區
```
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make
```
```
$ source devel/setup.bash
```
### 編譯自己定義的資料格式
讓電腦可以讀懂 ```da_lamp_msgs/JointState```
```
$ cd ~/catkin_ws/src
$ git clone https://github.com/ORLamp/da_lamp_ros_package.git
```
我們只要 ```da_lamp_msgs```,這裡有幾種方法,因為 catkin_ws 編譯有順序,在編譯 ```da_lamp_driver``` 時需要先認得 ```da_lamp_msgs``` 這種資料格式,很可能會出錯。
#### 權衡之計
最笨的方法,就先把它刪了吧!
```
$ cd da_lamp_ros_package
$ rm -rf da_lamp_driver
```
再回到工作空間,編譯
```
$ cd catkin_ws
$ catkin_make install
$ source devel/setup.bash
```
### 設定網路
在這邊我們要透過 wifi 控制檯燈,所以檯燈所屬的虛擬機的網路設定改成 `Brdiged Adapter`

找到自己的區網 IP
```
$ ifconfig
```

把剛才找到的 IP 位置輸出成 shell 環境變數
```
$ export ROS_HOSTNAME=[自己電腦的 IP] #192.168.68.37
$ export ROS_MASTER_URI=http://[檯燈 Raspberry Pi 的 IP]:11311
```
如果不想要每次開終端機都要再輸入一次,那可以修改 Bash Shell 的設定檔 `~/.bashrc`
```
$ nano ~/.bashrc
# 加在最後幾行
source ~/catkin_ws/devel/setup.bash
export ROS_HOSTNAME=[自己電腦的 IP]
export ROS_MASTER_URI=http://[檯燈 Raspberry Pi 的 IP]:11311
```
```
$ source ~/.bashrc
```
### 控制檯燈
姿態
```
$ rostopic pub -1 /servo_pwm da_lamp_msgs/JointState 250 250 250 250 250
```
讀取視覺
```
rqt_image_view
```