制作网站赚钱,wordpress设置专题页,百度网盘官网,切图做网站过时了吗参考博客#xff1a; (1) 史上最全的launch的解析来啦#xff0c;木有之一欧
1 ROS工作空间简介 2 元功能包
src目录下可以包含多个功能包#xff0c;假设需要使用机器人导航模块#xff0c;但是这个模块中包含着地图、定位、路径规划等不同的功能包#xff0c;它们的逻…参考博客 (1) 史上最全的launch的解析来啦木有之一欧
1 ROS工作空间简介 2 元功能包
src目录下可以包含多个功能包假设需要使用机器人导航模块但是这个模块中包含着地图、定位、路径规划等不同的功能包它们的逻辑关系如下 在Linux系统中为了更方便的组织工程项目这里针对的是项目文件即功能包出现了“元功能包”的概念。这个是一个“虚包”就是这个功能包的src目录下没有源文件因此自身不会实现专属功能其功能的实现完全依赖于其他的功能包起到一个组织功能包的作用。
以导航模块中的元功能包为例 navigation功能包为元功能包metapackage元功能包中由于没有src目录因此无需添加任何依赖项因为这个功能包没有自己的专属功能它的功能是借助其他的功能包的功能来实现的。元功能包有两个文件即可一个是package.xml文件用于声明元功能包所依赖的其他功能包另一个是CMakelist.txt文件用于指定功能包之间的依赖关系。
CMakelist.txt
cmake_minimum_required(VERSION 3.0.2)
project(navigation)
find_package(catkin REQUIRED)
catkin_metapackage() // 只需添加此条内容即可package.xml
exec_dependamcl/exec_depend
exec_dependbase_local_planner/exec_depend
exec_dependcarrot_planner/exec_depend
exec_dependclear_costmap_recovery/exec_depend
exec_dependcostmap_2d/exec_depend
exec_dependdwa_local_planner/exec_depend
exec_dependfake_localization/exec_depend
exec_dependglobal_planner/exec_depend
exec_dependmap_server/exec_depend
exec_dependmove_base/exec_depend
exec_dependmove_base_msgs/exec_depend
exec_dependmove_slow_and_clear/exec_depend
exec_dependnavfn/exec_depend
exec_dependnav_core/exec_depend
exec_dependrotate_recovery/exec_depend
exec_dependvoxel_grid/exec_depend export metapackage/ // 表征这个功能包为元功能包
/export 3 Launch文件
Launch文件源文件的组织者 ① 节点启动标签
launch node pkg turtlesim type turtlesim_node name my_node/ node pkg turtlesim type turtle_teleop_key name my_key/
/launch Tip因为ROS中采用多线程因此节点的运行不会按照节点在launch中排列顺序进行。 pkg功能包的名称 type节点本来的名称这个名称和节点所在.cpp源文件的文件名一致 name节点重映射的名称相当于在系统中给节点所在源文件改了个名字 launch标签有一个子级标签deprecated用于文本说明
launch deprecatedthis vision is out-of-date!
/launch 如果认为给很多节点取名太麻烦可以使用name”$(anon node_name)”标签在节点node_name名称之后加一些随机数使得该节点名称在整个catkin编译项目中唯一
launch deprecatedthis vision is out-of-date! !-- the topic of turtlesim_node is /turtle1/cmd_vel -- node pkgturtlesim typeturtlesim_node name$(anon my_node)/ !-- the topic of turtle_teleop_key is /turtle1/cmd_vel -- node pkgturtlesim typeturtle_teleop_key namemy_key outputscreen/
/launch 意外关闭后自动启动的子级标签 respawn true|false 表示如果节点意外关闭是否重新启动
launch node pkgturtlesim typeturtlesim_node namemy_node respawntrue/ node pkgturtlesim typeturtle_teleop_key namemy_key respawntrue/
/launch 节点延迟启动的子级标签一般结合节点重启动是使能标签respawn如果节点异常退出运行那么该节点会被重新启动一起使用
launch node pkgturtlesim typeturtlesim_node namemy_node respawntrue respawn_delay10/ node pkgturtlesim typeturtle_teleop_key namemy_key respawntrue respawn_delay10/
/launch 如果XXX节点结束运行XXX节点被杀死则所有节点都停止运行
launch node pkgturtlesim typeturtlesim_node namemy_node requiredtrue/ node pkgturtlesim typeturtle_teleop_key namemy_key /
/launch 给节点名称添加前缀给节点添加命名空间的子级标签
launch node pkgturtlesim typeturtlesim_node namemy_node nshello/ node pkgturtlesim typeturtle_teleop_key namemy_key/
/launch ② 参数设置标签 设置global全局参数
launchparam namevar typeint value10/
/launch结合标签设置带有命名空间的私有参数
launchnode pkgturtlesim typeturtlesim_node namemy_node/node pkgturtlesim typeturtle_teleop_key namemy_key outputscreenparam namevar1 typeint value20//node
/launch③ 参数打包输入输出删除的标签 从.yaml文件中读取参数:
launchrosparam commandload file$(find test01)/launch/params.yaml/node pkgturtlesim typeturtlesim_node namemy_node/ node pkgturtlesim typeturtle_teleop_key namemy_key outputscreen/ param namevar typeint value10/
/launch 将.yaml参数文件中的参数导入参数服务器时我们还可以给这些参数添加namespace命名空间
launch node pkgturtlesim typeturtlesim_node namemy_node/ node pkgturtlesim typeturtle_teleop_key namemy_key outputscreen/ param namevar typeint value10/ rosparam commandload file$(find test01)/launch/params.yaml nshello/
/launch 将参数打包输入进.yaml文件中这样做啥变量都没导进去
launch rosparam commanddump file$(find test01)/launch/input.yaml/ node pkgturtlesim typeturtlesim_node namemy_node/ node pkgturtlesim typeturtle_teleop_key namemy_key outputscreen/ param namevar typeint value10/
/launch 我们要想导入参数必须另建一个.launch文件在使用上述launch文件启动完所有节点之后在另一个launch文件中执行该功能包参数的导出操作
launchrosparam commanddump file$(find test01)/launch/input.yaml /
/launchlaunch rosparam commanddump file$(find test01)/launch/input.yaml/ rosparam commanddelete param/hello/n1/
/launch ④ 参数统一管理的标签
launch arg namecar_width default[1,2,3,4] docthe width of car/ rosparam parama_list$(arg car_width)/rosparam rosparam Name: a: 9 b: hello c: $(arg car_width) /rosparam
/launch⑤ 改topic名称的标签
launch !-- the topic of turtlesim_node is /turtle1/cmd_vel -- node pkgturtlesim typeturtlesim_node namemy_node/ remap from/turtle1/cmd_vel tonew_topic/
/launch ⑥ 节点组织标签 就是给被group…/group包含的所有参数、节点的属性加上了namespace
launch deprecatedthis vision is out-of-date! group nsfamily !-- the topic of turtlesim_node is /turtle1/cmd_vel -- node pkgturtlesim typeturtlesim_node namemy_node/ !-- the topic of turtle_teleop_key is /turtle1/cmd_vel -- node pkgturtlesim typeturtle_teleop_key namemy_key outputscreen/ rosparam commandload file$(find test01)/launch/params.yaml nshello/ arg namecar_width default[1,2,3,4] docthe width of car/ rosparam parama_list value$(arg car_width)/ rosparam Name: a: 9 b: hello c: [1,2,3,4] /rosparam param namevar typeint value$(arg car_width)/ /group
/launch ⑦ 启动其他launch文件的标签
launch include file$(find test01)/launch/test01_launch.launch arg namecar_width default10/ /include
/launch 4 功能包/源文件/launch文件组织工具
文件组织形式如下所示
5 功能包绝对路径替换标签
标签格式$(find package_name) 使用示例
launch include file$(find tf2_turtle)/launch/setupGUI.launch/
/launch 6 工作空间下绝对路径替换标签
下面是test1.launch调用setupGUI.launch文件的代码并且两个launch文件在一个文件夹之中
launch include file$(dirname)/setupGUI.launch/
/launch $(dirname)代表“test1.launch文件所在工作空间的绝对地址
7 Launch文件
列出几个Launch文件自测一下学习成果
?xml version1.0?
launch!-- 加载车模型 --include file$(find vehicle_description)/launch/estima_black.launch /!-- --node pkgcar_simulation typecar_model_node namecar_simulation outputscreen /
/launchlaunchinclude file$(find global_routing)/launch/global_routing.launch/!-- 车辆仿真 --include file$(find car_simulation)/launch/car_simulation.launch /!-- rviz --node pkgrviz typerviz namerviz args-d $(find global_routing)/config/planning_demo.rviz/
/launch?xml version1.0?
launch!-- 其他launch文件传入的参数 --arg nameis_planner/arg nameis_lateral_optimization/arg nameis_change_lane/arg nameis_carla_simulation/arg nameego_vehicle_name/arg nameis_parking/arg nameis_goal/!-- 模拟动态障碍物的加载文件这些都是录好的轨迹点播放这个文件就可以实现障碍物移动 --param nameobstacle_test_path value$(find dynamic_routing)/obstacle_files/!-- 加载存储的其他参考线数据 --param namereferenceline_path value$(find dynamic_routing)/other_referenceline_files/!-- yaml文件 --param nameyaml_path value$(find dynamic_routing)/config/!-- 规划算法选择 --param nameuse_what_planner value$(arg is_planner)/!-- 变道决策是否开启 --param namechange_lane value$(arg is_change_lane)/!-- 是否使用二次规划选择了lattice规划选择这个才有效果 --param nameuse_lateral_optimization value$(arg is_lateral_optimization)/!-- 是否选择carla联合仿真 --param namecarla_simulation value$(arg is_carla_simulation)/!-- role_name --param namerole_name value$(arg ego_vehicle_name)/!-- carla 停车场景 --param nameparking_mode value$(arg is_parking)/!-- 在frenet规划下的参数设置lattice规划不用这些 --!-- COLLISION_CHECK_THRESHOLD 距离障碍物的最短距离 --param nameCOLLISION_CHECK_THRESHOLD typedouble value2 /!-- 调整轨迹的长度 --param nameMaxT typedouble value11 /param nameMinT typedouble value9 /!-- 判断与终点的停车距离阈值 --param namegoal_distanse typedouble value$(arg is_goal)/!-- 打开 Hybrid_a_star 的测试图 --!-- mapserver提供了一个ROS节点该节点通过一个ROS Service来提供地图数据 --node namemap_server pkgmap_server typemap_server args$(find dynamic_routing)/maps/map.yaml param nameframe_id valuemap //node!--Open palnner的launch参数顺便加载dynamic节点 --include file$(find dynamic_routing)/launch/op_common_params.launch /!-- DWA --arg namedwa_params default$(find dynamic_routing)/config/dwa_params.yaml/rosparam commandload file$(arg dwa_params)/
/launch ?xml version1.0?
launch!-- 是否使用carla联合仿真 --arg namecarla defaultfalse/ arg nameego_vehicle_name defaultego_vehicle/ param namecarla_simulation value$(arg carla)/param namerole_name value$(arg ego_vehicle_name)/!-- 不能改这里的参数 --arg nameparking defaultfalse/param nameparking_mode value$(arg parking)/!-- ros单独仿真下的controllercarla不适用: 1 stanley 2 lqr 3 pure_pursuit4 pid 5 mpc --arg namecontrol value2/ param nameuse_what_controller value$(arg control)/!-- planner: 1是纯frenet规划2是lattice规划3是em_palnner规划4是混合A*规划5是op_planner规划6是DWA规划7是Teb规划8是simple_em(EM的简化版本待更新)--arg nameplanner value7/ param nameuse_what_planner value$(arg planner)/!-- 是否使用二次规划选择了lattice规划选择这个才有效果 --!-- falselattice 采样规划truelattice 二次规划 --arg nameuse_lateral_optimization defaultfalse/ !-- 是否开启变道决策变道选择的是Lattce采样规划其他方法不使用 --arg namechange_lane defaultfalse/ !-- 参考线平滑的方式选择: true:CosThetaSmoother false:FemPosSmooth--arg namewhich_smoother defaultfalse/ param namewhich_smoothers value$(arg which_smoother)/!-- 判断与终点的停车距离阈值 --arg namegoal_dis value0.5/ param namegoal_distanse typedouble value$(arg goal_dis)/!-- 局部规划 --include file$(find dynamic_routing)/launch/dynamic_routing.launch arg nameis_planner value$(arg planner) /arg nameis_lateral_optimization value$(arg use_lateral_optimization) /arg nameis_change_lane value$(arg change_lane) /arg nameis_carla_simulation value$(arg carla) /arg nameego_vehicle_name value$(arg ego_vehicle_name) /arg nameis_parking value$(arg parking)/arg nameis_goal value$(arg goal_dis)//include!-- carla联合仿真下的控制方法和参数 --!-- LQR_dynamics LQR_kinematics Stanley PurePursuit --param namecontrol_method valueLQR_kinematics/ !-- PurePursuit增益系数 --param namek_pure typedouble value0.3 / !-- Stanley增益系数 --param namek_cte typedouble value100 / param namekp value0.5 /param nameki typedouble value0.02 /param namekd typedouble value0.05 /!-- LQR Q R矩阵参数 --param nameQ_ed typedouble value20.0 /param nameQ_ed_dot typedouble value1.0 /param nameQ_ephi typedouble value10.0 /param nameQ_ephi_dot typedouble value1.0 /param nameR_value typedouble value40.0 /!-- --param nameQ_ex_k typedouble value3.0 /param nameQ_ed_k typedouble value3.0 /param nameQ_ephi_k typedouble value1.5 /param nameR_value_k typedouble value4.0 /!-- 全局规划 --node pkgglobal_routing typeglobal_routing_node nameglobal_routing outputscreen //launch