




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
机器人操作系统(ROS2)入门与实践机器人操作系统(ROS2)入门与实践第1章LinuxUbuntu入门基础第2章ROS2安装与系统架构第3章ROS2编程基础第4章ROS2机器人运动控制第5章激光雷达在ROS2中的使用第6章IMU在ROS2中的使用第7章ROS2中的SLAM环境建图第8章ROS2中的NAV2自主导航第9章ROS2中的图像视觉应用第10章ROS2的三维视觉应用第11章ROS2的机械臂应用第12章基于ROS2的综合应用第5章5.4基于激光雷达的避障实现5.1ROS2里的激光雷达数据5.5本章小结第5章激光雷达在ROS2中的使用5.2在RViz2中查看激光雷达数据5.3激光雷达数据获取
激光雷达的旋转部分搭载激光测距探头,其在旋转的过程中每隔一定角度就会测量一次距离值。当其旋转一圈时,刚好可以对周围障碍物进行均匀的测距采样,这么一组测距值就是激光雷达的输出数值。
5.1ROS2里的激光雷达数据
ROS2中的激光雷达的节点会在指定名称的话题里发布消息。话题名称在REP-138中推荐为“/scan”。消息的类型为sensor_msgs::LaserScan,其格式如图所示:
5.1ROS2里的激光雷达数据
在ROS2中,提供了一个图形化工具,可以直观的查看传感器的数值。这个工具名字叫“RViz2”,其中“RViz”是“ROSVisualizationTool”的缩写,“2”表示第二代。
5.2在RViz2中查看激光雷达数据在RViz2中查看激光雷达的数据的详细操作步骤:见教材P122-P128页5.2在RViz2中查看激光雷达数据5.2.1RViz2的使用source~/ros2_ws/install/setup.bashros2launchwpr_simulation2wpb_simple.launch.py这时会弹出一个窗口,如图所示,显示一台机器人,面前放置了一个书柜。机器人的激光雷达扫描到了书柜的下半部分。5.2在RViz2中查看激光雷达数据source~/ros2_ws/install/setup.bashrviz2打开第2个子窗口。5.2在RViz2中查看激光雷达数据source~/ros2_ws/install/setup.bashrviz2打开第2个子窗口。5.2在RViz2中查看激光雷达数据5.2.3界面配置的加载rviz2-d~/lidar.rviz
指令执行后,会弹出[RViz2窗口]对话框。如图所示,这时候的RViz2直接显示为之前保存配置时的样子。
激光雷达数据的获取是通过订阅激光雷达发布的话题,从话题中获取激光雷达发出的消息包来实现的。如图所示,将会实现一个订阅者节点,订阅"/scan"话题。从此话题中接收sensor_msgs::LaserScan类型的消息包,并解析出雷达的测距数值。5.3激光雷达数据获取激光雷达数据获取的详细操作步骤:见教材P129-P139页5.3激光雷达数据获取5.3.1编写雷达数据获取程序cd~/ros2_ws/srcros2pkgcreatelidar_pkg1、编写节点代码新建文件,命名为“lidar_data.cpp”。5.3激光雷达数据获取#include<rclcpp/rclcpp.hpp>#include<sensor_msgs/msg/laser_scan.hpp>
std::shared_ptr<rclcpp::Node>node;
voidLidarCallback(constsensor_msgs::msg::LaserScan::SharedPtrmsg){intnNum=msg->ranges.size();intnMid=nNum/2;floatfMidDist=msg->ranges[nMid];RCLCPP_INFO(node->get_logger(),"ranges[%d]=%fm",nMid,fMidDist);}
intmain(intargc,char**argv){rclcpp::init(argc,argv);
node=std::make_shared<rclcpp::Node>("lidar_data_node");
autolidar_sub=node->create_subscription<sensor_msgs::msg::LaserScan>("/scan",10, LidarCallback);
rclcpp::spin(node);
rclcpp::shutdown();
return0;}5.3激光雷达数据获取2、设置编译规则3、修改软件包信息4、编译软件包find_package(rclcppREQUIRED)find_package(sensor_msgsREQUIRED)add_executable(lidar_datasrc/lidar_data.cpp)ament_target_dependencies(lidar_data"rclcpp""sensor_msgs")install(TARGETSlidar_dataDESTINATIONlib/${PROJECT_NAME})<depend>rclcpp</depend><depend>sensor_msgs</depend>cd~/ros2_wscolconbuild5.3激光雷达数据获取5.3.2仿真运行雷达数据获取程序sourceinstall/setup.bashros2launchwpr_simulation2wpb_simple.launch.pysourceinstall/setup.bashros2runlidar_pkglidar_data打开第2个子窗口。
下面将激光雷达数据获取和速度控制进行结合,实现一个避障程序。程序订阅雷达数据的“/scan”话题,从中接收激光雷达节点发来的sensor_msgs::LaserScan类型消息包,并解析出雷达测距值。根据雷达测距值让机器人做出反应:前方没有障碍物就前进,前方遇到障碍物就转向。5.4基于激光雷达的避障实现详细操作步骤:见教材P140-P152页5.4.1编写雷达避障程序5.4基于激光雷达的避障实现避障逻辑流程图5.4.1编写雷达避障程序1、编写节点代码新建文件,命名为“lidar_behavior.cpp”。5.4基于激光雷达的避障实现#include<rclcpp/rclcpp.hpp>#include<sensor_msgs/msg/laser_scan.hpp>#include<geometry_msgs/msg/twist.hpp>
std::shared_ptr<rclcpp::Node>node;rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtrvel_pub;intnCount=0;
voidLidarCallback(constsensor_msgs::msg::LaserScan::SharedPtrmsg){intnNum=msg->ranges.size();intnMid=nNum/2;floatfMidDist=msg->ranges[nMid];RCLCPP_INFO(node->get_logger(),"ranges[%d]=%fm",nMid,fMidDist);
if(nCount>0){nCount--;return;}
geometry_msgs::msg::Twistvel_msg;if(fMidDist<1.5f){vel_msg.angular.z=0.3;nCount=100;}else{vel_msg.linear.x=0.1;}vel_pub->publish(vel_msg);}5.4基于激光雷达的避障实现intmain(intargc,char**argv){rclcpp::init(argc,argv);
node=std::make_shared<rclcpp::Node>("lidar_behavior_node");
vel_pub=node->create_publisher<geometry_msgs::msg::Twist>("/cmd_vel",10);autolidar_sub=node->create_subscription<sensor_msgs::msg::LaserScan>("/scan",10, LidarCallback);
rclcpp::spin(node);
rclcpp::shutdown();
return0;}5.4基于激光雷达的避障实现2、设置编译规则3、修改软件包信息4、编译软件包<depend>rclcpp</depend><depend>sensor_msgs</depend><depend>geometry_msgs</depend>cd~/ros2_wscolconbuild5.4基于激光雷达的避障实现find_package(rclcppREQUIRED)find_package(sensor_msgsREQUIRED)find_package(geometry_msgsREQUIRED)add_executable(lidar_behaviorsrc/lidar_behavior.cpp)ament_target_dependencies(lidar_behavior"rclcpp""sensor_msgs""geometry_msgs")install(TARGETSlidar_datalidar_behaviorDESTINATIONlib/${PROJECT_NAME})sourceinstall/setup.bashros2launchwpr_simulation2wpb_simple.launch.pysourceinstall/setup.bashros2runlidar_pkglidar_behavior5.4基于激光雷达的避障实现5.4.2仿真运行雷达避障程序打开第2个子窗口。节点运行起来之后,切换到刚才的仿真窗口。如图所
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国不锈钢丝编织聚四氟乙烯软管行业发展研究报告
- 2025至2030年中国不燃性小型金属氧化膜电阻器行业投资前景及策略咨询报告
- 2025至2030年中国三表远传监控系统市场分析及竞争策略研究报告001
- 中小企业品牌形象塑造与推广
- 2025至2030年中国三氯速溶片片市场分析及竞争策略研究报告001
- 2025至2030年中国三星盆台行业投资前景及策略咨询报告
- 临床研究数据库的优化与升级策略
- 2025至2030年中国ɑ-玉米赤霉醇原药及埋植剂行业发展研究报告
- 2025至2030年中国T5一拖一电子镇流器行业投资前景及策略咨询报告
- 2025至2030年中国PV碘消毒剂行业发展研究报告
- 农产品中常见重金属的危害
- 中国商帮江右商帮内容提要
- 养老护理员职业技能等级认定三级(高级工)理论知识考核试卷
- 煤矿供电保护接地知识的培训
- 上海交大科技成果转移转化实践简版
- 简单的设计合同(3篇)2023年
- 《阿Q正传》《边城》比较阅读课件28张 统编版高中语文选择性必修下册
- 2023年小学语文教师学科专业知识考试试题及答案
- GB/T 7702.5-1997煤质颗粒活性炭试验方法水容量的测定
- GB/T 17747.3-2011天然气压缩因子的计算第3部分:用物性值进行计算
- 变电站一键顺控操作过程常见异常与处置措施探讨
评论
0/150
提交评论