一 一个完整代码的编译及显示.
1.建立工作空间和功能包
mkdir -p workspace_name/src
cd workspace_name
source devel/setup.bash
catkin_create_pkg package_name ku_1 ku_2 ku_3 ...
应用:
mkdir -p 1/src
cd src
source devel/setup.bash
catkin_create_pkg xixinizuibang pcl_conversions pcl_ros roscpp sensor_msgs
2.在xixinizuibang的src中,写你自己的代码,这里example.cpp.
3.修改Cmakelists.txt
在里面加入
add_executable({PROJECT_NAME}_node src/example.cpp)
target_link_libraries({PROJECT_NAME}_node ${catkin_LIBRARIES})
这里{PROJECT_NAME}_node,命名可以自定义,代表node(节点)名称.
example.cpp代表需要进行编译的节点名称.
应用:
add_executable(example src/example.cpp)
target_link_libraries(example ${catkin_LIBRARIES})
最终编译成功节点名称为example
4.编译并source
在工作空间下,这里是1(workspace_name)
catkin_make -DCATKIN_WHITELIST_PACKAGES="package_name"
这里
catkin_make -DCATKIN_WHITELIST_PACKAGES="xixinizhenbang"
source devel/setup.bash
编译结果,并可以看出节点名称为example,在rosrun rqt_graph rqt_graph 节点管理器中可以看到节点名称.
5.用rviz显示
window 1: roscore
window 2: rosrun package_name node_name input:=/topic
input内容为topic!!!!!!
此处为:rosrun xixinizuibang example input:/pcl_output
此处的pcl_output为之前发布的节点,作用是发布点云(在pcd显示那节).
window 3: rosrun rviz rviz
将fixed_frame 设置成为odom,这个在代码里可以设置,在pcd显示那节.
add pointcloud2 ; topic: /output
二 pcl_ros的结合格式
内容来自http://wiki.ros.org/pcl/Tutorials,中文注释原创!
#include <ros/ros.h>
// PCL specific includes
#include <sensor_msgs/PointCloud2.h>
#include <pcl_conversions/pcl_conversions.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
ros::Publisher pub; //ros发布话题并命名
void
cloud_cb (const sensor_msgs::PointCloud2ConstPtr& input)
{
// Create a container for the data.
sensor_msgs::PointCloud2 output;
// Do data processing here...
output = *input;
// Publish the data.
pub.publish (output);
}
int
main (int argc, char** argv)
{
// Initialize ROS
ros::init (argc, argv, "my_pcl_tutorial");
ros::NodeHandle nh;
// Create a ROS subscriber for the input point cloud
ros::Subscriber sub = nh.subscribe ("input", 1, cloud_cb);
// Create a ROS publisher for the output point cloud
pub = nh.advertise<sensor_msgs::PointCloud2> ("output", 1);
// Spin
ros::spin ();
}