目前的状况:
1、rbx1_app 当中的follower2.launch
已经跑通了,这种算法是用的质心跟随,将待跟踪物体 x,y,z方向上进行滤波。排除背景的干扰。优点:由于ros by example代码功底边好,使用起来简单直接。直接在launch文件里面修改的代码就可以了。
启动顺序
roslaunch p3dx_description p3dx.launch
roslaunch openni_launch openni.launch
roslaunch rbx1_app follower2.launch
2、使用骨架追踪
我是参考中科院大神思路:
http://blog.csdn.net/lanhuadechenmo/article/details/58607754
她在自己csdn中贴的代码,是有一些问题,问题都比较低级,一般看看,就能把正确的改出来。骨架追踪的优点就是:可以使用手势识别,例如在上面大神的博客当中,通过右手的比肩膀高,这个动作,让小车停下来,当然你也可以设置更多的工作。缺点:在实际的使用过程当中,发现如果kinect是固定的话,识别的效率还是很高的,但是当kinect在小车上面随小车移动的话,发现很容易出现USR2,一旦出现USR2,这个时候,小车还是会保持原来运动情况,我觉得这算是这个程序的BUG,当USR2出现的时候,应该让小车保持静止。目前,这方面的工作,我还没做。
启动顺序
roslaunch p3dx_description p3dx.launch
roslaunch openni_launch openni.launch
roslaunch skeleton_markers markers_from_tf.launch
rosrun rviz rviz -d `rospack find skeleton_markers`/markers_from_tf.rviz
rosrun p3dx_follower kinect_tf
3、使用KCF跟随
参考博客:
http://blog.csdn.net/yiranhaiziqi/article/details/53303747
运行之后,在要跟随的区域点击鼠标左键,拖出一个黄色的框,然后基本小车就跟着框走。这个程序存在的问题:在实际的测试中,发现如果物体突然消失,这个时候,小车仍然是个运动,这是不符合常理的,正常情况下,目标消失,应该速度设置为0。而且这个程序有个问题,就是小车只能前进,不能后退。,毕竟kinect的视野是有范围的。
启动顺序:
roslaunch p3dx_description p3dx.launch
roslaunch openni_launch openni.launch
rosrun track_pkg kcf_node
我自己的装了opencv3.1.0和opencv2.14的版本,然后我跑这个是没有问题的。
修改的地方
4、目前的方案
使用openTLD做跟随
4.1
参考高博的github:
https://github.com/gaoxiang12/follower_TLD
这个我跑了一下:
roslaunch openni_launch openni.launch
rosrun follower followerTLD
这个一跑,电脑就卡死了。然后在显示的图像上面画一个框,就内核崩溃。
目前还在查找原因。
跑通的过程:
git clone git://github.com/gnebehay/OpenTLD
https://github.com/Ronan0912/ros_opentld
这种算法是在第一帧的图像上面选择要跟踪的物体,提取出物体的特征点,然后跟踪特征点。目前存在的问题就是,现在我们的kinect高度不够高。离地面大约50厘米,被跟踪的人需要离kinect 1.7米才能跟踪上(被跟踪的人身高1.78米),在这个过程中,如果目标丧失,那么小车还是一直行走,将来如果要优化的话,如果目标丧失,我们会给速度上发布一个话题,让速度设置为0。其实有个问题就是,第一帧的的时候,我必须选择一个框,如果将来搬到STM32的话,不可能让你去重新选框的。
4.2
参考YouTube大神的做法
https://www.youtube.com/watch?v=wRjhZm2jsWY
这个做法里面提供了两个github
https://github.com/pandora-auth-ros-pkg/open_tld
这个需要 mkdir build cd build cmake .. make
https://github.com/pandora-auth-ros-pkg/pandora_tld
这个是一个ROS的launch
具体这玩意怎么用,我现在也不是太会。在尝试和查看相应的文档
4.3
李明龙大神的github
https://github.com/liminglong
这个大神使用的turtlebot,我也跟着编译了一下,
但是在catkin_make的时候,发现没有tld_msgs,然后在他的github上找到了对应的包。
然后catkin_make的时候,还有没有办法找到一个文件,没有这个文件,我也没有办法编译通过。这个需要修改cmakelist.
实现步骤:
我电脑是安装了opencv2.14 和opencv3.1
我用这个人的git是能编译通过的
https://www.gnebehay.com/tld/
用高博的上面的opentld编译不通过。
以及https://github.com/arthurv/OpenTLD也是不通过
参考文档
这个博客关于openTLD写的很全了。
http://blog.sina.com.cn/s/blog_6163bdeb0102eh7b.html
目前更多的相信这个大神的git
https://github.com/Ronan0912/ros_opentld
6、AR标签跟随
博主目前在 ros by example2的帮助下,将AR标签跟随制作出来。
说白了,就是两个TF之间的变化问题。
首先安装相应的包
sudo apt-get install ros-indigo-ar-track-alvar
关于rbx2和包
https://github.com/pirobot/rbx2
之用一部分。
启动的launch文件和顺序
roslaunch p3dx_description p3dx.launch
roslaunch openni_launch openni.launch
roslaunch rbx2_ar_tags ar_large_markers_kinect.launch
rosrun rviz rviz -d `rospack find rbx2_ar_tags`/ar_tags.rviz
roslaunch rbx2_ar_tags ar_follower.launch
遇到的报错
[pcl::SampleConsensusModel::getSamples] Can not select 0 unique points out of 0!
[pcl::RandomSampleConsensus::computeModel] No samples could be selected!
[pcl::SACSegmentation::segment] Error segmenting the model! No solution found.
不管有什么报错,都别管,就一条一条的命令刷
可以通过
rosrun ar_track_alvar createMarker 0
来产生这个AR标签,这个0是标签的名字
MarkerData_0.png,这个图片生成的目录,就是你运行这个节点的目录。,然后你吧这个标签打印出出来。
最后的显示效果,我是在RVIZ当中开了点云。
可能遇到的问题
你的车可能一走一停,是因为原来的launch文件里面发布速度频率只有20hz,太慢了。应该这个频率。 我现在设置的100hz.车已经可以平稳运行了。
另外在ar_large_markers_kinect.launch 。这个launch文件里面将
`"output_frame" default="/base_link" />`
改成
"output_frame" default="/camera_link" />
最后附上follower.launch
<launch>
<node pkg="rbx2_ar_tags" name="ar_follower" type="ar_follower.py" clear_params="true" output="screen">
<rosparam>
rate: 100
max_x: 4.0
goal_x: 0.8
x_threshold: 0.1
y_threshold: 0.1
y_scale: 1.0
x_scale: 1.0
max_angular_speed: 0.2
min_angular_speed: 0.4
max_linear_speed: 1.5
min_linear_speed: 0
rosparam>
node>
launch>
大家也可以去我的github上面去下载
5、使用CMT
原作者的github:
https://github.com/gnebehay/CppMT
附录:
有价值的参看:
1、质心跟随C++实现:
http://blog.csdn.net/yiranhaiziqi/article/details/53085096
2、https://www.youtube.com/watch?v=r8qyNfSGb1E
3、大神的github
https://github.com/jokla
4、通过ROS来训练数据
https://www.youtube.com/watch?v=RVFpwMAeBOA
补充一些有价值参考链接
turtlebot沿着线走的问题
https://www.youtube.com/channel/UCQSZvz6Suwfehc6UJKrFqoA
这个可以用迎宾机器人
http://wiki.ros.org/ppl_detection
骨架追踪的方案
https://www.youtube.com/watch?v=unxUdhP3bu8
点状的骨架追踪
https://www.youtube.com/watch?v=EOqKcwJBlXs
这个还很6
https://www.youtube.com/watch?v=Bh8WZsU4YC8
在这里备注一下哎
其实不用改原来的按个话题的映射,直接修改xml文件,就可以了。
在原来的话题的基础上,添加了平滑的效果,能够将原来发布速度的情况记性平滑处理。
直接在这个地方
直接在这个地方将速度的话题映射成你想要的话题,例如cmd_vel就可以了。然后机就能够正常的使用这个进行平滑滤波的东西。
接下里就是可以查看节点图,发现确实已经进行了平滑滤波