执行roslaunch
roslaunch wpr_simulation wpb_simple.launch
启动测距观测示例程序
rosrun wpr_simulation demo_lidar_data
手搓C++程序
步骤
1、构建一个新的软件包,包名叫做lidar_pkg
2、在软件包中新建一个节点,节点的名称叫做lidar_node
3、在ROS中NodeHandle申请订阅话题/scan,并设置回调函数为LidarCallback()
4、构建回调函数LidarCallback(),并用来接收和处理雷达数据
5、调用ROS_INFO()显示雷达检查道德前方障碍物距离.
构建一个新的软件包
catkin_create_pkg lidar_pkg roscpp rospy sensor_msgs
在工作空间下新建c++文件
雷达扫描的起始角度和终止角度。
#include <ros/ros.h>
#include<sensor_msgs/LaserScan.h>
void LidarCallback(const sensor_msgs::LaserScan msg)
{
float fMidDist = msg.ranges[180];
ROS_INFO("前方测距 ranges[180] = %f 米",fMidDist);
}
int main(int argc,char *argv[])
{
setlocale(LC_ALL,""); //设置中文编码
ros::init(argc,argv,"lidar_node"); //初始化节点
ros::NodeHandle n; //召唤大管家
//LidarCallback 回调函数
ros::Subscriber lidar_sub = n.subscribe("/scan",10,&LidarCallback); //订阅话题
ros::spin();
return 0;
}
C++节点需要编译才能运行,于是要设置编译规则
将这两句添加到文件末尾
add_executable(${PROJECT_NAME}_node src/lidar_pkg_node.cpp)
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
)
终端进行编译
发现有报错
in expansion of macro ‘ROS_INFO’
7 | ROS_INFO("前方测距 ranges[180] = %f 米",fMidDist);
绕了一圈,结果发现是上面写ROS_INFO函数的时候,把,写出中文的了,服了。[已订正]
然后就要去看看效果
首先启动仿真环境
roslaunch wpr_simulation wpb_simple.launch
运行刚刚的节点
rosrun lidar_pkg lidar_node
移动物体可以观察到测距值在发生变化
可以观察相距差不多5个栅格,差不多5m左右因此这个就是测距值。