項目大概從17年的5月份開始,那時候招了一個團隊來做。兩個大二的,三個大一的。后來慢慢摸索。暑假過后就沒有人在項目組了。后來暑假重新找到了人重新開始。
項目的整體目的是完成機器人識別人體姿態從而達到跟隨或者是完成特定功能的效果。整體分為兩個部分,一部分是完成turtlebot2機器人的環境搭建並且在從turtlebot2機器人上的奧比中光相機得到深度圖,另一部分是用利用TensorFlow深度學習框架下人體姿態視頻的學習和檢測。
因為時間關系,項目只做了一部分,很多的時候並不是因為難。但是因為一些網絡原因,所以Ubuntu上+ROS的PPA的源總是無法更新,總是無法安裝ROS的所有包,而且在做的這個項目又處在學術前線,除了這個在其他配置過程中也找不到任何的參考資料。而最基本的ROS環境網速基本上會被限制到死。經常出現無法更新的現象。
二.項目中涉及到的概念和技術
1.第一部分中涉及到的概念和技術
涉及到第一個無疑是ROS無疑。ROS是一個機器人操作系統,而且是一個開源的機器人系統,把很多底層的東西給抽象成為可以調用的包。提供了一些標准操作系統服務,例如硬件抽象,底層設備控制,常用功能實現,進程間消息以及數據包管理。雖然是操作系統,但是並不能獨立運行,所以只能依托於一般意義上的操作系統。目前支持最好的是Ubuntu。
第二個概念就是Ubuntu,目前ROS在Ubuntu上面支持最好。Ubuntu是一個開源操作系統Linux的一個比較流行的發行版。關於Ubuntu的其他的東西可以查一些百度百科來了解。
第三個概念是深度圖,在計算機視覺系統中,三維場景信息為圖像分割、目標檢測、物體跟蹤等各類計算機視覺應用提供了更多的可能性,而深度圖像(Depth map)作為一種普遍的三維場景信息表達方式得到了廣泛的應用。深度圖像的每個像素點的灰度值可
用於表示物體離相機的距離。在這個項目中用的就是奧比中光的相機來獲取深度圖像。
第四個概念就是同一個局域網之間的SSH連接,SSH 為 Secure Shell 的縮寫。其實就是一個遠程登錄的協議。在這個項目當中如果要實現工作站和PC端的通信,從而可以把PC端放在機器人上,讓一些復雜的運算在工作站計算。
第五個概念就是安卓開發,到了后面可能要是實現手機控制turtlebot2機器人的行動,這個時候可以去Play Store來下載對應的APP來實現控制,但是只有最基本的功能,可以按照官方給的開發文檔來進行二次開發,但是如果二次開發的話,可能需要注意網絡問題。
2.第二部分中所用到的概念和技術
第一個涉及到的概念就是Python程序設計語言,當然這個語言在第一部分中也會用的到,Python也是一個開源的程序設計語言,現在在很多領域都得到了應用。現在已經成為了主流的程序設計語言。在Python當中一切皆可為對象。所以如果對面向對象不了解的,可以繼續看一下這塊的東西。
第二個概念就是TensorFlow,Google公司出品的深度學習工具,剛好這個深度學習框架對Ubuntu 的支持也是最好的。到這里就會發現這個項目用到的所有的東西都是完全開源的東西。所以一切的紐帶都可以用Ubuntu來連接起來。這就是這個項目的核心所在。
三.具體的實現過程:
1.環境的實現
(1)首先是環境的搭建,完成環境所需要的:
1. Turtlebot2 帶有Kobuki 移動基站,來自ClearpathRobotics.
2. 上網本:Turtlebot2兼容上網本。
3. 充電器:機器已經自帶
4. 工作站:第二台計算機與一個體面的圖形卡(比如Nvidia),和足夠的內存的三維模擬(4 GB+ 以上內存)。
5. 路由器:無線路由器允許工作站和Turtlebot通過本地IP通信。
(2)硬件安裝
1. 安裝基礎支架
2. 安裝電腦,把你的筆記本電腦放在面對turtlebot后方的USB插頭的第二架。(后面有各種插入kobuki基站。)
3. 安裝Kinect,USB端連接到筆記本電腦的USB口,另一個插口連接kobuki底座的12V 1.5A端口
4. 找到Kobuki底座側面的開/關按鈕,打開即開始工作。
(3)操作系統的安裝:
這個就不再詳細說了,可以自行嘗試裝Ubuntu16.04,目前在PC端裝好系統。
(4)ROS系統的安裝:
我們需要在工作台和turtlebot都安裝ROS和turtlebot包。
每個ROS對應不同的Ubuntu的版本有着不同的版本號。所以還是需要注意一下。
目前Ubuntu16.04對應的是ROS Kinetic。
按照官網教程:
http://wiki.ros.org/Robots/TurtleBot/
一步一步安裝。
具體的安裝教程在這里:
http://wiki.ros.org/indigo/Installation/Ubuntu
設置源列表:
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://http://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
確保可以更新:
sudo apt-get update
安裝全功能包:
sudo apt-get install ros-kinetic-desktop-full
初始化
rosdep:
sudo rosdep init
rosdep update
環境設置:
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc
獲取rosinstall:
sudo apt-get install python-rosinstall
然后是安裝Turtlebot2有關的包:
sudo apt-get install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-interactions ros-kinetic-turtlebot-simulator ros-kinetic-kobuki-ftdi ros-kinetic-rocon-remocon ros-kinetic-rocon-qt-library ros-kinetic-ar-track-alvar-msgs
然后是源安裝:
第一步是准備:
> sudo apt-get install python-rosdep python-wstool ros-indigo-ros
> sudo rosdep init
> rosdep update
工作空間的准備:
> mkdir ~/rocon
> cd ~/rocon
> wstool init -j5 src https://raw.github.com/robotics-in-concert/rocon/release/indigo/rocon.rosinstall
> source /opt/ros/indigo/setup.bash
> rosdep install --from-paths src -i -y
> catkin_make
> mkdir ~/kobuki
> cd ~/kobuki
> wstool init src -j5 https://raw.github.com/yujinrobot/yujin_tools/master/rosinstalls/indigo/kobuki.rosinstall
> source ~/rocon/devel/setup.bash
> rosdep install --from-paths src -i -y
> catkin_make
> mkdir ~/turtlebot
> cd ~/turtlebot
> wstool init src -j5 https://raw.github.com/yujinrobot/yujin_tools/master/rosinstalls/indigo/turtlebot.rosinstall
> source ~/kobuki/devel/setup.bash
> rosdep install --from-paths src -i -y
> catkin_make
(以上github地址中的indigo換為 Kinetic)
為了讓啟動后就啟動好環境,使用以下命令:
# For a deb installation
> echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
# For a source installation
> echo "source ~/turtlebot/devel/setup.bash" >> ~/.bashrc
設置與Kobuki一起工作:
> . /opt/ros/kinetic/setup.bash
> rosrun kobuki_ftdi create_udev_rules
(5)替換3d相機設置:
因為項目中使用的是奧比中光的傳感器,所以需要更改默認3d傳感器設置:
> echo "export TURTLEBOT_3D_SENSOR=<astra>" >> ~/turtlebot/devel/setup.sh
> source ~/turtlebot/devel/setup.bash
然后安裝相機的依賴:
$ sudo apt-get install build-essential freeglut3 freeglut3-dev
檢查有沒有libudev.so.1,沒有的話添加:
#check udev version, Orbbec Driver need libudev.so.1, if can't find it, can make symbolic link from libudev.so.x.x,
#which usually locate in /lib/x86_64-linux-gnu or /lib/i386-linux-gnu
$ldconfig -p | grep libudev.so.1
$cd /lib/x86_64-linux-gnu
$sudo ln -s libudev.so.x.x.x libudev.so.1
下載驅動:https://orbbec3d.com/develop/#registergestoos,選擇linux版本:
下載解壓:
$ cd ~
$ wget http://www.orbbec3d.net/Tools_SDK_OpenNI/2-Linux.zip
”
進入文件夾之后執行安裝:
$ sudo chmod a+x install.sh
$ sudo ./install.sh
加入環境:
$ source OpenNIDevEnvironment
編譯例子:
$ cd Samples/SimpleViewer
$ make
連接設備,執行例子:
$ cd Bin/x64-Release
$ ./SimpleViewer
安裝所需要的ros的包:
$ sudo apt-get install ros-kinetic-astra-camera ros-kinetic-astra-launch
測試:
$ roslaunch astra_launch astra.launch
安裝libuvc支持:
$ cd ~
$ git clone https://github.com/ktossell/libuvc
$ cd libuvc
$ mkdir build
$ cd build
$ cmake ..
$ make && sudo make install
安裝libuvc_ros:
$ cd ~/catkin_ws/src
$ git clone https://github.com/ktossell/libuvc_ros
$ cd ..
$ catkin_make
放入合適位置:
$ sudo cp /usr/include/libusb-1.0/libusb.h
/usr/local/include/libuvc/
測試:
啟動roscore之后,使用:
$ rosrun libuvc_camera camera_node
(6)配置網絡:
首先pc端要和工作站的時鍾
sudo apt-get install chrony
sudo ntpdate ntp.ubuntu.com
獲取turtlebot和工作站的ip:
Ifconfig
查看ssh的工作狀態:
sudo service ssh status
沒有的話,就安裝:
sudo apt-get install openssh-server
工作站遠程登錄Turtlebot上網本,在終端執行:
sudo apt-get install openssh-server
turtlebot配置參數:
echo export ROS_MASTER_URI=http://localhost:11311 >>
~/.bashrc echo export ROS_HOSTNAME=IP_OF_TURTLEBOT
>> ~/.bashrc
工作站配置參數:
echo export ROS_MASTER_URI=http://IP_OF_TURTLEBOT:11311
>> ~/.bashrc echo export ROS_HOSTNAME=IP_OF_PC >>
~/.bashrc
其中驗證是否為通路:
roslaunch turtlebot_bringup minimal.launch --screen
在工作站執行:
roslaunch turtlebot_teleop keyboard_teleop.launch
可以在工作站的鍵盤點擊“i”,控制Turtlebot前進。
(7)鍵盤操縱:
終端運行:
roslaunch turtlebot_bringup minimal.lauch
鍵盤控制:
roslaunch turtlebot_teleop keyboard_teleop.launch
(8)檢查底座是否正常:
在pc上運行以下命令:
> rqt -s kobuki_dashboard
運行之前可能需要先安裝:
> sudo apt-get install ros-kinetic-kobuki-dashboard
如果出現錯誤:
> rqt --force-discovery
然后重新運行第一個命令。

這個時候要確保變量已經導出:
> roslaunch turtlebot_dashboard turtlebot_dashboard.launch
(8)在運行之前可以進行測量和校准:
Kobuki帶有工廠校准的陀螺儀。在校准或測試在運行任何基於導航的應用程序時最好還是要進行TurtleBot的校准。
第一個位置TurtleBot位於長直牆(至少2米長)的中心,面向牆,離牆約30厘米。
啟動機器人后,通過ssh鏈接,然后執行下面的命令:
roslaunch turtlebot_calibration calibrate.launch
當它完成后,你會看到這樣的屏幕上打印;
[INFO] [WallTime: 1299286750.821002] Multiply the 'turtlebot_node/gyro_scale_correction' parameter with 1.002262
[INFO] [WallTime: 1299286750.822427] Multiply the 'turtlebot_node/odom_angular_scale_correction' parameter with 1.000263
校准參數參考網站:
http://wiki.ros.org/turtlebot_calibration/Tutorials/Calibrate%20Odometry%20and%20Gyro
2.具體的應用:
(1)第一次互動:
在pc機器上完成:
> sudo apt-get install ros-indigo-rocon-remocon ros-indigo-rocon-apps
使用rqt遙控器:
確保ROS_MASTER_URI / ROS_HOSTNAME配置正確。這個非常重要:
> rqt_remocon

選擇PC Pairing

雙擊Listener:

開始不斷發出請求。
然后添加一個Master:
> rocon_remocon

參考文章:
http://wiki.ros.org/turtlebot/Tutorials/indigo/A%20First%20Interaction
(2)turtlebot可視化:
> roslaunch turtlebot_rviz_launchers view_model.launch --screen
另外一個導入類型:
> export TURTLEBOT_BASE=create
> export TURTLEBOT_STACKS=circles
> export TURTLEBOT_3D_SENSOR=astra
> roslaunch turtlebot_rviz_launchers view_model.launch --screen
在PC上運行:
> roslaunch turtlebot_rviz_launchers view_robot.launch --screen
參考網址:http://wiki.ros.org/turtlebot/Tutorials/indigo/Visualisation
(3)3d可視化;
很多傳感只能用於usb2.0的端口,所以盡量把3d傳感器插在usb2.0的插口
啟動3d傳感器:
roslaunch turtlebot_bringup 3dsensor.launch
PC上:
> roslaunch turtlebot_rviz_launchers view_robot.launch
想看到什么就選擇什么:
- DepthCloud
- Registered DepthCloud
- Image
- PointCloud
- Registered PointCloud

參考網址;
http://wiki.ros.org/turtlebot/Tutorials/indigo/3D%20Visualisation
(4)交互式標記來控制機器人;
輸入命令:
> sudo apt-get install ros-indigo-turtlebot-apps ros-indigo-turtlebot-interactions
> sudo apt-get install ros-indigo-turtlebot-interactive-markers
啟動turtlebot_marker_server,它將托管interactive_markers服務器。
> roslaunch turtlebot_interactive_markers interactive_markers.launch --screen
接下來,啟動顯示標記主題的rviz。在電腦上輸入:
> roslaunch turtlebot_rviz_launchers view_robot.launch
相互作用:
檢查“交互式標記”顯示組件,然后在屏幕頂部的工具調色板(如下所示)中選擇“交互”工具,為turtlebot調出交互式標記。

可以拖動紅色的箭頭來驅動TurtleBot向前和向后,藍色的環可以旋轉TurtleBot。也可以拖動藍色圓環同時旋轉TurtleBot。
參考網址:
http://wiki.ros.org/turtlebot_interactive_markers/Tutorials/indigo/UsingTurtlebotInteractiveMarkers
(5)SLAM建圖:
如何構建地圖,讓機器人記住周圍的環境。通過生成的地圖,機器人可以自主導航。
在turtlebot上運行:
# From turtlebot laptop.
> roslaunch turtlebot_navigation gmapping_demo.launch
在PC上運行:
> roslaunch turtlebot_rviz_launchers view_navigation.launch
可以啟動遙控器進行遙控:

保存SLAM建圖時產生的地圖:
rosrun map_server map_saver -f / tmp / my_map
(6)自動導航已知地圖文件:
自動導航已經生成的文件:
> export TURTLEBOT_MAP_FILE = / tmp / my_map.yaml
#eg)export TURTLEBOT_MAP_FILE:=`rospack find turtlebot_navigation` / maps / willow-2010-02-18-0.10.yaml
> roslaunch turtlebot_navigation amcl_demo.launch
在PC上:
> roslaunch turtlebot_rviz_launchers view_navigation.launch --screen
或者是用遙控器;
配置TURTLEBOT_MAP_FILE環境變量以指向要使用的地圖:
> export TURTLEBOT_MAP_FILE = / tmp / my_map.yaml
#eg)export TURTLEBOT_MAP_FILE:=`rospack find turtlebot_navigation` / maps / willow-2010-02-18-0.10.yaml
啟動遙控器並啟動PC配對/導航交互:

啟動時,TurtleBot不知道它在哪里。為了給他提供在地圖上的大概位置:
- 點擊“2D Pose Estimate”按鈕
- 點擊TurtleBot所在的地圖,然后拖動TurtleBot指向的方向。
會看到一組箭頭,這是TurtleBot的位置的假設。
隨着TurtleBot本地化,它可以自動規划通過環境。
發送目標:
1.點擊“2D導航目標”按鈕
2.點擊你想TurtleBot開車的地圖,然后拖到TurtleBot應該指向最后的方向。
如果路徑或目標被阻止,這可能會失敗。
如果想在機器人到達目標之前停止機器人,請在其當前位置發送一個目標。
參考網站:
(7)跟隨人的demo:
TurtleBot在它前面的窗口中查找對象。它將試圖保持被觀察物體的質心直接在它的前面和一個固定的距離。如果物體的質心太遠,它會向前驅動,向后靠得太近,如果向一邊偏移,它會轉向質心。
從ssh進入;
roslaunch turtlebot_follower follower.launch
在工作站計算機上運行動態重新配置gui:
#pre-groovy
rosrun dynamic_reconfigure reconfigure_gui
#常規或更高版本
rosrun rqt_reconfigure rqt_reconfigur
在重新配置的gui上選擇攝像機或者跟蹤者
參考網址:
http://wiki.ros.org/turtlebot_follower/Tutorials/Demo
(8)全景演示:
鏈接ssh后:
roslaunch turtlebot_panorama panorama.launch
檢查結果:
> rosrun image_view image_view image:= / turtlebot_panorama / panorama
參考網址:
http://wiki.ros.org/turtlebot_panorama/Tutorials/Demo
(9)通過安卓控制turtlebot機器人:


參考網址:
(10)添加新的3d傳感器:
直接按照官方教程來設置:
http://wiki.ros.org/turtlebot/Tutorials/indigo/Adding%20New%203D%20Sensor
四.過程中需要注意的問題:
1.第一個就是顯卡驅動的問題,英偉達顯卡經常會和自帶的驅動沖突,所以裝驅動的時候記得禁用掉X sever。
2.第二個就是網絡的問題,這個可以通過換源的問題解決。
3.第三個就是ROS版本的問題,因為用Ubuntu16.04的版本,所以對應的是Kinetic,對應的所有ROS版本里面indigo都要換為Kinetic。
4.第五個問題就是安卓app是可以自己改寫一些功能的,看官網給的開發文檔就可以。
5.第六個就是局域網的問題,哪怕沒有聯網也沒有關系,連接在同一個局域網之下就可以解決。