項目大概從17年的5月份開始,那時候招了一個團隊來作。兩個大二的,三個大一的。後來慢慢摸索。暑假事後就沒有人在項目組了。後來暑假從新找到了人從新開始。node
項目的總體目的是完成機器人識別人體姿態從而達到跟隨或者是完成特定功能的效果。總體分爲兩個部分,一部分是完成turtlebot2機器人的環境搭建而且在從turtlebot2機器人上的奧比中光相機獲得深度圖,另外一部分是用利用TensorFlow深度學習框架下人體姿態視頻的學習和檢測。python
由於時間關係,項目只作了一部分,不少的時候並非由於難。可是由於一些網絡緣由,因此Ubuntu上+ROS的PPA的源老是沒法更新,老是沒法安裝ROS的全部包,並且在作的這個項目又處在學術前線,除了這個在其餘配置過程當中也找不到任何的參考資料。而最基本的ROS環境網速基本上會被限制到死。常常出現沒法更新的現象。linux
二.項目中涉及到的概念和技術git
1.第一部分中涉及到的概念和技術github
涉及到第一個無疑是ROS無疑。ROS是一個機器人操做系統,並且是一個開源的機器人系統,把不少底層的東西給抽象成爲能夠調用的包。提供了一些標準操做系統服務,例如硬件抽象,底層設備控制,經常使用功能實現,進程間消息以及數據包管理。雖然是操做系統,可是並不能獨立運行,因此只能依託於通常意義上的操做系統。目前支持最好的是Ubuntu。ubuntu
第二個概念就是Ubuntu,目前ROS在Ubuntu上面支持最好。Ubuntu是一個開源操做系統Linux的一個比較流行的發行版。關於Ubuntu的其餘的東西能夠查一些百度百科來了解。bash
第三個概念是深度圖,在計算機視覺系統中,三維場景信息爲圖像分割、目標檢測、物體跟蹤等各種計算機視覺應用提供了更多的可能性,而深度圖像(Depth map)做爲一種廣泛的三維場景信息表達方式獲得了普遍的應用。深度圖像的每一個像素點的灰度值可服務器
用於表示物體離相機的距離。在這個項目中用的就是奧比中光的相機來獲取深度圖像。網絡
第四個概念就是同一個局域網之間的SSH鏈接,SSH 爲 Secure Shell 的縮寫。其實就是一個遠程登陸的協議。在這個項目當中若是要實現工做站和PC端的通訊,從而能夠把PC端放在機器人上,讓一些複雜的運算在工做站計算。app
第五個概念就是安卓開發,到了後面可能要是實現手機控制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
想看到什麼就選擇什麼:
參考網址;
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不知道它在哪裏。爲了給他提供在地圖上的大概位置:
會看到一組箭頭,這是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.第六個就是局域網的問題,哪怕沒有聯網也沒有關係,鏈接在同一個局域網之下就能夠解決。