1
rosparam中写里参数规定在哪个文件里。
我们先看参数yaml文件。
2、yaml文件。
随便粘贴一段,从命名可以大致猜出是干什么的。然后转到cpp文件中搜索这些参数,看看到底写了什么。
1room_exploration_algorithm:2#623#displayfinaltrajectoryplanstepbystep4#bool5display_trajectory:true67#delatethepointswiththesameposeinthetrajectory,tooptimzethetrajectory8#bool9delate_points:true1011#mapcorrection12#==============13#Appliesaclosingoperationtoneglectinaccessibleareasandmaperrors/artifactsifthemap_correction_closing_neighborhood_sizeparameterislargerthan0.14#Theparameterthenspecifiestheiterations(orneighborhoodsize)ofthatclosingoperation.15map_correction_closing_neighborhood_size:1
3、cpp文件
先找main函数。比如:
1intmain(intargc,char**argv)2{3ros::init(argc,argv,"room_exploration_server");4ros::Time::init();56ros::NodeHandlenh("~");78RoomExplorationServerexplorationObj(nh,ros::this_node::getName());910ros::spin();1112return0;13}解读:
第6行:ros::NodeHandlenh("~");把节点参数加载进来,动态加载参数。
第8行:开始启用节点。看类RoomExplorationServer定义在哪里,找到相应位置,进入下一步。
4、类的定义
接上一步,看类的定义。
比如:
不难看出,这一步骤和前面的很多步骤联系到了一起。
类中先是加载里句柄,ros::NodeHandlenh("~")在第3步中提到过。
然后是一些不同选择的参数有不同的功能。
类定义完成后,就开始看各个类函数究竟干了些什么。
5、函数
这个就看自己需要哪些功能了,一般来说,函数是按照功能模块划分的。
如果你是看导航的工程文件,分析思路是:
先按照常理分析:导航时第一步是不是应该有个目标点(有了目标点才能开始规划路径,很好理解)?那么目标点就作为函数的切入点,找到goal传到了哪里,从传入的函数开始阅读,按照功能一步一步往下推(比如,找到目标点后,是不是需要知道机器人本体、地图信息和障碍物信息?然后生成代价地图?接着进行全局规划,知道机器人运动的大方向?再进行局部规划,实时更新障碍物信息?等等。。。。),常听到的A×、Dji算法实际上就写在规划里了。
以上所讲的是一种思维,大型工程如何下手的思维。只要思维培养好,剩下的就是编程和算法本身的学习问题了。而在工程中应用的算法,也基本都是开源算法改的。
作为学生或研究人员,还是希望大家深究算法内在逻辑,踏踏实实学习数学和编程知识,把基础打牢,科研这事急不得。