ROS学习记录:在ROS中用C++实现获取激光雷达的数据

一、打开一个终端,输入cd ~/catkin_ws1,进入工作空间

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第1张图片

二、输入source ./devel/setup.bash,将ROS工作空间的环境设置(setup)添加到当前终端会话中

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第2张图片

三、输入roslaunch wpr_simulation wpb_simple.launch打开机器人仿真环境

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第3张图片

四、仿真环境打开成功

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第4张图片

五、再打开另一个终端,输入source ./devel/setup.bash

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第5张图片

六、激光雷达的数据获取,在wpr_simulation中有一个示例程序,在终端中输入(这里我清屏了一下所以前面source看不到了)rosrun wpr_simulation demo_lidar_data

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第6张图片

七、可以看到,激光雷达检测到机器人前方的障碍物为2.6米左右,ok,本文目的就是通过自己实现达到跟这个例子程序一样的效果

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第7张图片

八、在机器人的ROS系统中,激光雷达通常会有一个对应的节点,这个节点通常由雷达的厂商提供

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第8张图片

九、我们只需要简单的配置一下端口参数,就能和激光雷达的电路系统建立连接,雷达的测距数值,就从电路系统传递到雷达节点

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第9张图片

十、雷达节点会把测距数值封装成一个消息包,发布在一个Topic话题中

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第10张图片

十一、我们只需订阅这个话题,就能获取激光雷达的数据了

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第11张图片

十二、这个消息包的格式就是LaserScan格式,在这篇笔记中有详细介绍ROS系统中激光雷达消息包的数据格式

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第12张图片

十三、发布消息包的话题名称是约定俗成的叫/scan

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第13张图片

十四、获取激光雷达数据的实现思路

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第14张图片

十五、输入cd ~/catkin_ws1/src进入工作空间下的src目录

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第15张图片

十六、输入catkin_create_pkg lidar_pkg roscpp rospy sensor_msgs创建一个软件包,包名叫做lidar_pkg,依赖项中的sensor_msgs是包含了雷达消息格式的的软件包

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第16张图片

十七、输入code .打开VScode

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第17张图片

十八、VScode打开成功

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第18张图片

十九、在lidar_pkg的src文件夹下新建文件

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第19张图片

二十、名字叫做lidar_node.cpp

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第20张图片

二十一、在lidar_node.cpp文件总写入如下代码

#include   //引入ROS系统头文件
#include     //引入雷达消息格式头文件

void LidarCallback(const sensor_msgs::LaserScan msg)
{
    float fMidDist = msg.ranges[180];
    ROS_INFO("前方测距 ranges[180] = %f 米", fMidDist);
}


int main(int argc, char  *argv[])
{
    /* code */
    setlocale(LC_ALL,"");//设置中文编码
    ros::init(argc,argv,"lidar_node");  //初始化节点

    ros::NodeHandle n;
    ros::Subscriber lidar_sub = n.subscribe("/scan",10,&LidarCallback);

    ros::spin();
    return 0;
}

二十二、打开CMakeLists.txt设置编译规则

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第21张图片

二十三、在CMakeLists.txt文件末尾加入如下代码

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第22张图片

 add_executable(lidar_node src/lidar_node.cpp)
 target_link_libraries(lidar_node
   ${catkin_LIBRARIES}
 )

二十四、按Shift+Ctrl+B进行编译,选择catkin_make:build

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第23张图片

二十五、编译成功

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第24张图片

二十六、打开一个终端,输入cd ~/catkin_ws1进入工作空间

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第25张图片

二十七、输入source ./devel/setup.bash

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第26张图片

二十八、输入roslaunch wpr_simulation wpb_simple.launch,打开机器人仿真环境

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第27张图片

二十九、机器人仿真环境打开成功

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第28张图片

三十、再打开一个终端,输入source ./devel/setup.bash

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第29张图片

三十一、输入rosrun lidar_pkg lidar_node启动刚才编写的lidar_node节点,可以看到机器人前方测距值为2.6米左右,

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第30张图片

三十二、点击移动图标,再点击书柜,再点击红色坐标轴移动书柜

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第31张图片

三十三、发现测距值发生了改变,可见这个测距值就是机器人正前方障碍物的距离

ROS学习记录:在ROS中用C++实现获取激光雷达的数据_第32张图片

你可能感兴趣的:(ROS,学习,c++,开发语言,机器人,ros)