在windows系统调试ydlidar详细记录(物联网机器人方向)
这篇博文详细记录在windows系统调试ydlidar的全过程
ydlidar采用全无线连接方式,测距雷达放在迷你机器人(型号tianbotmini,中文名天宝迷你)上如下图所示,需要usb无线设备接受雷达信息:
由于使用机器人操作系统(ROS1和ROS2),需要安装机器人操作系统的请参考如下:
在Windows系统安装ROS机器人操作系统(更新日期2020年10月,附官网链接)
下面开始操作,使用SDK版本为1.4.7,发布日期为2020年3月31日。
Linux系统下使用简单不做介绍,这里重点围绕windows
简介
ydlidar SDK提供了控制命令和激光扫描数据传输的实现使用C/C++应用程序接口(API),基本结构如下图所示:
安装
1. 检查系统vcpkg环境配置情况:
- vcpkg integrate install
这里可以看到使用cmake的详细参数,接着就可以完成配置愉快编译啦。
2. cmake配置
新建build文件夹:
使用如下命令进行配置:
- cmake .. -G "Visual Studio 16 2019" "-DCMAKE_TOOLCHAIN_FILE=C:/opt/ros/melodic/x64/tools/vcpkg/scripts/buildsystems/vcpkg.cmake"
然后进入build文件夹看一看???
熟悉的画面出现啦。
3. VS2019编译
主要Debug或Release版本选择x64,然后点击
主函数main代码如下,非常重要,稍后博文会介绍如何将其接入ROS,愉快玩耍:
#include "CYdLidar.h"
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
using namespace std;
using namespace ydlidar;#if defined(_MSC_VER)
#pragma comment(lib, "ydlidar_driver.lib")
#endifint main(int argc, char *argv[]) {printf("__ ______ _ ___ ____ _ ____ \n");printf("\\ \\ / / _ \\| | |_ _| _ \\ / \\ | _ \\ \n");printf(" \\ V /| | | | | | || | | |/ _ \\ | |_) | \n");printf(" | | | |_| | |___ | || |_| / ___ \\| _ < \n");printf(" |_| |____/|_____|___|____/_/ \\_\\_| \\_\\ \n");printf("\n");fflush(stdout);std::string port;ydlidar::init(argc, argv);std::map<std::string, std::string> ports =ydlidar::YDlidarDriver::lidarPortList();std::map<std::string, std::string>::iterator it;if (ports.size() == 1) {port = ports.begin()->second;} else {int id = 0;for (it = ports.begin(); it != ports.end(); it++) {printf("%d. %s\n", id, it->first.c_str());id++;}if (ports.empty()) {printf("Not Lidar was detected. Please enter the lidar serial port:");std::cin >> port;} else {while (ydlidar::ok()) {printf("Please select the lidar port:");std::string number;std::cin >> number;if ((size_t)atoi(number.c_str()) >= ports.size()) {continue;}it = ports.begin();id = atoi(number.c_str());while (id) {id--;it++;}port = it->second;break;}}}int baudrate = 230400;std::map<int, int> baudrateList;baudrateList[0] = 115200;baudrateList[1] = 128000;baudrateList[2] = 153600;baudrateList[3] = 230400;baudrateList[4] = 512000;printf("Baudrate:\n");for (std::map<int, int>::iterator it = baudrateList.begin();it != baudrateList.end(); it++) {printf("%d. %d\n", it->first, it->second);}while (ydlidar::ok()) {printf("Please select the lidar baudrate:");std::string number;std::cin >> number;if ((size_t)atoi(number.c_str()) > baudrateList.size()) {continue;}baudrate = baudrateList[atoi(number.c_str())];break;}if (!ydlidar::ok()) {return 0;}bool isSingleChannel = false;bool isTOFLidar = false;std::string input_channel;std::string input_tof;printf("Whether the Lidar is one-way communication[yes/no]:");std::cin >> input_channel;std::transform(input_channel.begin(), input_channel.end(),input_channel.begin(),[](unsigned char c) {return std::tolower(c); // correct});if (input_channel.find("yes") != std::string::npos) {isSingleChannel = true;}if (!ydlidar::ok()) {return 0;}printf("Whether the Lidar is a TOF Lidar [yes/no]:");std::cin >> input_tof;std::transform(input_tof.begin(), input_tof.end(),input_tof.begin(),[](unsigned char c) {return std::tolower(c); // correct});if (input_tof.find("yes") != std::string::npos) {isTOFLidar = true;}if (!ydlidar::ok()) {return 0;}std::string input_frequency;float frequency = 8.0;while (ydlidar::ok() && !isSingleChannel) {printf("Please enter the lidar scan frequency[3-15.7]:");std::cin >> input_frequency;frequency = atof(input_frequency.c_str());if (frequency <= 15.7 && frequency >= 3.0) {break;}fprintf(stderr,"Invalid scan frequency,The scanning frequency range is 5 to 12 HZ, Please re-enter.\n");}if (!ydlidar::ok()) {return 0;}CYdLidar laser;//<! lidar portlaser.setSerialPort(port);//<! lidar baudratelaser.setSerialBaudrate(baudrate);//<! fixed angle resolutionlaser.setFixedResolution(false);//<! rotate 180laser.setReversion(false); //rotate 180//<! Counterclockwiselaser.setInverted(false);//ccwlaser.setAutoReconnect(true);//hot plug//<! one-way communicationlaser.setSingleChannel(isSingleChannel);//<! tof lidarlaser.setLidarType(isTOFLidar ? TYPE_TOF : TYPE_TRIANGLE);//unit: °laser.setMaxAngle(180);laser.setMinAngle(-180);//unit: mlaser.setMinRange(0.01);laser.setMaxRange(64.0);//unit: Hzlaser.setScanFrequency(frequency);std::vector<float> ignore_array;ignore_array.clear();laser.setIgnoreArray(ignore_array);bool ret = laser.initialize();if (ret) {ret = laser.turnOn();}while (ret && ydlidar::ok()) {bool hardError;LaserScan scan;if (laser.doProcessSimple(scan, hardError)) {fprintf(stdout, "Scan received[%llu]: %u ranges is [%f]Hz\n",scan.stamp,(unsigned int)scan.points.size(), 1.0 / scan.config.scan_time);fflush(stdout);} else {fprintf(stderr, "Failed to get Lidar Data\n");fflush(stderr);}}laser.turnOff();laser.disconnecting();return 0;
}
编译界面如下:
分别用debug和release调试一下吧。
很顺利,都分别生成了ydlidar_test.exe。
这时候build下会分别多出debug和release两个文件夹,进入release:
使用
插上无线接收器,打开天宝迷你电源开关,一切配网正确:
- ydlidar_test.exe
设置波特率等参数如下所示:
但是请依据雷达具体型号配置参数哦,如果不正确建立连接获取状态。
更多具体内容参考SDK文档的readme与API。很全!
一共199页,满足你的各种需求。
在windows系统调试ydlidar详细记录(物联网机器人方向)相关推荐
- Windows 系统 重装为Linux 记录
因为是老电脑,没怎么用,然后就又一个想法重装为Linux 准备好Linux镜像文件 如果没有准备好,以下是网址:https://man.linuxde.net/download/CentOS_7_4 ...
- react-native for android windows开发环境搭建详细记录
先说说整个环境搭建的过程.上周开始要在windows上搭建react-native for android环境,当时按照找的教程,从git上clone master分支的代码,然后下载了node,安装 ...
- 【SLAM】ORB_SLAM3 初步调试运行详细记录
前言 相关解析及参考: 超详细解读ORB-SLAM3单目初始化(下篇) ORB_SLAM3和之前版本有什么不同?_小白学视觉的技术博客_51CTO博客 orbslam3 官方源码地址:https:// ...
- windows系统查看路由详细信息
windows+r 进入命令行,如下图所示: 输入命令"route print" ,打印输出路由信息,如果需要查看路由详细参数使用:route --help. route --h ...
- windows系统 谷歌浏览器崩溃修复记录
chrome浏览器崩溃了,我的心碎了,STATUS_INVALID_IMAGE_HASH Google Chrome 显示"喔唷,崩溃啦!"后重新安装后就一直提示错误代码" ...
- php输出mysql错误日志_PHP_PHP中把错误日志保存在系统日志中(Windows系统),【将错误记录到系统日志中】 - phpStudy...
PHP中把错误日志保存在系统日志中(Windows系统) [将错误记录到系统日志中] 在 php.ini 中将 error_log 设置为: error_log = syslog 或者在运行时使用 i ...
- python windows系统_Windows系统下Python-Windows详细安装教程
安装Python-Windows 在开始Python编程前,需要先安装Python环境.Python安装包可以到Python的官网下载,官网地址是,如果想直接跳过关于Python的介绍相关直接下载安装 ...
- php 系统日志,PHP中把错误日志保存在系统日志中(Windows系统)
PHP中把错误日志保存在系统日志中(Windows系统) [将错误记录到系统日志中] 在 php.ini 中将 error_log 设置为: 复制代码 代码如下: error_log = syslog ...
- 递归和Windows系统的栈保护
Windows系统上创建线程可以使用CreateThread() API,这个API的原型是: HANDLE WINAPI CreateThread( __in LPSECURITY ...
- 101-STM32+Air724UG基本控制篇(自建物联网平台)-基础搭建-购买云主机,安装MQTT服务器软件(.Windows系统)
说明 云服务器: 就是一台电脑,和咱使用的是一样的.云服务器实际上最终还是物理机,只不过物理机是服务商的,服务商负责维护运行. 服务商提供了网页端让咱去购置和选型,购置完以后就可以登录使用. 云服务器 ...
最新文章
- 如何给女朋友解释什么是“元宇宙”?
- 【caffe速成】caffe图像分类从模型自定义到测试
- centos7下安装storm步骤
- 仓储模式到底是不是反模式?
- neo4j cypher_neo4j / cypher:悬挂查询参数
- Quartz作业调度框架及时间表达式的含义和语法
- 重学JAVA基础(三):动态代理
- Qt一个进程运行另一个进程
- 无限弹窗(python)
- 如何给multisim中导入9012/9013/8050/8550三极管
- 开发PLO编译器过程的一些体会
- 2022出海非洲:加纳电商市场现状及发展前景
- Excel应用技巧:不规则合并单元格的求和
- App兼容性测试/MONKEY配置和安装
- opc ua 用哪种语言编写_什么是OPC UA?
- python绘制七巧板_CSS3制作七巧板动画
- IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现
- 揭开自动驾驶在机场场景的商业化现状、挑战及趋势
- 2010.5.11项目管理群主题:网游那些事-DDV731731-SSE
- linux上安装java失败,Linux下安装jdk失败怎么办