ros包RRT_exploration使用过程学习心得

我想在真实机器人上跑通rrt_exploration这个包,可是不知道怎么做?路过的大神帮帮忙吧…

1、在一个程序包里,C++ 的程序都会存放在src 文件夹里;Python程序都存放在 scripts文件夹中, 意思都是源文件。
2、msg文件里定义的是新的消息类型;
参考博客:https://blog.csdn.net/u012319441/article/details/78309781
3、.py文件和.pyc文件的区别:原始程序写在.py文件里,而Python会在执行.py文件的时候,将.py形式的程序编译成中间式文件(byte-compiled)的.pyc文件,这么做的目的就是为了加快下次执行文件的速度。
并不是所有的.py文件都会生成.pyc文件,只有在import相应的文件时,才会生成.pyc文件
4、对于python 来说,我们不需要使用 catkin_make 命令对 ~/catkin_ws 工作空间进行编译。因为python文件本身就是可执行文件(前提是我们给它添加可执行权限:$ chmod +x listener.py1
参考链接(编写ros python版的hello world):https://zhidao.baidu.com/question/1451533920514365340.html
5、rrt_exploration包一共有五个节点:
Global RRT frontier point detector node.
Local RRT frontier point detector node.
OpenCV-based frontier detector node.
Filter node.
Assigner node.
一、其中Global RRT frontier point detector node信息用c++编写在/src/global_rrt_detector.cpp文件里,需要修改的地方有:
订阅的两个主题:
(1)地图map_topic:参数为** / robot_1 / map**
(2)在RVIZ上手动标的5个点**/clicked_point**。
发布的两个主题:
(1)检测到的边界点主题名称为**/detected_points**
(2)发布的线形状的主题名称为**_shapes**。
二、Local RRT frontier point detector 节点信息也用c++编写在/src/local_rrt_detector.cpp文件里。
三、OpenCV-based frontier detector 节点信息用python语言编写在/scripts文件夹里frontier_opencv_detector.py文件里,可能需要修改的地方有:
订阅的主题:
(1)地图map_topic:参数为**/ robot_1 / map**
发布的两个主题:
(1)检测到的边界点主题名称为detected_points
(2)发布的线形状的主题名称为shapes
四、Filter节点信息用python语言编写在/scripts文件夹里filter.py文件里,可能需要修改的地方有:
订阅的两个主题:
(1)地图map_topic:参数(可能)为**/map**
(2)robot_x / move_base_node / global_costmap / costmap(x有几个就订阅几个)
(3)goals_topic:detected_points
发布的三个主题:
(1)frontiers:发布Filter节点接收到的所有边界点,并在RVIZ上可视化
(2)centroids:发布Filter节点处理过的边界点,并在RVIZ上可视化
(3)filtered_points:发布Filter节点所有处理过得节点,让assign节点接收五、Assigner节点信息用python语言编写在/scripts文件夹里assign.py文件里可能需要修改的地方有:
订阅的主题:
(1)map地图:/map
(2)Filtered frontier points topic :filtered_points
(3)goals_topic(程序里没找到)

rrt_exploration_tutorials解析:

一共有两个文件夹:launch文件夹和param文件夹
1、下面是launch文件夹内容:
roslaunch工具是ros中python实现的程序启动工具,通过读取launch文件中的参数配置、属性配置等来启动一系列节点;很多ROS包或源码包中都有launch文件,一般为该程序包能够运行起来的基本demo配置,运行下面指令使用tab键自动补全会提示该包现有的launch文件:
$roslaunch package_name file.launch
最简单的配置如下:


  

启动上面的launch文件就会启动package_name包下的exe_name执行文件,you_define_node_name自定义的node_name

launch常用标签tag:
1、 参数声明,arg_1 通过命令行传递,arg_2 传递到included.launch, arg_3 默认值可以被重写覆盖,agr_4不能被重写
2、 包含其他文件,包含文件中定义的参数、变量、节点都会按深度优先遍历依次执行生效
3、:设置变量到参数服务器,参数服务器的概念看ros wiki
4、: dump/load、delete parameters from/to Parameter Server,常用来加载程序的参数配置文件到参数服务器,然后程序从参数服务器取得参数值;
5、:名称映射 from:(被映射名称) to:(目标名称)。名称映射的概念看ros wiki
< node> 启动节点常用属性tag:

pkg:"pkg_name"  包名
type:"exe_name"  节点类型,即编译生成的可执行文件(.cpp或者.py文件)
name:"node_name" 节点名称,自定义但不能重复
args:"arg1 ..."  传递节点的参数列表
respawn:"true" 如果节点退出自动重启 default:false
output:"screen" 标准输出/标准错误输出重定向屏幕,log重定向log文件,default:log
required:"true" 如果节点退出,杀死全部launch进程
launch-prefix:"prefix arguments" 前置的参数,可以使用其他工具如gdb,valgrind等
 启动一个节点.
设置参数服务器上的参数
声明一个名称的映射,允许你通过名称映射参数到ROS 节点(通过更结构化的方式而不是直接设置节点参数属性来启动的节点)。
声明启动要使用的机器
使用rosparam 文件设置启动要用的ROS 参数
包含roslaunch 文件.
制定启动节点的环境变量
启动一个测试节点see rostest).
 共享一个命名空间或映射的封闭的元素组。

.launch文件的重映射 remap理解: 重映射就是甲节点得到相关的信息,通过重映射使乙节点得到甲节点一样的信息,从而使得乙节点模仿甲节点做出相应的响应。

2、param文件夹内容
base_local_planner_params.yaml文件定义了路径规划需要的参数:最大最小x轴速度

无论是激光雷达还是如kinect 或xtion pro深度相机作为传感器跑出的2D或3D SLAM地图,都不能直接用于实际的导航,必须将地图转化为costmap(代价地图),ROS的costmap通常采用grid(网格)形式。
在catkin_make后,roslaunch rrt_exploration single.launch时,遇到了无法启动节点的error
ros包RRT_exploration使用过程学习心得_第1张图片
解决办法:就是把你写的节点设置为可执行文件权限cd yourpackage(进入到你存放节点代码的目录下)
chmod 777 yournode (把权限设置为777)

你可能感兴趣的:(ros学习)