【光电智造】机器人SLAM建图与自主导航:从基础到实践

今日光电 2024-12-18 18:00

 今日光电 

     有人说,20世纪是电的世纪,21世纪是光的世纪;知光解电,再小的个体都可以被赋能。追光逐电,光赢未来...欢迎来到今日光电!




----追光逐电 光赢未来----

前言


这篇文章我开始和大家一起探讨机器人SLAM建图与自主导航 ,在前面的内容中,我们介绍了差速轮式机器人的概念及应用,谈到了使用Gazebo平台搭建仿真环境的教程,主要是利用gmapping slam算法,生成一张二维的仿真环境地图 。我们也会在这篇文章中继续介绍并使用这片二维的仿真环境地图,用于我们的演示。



教程


SLAM算法的引入


(1)SLAM:Simultaneous Localization and Mapping,中文是即时定位与地图构建,所谓的SLAM算法准确说是能实现SLAM功能的算法,而不是某一个具体算法。


(2)现在各种机器人研发和商用化非常火 ,所有的自主机器人都绕不开一个问题,即在陌生环境中,需要知道周边是啥样(建图),需要知道我在哪(定位),于是有了SLAM 课题的研究。SLAM在室内机器人,自动驾驶汽车建图,VR/AR穿戴等领域都有广泛的应用。



(3)SLAM算法根据依赖的传感器不同,可以分为激光SLAM和视觉SLAM,前者是激光雷达,后者是能提供深度信息的摄像头,如双目摄像头,红外摄像头等。除此之外,SLAM算法通常还依赖里程计提供距离信息,否则地图很难无缝的拼接起来,很容易跑飞。一个经典的SLAM 流程框架如下,其中回环检测时为了判断机器人有没有来过之前的位置。


整体视觉SLAM的流程图



gmapping算法的基本原理


(1)现在ROS里有一系列SLAM算法包,如:gmapping ,hector(不需要里程计,比较特别),谷歌开源的cartographer(效率高),rtabmap(前面是二维的,这是三维建图)等。


(2)gmapping是基于激光雷达的,需要里程计信息,创建二维格栅地图。其中IMU信息可以没有 。



(3)ros中激光雷达数据消息是 sensor_msgs/LaserScan ,内容如下:



(4)ros中里程计数据消息是 nav_msgs/Odometry 



(5)gmapping 发布的地图meta数据:



(6)gmapping 发布的地图栅格数据



mbot_navigation


(1)ubuntu20.04 + ros noetic下,安装gmapping和保存地图文件的map_server


sudo apt-get install ros-noetic-gmappingsudo apt-get install ros-noetic-map-server// 补充:这是安装hectorsudo apt-get install ros-noetic-hector-slam


(2)创建 mbot_navigation 和相关文件


cd ~/catkin_ws/srccatkin_create_pkg mbot_navigation geometry_msgs move_base_msgs actionlib roscpp rospy
cd mbot_navigation mkdir launch maps rviztouch launch/gmapping.launch


(3)调用gmapping算法,只需要写launch文件就行了,不用编码。


gmapping.launch


  // mbot_gazebo 会通过发/scan topic,传出lidar数据    "scan_topic" default="scan" />    // gammping一大堆参数,这里都是从他的demo里扣出来的,不用改。    // 如果想用的好,可以尝试修改,甚至改一些代码,这就是算法(调参)工程师!    "gmapping" type="slam_gmapping" name="slam_gmapping" output="screen" clear_params="true">      // mbot_gazebo 会通过发/odom topic,传出里程计数据        "odom_frame" value="odom"/>        "map_update_interval" value="5.0"/>                "maxRange" value="5.0"/>        "maxUrange" value="4.5"/>        "sigma" value="0.05"/>        "kernelSize" value="1"/>        "lstep" value="0.05"/>        "astep" value="0.05"/>        "iterations" value="5"/>        "lsigma" value="0.075"/>        "ogain" value="3.0"/>        "lskip" value="0"/>        "srr" value="0.01"/>        "srt" value="0.02"/>        "str" value="0.01"/>        "stt" value="0.02"/>        "linearUpdate" value="0.5"/>        "angularUpdate" value="0.436"/>        "temporalUpdate" value="-1.0"/>        "resampleThreshold" value="0.5"/>        "particles" value="80"/>        "xmin" value="-1.0"/>        "ymin" value="-1.0"/>        "xmax" value="1.0"/>        "ymax" value="1.0"/>        "delta" value="0.05"/>        "llsamplerange" value="0.01"/>        "llsamplestep" value="0.01"/>        "lasamplerange" value="0.005"/>        "lasamplestep" value="0.005"/>        "scan" to="$(arg scan_topic)"/>      // 保存的rviz配置文件    "rviz" type="rviz" name="rviz" args="-d $(find mbot_navigation)/rviz/map.rviz"/>


(4)连同mbot_gazebo,一起编译运行


cd ~/catkin_wscatkin_make -DCATKIN_WHITELIST_PACKAGES="mbot_navigation;mbot_gazebo"source devel/setup.bash// 打开仿真环境roslaunch mbot_gazebo mbot_gazebo.launch//再开一个窗口,打开gmappingroslaunch mbot_navigation gmapping.launch// 控制机器人行动,进行建图roslaunch mbot_gazebo mbot_teletop.launch// 建图完成后,新开窗口,执行map_server,保存生成的地图cd ~/catkin_ws/src/mbot_navigation/mapsrosrun map_server map_saver -f gmapping_save



最终保存下来的地图




总结


代码示例:


#include #include #include #include #include geometry_msgs::Pose createPose(double px, double py, double pz, double ox, double oy, double oz, double ow) {    geometry_msgs::Pose pose;    pose.position.x = px;    pose.position.y = py;    pose.position.z = pz;    pose.orientation.x = ox;    pose.orientation.y = oy;    pose.orientation.z = oz;    pose.orientation.w = ow;    return pose;  }int main(int argc, char** argv) {  ros::init(argc, argv, "move_test");  actionlib::SimpleActionClient move_base_client("move_base", true);  ROS_INFO("Waiting for move_base action server...");    move_base_client.waitForServer();  ROS_INFO("connected to move base server");  std::vector target_list;  target_list.push_back(createPose(6.543, 4.779, 0.000, 0.000, 0.000, 0.645, 0.764));  target_list.push_back(createPose(5.543, -4.779, 0.000, 0.000, 0.000, 0.645, 0.764));  target_list.push_back(createPose(-5.543, 4.779, 0.000, 0.000, 0.000, 0.645, 0.764));  target_list.push_back(createPose(-5.543, -4.779, 0.000, 0.000, 0.000, 0.645, 0.764));  for (uint8_t i = 0; i < target_list.size(); i ++) {    ros::Time start_time = ros::Time::now();    ROS_INFO("going to %u goal, position: (%f, %f)", i, target_list[i].position.x, target_list[i].position.y);    move_base_msgs::MoveBaseGoal goal;    goal.target_pose.header.frame_id = "map";    goal.target_pose.header.stamp = ros::Time::now();    goal.target_pose.pose = target_list[i];    move_base_client.sendGoal(goal);    move_base_client.waitForResult();    if (move_base_client.getState() == actionlib::SimpleClientGoalState::SUCCEEDED) {      ros::Duration running_time =  ros::Time::now() - start_time;      ROS_INFO("go to %u goal succeeded, running time %f sec", i, running_time.toSec());    } else {      ROS_INFO("goal failed");    }  }  return 0;}
来源:新机器视觉


申明:感谢原创作者的辛勤付出。本号转载的文章均会在文中注明,若遇到版权问题请联系我们处理。


 

----与智者为伍 为创新赋能----


【说明】欢迎企业和个人洽谈合作,投稿发文。欢迎联系我们
诚招运营合伙人 ,对新媒体感兴趣,对光电产业和行业感兴趣。非常有意者通过以下方式联我们!条件待遇面谈
投稿丨合作丨咨询

联系邮箱:uestcwxd@126.com

QQ:493826566



评论
  • You are correct that the length of the via affects its inductance. Not only the length of the via, but also the shape and proximity of the return-current path determines the inductance.   For example, let's work with a four-layer board h
    tao180539_524066311 2024-12-18 15:56 62浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-18 14:02 66浏览
  •   前言  作为一名电子专业的学生,半导体存储显然是绕不过去的一个坎,今天聊一聊关于Nand Flash的一些小知识。  这里十分感谢深圳雷龙发展有限公司为博主提供的两片CS创世SD NAND的存储芯片,同时也给大家推荐该品牌的相关产品。  一、定义  存储芯片根据断电后是否保留存储的信息可分为易失性存储芯片(RAM)和非易失性存储芯片(ROM)。  非易失性存储器芯片在断电后亦能持续保存代码及数据,分为闪型存储器 (Flash Memory)与只读存储器(Read-OnlyMemory),其中
    雷龙发展 2024-12-17 17:37 59浏览
  • 车载光纤通信随着ADAS(高阶驾驶辅助系统)、汽车智能网联、V2X和信息娱乐技术的不断发展,车载电子系统和应用数量迅速增加。不断增长的车内传输数据量对车载通信网络造成了巨大的数据带宽和安全性需求,传统的车载总线技术已经不能满足当今高速传输的要求。铜缆的广泛使用导致了严重的电磁干扰(EMI),同时也存在CAN、LIN、FlexRay等传统总线技术不太容易解决的问题。在此背景下,车载光纤通信技术逐渐受到关注和重视,除了大大提高数据传输率外,还具有抗电磁干扰、减少电缆空间和车辆质量等优点,在未来具有很
    广电计量 2024-12-18 13:31 63浏览
  •        随着对车载高速总线的深入研究,以电信号为媒介的传输方式逐渐显露出劣势,当传输速率超过25Gbps时,基于电信号传输已经很难保证长距离传输下的信号质量与损耗。在这样的背景下,应用于工业领域的光通信技术因其高带宽、长距离、低电磁干扰的特点得到了密切的关注,IEEE在2023年发布了802.3cz[1]协议,旨在定义一套光纤以太网在车载领域的应用标准。MultiGBASE-AU总览       以下是Mult
    经纬恒润 2024-12-17 17:29 70浏览
  • 2003年买的电子管功放机,俗称胆机,坏过几次,咨询厂家,购买零件,自己修理,干中学,学中干。有照片记录的是2011年3月,一天,发现整流管比之前红亮了很多,赶紧关机,想找原因,反反复复折腾了几个月,搞好了。就此,还在网上论坛咨询和讨论,欧博Rererence 5.0电子管发粉红色光,何故?-『胆艺轩音响技术论坛』-胆艺轩[Tubebbs]论坛 发表于2011-5-7同时与厂家联系得到支持,见文:29kg胆机修理之联想——环保简易,做到真难!-面包板社区 发表于2011-6-13又继续使用了多年
    自做自受 2024-12-17 22:18 135浏览
  •  2024年下半年,接二连三的“Duang Duang”声,从自动驾驶行业中传来:文远知行、黑芝麻、地平线、小马智行等相继登陆二级市场,希迪智驾、Momenta、佑驾等若干家企业在排队冲刺IPO中。算法模型的历史性迭代与政策的不断加码,让自动驾驶的前景越来越清晰。由来只有新人笑,有谁听到旧人哭。在资本密集兑现的自动驾驶小元年里,很多人可能都已经遗忘,“全球自动驾驶第一股”的名号,曾经属于一家叫做图森未来的公司。曾经风光无两的“图森”,历经内讧与退市等不堪往事之后,而今的“未来”似乎被锚
    锦缎研究院 2024-12-18 11:13 67浏览
  • 上汽大通G90是一款集豪华、科技与舒适于一身的中大型MPV,号称“国产埃尔法”。在国内市场,作为“卷王”的G90主要面向中大型MPV市场,满足家庭出行、商务接待和客运租赁等多元化场景需求,在国内市场上取得了不错的销售成绩。在海外市场,上汽大通G90也展现出了强大的竞争力,通过技术创新和品质提升,上汽大通的产品在国际市场上获得了广泛认可,出口量持续增长,如果你去过泰国,你就应该可以了解到,上汽的品牌出海战略,他们在泰国有建立工厂,上汽大通G90作为品牌的旗舰车型之一,自然也在海外市场上占据了重要地
    lauguo2013 2024-12-18 10:11 72浏览
  • 以人形机器人和通用人工智能为代表的新技术、新产品、新业态蓬勃发展,正成为全球科技创新的制高点与未来产业的新赛道。01、Optimus-Gen 2来了,人形机器人管家还远吗?没有一点点防备,特斯拉人形机器人Optimus-Gen 2来了!12月13日,马斯克于社交媒体上公布了特斯拉第二代人形机器人的产品演示,并预计将于本月内发布。在视频中,Optimus-Gen 2相比上一代有了大幅改进,不仅拥有AI大模型的加持,并在没有其他性能影响的前提下(相比上一代)将体重减少10kg,更包含:由特斯拉设计的
    艾迈斯欧司朗 2024-12-18 12:50 59浏览
  • 户外照明的“璀璨王者”,艾迈斯欧司朗OSCONIQ® C3030降临啦全球领先的光学解决方案供应商艾迈斯欧司朗(瑞士证券交易所股票代码:AMS)近日宣布,推出新一代高性能LED——OSCONIQ® C 3030。这款尖端LED系列专为严苛的户外及体育场照明环境而设计,兼具出色的发光强度与卓越的散热效能。其支持高达3A的驱动电流及最大9W的功率输出,以紧凑扁平封装呈现卓越亮度和可靠性,确保高强度照明持久耐用且性能出众。应用领域01体育场及高杆照明OSCONIQ® C 3030以卓越的光通量密度、出
    艾迈斯欧司朗 2024-12-18 14:25 60浏览
  • 随着现代汽车工业的不断发展,驾驶安全与舒适性成为消费者关注的焦点。在这个追求极致体验的时代,汽车ASF随动转向LED大灯技术应运而生,它不仅代表了车辆操控辅助系统的最新进展,更是对未来智能安全出行愿景的一次大胆探索。擎耀将深入探讨ASF随动转向技术的原理及落地方案,旨在为汽车LED照明升级行业提供一份详尽且实用的参考。首先,ASF随动转向技术不是什么高精尖的技术,一般的汽车大灯制造厂商都可能完成,通过软硬件的逻辑加上传感器,基本就可以实时监测车辆的行驶状态,包括但不限于车速、转向角度等关键参数。
    lauguo2013 2024-12-17 14:43 51浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦