owned this note
owned this note
Published
Linked with GitHub
# 20190105 Duckietown工作坊指令大全
## 《hackmd》==>先連到這個頁面
http://bit.ly/2AuTrhT
## 《投影片下載》
ROS簡介 ==> 本日投影片(01/06)
http://bit.ly/2Qqjex9
Lane Detect ==> 本日投影片(01/06)
http://bit.ly/2LQJS1v
Camera Calibration ==> 本日投影片(01/06)
http://bit.ly/2QtSRXb
Lane Filter ==> 本日投影片(01/06)
http://bit.ly/2CS6hIM
校正用棋盤格下載
https://github.com/duckietown/Software/blob/master18/catkin_ws/src/00-infrastructure/duckietown/config/baseline/calibration/camera_intrinsic/calibration_pattern.pdf
## 《範例程式下載》
```
cd ~
wget http://bit.ly/2SEv5JV -O dt_demo.tar.gz
tar zxvf dt_demo.tar.gz
```
## 《cv_bridge》
```
http://wiki.ros.org/cv_bridge/Tutorials/ConvertingBetweenROSImagesAndOpenCVImagesPython
```
## 《USB_CAM》
```
mkdir -p ~/catkin_ws/src/usb_cam/src
cd ~/catkin_ws/src/usb_cam/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ~/catkin_ws
catkin_make
source ~/catkin-ws/devel/setup.bash
```
## 《imgsub.py》
```
# http://wiki.ros.org/cv_bridge/Tutorials/ConvertingBetweenROSImagesAndOpenCVImagesPython
#!/usr/bin/env python
from __future__ import print_function
import roslib
import sys
import rospy
import cv2
from std_msgs.msg import String
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
class image_converter:
def __init__(self):
self.bridge = CvBridge()
self.image_sub = rospy.Subscriber("/usb_cam/image_raw",Image,self.callback)
def callback(self,data):
try:
cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")
except CvBridgeError as e:
print(e)
cv2.imshow("Image window", cv_image)
cv2.waitKey(1)
def main(args):
ic = image_converter()
rospy.init_node('image_converter', anonymous=True)
try:
rospy.spin()
except KeyboardInterrupt:
print("Shutting down")
cv2.destroyAllWindows()
if __name__ == '__main__':
main(sys.argv)
```
Duckietown簡介
http://bit.ly/2sbhXAo
組裝小鴨車
http://bit.ly/2GV9ADa
Raspberry Pi安裝設定(Duckiebot)
http://bit.ly/2QkIWmA
Virtualbox安裝設定
http://bit.ly/2C1le9S
快速體驗Duckietown
http://bit.ly/2LS2K06
## 《軟體下載》
PL2303_for_Windows
http://bit.ly/2OOlH3k
PL2303_for_MacOSX
http://bit.ly/2OKpEpW
下載putty,http://goo.gl/zdD9G9
xming,https://sourceforge.net/projects/xming/
VNCViewer for win32
http://raspberrypi-tw.s3.amazonaws.com/download/VNC-Viewer-6.18.907-Windows.zip
### 《duckbot預設帳號密碼》
username: ubuntu
password: ubuntu
## Raspberry Pi安裝設定(Duckiebot)
### 《duckbot安裝所需軟體(已安裝)》,p50
```
sudo apt-get update
sudo apt-get install -y vim git network-manager avahi-daemon python-dev python-pip x11vnc
sudo apt-get install -y tree gpicview
sudo pip install -U pip
sudo pip install -U picamera
sudo pip install -U networkx
sudo /etc/init.d/avahi-daemon restart
```
### 《duckbot修改NetworkManager(已修改)》,p51
```
sudo vim /etc/NetworkManager/NetworkManager.conf
===
[ifupdown]
managed=true
===
```
### 《duckbot修改sudoers(已修改)》,p52
```
sudo vim /etc/sudoers
===
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
===
```
### 《duckbot修改locale(已修改)》,p53
```
sudo vim /etc/default/locale
===
LANG="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
===
```
### 《duckbot加大SWAP(已加大)》,p54
```
sudo dd if=/dev/zero of=/swap0 bs=1M count=512
sudo mkswap /swap0
sudo vim /etc/fstab
===
proc /proc proc defaults 0 0
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
/dev/mmcblk0p1 /boot/ vfat defaults 0 2
/swap0 swap swap
===
sudo swapon -a
```
### 《duckbot關掉每日自動更新(已關掉)》,p55
```
sudo systemctl disable apt-daily.service
sudo systemctl disable apt-daily.timer
```
### 《duckbot下載編譯Duckietown(已編譯)》,p56
```
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
sudo apt-get install -y ros-kinetic-desktop-full
sudo apt-get install -y ros-kinetic-{tf-conversions,cv-bridge,image-transport,camera-info-manager,theora-image-transport,joy,image-proc,compressed-image-transport,phidgets-drivers,imu-complementary-filter,imu-filter-madgwick}
git clone http://github.com/duckietown/Software.git ~/duckietown
cd ~/duckietown
/bin/bash ~/duckietown/dependencies_for_laptop.sh
sudo ntpdate -u us.pool.ntp.org
source /opt/ros/kinetic/setup.bash
catkin_make -C catkin_ws/
```
## 《需自行設定部份》,
### 登入後出現LOGO, p58
```
cd ~
wget --no-check-certificate -O duckie.art "https://raw.githubusercontent.com/duckietown/Software/master18/misc/duckie.art"
```
編輯圖案設定檔
```
nano ~/20-duckie
```
```
#!/bin/sh
printf "\n$(cat /etc/update-motd.d/duckie.art)\n"
```
```
chmod +x 20-duckie
sudo cp duckie.art /etc/update-motd.d
sudo cp 20-duckie /etc/update-motd.d
```
### 安装duckiefleet + create machine files(在duckbot做), p61
```
git clone https://github.com/duckietown/duckiefleet-fall2017 ~/duckiefleet
echo 'export DUCKIEFLEET_ROOT=~/duckiefleet' >> ~/.bashrc
cd ~/duckiefleet/robots
cp bella.robot.yaml <duckbot>.robot.yaml
```
### 修改 ~/duckiefleet/robots/<duckbot>.robot.yaml
![](https://i.imgur.com/FZTdiAn.png)
### 存檔後執行
```
cd ~/duckietown
source environment.sh
rosrun duckieteam create-machines
```
### 增加Duckie歡迎畫面(在duckbot做)
```
cd ~
wget --no-check-certificate -O duckie.art "https://raw.githubusercontent.com/duckietown/Software/master18/misc/duckie.art"
$ vim 20-duckie
===
#!/bin/sh
printf "\n$(cat /etc/update-motd.d/duckie.art)\n"
===
chmod +x 20-duckie
sudo cp duckie.art /etc/update-motd.d
sudo cp 20-duckie /etc/update-motd.d
```
## Virtualbox安裝設定
### 《virtualbox安裝所需軟體(已安裝)》
```
sudo apt-get update
sudo apt-get install -y vim git openssh-server python-dev python-pip x11vnc
sudo apt-get install -y tree gpicview ncdu python-gtk2-dev
sudo pip install -U pip
sudo pip install jupyter
sudo pip uninstall matplotlib
sudo pip install matplotlib --no-binary=matplotlib
sudo -H pip install --ignore-installed -U ipython
```
### 《virtualbox修改sudoers(已修改)》
```
sudo vim /etc/sudoers
===
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
===
```
### 《virtualbox修改locale(已修改)》
```
sudo vim /etc/default/locale
===
LANG="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
===
```
### 《virtualbox關掉每日自動更新(已關掉)》
```
sudo systemctl disable apt-daily.service
sudo systemctl disable apt-daily.timer
```
### 《virtualbox下載編譯Duckietown(已下載)》
```
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
sudo apt-get install -y ros-kinetic-desktop-full
sudo apt-get install -y ros-kinetic-{tf-conversions,cv-bridge,image-transport,camera-info-manager,theora-image-transport,joy,image-proc,compressed-image-transport,phidgets-drivers,imu-complementary-filter,imu-filter-madgwick}
git clone http://github.com/duckietown/Software.git ~/duckietown
cd ~/duckietown
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source /opt/ros/kinetic/setup.bash
catkin_make -C catkin_ws/
```
### 啟動搖桿(在duckbot做)
```
roslaunch duckietown joystick.launch veh:=<duckbot>
```
### 如果從VM要SSH連到Pi出現錯誤
```
eval `ssh-agent -s`
ssh-add ~/.ssh/id_rsa.pub
vim ~/.ssh/config
===
Host duckpi
Hostname duckpi.local
#Hostname 192.168.1.108
Port 22
User ubuntu
#IdentityFile ~/.ssh/authorized_keys
HostKeyAlgorithms ssh-rsa
ForwardX11 yes
ForwardAgent yes # 如果是大寫要改為小寫
===
https://stackoverflow.com/questions/17846529/could-not-open-a-connection-to-your-authentication-agent
```
## 快速體驗Duckietown
### 修改馬達控制程式(使用教育版需要), p13
```
vim ~/duckietown/catkin_ws/src/05-teleop/dagu_car/include/dagu_car/dagu_wheels_driver.py
```
### 執行搖桿測試程式, p14
```
cd ~/duckietown
source environment.sh
roslaunch duckietown joystick.launch veh:=duckpi
```
### 從遠端向ROS Master取得/設定參數, p21
```
cd ~/duckietown
source environment.sh
source set_ros_master.sh duckpi
```
### 從遠端向ROS Master取得/設定參數, p22
```
小車向右偏(預設0)
rosservice call /duckpi/inverse_kinematics_node/set_trim -- -0.1
小車向左偏(預設0)
rosservice call /duckpi/inverse_kinematics_node/set_trim -- 0.1
減速(預設1)
rosservice call /duckpi/inverse_kinematics_node/set_gain -- 0.8
儲存設定
rosservice call /duckpi/inverse_kinematics_node/save_calibration
```
### 訂閱搖桿控制主題, p23
```
cd ~/duckietown
source environment.sh
source set_ros_master.sh duckpi
rqt_plot
```
### 自行輸入訂閱主題, p24
```
/duckpi/wheels_driver_node/wheels_cmd_executed/vel_right
```
### 執行相機測試程式, p35
```
cd ~/duckietown
source environment.sh
roslaunch duckietown camera.launch veh:=duckpi raw:=true
```
### 執行相機內部校正程式, p46
```
cd ~/duckietown
source environment.sh
source set_ros_master.sh duckpi
roslaunch duckietown intrinsic_calibration.launch veh:=duckpi
```
### 執行相機外參數校正, p53
```
cd ~/duckietown
source environment.sh
rosrun complete_image_pipeline calibrate_extrinsics
```
### 執行Lane-Following, p57
```
cd ~/duckietown
source environment.sh
make demo-lane-following
```
### 開啟偵錯畫面, p59
```
cd ~/duckietown
source environment.sh
source set_ros_master.sh duckpi
rosparam set /duckpi/line_detector_node/verbose true
rqt_img_view
```
### 調整參數, p61
```
cd ~/duckietown
source environment.sh
source set_ros_master.sh duckpi
rosparam get /duckpi/lane_controller_node/
rosparam set /duckpi/lane_controller_node/k_d -12
```