基于ROS系统的3D点云单目标行人跟踪

终于正式进入研究生生活了,因为实验室项目需求,使用3D激光雷达数据实现单目标行人跟踪。
首先需要在Linux下用C++实现该功能,对于点云数据,需要使用PCL库进行处理。
雷达采集的数据为.bag文件,为连续帧数据,但不能被直接读取。因此通过ROS系统将.bag文件转为.pcd文件,相当于获取逐帧数据,在这基础上进行处理。
对于输入点云数据,首先要过滤较远范围的点云数据,减小接下来的搜索范围。

        pcl::PassThrough<pcl::PointXYZ> pass;

        pass.setInputCloud (cloud);            //设置输入点云
        pass.setFilterFieldName ("x");         //设置过滤时所需要点云类型的Z字段
        pass.setFilterLimits (-7.0, 7.0);        //设置在过滤字段的范围
        pass.filter (*cloud);
        
        pass.setInputCloud (cloud);
        pass.setFilterFieldName ("y");         //设置过滤时所需要点云类型的Z字段
        pass.setFilterLimits (-7.0, 7.0);        //设置在过滤字段的范围
        pass.filter (*cloud);
        
        pass.setInputCloud (cloud);
        pass.setFilterFieldName ("z");         //设置过滤时所需要点云类型的Z字段
        pass.setFilterLimits (-1.5, 0.5);        //设置在过滤字段的范围
        pass.filter (*cloud);

在选定的范围中,需要通过聚类算法,按不同点云所在位置归为不同整体。通常聚类方法包括K-Means算法和欧式聚类方法。由于K-Means算法需要事先知道聚几类,才能完成聚类工作,而跟踪复杂环境无法提前设定聚类数目,因此最后使用欧式聚类方法,根据实际效果,并进行部分参数设定。

        pcl::EuclideanClusterExtraction<pcl::PointXYZ> ec;
        ec.setClusterTolerance (0.55); //设置近邻搜索的搜索半径为55cm
        ec.setMinClusterSize (30);//设置一个聚类需要的最少点数目为30
        ec.setMaxClusterSize (1000); //设置一个聚类需要的最大点数目为1000
        ec.setSearchMethod (tree);//设置点云的搜索机制
        ec.setInputCloud (cloud);
        ec.extract (cluster_indices);//从点云中提取聚类,并将点云索引保存在cluster_indices中   

在我们提取的所有聚类中计算聚类的xyz轴上长度,根据相应特征便可以检测到行人。
行人检测结果

接下来考虑跟踪问题,因为任务是对单目标进行跟踪,因此不需要加跟踪器,只需使用检测结果。同时对于没有检测出行人的帧和前后帧行人检测位置变化较大的帧都认为检测不佳,对于这些帧使用的行人位置为:

            centroid.x = person_x_later + v_x;
            centroid.y = person_y_later + v_y;
            centroid.z = person_z_later;

即这些帧行人的位置由上一帧行人的位置和速度计算而得。最后的效果为
行人跟踪结果

因为最后该项目用在机器人上,需要使用ROS系统。ROS(Robot Operating System)是一个机器人软件平台,我自身理解使用ROS系统的一大重要原因是对于各个传感器(摄像头、GPS、激光雷达等)的接口和库函数集成很完备。
对于已经实现的C++语言转移到ROS系统上,其最核心的部分为ROS的发布信息和订阅功能。而该程序需要实现在订阅获取发布点云数据的基础上,处理点云数据,最后进行结果发布,因此该程序需要同时拥有ROS的订阅和发布功能。其基本构架为:

class SubscribeAndPublish
{
public:
  SubscribeAndPublish()
  {
    //Topic you want to publish
    pub_ = n_.advertise<sensor_msgs::PointCloud2>("pcl_show", 1);
    //Topic you want to subscribe
    sub_ = n_.subscribe("pcl_output", 1, &SubscribeAndPublish::callback, this);

    //Topic you want to subscribe
    
  }
 
  void callback(const sensor_msgs::PointCloud2 &input)
  {
    …… (点云处理程序)
    pub_.publish(output);
  }
private:
  ros::NodeHandle n_; 
  ros::Publisher pub_;
  ros::Subscriber sub_;
 
};//End of class SubscribeAndPublish

int main (int argc, char **argv)
{
  ros::init (argc, argv, "pcl_write");
  SubscribeAndPublish SAPObject;
  ros::spin();
  return 0;
}

最后还需要对于pcl::Pointcloud数据和ROS中点云信息发布格式sensor_msgs::PointCloud2之间进行合理转化。
当然接下来会将该套单目标跟踪算法放在实际的测试平台(一只机器狗)上进行测试,后期可能还会加入卡尔曼滤波跟踪算法。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • 2017年无人驾驶还处于积极研发和普及期,民用的测试和技术探索也主要在小型汽车方面,各大巨头都将2020年作为一个...
    方弟阅读 7,071评论 1 16
  • 作者:温利武 班级:1402019 学号:14020199041 【嵌牛导读】:本文梳理总结了前面11篇涉及...
    wlw_1fdf阅读 1,089评论 2 6
  • 春天里江南风吹过小草旁边 游人走过江南路上风吹过人身边 湖里吹过江南风 江南风吹过江南雨下来
    王密亮阅读 222评论 0 1
  • 在武汉洪山牵引力教育Python培训要学习多长时间才可以掌握呢? 相信有了解的人都知道,Python目前是首选的A...
    Hannah汪阅读 98评论 0 0
  • 第8天·21天告别拖延 #玩卡不卡·每日一抽# 每一位都可以通过这张卡片觉察自己: 1、直觉他叫什么名字?麻子 2...
    田__田阅读 118评论 0 0