项目大概从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=
> 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应该指向最后的方向。
如果路径或目标被阻止,这可能会失败。
如果想在机器人到达目标之前停止机器人,请在其当前位置发送一个目标。
参考网站:
http://wiki.ros.org/turtlebot_navigation/Tutorials/indigo/Autonomously%20navigate%20in%20a%20known%20map
(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机器人:
参考网址:
http://wiki.ros.org/turtlebot/Tutorials/indigo/Android%20Interactions/Download%20Turtlebot%20Android%20Apps%20from%20Play%20Store
http://wiki.ros.org/turtlebot/Tutorials/indigo/Android%20Interactions/How%20to%20Run%20Turtlebot%20Andorid%20Application
http://wiki.ros.org/turtlebot/Tutorials/indigo/Android%20Interactions/Turtlebot%20Android%20Apps%20Dev%20Tutorials
(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.第六个就是局域网的问题,哪怕没有联网也没有关系,连接在同一个局域网之下就可以解决。