主要是参考这篇博文:
https://blog.csdn.net/alsj123456/article/details/109408165?spm=1001.2014.3001.5502
1.路径:主文件夹/catkin_ws/src/rplidar_ros-master/src
找到client.cpp
(下图为修改过的,没修改之前里面只有两个文件:client.cpp和node.cpp)
2.按照上方那个链接修改client.cpp里面的代码:
(下面代码来源于https://blog.csdn.net/alsj123456/article/details/109408165?spm=1001.2014.3001.5502
(1)未修改之前:
#include "ros/ros.h"
#include "sensor_msgs/LaserScan.h"
#define RAD2DEG(x) ((x)*180./M_PI)
void scanCallback(const sensor_msgs::LaserScan::ConstPtr& scan)
{
int count = scan->scan_time / scan->time_increment;//一圈359个点
ROS_INFO("I heard a laser scan %s[%d]:", scan->header.frame_id.c_str(), count);
ROS_INFO("angle_range, %f, %f", RAD2DEG(scan->angle_min), RAD2DEG(scan->angle_max));//输出信息
for(int i = 0; i < count; i++) {
float degree = RAD2DEG(scan->angle_min + scan->angle_increment * i);
ROS_INFO(": [%f, %f]", degree, scan->ranges[i]);//输出角度和距离数据
}
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "rplidar_node_client");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe<sensor_msgs::LaserScan>("/scan", 1000, scanCallback);
ros::spin();
return 0;
}
(2)修改之后
#include "ros/ros.h"
#include "sensor_msgs/LaserScan.h"
#include "fstream" /**/
#include "string" /**/
#define RAD2DEG(x) ((x)*180./M_PI)
using namespace std; /**/
void scanCallback(const sensor_msgs::LaserScan::ConstPtr& scan)
{
int count = scan->scan_time / scan->time_increment;
ROS_INFO("I heard a laser scan %s[%d]:", scan->header.frame_id.c_str(), count);
ROS_INFO("angle_range, %f, %f", RAD2DEG(scan->angle_min), RAD2DEG(scan->angle_max));
ofstream oFile; /**/
oFile.open("leidadate.csv",ios::out|ios::trunc); /**/
for(int i = 0; i < count; i++) {
float degree = RAD2DEG(scan->angle_min + scan->angle_increment * i);
ROS_INFO(": [%f, %f]", degree, scan->ranges[i]);
oFile<< degree <<","<< scan->ranges[i] <<endl; /**/
}
oFile.close(); /**/
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "rplidar_node_client");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe<sensor_msgs::LaserScan>("/scan", 1000, scanCallback);
ros::spin();
return 0;
}
3.保存之后重新编译工作空间
1)回到工作空间catkin_ws中,右键选择在终端打开
(2)打开后输入catkin_make,然后回车
4.将雷达连接上电脑
5.设备设置与执行测试
(1)Ctrl+Alt+T打开终端,输入以下指令然后回车设置rplidar设备的权限。
KERNEL=="ttyUSB*", MODE="0666"
(2)输入以下指令然后回车检查rplidar串口的权限。
ls -l /dev |grep ttyUSB
(3)输入以下指令添加写入权限:(我这里是/dev/ttyUSB0)
sudo chmod 666 /dev/ttyUSB0
回车后输入密码,再回车
6.输入以下指令然后回车启动rplidar节点并运行rplidar客户端进程以打印原始扫描结果。
roslaunch rplidar_ros rplidar_s2.launch
( 另附其它型号的雷达指令:
roslaunch rplidar_ros rplidar.launch (for RPLIDAR A1/A2)
roslaunch rplidar_ros rplidar_a3.launch (for RPLIDAR A3)
roslaunch rplidar_ros rplidar_s1.launch (for RPLIDAR S1)
roslaunch rplidar_ros rplidar_s2.launch (for RPLIDAR S2)
Ctrl+Alt+T打开另一个终端,在里面输入以下指令(太快了没有截到,下图是效果,注意不要关掉上面那句指令):
rosrun rplidar_ros rplidarNodeClient
Ctrl+C可以结束
7.在主文件夹里面找到leidadate.csv