WHILL(ROS対応)をUbuntuPCとraspi経由でDS4から動かす

#ROS対応ロボット(WHILL)の自律移動

##概要
ロボットを自律移動させたい．

第1回　[WHILL(ROS対応)をUbuntuPCとraspi経由でDS4から動かす](https://qiita.com/drafts/026068c944067d4a4288/edit)
第2回　[urgでSLAMして自己位置推定(amcl)と自律移動(move_base)する](https://qiita.com/noby_aoao/private/9d1734e80ae7f31f965d)
第3回　経路計画
第4回　物体追跡/追従

##前準備

###WHILLパッケージおよび依存パッケージのインストール
https://github.com/WHILL/ros_whill/blob/melodic-devel/package.xml
https://github.com/wjwwood/serial

```ubuntu:raspi-terminal
mkdir -p srg_ws/src && cd srg_ws/src

git clone https://github.com/WHILL/ros_whill.git

git clone https://github.com/wjwwood/serial.git

cd .. && catkin build 
```

##WHILLをターミナルから動かす

###WHILLを繋いでいるシリアルポートを指定
[source](https://github.com/WHILL/ros_whill#serialport-setting-for-ros_whilllaunch)

```
ubuntu@ubuntu:~/catkin_ws$ dmesg | grep tty
[    0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 bcm2708_fb.fbwidth=0 bcm2708_fb.fbheight=0 bcm2708_fb.fbswap=1 smsc95xx.macaddr=DC:A6:32:84:C3:C1 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  net.ifnames=0 dwc_otg.lpm_enable=0 console=ttyS0,115200 console=tty1 root=LABEL=writable rootfstype=ext4 elevator=deadline rootwait fixrtc
[    0.000638] printk: console [tty1] enabled
[    2.847410] fe201000.serial: ttyAMA0 at MMIO 0xfe201000 (irq = 14, base_baud = 0) is a PL011 rev2
[    2.852118] printk: console [ttyS0] disabled
[    2.852159] fe215040.serial: ttyS0 at MMIO 0x0 (irq = 16, base_baud = 62500000) is a 16550
[    3.112960] printk: console [ttyS0] enabled
[   14.393234] usb 1-1.2: pl2303 converter now attached to ttyUSB0
[  276.511974] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0
[  857.327384] usb 1-1.2: pl2303 converter now attached to ttyUSB0
```

今回WHILLはttyUSB0ですね。
[ROS講座](https://qiita.com/srs/items/efaa8dc0a6d580c7c423#%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E5%90%8D)にも書かれているとおり、USBはttyUSBXで命名される(ArduinoはttyACMX)ので、次のように環境変数を設定する。


```terminal-no.1
export TTY_WHILL=/dev/ttyUSB0
```

これで準備おｋ

```terminal_no.1
roslaunch ros_whill ros_whill.launch
```

```teminal_no.2
rostopic pub /whill/controller/cmd_vel geometry_msgs/Twist "linear:
  x: 1.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0" 
```

これでWHILLが一瞬動く

##WHILLをPS4から操作できるようにする

[ROSでPS4のコントローラ(DualShock4)を使う方法](http://cryborg.hatenablog.com/entry/2016/09/19/185501)
[Linux のコマンドラインで Bluetooth 接続](https://qiita.com/propella/items/6daf3c56e26f709b4141)

を参考にしようとしたら、raspiの方がbluetoothをonにできないという状況だったのでPCから接続することにし、ubuntu PCとraspiで通信させる。
[参考](https://qiita.com/srs/items/7d4aeb5e44138f97c770)

###joy stick準備

```:PCターミナル
sudo apt-get install ros-melodic-joy -y
sudo apt-get install ros-melodic-joystick-drivers -y
sudo pip install ds4drv
sudo apt-get install ros-melodic-teleop-twist-joy
```

これで準備が完了

###DS4から動かす
以下，ROS_MASTER_URIとROS_IPは適宜自分のものに読み替えてください．

```ubuntu:PC全ターミナル
#pcのIP
export ROS_IP=192.168.201.121
#PCが有線LANのとき
export ROS_IP=192.168.201.123
#master ここではraspi
export ROS_MASTER_URI=http://192.168.201.131:11311
```

```:pc1
sudo ds4drv #start presing DS4's share button and home button long until LED flashes
```

```:pc2
rosrun joy joy_node &
rosrun teleop_twist_joy teleop_node cmd_vel:=whill/controller/cmd_vel
```

```:raspiターミナル全て
ssh ubuntu@192.168.201.131
```

```:raspiターミナル1
export ROS_IP=192.168.201.131 ##raspiのIP

cd ~/catkin_ws/ 
source devel/setup.bash 
roslaunch ros_whill ros_whill.launch
```
DS4の□ボタンを押しながら左スティックを回すといける

###エラー集
何故か急にrostopic echo /joy
が反応しなくなった

何故かは不明だがjoy関連のパッケージを消して、

```
sudo apt-get install ros-melodic-joy -y
sudo apt-get install ros-melodic-joystick-drivers -y
```

で入れ直したら解決した

もしくはこれをやり直したほうがいいかも
http://wiki.ros.org/joy/Tutorials/ConfiguringALinuxJoystick