读取iai_kinect2的点云数据并且在rviz显示
1.安装iai_kinect2
2.创建getcloud功能包并且编写getcloud.cpp文件
2.1在工作空间的src文件目录下创建功能包
catkin_create_pkg getcloud roscpp rospy sensor_msgs std_msgs
注释:libfreenect2功能包是笔者其他用处,不用管,忽略掉,也可以参考另外一篇关于Kinect的博客有介绍。
2.2在创建的功能包的src文件下编写getcloud.cpp文件
总代码:
#include "ros/ros.h"
#include <sensor_msgs/PointCloud2.h>
class SubscribeAndPublish
{
private:
ros::NodeHandle n_;
ros::Publisher pub_;
ros::Subscriber sub_;
public:
SubscribeAndPublish()
{
//Topic you want to publish
pub_ = n_.advertise<sensor_msgs::PointCloud2>("cloud2", 50);
//Topic you want to subscribe
sub_ = n_.subscribe("/kinect2/sd/points", 1, &SubscribeAndPublish::callback, this);
}
void callback(const sensor_msgs::PointCloud2& msg)
{
ROS_INFO("OK");
pub_.publish(msg);
}
};//End of class SubscribeAndPublish
int main(int argc, char **argv)
{
//Initiate ROS
ros::init(argc, argv, "subscribe_and_publish");
//Create an object of class SubscribeAndPublish that will take care of everything
SubscribeAndPublish SAPObject;
ros::spin();
return 0;
}
2.3修改cmakelist的编译规则
在build的最底下加上两行代码,第一行意思是将getcloud.cpp编译成可执行文件getcloud。
add_executable(getCloud src/getCloud.cpp)
target_link_libraries(getCloud ${catkin_LIBRARIES})
2.4返回总的工作空间下进行编译
catkin_make
3.测试程序
3.1打开第一个终端运行kinect2_bridge
roslaunch kinect2_bridge kinect2_bridge.launch publish_tf:=true
3.2打开第二个终端运行刚刚编写的cpp的节点
rosrun getcloud getCloud
3.3打开第三终端运行rviz
rviz
首先在fixed frame选择kinect2_link
其次在topic选择/cloud2
参考链接:
1.读取iai_kinect2数据+处理+rviz显示
本文主要参考第一个链接,此链接主要讲了大体方法。
2.使用Rviz查看基于iai_kinect2的kinect2_bridge发布的实时点云和Octomap_server发布的实时octomap数据
此应该实现的第二种方法,可以参考;