ROS Setup Duckietown

SHA
Mess up
Published in
12 min readNov 13, 2019
Image by birgl from Pixabay

ipscan

ssh

ssh ubuntu@192.168.43.160
pwd: ubuntu

Task 1–1 Change the hostname

sudo vim /etc/hostname 
sudo vim /etc/hosts
sudo rebootssh ubuntu@192.168.43.160

Task 1–2 Create the user

sudo useradd -m shapai 
sudo adduser shapai sudo
sudo adduser shapai input
sudo adduser shapai video
sudo adduser shapai i2c
sudo chsh -s /bin/bash shapai
sudo passwd ********
exit ssh shapai@sha817.local
sudo raspi-config --expand-rootfs 
sudo reboot
ssh shapai@sha817.local
df -lh

Task 2 Setup network

nmcli dev wifi list 
sudo nmcli dev wifi con SHAduckietown password ********
iwconfig

Task 3 Update the system

sudo apt update 
sudo apt dist-upgrade

Task 4 Basic SSH config

mkdir ~/.ssh 
chmod 0700 ~/.ssh
sudo vim ~/.ssh/config
HostKeyAlgorithms ssh-rsa

C. Duckietown Setup

Task 1 Get Duckietown and Duckiefleet Repo

duckiebot

cd 
ls
cp -r /home/ubuntu/duckietown/ .
cp -r /home/ubuntu/duckiefleet/ .
ls
cd ~/duckietown
source environment.sh
cd catkin_ws/
catkin_make

Task 1–2 On laptop

cd ~/duckietown 
source environment.sh
cd catkin_ws/
catkin_make

There is a known bug, for which it fails the first time catkin_make on the Raspberry Pi. Try again; it will work.

Task 2 Create your robot file

Task 2–1 Add duckiefleet path (增加duckiefleet路徑)

echo "export DUCKIEFLEET_ROOT=~/duckiefleet" >> ~/.bashrc 
source ~/.bashrc

Task 2–2 Add your robot to the vehicles database

cd rm -rf duckiefleet 
git clone https://github.com/duckietown/duckiefleet.git
cd ~/duckiefleet/robots/taiwan

Add your robot yaml file:

vim sha817.robot.yaml
hostname: sha817 
username: shapai
description: SHA's duckiebot
cd ~/duckietown source 
environment.sh
rosrun duckieteam create-machines

D. Joystick and Camera

Task 1 Launch Joystick Controller

ssh shapai@sha817.local

Initial ROS Environment

Initial Duckiebot as ROS Master

cd ~/duckietown 
source environment.sh
source set_ros_master.sh sha817

Launch Joystick

roslaunch duckietown_demos joystick.launch veh:=sha817

Task 2 Launch Camera

duckiebot

cd ~/ 
raspistill -t 1 -o out.jpg
ls

laptop

cd ~/ scp shapai@sha817.local:~/out.jpg out.jpg 
eog out.jpg

E: Camera Calibration

本次實驗目的為確認相機正常運作並且運行校正程式讓Lane following能夠正常運作。

Task 1 確認相機正常運作

duckiebot

cd ~/duckietown 
source environment.sh
source set_ros_master.sh sha817

開啟相機

roslaunch duckietown camera.launch veh:=sha817 raw:=true

laptop

cd ~/duckietown 
source environment.sh
source set_ros_master.sh sha817
rostopic list
rviz

Add->By topic->/duckiebot->/camera_node/image/raw/image

Check Point:

使用 RViz 拍一張圖

Task 2 相機校正 — intrinsic calibration

Task 2–1 啟用 ForwardX11

laptop

sudo vim /etc/ssh/ssh_config

ForwardX11 yes

存檔之後重開終端機

Task 2–2 設定ROS並開始校正

duckiebot

cd ~/duckietown 
source environment.sh
source set_ros_master.sh sha817
byobu

(F2 開新分頁, F3&F4 切換分頁, F6 離開)

roslaunch duckietown camera.launch veh:=sha817 raw:=true

F2開新分頁

roslaunch duckietown intrinsic_calibration.launch veh:=sha817 raw:=true

執行指令後會有視窗跳出。請將方格紙放在相機前並更換不同位置、角度,程式會自動收集校正樣本。

等到校正資料齊全後,右上角的參數條都會變成綠色 而且 ‘CALIBRATE’ 按鈕可按下。按下 ‘CALIBRATE’後大約等待10分鐘。

如果你對校正結果滿意,按下 ‘COMMIT’ 鍵. 它將會自動 存在duckiebot.

Check point:

cd ~/duckiefleet/calibrations/camera_intrinsic/ ~/duckiefleet/calibrations/camera_intrinsic/sha817.yaml

你可以使用以下指令來看到校正後的圖片

cd ~/duckietown 
source environment.sh
source set_ros_master.sh sha817
roslaunch duckietown camera.launch veh:=sha817 raw:=true rect:=true

laptop

cd ~/duckietown 
source environment.sh
source set_ros_master.sh sha817
rostopic list rviz

rviz: Add->By topic->/duckiebot->/camera_node/image/rect/image 校正後的圖

rviz:Add->By topic->/duckiebot->/camera_node/image/raw/image 無校正的圖

Task 3 相機校正 — extrinsic calibration

將你的鴨子車如下圖擺放:

byobu

按下 F2 開啟兩個新的分頁

第一個分頁:

cd ~/duckietown 
source environment.sh
source set_ros_master.sh sha817
roslaunch duckietown camera.launch veh:=sha817 raw:=true

第二個分頁

roslaunch ground_projection ground_projection.launch veh:=sha817 local:=1

laptop

cd ~/duckietown 
source environment.sh
source set_ros_master.sh sha817
rosservice list
rosservice call /sha817/ground_projection/estimate_homography

Check point:

duckiebot

cd ~/duckiefleet/calibrations/camera_extrinsic/ ~/duckiefleet/calibrations/camera_extrinsic/sha817.yaml

F : Wheel Calibration

本次實驗目的是讓我們小鴨車的馬達能夠正常運作,並且可以控制車子走”直線”。

cd ~/duckietown 
source environment.sh
source set_ros_master.sh sha817
roslaunch duckietown joystick.launch veh:=sha817

Check point :

執行joystick.launch檔案可以讓我們使用搖桿去控制車子,輸入指令後請確認以下幾點:

● 推左搖桿向上:小鴨車前進

● 推左搖桿向下:小鴨車後退

● 推右搖桿向左:小鴨車向左旋轉

● 推右搖桿向右:小鴨車向右旋轉

別關掉剛剛操作的終端機,請緊接著完成接下來的實驗。

laptop

cd ~/duckietown 
source environment.sh
source set_ros_master.sh sha817

Note : Trim and Gain value could be various from negative (below 0) to positive. For example : -0.05 or 0.5

在這裡主要是為了校正車輪路徑,為了小鴨車以穩定的速度且準確的方向行駛,而參 數trim可以調整左右輪子馬達的輸出差,使車子以直線行駛;參數gain可以調整左 右輪的馬達輸出,也就是小鴨車的行駛速度。 請注意:兩個參數皆可以為負數。

Set the trim, which can let duckiebot go straightly.

rosservice call /sha817/inverse_kinematics_node/set_trim -- 0.025

Set the gain, which can let duckiebot go faster or slower.

rosservice call /sha817/inverse_kinematics_node/set_gain -- 3

After your duckiebot could go straight well, save the calibration value:

rosservice list 
rosservice call /sha817/inverse_kinematics_node/save_calibration

Check point:

最後可以透過指定路徑位置的檔案來確認是否完成車輪馬達的校正。

cd ~/duckiefleet/calibrations/kinematics 
ls
cat sha817.yaml

Reference:

NCTU 108 Fall Semester-IOG5009

ROS Robotics Programming and Projects- Jen-Jee Chen (陳建志)

--

--