ROS探索总结(十九)——如何配置机器人的导航功能
1、概述
ROS的二维导航功能包,简单来说,就是根据输入的里程计等传感器的信息流和机器人的全局位置,通过导航算法,计算得出安全可靠的机器人速度控制指令。但是,如何在特定的机器人上实现导航功能包的功能,却是一件较为复杂的工程。作为导航功能包使用的必要先决条件,机器人必须运行ROS,发布tf变换树,并发布使用ROS消息类型的传感器数据。同时,为了让机器人更好的完成导航任务,开发者还要根据机器人的外形尺寸和性能,配置导航功能包的一些参数。
2、硬件要求
尽管导航功能包设计得尽可能通用,但是仍然对机器人的硬件有以下三个要求:
(1)导航功能包仅对差分等轮式机器人有效,并且假设机器人可直接使用速度指令进行控制,速度指令的格式为:x方向速度、y方向速度、速度向量角度。
(2)导航功能包要求机器人必须安装有激光雷达等二维平面测距设备。
(3)导航功能包以正方型的机器人为模型进行开发,所以对于正方形或者圆形外形的机器人支持度较好,而对于其他外形的机器人来讲,虽然仍然可以正常使用,但是表现则很有可能不佳。
3、机器人配置
导航功能包的结构如上图所示,在自己的机器人平台上实现自主导航,简单来说,就是按照上图将需要的功能按照需求完成即可。其中白色的部分是ROS功能包已经完成的部分,不需要我们去实现,灰色的是可选的部分,也由ROS完成,在使用中根据需求使用,需要关注的重点部分是蓝色部分,这些需要我们根据输入输出的要求完成相应的功能。
3.1、ROS
首先,请确保你的机器人安装了ROS框架。
3.2、tf变换(sensortransforms)
导航功能包要求机器人以tf树的形式发布各个相关参考系的变换关系。
3.3、传感器信息(sensor sources)
导航功能包需要采集机器人的传感器信息,以达到实时避障的效果。这些传感器要求能够通过ROS发布sensor_msgs/LaserScan或者sensor_msgs/PointCloud 格式的消息,也就是二维雷达信息或者三维点云数据。ROS社区已经支持大部分激光雷达、Kinect等设备的驱动,可以直接使用社区提供的驱动功能包发布满足要求的传感器信息。如果你使用的传感器没有ROS支持,或者你想使用自己的驱动,也可以自己将传感器信息封装成要求的格式。
3.4、里程计信息(odometrysource)
导航功能包要求机器人发布nav_msgs/Odometry格式的里程计信息,同时在也要发布相应的tf变换。
3.5、机器人控制器(base_controller)
导航功能包最终的输出是针对机器人geometry_msgs/Twist格式的控制指令,这就要求机器人控制节点具备解析控制指令中速度、角度的能力,并且最终通过这些指令控制机器人完成相应的运动目标。
3.6、地图(map_server)
地图并不是导航功能所必需的。
4、导航功能包集的配置
在满足以上条件的前提下,我们来针对导航功能进行一些配置。
4.1、创建一个功能包
首先,我们需要创建一个功能包,用来存储导航需要用到的所有的配置文件和launch启动文件。在创建功能包的时候,我们需要添加相关的所有依赖,包括机器人配置中使用到的功能包,当然不要忘记了move_base功能包,因为该包有很多我们后面需要用到的接口。找到合适的位置,输入以下命令来创建包:
catkin_create_pkg my_robot_name_2dnav move_base my_tf_configuration_depmy_odom_configuration_dep my_sensor_configuration_dep
4.2、创建机器人启动文件
现在,我们已经有了一个存储各种文件的工作空间,下一步,我们来创建一个机器人启动文件,用来启动机器人配置中所提到的所有硬件,并发布相应的消息和变换关系。
打开编辑器,输入以下格式的内容,并保存为my_robot_configuration.launch命名的文件:
<launch>
<node pkg="sensor_node_pkg" type="sensor_node_type" name="sensor_node_name" output="screen">
<param name="sensor_param" value="param_value" />
</node>
<node pkg="odom_node_pkg" type="odom_node_type" name="odom_node" output="screen">
<param name="odom_param" value="param_value" />
</node>
<node pkg="transform_configuration_pkg" type="transform_configuration_type" name="transform_configuration_name" output="screen">
<param name="transform_configuration_param" value="param_value" />
</node>
</launch>
让我们来详细的解读以上内容的含义:
<launch>
<node pkg="sensor_node_pkg" type="sensor_node_type" name="sensor_node_name" output="screen">
<param name="sensor_param" value="param_value" />
这部分代码用来启动机器人的传感器,根据以上格式,修改你所使用到的传感器驱动包名称、类型、命名等信息,并且添加驱动包节点需要使用到的参数。当然,如果你需要使用多个传感器,可以使用相同的方法,启动多个传感器的驱动节点。
<node pkg="odom_node_pkg" type="odom_node_type" name="odom_node" output="screen">
<param name="odom_param" value="param_value" />
</node>
这部分代码用来启动机器人上的里程计,根据需要修改功能包名、类型、节点名、参数。
<node pkg="transform_configuration_pkg" type="transform_configuration_type" name="transform_configuration_name" output="screen">
<param name="transform_configuration_param" value="param_value" />
</node>
这部分代码需要启动机器人相关的坐标变换。
4.3、代价地图的配置 (local_costmap)& (global_costmap)
导航功能包使用两种代价地图存储周围环境中的障碍信息,一种用于全局路径规划,一种用于本地路径规划和实时避障。两种代价地图需要使用一些共同和独立的配置文件:通用配置文件,全局规划配置文件,本地规划配置文件。以下将详细讲解这三种配置文件:
(1)通用配置文件(Common Configuration (local_costmap) &(global_costmap))
代价地图用来存储周围环境的障碍信息,其中需要注明地图关注的机器人传感器消息,以便于地图信息进行更行。针对两种代价地图通用的配置选项,创建名为costmap_common_params.yaml的配置文件:
obstacle_range: 2.5
raytrace_range: 3.0
footprint: [[x0, y0], [x1, y1], ... [xn, yn]]
#robot_radius: ir_of_robot
inflation_radius: 0.55
observation_sources: laser_scan_sensor point_cloud_sensor
laser_scan_sensor: {sensor_frame: frame_name, data_type: LaserScan, topic: topic_name, marking: true, clearing: true}
point_cloud_sensor: {sensor_frame: frame_name, data_type: PointCloud, topic: topic_name, marking: true, clearing: true}
详细解析以上配置文件的内容:
obstacle_range: 2.5
raytrace_range: 3.0
这两个参数用来设置代价地图中障碍物的相关阈值。obstacle_range参数用来设置机器人检测障碍物的最大范围,设置为2.5意为在2.5米范围内检测到的障碍信息,才会在地图中进行更新。raytrace_range参数用来设置机器人检测自由空间的最大范围,设置为3.0意为在3米范围内,机器人将根据传感器的信息,清除范围内的自由空间。
footprint: [[x0, y0], [x1, y1], ... [xn, yn]]
#robot_radius: ir_of_robot
inflation_radius: 0.55
这些参数用来设置机器人在二维地图上的占用面积,如果机器人外形是圆形,则需要设置机器人的外形半径。所有参数以机器人的中心作为坐标(0,0)点。inflation_radius参数是设置障碍物的膨胀参数,也就是机器人应该与障碍物保持的最小安全距离,这里设置为0.55意为为机器人规划的路径应该与机器人保持0.55米以上的安全距离。
observation_sources: laser_scan_sensorpoint_cloud_sensor
observation_sources参数列出了代价地图需要关注的所有传感器信息,每一个传感器信息都将在后边列出详细信息。
laser_scan_sensor: {sensor_frame: frame_name, data_type:LaserScan, topic: topic_name, marking: true, clearing: true}
以激光雷达为例,sensor_frame标识传感器的参考系名称,data_type表示激光数据或者点云数据使用的消息类型,topic_name表示传感器发布的话题名称,而marking和clearing参数用来表示是否需要使用传感器的实时信息来添加或清楚代价地图中的障碍物信息。
(2)全局规划配置文件(Global Configuration (global_costmap))
全局规划配置文件用来存储用于全局代价地图的配置参数,我们使用global_costmap_params.yaml来命名,内容如下:
global_costmap:
global_frame: /map
robot_base_frame: base_link
update_frequency: 5.0
static_map:true
global_frame参数用来表示全局代价地图需要在那个参考系下运行,这里我们选择了map这个参考系。robot_base_frame参数表示代价地图可以参考的机器人本体的参考系。update_frequency参数绝地全局地图信息更新的频率,单位是Hz。static_map参数决定代价地图是否需要根据map_server提供的地图信息进行初始化,如果你不需要使用已有的地图或者map_server,最好将该参数设置为false。
(3)本地规划配置文件(Local Configuration (local_costmap))
本地规划配置文件用来存储用于本地代价地图的配置参数,命名为local_costmap_params.yaml,内容如下:
local_costmap:
global_frame: odom
robot_base_frame: base_link
update_frequency: 5.0
publish_frequency: 2.0
static_map:false
rolling_window: true
width: 6.0
height: 6.0
resolution:0.05
"global_frame", "robot_base_frame","update_frequency", 和 "static_map"参数的意义与全局规划配置文件中的参数相同。publish_frequency设置代价地图发布可视化信息的频率,单位是Hz。rolling_window参数是用来设置在机器人移动过程中是否需要滚动窗口,以保持机器人处于中心位置。"width," "height," 和"resolution" 设置设置代价地图长(米)、高(米)和分辨率(米/格)。分辨率可以设置的与静态地图不同,但是一般情况下两者是相同的。
4.4 本地规划器配置
本地规划器base_local_planner的主要作用是根据规划的全局路径,计算发布给机器人的速度指令。该规划器需要我们根据机器人的规格,配置一些相应的参数。我们创建名为base_local_planner_params.yaml的配置文件:
TrajectoryPlannerROS:
max_vel_x: 0.45
min_vel_x: 0.1
max_vel_theta: 1.0
min_in_place_vel_theta: 0.4
acc_lim_theta: 3.2
acc_lim_x: 2.5
acc_lim_y: 2.5
holonomic_robot: true
该配置文件声明了机器人的本地规划采用Trajectory Rollout算法。第一段设置了机器人的速度阈值,第二段设置了机器人的加速度阈值。
4.5 为导航功能包创建一个启动文件
到此为止,我们已经创建完毕所有需要用到的配置文件,接下来我们需要创建一个启动文件,来启动所有需要的功能。创建move_base.launch的文件:
<launch>
<master auto="start"/>
<!-- Run the map server -->
<node name="map_server" pkg="map_server" type="map_server" args="$(find my_map_package)/my_map.pgm my_map_resolution"/>
<!--- Run AMCL -->
<include file="$(find amcl)/examples/amcl_omni.launch" />
<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
<rosparam file="$(find my_robot_name_2dnav)/costmap_common_params.yaml" command="load" ns="global_costmap" />
<rosparam file="$(find my_robot_name_2dnav)/costmap_common_params.yaml" command="load" ns="local_costmap" />
<rosparam file="$(find my_robot_name_2dnav)/local_costmap_params.yaml" command="load" />
<rosparam file="$(find my_robot_name_2dnav)/global_costmap_params.yaml" command="load" />
<rosparam file="$(find my_robot_name_2dnav)/base_local_planner_params.yaml" command="load" />
</node>
</launch>
在该配置文件中,你需要修改的只有map-server输入的地图,以及如果使用差分驱动的机器人,需要修改"amcl_omni.launch"成"amcl_diff.launch" 。
4.6 AMCL功能包的设置
AMCL有许多的参数设置,会影响机器人的定位效果,具体参考amcldocumentation。
5、运行导航功能包
现在,我们已经完成了所有需要的工作,最后一步,运行启动文件,开始导航之旅:
roslaunch my_robot_configuration.launch
roslaunch move_base.launch
现在导航功能包应该已经可以顺利运行了,但这绝对不是结束,因为你只能从终端里看到一端乱蹦的代码,如何使用更友好的方式进行机器人导航呢?如果你想使用UI界面,请参考rviz and navigationtutorial,如果你想使用代码,请参考Sending SimpleNavigation Goals 。


FAN
老师您好,我看了您的机器人操作系统ROS理论与实践的视频,使用教程中的小车模型可以成功运行导航的案例 ,之后我构建了一个自己的小车模型,在启动文件中加载了小车,之后运行roslaunch mbot_gazebo mbot_laser_nav_gzebo.launch ; roslaunch mbot_navigation nav_cloister_demo.launch 两句命令 ,之后在rviz中小车一直是闪烁状态,并且激光雷达扫描的点云也会突然的出现大幅度的偏移,使用rviz中的2D Nav Goal按钮来规定了目标点后小车会无法到达目标点,老师这个问题怎么解决呢?
qbw
古月老师,您好,我在学习机器人slam与自主导航那一节的时候,运行历程roslaunch mbot_gazebo mbot_laser_ nav_ gazebo.launch,之后运行roslaunch cartographer_ros cartographer_demo_rplidar.launch,显示的rviz的界面中global status:error 下面的fixed frame does not exist,以及robotmodel status:error,请问这种问题如何解决啊?感谢!
古月
@qbw 可能是配置文件中的坐标系没配置好
青木
您好,问下costmap 2d支持多线激光雷达生成costmap吗?
古月
@青木 需要把多线转换成单线
潘继炜
@古月 古月老师,能否问一下,关于激光雷达做导航,有没有对动态障碍物进行避障的方法。
古月
@潘继炜 这个move_base里就支持
潘继炜
@古月 那能请问下老师,一般教程下载的包都是封装好的,怎么才能进行改进吗
古月
@潘继炜 需要找到源码,下载到工作空间修改编译使用
啊哈哈
古月老师你好,我在进行导航时出现这个错误: No devices connected.... waiting for devices to be connected
[ WARN] [1557204197.764232993]: Timed out waiting for transform from base_footprint to map to become available before running costmap, tf error: canTransform: target_frame map does not exist.. canTransform returned after 0.100774 timeout was 0.1.
古月
@啊哈哈 硬件设备没连接上吧
amituofo
@古月 硬件连接好像没有问题,我也是同样的问题,请问有别的解决办法吗?
ros菜鸡
@啊哈哈 请问你的问题解决了嘛?我遇到了同样的问题
Allen-Duke
博主你好,在用小车进行多点导航的时候,小车到达第一个目标后就不再移动了,而且过一会出现Aborting because the robot appears to be oscillating over and over. Even after executing all recovery behaviors这个错误,请问是什么问题,应该怎么解决呢?
古月
@Allen-Duke 找不到出路了
三月
博主你好,我的小车在导航时遇到个问题。小车上激光雷达的范围大概三米,我想小车在10m×10m的地图上导航,但只能在雷达范围内获得导航路径,请问是要修改配置文件的某个参数吗?
古月
@三月 应该是参数配置的问题
Allen-Duke
@三月 我也遇到同样的问题请问你解决了吗
司明朋
@Allen-Duke 在全局规划配置文件global_costmap_params.yaml里面把 width 和 height 改大点
pigorange
胡老师您好,现在遇到了一个新的问题。就是在导航过程中,在Rviz中可以看到会建立从当前点到目标点之间的路径规划情况。但是我目前在实验时发现在导航过程中,路径一直在变化,变化的频率也有点太频繁了,我想请问一下这个问题和导航中的什么参数相关吗?我不太想路径变化的很频繁,这样的话也会导致其他的问题出现。目前还没查到相关的资料,还请您指点一下。
古月
@pigorange 这个我也不太清楚,使用过程中没出现过类似的情况,可能是参数的问题
pigorange
古月老师您好,这里有个问题想请教您。在导航的过程中需要配置代价地图costmap。我查阅了相关的资料,在costmap中是分了好几个Layer的,其中的obstalce_layer是主要处理已有地图中不存在的障碍物和移动的障碍物。我想请问是否上述的导航功能已经具备躲避动态障碍物的功能?因为最近需要参加一个比赛,正在研究相关内容,感谢老师回复。
古月
@pigorange 是的,move_base里边有动态避障的功能
彭忠
博主,小车在启动导航文件后会出现Timed out waiting for transform from base_footprint to map to become available before running costmap,tf erro: .canTransform returned after 0.101057和No laser scan received(and thus no pose updates have been published)for 15555555 seconds. Verfy that data is being published on the /scan topic.之前是不会出现这个问题的,就是在昨天就一直出现这个错误提示。但有的时候又是没问题。所以想请博主给予以下意见。谢谢
古月
@彭忠 可能是数据、tf发布不稳定,或者延时较大
NK帅
@彭忠 主机与机器人时间不一致,
NK帅
@彭忠 主机与机器人时间不一致,可上网搜时间同步问题即可解决
金婷
古月老师您好,启动turtlebot3的时候一直报错libcurl:failed to connect to api.ignitionfuel.org port 443,然后burger一直动不了,该怎么解决
古月
@金婷 可能是某个接口没连接上吧
刘英俊
@金婷 您好,您这个问题解决了吗?我也出现了同样的错误提示,一直没有解决
岁月静好
古月老师,您用过 ANYbotics的elevation_mapping吗?
古月
@岁月静好 这个没用过
tql
古月老师您好,请问用二维激光在ros下调用navigation包进行导航时,障碍物离开之后代价地图上的黑点并不消失,导致有时候小车明明能通过,却卡在那里不动了,请问这是哪里出问题了呢?
古月
@tql 看下参数里有没有相关的配置,另外我记得有清除代价地图的API接口
李呈怡
老师您好,我在ros中用movebase包做导航时,使用Kinect2做传感器传送pointcloud2更新局部代价地图,报tf错误是为什么,看了tf个个坐标变换的频率,最慢的大概也有10hz以上,具体错误信息如下:[ERROR] [1548220643.195199466, 141.070000000]: TF Exception that should never happen for sensor frame: base_link, cloud frame: kinect2_rgb_optical_frame, Lookup would require extrapolation into the past. Requested time 131.009000000 but the earliest data is at time 131.073000000, when looking up transform from frame [base_link] to frame [map]
古月
@李呈怡 要检查tf tree是不是完整的,中间有没有断开,差不多是base_link->odom->map
朱晨子
博主您好,目前我也在学习使用ROS进行导航,但是我们的设备不算是机器人,是一个自己搭建的四轮驱动的小车。我想请问一下如果需要实现自动导航的话是否一定需要里程计?因为平台是我们利用现有的设备搭建的,是没有里程计的。我在想是否没有里程计的话就无法实现自动导航功能了?
古月
@朱晨子 里程计的目的是获取机器人的位置,只要有办法获取这个数据就行,不一定是里程计的硬件
朱晨子
@古月 哦哦,好的,谢谢您提供的思路,我找一找相关的资料。
Robert.cao
WARN] [1545618879.595765525]: Clearing costmap to unstuck robot (0.100000m).
[ WARN] [1545618891.196332947]: Clearing costmap to unstuck robot (0.100000m).
[ WARN] [1545618901.796045272]: Rotate recovery behavior started.
导航时出现这个问题是什么原因?
古月
@Robert.cao 机器人找不到路径,应该会旋转找出路
maltose
@古月 我用 youbot做的 就不會去 尋找路徑 turtlebot就會 自動尋找路徑 這是爲什麼啊 ?
古月
@maltose 和参数的配置有关系
古月
@maltose 和参数的配置有关系
潘繼煒
@古月 請問 配置哪裏的參數 我的 youbot機器人 還是不會動 只能get new plan
古月
@潘繼煒 local planner的yaml配置文件中的参数
maltose
@古月 谢谢古月老师 问题已解决
yshan
@Robert.cao 您好,我最近也遇到了同样的问题,请问您是怎么解决的
fly
老师,麻烦问一下,ros与stm32通信要采用什么方式通信?我在网上查,有的采用boost,有的采用rosserial,采用boost的,我看stm32程序上没有采用任何ros下的东西就可以直接与向ros发送字符串;采用rosserial的stm32程序上还用了roslib包;所以,我现在不清楚ros与stm32之间通信,stm32部分程序有哪些要求?rosserial与boost哪一种好一些?
古月
@fly 串口通信,自己写也可以,stm32发送串口数据,ros端写一个节点接收串口数据,并且封装成ros话题发布。
用rosserial也可以,原理是一样的,只不过是别人已经封装好的一个包。
罗西
月哥 请教一个问题, 我用rqt_graph 查看节点运行状态图时 发现使用rostopic list 中的话题列表中有些话题在graph中没有显示,想问一下是什么原因
古月
@罗西 rqt_graph上边有一些勾选的按键,试下行不行
志梅
古月老师您好!请问您上面4.1步骤的创建一个功能包里面附带有的my_tf_configuration_dep my_odom_configuration_dep my_sensor_configuration_dep的这些包的自己创建的吗?我打算用KinectV2来跑rtabmap_ros不知道怎么传输数据来给机器人自动导航。
古月
@志梅 这些包是自己创建的,这里只是解释整个架构的实现。在ros里边找下导航使用的功能包,然后从wiki上确定传感器的输入数据,和kinect做对接
Allen Duke
@古月 古月老师您好,那my_tf_configuration_dep my_odom_configuration_dep my_sensor_configuration_dep这些包需要自己创建吗?应该怎么创建呢?
古月
@Allen Duke 这里仅泛指需要依赖的功能,不一定需要创建
terminal
老师,您好!我想问一下,我看的一些资料,说navigation功能包只支持两轮驱动,如果,我的机器人是四个脉轮驱动,那navigation功能包还能用吗?还能发挥脉轮的功能吗?
古月
@terminal 可以用的,navigation输出的是线速度和角速度,底层做好驱动就行
李艾伦
博主您好,请问在机器人实际的组装中,激光雷达有一半被挡住了,只能测量180°的范围,这样会对gmapping过程以及后面的导航有影响吗?我能不能在什么地方设置激光雷达的测量角度呢。
古月
@李艾伦 可以用的,做一下数据剪裁就可以,参考:
https://blog.csdn.net/sunyoop/article/details/78302090
雷景皓
古月老师,我是一名ros的初学者。您的my_robot_configuration.launch里面的sensor_node_pkg, odom_node_pkg等等东西是不是都应该改成自己实际所使用的名字啊?如果是的话,请问该怎么改呢?我该怎么知道要改成什么名字呢?
古月
@雷景皓 是的,这些包需要自己创建并实现,让后再改成自己的功能包名
初学者
古月老师:
最近在调试一款机器时出现一个问题,机器在一个比较空旷的地带旋转时总是优先顺时针旋转。即使只需逆时针旋转九十度就可以达到的方向偏偏要旋转270°,请问这个可能和什么设置有关?
古月
@初学者 有可能和move_base的本地规划器相关的配置有关系
α_ω
博主你好,看了很多你的帖子,收获很大.
最近我遇到一个问题,就是能否在hector mapping过程中实时获取当前机器人的坐标呢?
hector mapping保存的地图的初始坐标是出发位置的坐标但我需要得到停止位置的坐标.
古月
@α_ω 可以的,实时坐标可以订阅/odom,目标位置可以查看move_base的goal
α_ω
@古月 谢谢博主,我还有一个问题,就是在运行hector mapping.launch或者nav.launch的时候有时会闪退,请问这是什么情况?
古月
@α_ω ROS有的时候会不稳定,和电脑硬件也有关系,多启动几次可以成功就可以
刘同学
古老师,编译的时候一直显示这个错误这应该输入什么命令阿 Could not find a package configuration file provided by
"my_odom_configuration_dep" with any of the following names:
古月
@刘同学 上边的my_odom_configuration_dep是一个示例,代表odom配置的功能包,需要修改成自己使用的,如果没有的话,就不加这个,因为本身是不存在的
pety
古月大神你好,看了你的教程受益匪浅。现在遇到一个问题,就是在全局路径规划中,在起点和终点始终固定的情况下,我想人为设置一条固定的路线,而不是用算法算出来的,因为算法算出来的路线不太圆滑,而且有可能把不太好走的路规划进去,看了网上的资料,应该是通过make_plan函数进行设置,但是还是不太理解,希望指教。
古月
@pety 这个需要参考move_base的api手册和源码内容,可以google上搜到。
andrew
@古月 高老师,你好,怎样修改mmakeplan,使四轮小车在起点和终点始终固定的情况下,始终走直线?有没有相关资源,有的话能不能发我一份:QQ:1766820391@qq.com
andrew
@古月 高老师,你好,怎样修改mmakeplan,使四轮小车在起点和终点始终固定的情况下,始终走直线?有没有相关资源,有的话能不能发我一份:QQ:1766820391
andrew
@pety 你好,请问我也遇到跟你一样的问题,现在资源找到了吗?能不能发我一份:QQ:1766820391@qq.com
shu
古月老师,我问一下,inflation_radius 跟机器人半径之间有什么关系吗,inflation_layer的通过内接圆外接圆来确定碰撞系数用的半径不是机器人的半径吗,那这个inflation_radius 是做什么用的 是怎么实现的??
古月
@shu 这个是膨胀半径,是障碍物膨胀出来的安全区域,和机器人半径没有直接关系
李冬琦
请教一下,我使用ros自带的move_base做导航,amcl做定位,在导航的时候,多转几次弯之后,地图里面的墙体和雷达扫描到的墙出现了严重的偏差,想和大神请教一下,如何解决
古月
@李冬琦 首先尽量提高里程计的精度,另外旋转的时候降低速度,ROS功能包的性能也有限
kong
古月大大,我现在做导航,但是在移动过程中会突然停止之后再继续前进,这是怎么回事?
古月
@kong 这个问题太笼统了,不好确定,请检查传感器是不是出现了障碍物,或者机器人需要转向之类的问题
kong
@古月 它的表现主要是规划好路径后,走走停停的,即便路径是直线并且没有障碍物,还会如此。我感觉应该是参数的问题。
古月
@kong 首先输出move_base发布的cmd_vel,确定给出的指令是不是有问题,有可能指令没问题,是机器人速度控制的问题。
kong
@古月 还有现在使用了DWAPlanner
DWAPlannerROS:
# Robot Configuration Parameters
max_vel_x: 0.5
min_vel_x: 0.0
max_vel_y: 0.0
min_vel_y: 0.0
# The velocity when robot is moving in a straight line
max_trans_vel: 0.55
min_trans_vel: 0.1
trans_stopped_vel: 0.1
max_rot_vel: 3.0
min_rot_vel: 0.8
rot_stopped_vel: 0.8
acc_lim_x: 1.0
acc_lim_theta: 2.0
acc_lim_y: 0.0
# Goal Tolerance Parametes :mu biao wu cha
yaw_goal_tolerance: 0.3
xy_goal_tolerance: 0.15
# latch_xy_goal_tolerance: false
# Forward Simulation Parameters zheng mo ni
sim_time: 4.0
vx_samples: 20
vy_samples: 0
vtheta_samples: 40
# Trajectory Scoring Parameters gng ji de fen
path_distance_bias: 32.0
goal_distance_bias: 24.0
occdist_scale: 0.1
forward_point_distance: 0.325
stop_time_buffer: 0.2
scaling_speed: 0.25
max_scaling_factor: 0.2
# Oscillation Prevention Parameters
oscillation_reset_dist: 0.05
# Debugging
publish_traj_pc : true
publish_cost_grid_pc: true
global_frame_id: odom
LLLLhhhh
@kong 我也遇到了同样的问题,规划出路径后,走走停停的,把给控制器的速度打印出来,发现确实发送了好多0的速度,不知道怎么解决
lovely
博主你好,请问一下在仿真时出现了机器人拐弯时的旋转半径太大而撞上障碍物应该怎么改动哪个参数
古月
@lovely 参考move_base wiki中的参数说明
小白菜
古老师,我想问一下。我使用gmapping slam构建出的地图。使用rviz显示,并用rviz中的nav goal按钮设置目标导航点。整个过程我用rosbag record -a指令记录了所有的话题,然后在matlab中绘制了小车的轨迹图。但是根据slam构建出的地图,绘制的小车轨迹图无法闭合,但是实际显示中观察的小车已经回到初始位置了。请问这是什么原因呢?ps:我的fix_frame=map
古月
@小白菜 有两个坐标系:map和odom,你看下数据是不是都是在map下的
小白菜
@古月 古老师,您好。我在matlab下绘制小车轨迹图,其实是用的/odom话题下的数据。
filepath = fullfile('E:\ROS\2018-08-01-14-52-28.bag');
bag = rosbag(filepath);
bagselect_odom = select(bag, 'Topic', '/odom');
msgs_odom = readMessages(bagselect_odom);
ts_odom_x = timeseries(bagselect_odom, 'Pose.Pose.Position.X');
ts_odom_y = timeseries(bagselect_odom,'Pose.Pose.Position.Y');
x = ts_odom_x.data;
y = ts_odom_y.data;
plot(y,x,'b');
xlabel('x方向距离/m');
ylabel('y方向距离/m)');
title('Gmapping SLAM得到的轨迹图');
hold on;
axis equal;
在rviz中我把已经构建好的地图加载下来后,就一直用的fix_frame=map,我现在怀疑是我用的单独里程计信息画出来的图,所以轨迹图无法闭合吧?
古月
@小白菜 odom和map是两个不同的坐标系,需要统一用一个
J
您好,请问一下导航时出现【warn】Timed out waiting for transform from base_footprint to map to become avaliable before running costmap, tf error: . canTransform returned after 0.105495 timeout was 0.1.是什么情况,该怎么解决呢?
古月
@J 可能是激光雷达的数据或坐标系更新慢
zang
@古月 这个问题该如何解决呢
Aria
博主您好,我在用movebase导航的时候出现no path的错误,自己的local_costmap/costmap里面的数据全是0,网上找过调整mix obstacle heigh和min obstacle heigh的办法也不起作用,坐标变换map->odom->baselink也是没有问题的,请问我还应该检查哪些地方呢
古月
@Aria 应该还是参数配置的问题,建议对照已有的配置检查,比如用《ROS by example》里的例程配置,包括launch文件和yaml文件
Aria
@古月 谢谢您的回复,我在用TrajectoryPlanner做局部规划的时候也是costmap里面的数据全是0,但是可以规划出路径,也可以导航,换成dwa之后就出现上面的错误。
古月
@Aria 这个我就不太清楚了
莹莹
@Aria 你好,我想请问下如何将point_cloud数据转换成laser数据?可以使用哪个包?
古月
@莹莹 这个包:depthimage_to_laserscan
自然
大神你好,我在弄全向移动底盘时,不能规划出路径move_base/TrajectoryPlannerROS/global_plan,其他都正常(包括tf,scan,全局地图,局部地图,粒子),不知道怎么回事
古月
@自然 有没有错误提示?
自然
@古月 谢谢老师,已经解决了
绯色泡沫
@自然 同学 你好,你的全向移动小车导航成功了吗
自然
@绯色泡沫 可以了,不过一些参数需要调整
boy_ys
博主您好,当我运行move_base导航包给他目标点的时候,窗口会显示error: “Aborting because the robot appears to be oscillating over and over. Even after executing all recovery behaviors” , 而且我在local_costmap中观察到在turtlebot的面积内有激光信息,这些激光信息需要过滤掉吗?base_link 跟 base_laser_link 我定义的转化关系为: "Translation: [0.150, 0.000, 0.255]", 您能给我一些建议解决oscillating over and over 这个问题吗?谢谢博主,小白刚入坑。
古月
@boy_ys 请参考:
http://www.cnblogs.com/cv-pr/p/5800270.html
https://github.com/ros-planning/navigation/issues/523
ssss
博主你好,请问怎么在gmapping构建出来的地图上让机器人按照指定的路线行走,并将机器人的实时位姿信息显示出来?
古月
@ssss 你的意思是不需要机器人自主规划路径么?已经有了路径的信息?可以尝试在move_base的基础上,把全局路径替换成自己已有的,然后利用move_base实现本地的规划。
ssss
@古月 就是在gmapping构建的地图上自己制定一条路线,然后机器人按照我在地图上制定的路线行走,而不是利用本地路径规划来避开障碍物的功能
古月
@ssss 我没见过这样的功能包,你google找一下吧,没有得话就只能自己实现了
ccc
@古月 好的,谢谢了!
J
@ccc 您好,我也是做相关的轨迹跟踪,可以加个好友向你学习一下吗?
Y
古大神,在使用激光雷达进行导航的时候,为什么在运行了一段时间之后,激光雷达的数据会是一坨一坨的?
古月
@Y 正常情况下是不会的,我用激光雷达没出现过这样的情况,检查以下数据源有没有问题
Aaron
您好,我现在遇到这样两个问题,第一运行movebase,mapserver,urg,amcl等节点后,转动小车,雷达数据也跟着旋转,雷达探测边界与地图上的不重合,有时会出现抖动。第二小车超目标点运动,会旋转好几圈,之后前进一点再旋转,不知是哪里有问题。
古月
@Aaron 1. 感觉定位不准
2. movebase是会发生这样的问题,只能从参数上尽量调整,要达到理想的效果很难
Aaron
@古月 我大概都试了下参数,觉得效果不明显,现在不知道该主要改那几个参数。是base loacal planner中的pdist和gdist么?
古月
@Aaron 还有一个允许误差tolerance的地方,改大一点试试
Aaron
@古月 十分感谢
古道云
@Aaron 兄弟,问题解决了吗?我的也是旋转小车的时候,雷达数据也跟着旋转,不知道怎么回事~
Tjy
@古道云 您好您解决好了吗?
夏至
胡老师,您好,我最近在用激光雷达做hector slam建图,手持激光雷达,不加里程计,不加IMU,图是可以建出来,但是建图的时候坐标点一直在跳动,就是会在一个地方建一个图,然后突然跳到另一个地方建同样的图,请问这是为什么?谢谢~~
古月
@夏至 建图过程中会定位的,是不是周围环境数据的变化不明显,没办法确定位置?
珊珊啊
博主您好,我的地盘在导航时出现了:Clearing costmap to unstuck robot (3.000000m)的警告,现象就是机器人转圈,然后停下,并不到达目标点,但是rviz上路径规划的挺好的.(我把本地规划器中的yaw_goal_tolerance改为0.35,xy_goall_tolerance改为了0.3,然而错误没有消失)
古月
@珊珊啊 影响这个问题的参数比较多,可以参考这个网页:
https://answers.ros.org/question/241969/clearing-costmap-to-unstuck-robot-3000000m/
https://github.com/strands-project/strands_navigation/issues/152
珊珊啊
@古月 谢谢胡大神~~
李浩然
大神您好,我想知道您在文章中说如上图所示,可是我看不到图是怎么回事?
古月
@李浩然 不好意思,图片漏了,已经重新添加
南珂一梦
大神你好:我的marking和clearing参数都设置的是true,但是在实际导航过程中仍然不能及时清除障碍物,如果说有人从车前走过,车子会停下来,但是当人走过之后,在rviz上显示障碍还在,这导致车子一直停滞不前,如果在这时采用遥控主动让车子前进一点,障碍就会更新,或是消除,之后就可以继续进行导航前进。请问这是什么情况。。。?
古月
@南珂一梦 参考:http://www.cnblogs.com/shhu1993/p/6323699.html,其中有一个清除半径的问题,看一下是不是这个原因
罗西
月哥,您好 我在运行movebase 时 报错 load_parameters: unable to set parameters (last param was [/move_base/publish_frequency=2.0]): cannot marshal None unless allow_none is enabled
想问一下是什么原因,应该怎么解决?
古月
@罗西 应该是参数文件里边的问题,请参考:
https://answers.ros.org/question/147231/how-to-set-parameters-publish_voxel_map/
岳越月
@古月 博主您好,看了您的文章受益匪浅,我现在遇到了一些问题请教您一下:
1.我用的小车是diego-robot。
2.我用的相机是zed stereoLabs ,首先利用zed-ros-wrapper生成三维点云数据,然后利用pointcloud-to-laser将点云转换成laser数据,最后通过这个laser数据进行gmapping以及amcl和move_base的自主导航。
3.现在我在进行gamapping的时候,小车旋转的角度越大,就越偏离正确的轨迹,并且建出来的图出现偏差,譬如我通过键盘控制让小车直行建图,然后我通过键盘让小车原地旋转360度,往回直行建图,但是此时小车确实是在往回直行中,而rviz中却显示的是已经偏离了方向,朝着其他的方向前进中,并在建图,而且当我令小车回去起始位置的时候,rviz中的小车并没有在起始坐标点。我想问您一下,这是否与建立的tf转换中的odom有关系,还是需要添加视觉里成计或者闭环检测。
4.在建完地图之后,通过map_server将建好的地图加载到amcl和move_base中,并在rviz中选取好目标点,让小车进行自主导航,出现的问题是小车朝着目标点的位置去了,但是到达目标点的时候并没有停下来,而是继续向前走,有时干脆不朝目标点的方向走,而是直接转弯了,撞到墙上。这个是因为定位不准、配置文件参数有误的问题,还是TF变换主要是里程计更新的,我的tf变换有问题,还是什么原因。希望您能指点一二。
古月
@岳越月 3. rviz只是一个显示的工具,建议第一步查看小车的里程计数据是否有问题(里程计需要校准),然后再查看tf变换是否有问题。在rviz中的显示也需要选择正确的坐标系。
4. 和上边类似,里程计没有问题的话,查看系统的tf,然后查看move_base和amcl的配置参数
另外,这款机器人没有配套的源码么
岳越月
@古月 因为刚看到,所以回的晚了,不好意思。有是有配套的源码,但是不是我想做的那种,而且用的相机也不同,我想做的是边slam地图,边进行自主导航。请问这个里程计的校准是小车线速度还有角速度的标定吗?如果是线角速度的标定,我在标定线速度的时候,只有在一米的时候是准确到达的,换成2米会出现偏差。标定角速度的时候只有360度的时候是准确到达的,换成别的度数要不就是旋转小了,要不就是旋转大了,我想问一下这是与小车底层控制的里程计源有关系吗;如果校准里程计不是标定线角速度,您能告诉我一下方法吗?
再就是我的tf转换树是map-odom-baselink-cameralink-laser,它们之间的转换频率(设定的值)会造成odom不准吗?
目前的情况是我在边slam建图边自主导航的时候,rviz中显示的odom总是时不时的发生跳动(随着小车走的越远跳动的越大),导致小车定位不无法准确的达到目标点,您能指点一下这是为什么吗,困扰好长时间了,这可能是与小车底层控制发出的里程计和相机视觉里程计相互纠正导致的错乱吗?
古月
@岳越月 这个要从底向上找问题,里程计的标定是线速度和角速度,这个底层数据如果无法尽量准确的话,上层的问题是不好确定的。所以还是先要让里程计的数据尽量准确,如果说转720度,机器人只转了680度,这个误差就是很大的了。
影响里程计的因素也有很多,硬件,底层驱动,积分控制,滤波、校准等等,都是需要关注的,不确定你用的机器人底层控制做的如何,这个可以联系相关的开发人员。
岳越月
@古月 不好意思,又来打扰您了,我现在遇到的问题是这样的,我启动底盘控制,然后进行角速度标定,旋转360正好能到360,线速度标定1m正好能到一米。然而当我同时启动底盘控制和gmapping的时候,再进行角速度标定,在rviz中显示小车旋转的比360小了大概60,也就转了300左右,而现实中小车已经转到了360。线速度标定rviz中显示的与实际小车走的是一样的。我想问您一下,您知道这是什么原因造成的吗?是不是因为gmapping在纠正底盘输出的odom,但是因为gmapping中的某些参数设定的不当,导致修正错误。我已经把minimumscore调到300,srt,srr等四个值调到0.01了,置信度很大程度上偏向底层的里程计了,还是出现这种问题。不知道是什么原因,希望您能告诉一下。
古月
@岳越月 你这个问题我还没见过,rviz只是显示作用,显示出错肯定是数据上的问题,看下odom的数据和tf的数据有没有问题,gmapping的参数可以用turtlebot的试试
冉腾
@岳越月 你好,岳越月,看了你和古月的回复,我感同身受,我现在也遇到了这样的问题,请问你解决了吗,可以让我参考一下吗
suixin
@岳越月 您好,我也在使用zed做导航,现在在点云转换成激光数据时候显示检测不到设备,您是怎么做的可以教教我吗?qq/微信:643095976欢迎交流。
suixin
@岳越月 您好,我也在使用zed做导航,现在在点云数据转化为激光数据时候显示检测不到设备,想问您应该怎么做。微信/QQ:643095976,欢迎交流。
杨光辉
您好,请教一个问题,我现在给一个机器人发布命令,发布数据为:x、y z ,如果我现在想获取ROS通过TF转换完成之后的数据,怎么获取?
谢谢!
古月
@杨光辉 监听tf树就可以,参考:
http://www.guyuehome.com/265
http://www.guyuehome.com/279
http://www.guyuehome.com/355
木木
想请教一下博主,我用rplidar在turtlebot上面,采用gmapping构建了地图,然后利用turtlebot app里的amcl想做自主导航,把相应的文件修改后,读取地图之后,用rviz查看发现,虽然有雷达数据,但是数据没有被认定为是障碍。我去对比了turtlebot app中的demo,默认传感器是Kinect,文件内容差不多,但是不知道怎么去查看和修改文件,才能使得雷达的信息,转换成障碍信息。
古月
@木木 turtlebot使用的是kinect,有一个depthtoscan的包会把点云转换成激光数据,如果直接使用激光,就不需要这个包了,应该要针对传感器部分的launch文件修改一下
郭阳全
@木木 你好,请问你这个问题解决了吗?怎么解决的呢?
木木
@郭阳全 有一个参数文件,我记得是局部地图参数文件,里面有一个设定障碍物的阈值的参数,本身的设定太大了,你改小之后,就可以识别障碍物了
ROS新手
古大神你好,
我刚用ROS导航包建立导航功能,
但发现其精准度误差约10公分,
如果到达目标点后,
想用2D laser做更精准的导航,
让定位精度更小,
ros有现成的package或方法可搭配吗
感谢
古月
@ROS新手 你好,ROS现在的slam和导航本身就是基于2d激光数据的,可以直接使用
Elbert
博主您好,有个问题想请教一下,我用的是先锋pioneer3机器人,差分式的,Gmapping建图之后在rviz上进行定点导航,但是机器人不是按照直线行走,s型的路线行驶,并且中间会转圈,请问这是什么问题?move_base中的global地图参数配置有误?
古月
@Elbert 应该和机器人本地规划器有关系,看下这个配置参数
卢双
博主,我用arbotix做障碍物仿真的时候,机器人总会先转几圈再走 是什么原因 🙂
古月
@卢双 可能是move_base的recovery作用的,机器人无法规划得到路线,需要旋转。
要火
博主你好,导航最后是要订阅cmd_vel这个话题是吧,对于差分机器人来说,一般只用到x轴线速度和z轴角速度就好了,那么这两个值我是直接计算左右轮速度后给电机,还是需要先做个什么处理再计算速度最后给电机?
古月
@要火 是的,根据角度计算两个轮的速度,然后驱动两个电机
白天
大神,你好。我在启动基础节点配置的时候出现了这个问题:
[ WARN] [1492421072.083171241]: Timed out waiting for transform from base_link to map to become available before running costmap, tf error: The tf tree is invalid because it contains a loop.
Frame base_laser exists with parent base_link.
Frame base_link exists with parent odom.
Frame odom exists with parent base_link.
. canTransform returned after 0.10157 timeout was 0.1.
古月
@白天 请参考:http://answers.ros.org/question/193469/tf-tree-is-invalide-because-it-contains-a-loop/
露露
@白天 你的这个问题解决了吗?怎么弄的?
稀客稀客
博主你好,我用的是激光雷达扫描的地图,用过的hector_slam包实时扫描地图,而不是静态地图,应该怎么修改move_base.launch里的参数呢?
古月
@稀客稀客 这个最好还是找个已有的例程参考一下,具体参数修改我也不太清楚
稀客稀客
@古月 我想的是,因为上面的教程是一定需要地图的,能不能边扫描地图边走
古月
@稀客稀客 可以一边扫描一边导航,参考http://wiki.ros.org/husky_navigation/Tutorials/Husky%20Gmapping%20Demo
稀客稀客
博主你好,如果我用hector_slam这个包构建的地图,就是用激光雷达扫描地图,而不是静态地图,应该怎么改move_base里的args参数呢?
liubo
博主你好,我是一名本科生。今天在组装测试turtlebot +kinect2时,出现了 INFO: No matching device found.... waiting for devices. Reason: std::string openni2_wrapper::OpenNI2Driver::resolveDeviceURI(const string&)@ /tmp/buildd/ros-indigo-openni2-camera-0.2.3-0trusty-20150327-0611/src/openni2_driver.cpp @ 623 : Invalid device number 1, there are 0 devices connected.的状况,请问该如何解决呢?谢谢!
古月
@liubo 你好,你用的是kinect2,用openni2不能驱动吧
jnwalker
古月你好。我用ORB-SLAM2、Cartographer等算法生成的地图,也能用AMCL算法进行导航吧?(也即,是否可认为导航所用算法和SLAM所用算法是相互独立的)
jnwalker
@jnwalker 补充一下。之所以提出这个问题,是因为刚在TurtleBot2上试了一下ORB-SLAM2,效果还可以。我就想,下一步如何使用在ORB-SLAM2得到的地图进行导航呢?不必非的用ORB特征吧。。。
古月
@jnwalker 你好,我没研究过其他SLAM算法,之前使用过hector和gmapping,应该是通用的。
我认为只要生成的是统一格式的栅格地图,应该是可以通用的。
jnwalker
@古月 应该是这样的。谢谢
Pink
@jnwalker 请教orb-slam2生成的地图在turtlebot2上导航可行吗?是非得生成栅格地图吗?
Pink
@jnwalker 请教orb-slam2生成的地图在turtlebot2上导航可行吗?是非得生成栅格地图吗?
Nyquistlk
大神,你好!我能不能绘制一张地图呢(就是不借助机器人,自己绘制一张地图,通过编程或者某个软件)。我试过用ps绘制了一张pgm的图片,然后执行虚拟导航,图片能够加载,但指定目标后导航,它会忽略障碍,直接规划了一条起点到终点的直线。
古月
@Nyquistlk 你好,可以自己绘制的,我之前试过用Ubuntu下边的GIMP软件试过,还要注意地图相应的yaml文件也要有。
nyquist-k
@古月 嗯,确实可以,ps和gimp制作的地图都可以,png、pgm格式都支持。有个问题yaml中的地图分辨率是什么单位像素/英寸还是像素/m?
古月
@nyquist-k 单位是meters / pixel
nyquist-k
@古月 嗯嗯,我查到了,真是太感谢了!
nyquist-k
@古月 大神,我自己想写一个package,借助rbx1包,catkin_create_pkg mypackage rbx1 rospy tf,但是在catkin_ws下执行catkin_make时,出现 Could not find a package configuration file provided by "rbx1" with any of
the following names:
rbx1Config.cmake
rbx1-config.cmake
这种错误,难道不能借助rbx1包开发自己的包?
古月
@nyquist-k rbx1不是功能包的名字,rbx1里边才是功能包
nyquist-k
@古月 哦哦,晓得了,谢谢!
nyquist-k
@古月 对于移动机器人如turtlebot,只关心base_link就行,base_footprint和base_link一样;而人形机器人如pi robot,base_footprint和base_link是不一样的,都需要关心,这时,base_link为底盘(如腰部)的坐标系,base_footprint是什么坐标系呢,我这样说对吗,对的话,大神能给讲一下base_footprint是什么坐标系呢
古月
@nyquist-k base_footprint是位于地面的坐标系,z=0;base_link是位于机器人质心的坐标系,z不一定为0。
nyquist-k
@古月 哦哦,原来如此!
nyquist-k
@古月 嗯,确实可以,ps、gimp制作的图像都支持,可能之前我的图像有问题,所以导航才会出错。还有png、pgm图像格式也都支持。
nyquist-k
@Nyquistlk 当启动rbx1_bringup下的turtlebot_mininal_create.launch,它会启动一个robot_pose_ekf节点,如果把参数odom_used、imu_used、vo_used设为true,会优化里程计,最终得到的里程计是odom、imu、vo_used混合生成的,发布话题odom_combined,但是move_base中的base_local_planner订阅的话题是odom,没有订阅odom_combined,这就是说只对里程计进行了优化而没有使用它代替优化之前的?我查看了一下ros by example1,它说,robot_pose_ekf会发布odom_combined——>base_link的转换tf,通过这个tf将move_base中的里程计进行优化,是这样吗
邓广伟
博主您好:
我按照您说的做但是出现了下面的问题:
Unable to get starting pose of robot, unable to create global plan
[ WARN] [1483076626.651900031]: Could not get robot pose, cancelling reconfiguration
请问您指导如何解决吗?
古月
@邓广伟 无法获取机器人的位置,检查一下odom数据
pangzonghui
@邓广伟 你好,你的问题解决了吗,谢谢
小锐
您好!
我要通过ros和激光雷达进行连接(hokuyo),但是提示 无法访问 /dev/ttyACM0:没有那个文件或目录。我是在vm虚拟机下运行的!!!
古月
@小锐 你好,使用虚拟机的时候需要注意是否把设备切换到了虚拟机内,可以在虚拟机的设置中查看
小锐
您好!
我要通过ros和激光雷达进行连接(hokuyo),但是提示 无法访问 /dev/ttyACM0:没有那个文件或目录
Dasrio
博主你好,我按照ros wiki上的教程已经成功构建了地图,但是在它的下一步教程http://wiki.ros.org/turtlebot_navigation/Tutorials/indigo/Autonomously%20navigate%20in%20a%20known%20map,就是用已知地图进行自动导航的教程中,载入自己的地图后,rviz上有各种错误,控制台上有这种问题:
[ WARN] [1480383938.096472243]: Timed out waiting for transform from base_footprint to map to become available before running costmap, tf error: . canTransform returned after 0.101175 timeout was 0.1.
[ INFO] [1480383940.992820992]: No matching device found.... waiting for devices. Reason: std::string openni2_wrapper::OpenNI2Driver::resolveDeviceURI(const string&) @ /tmp/binarydeb/ros-indigo-openni2-camera-0.2.7/src/openni2_driver.cpp @ 631 : Invalid device number 1, there are 0 devices connected.
请问一下上面他说的device指的是什么device没有找到呢?
古月
@Dasrio 有连接上Kinect么,openni的设备没有找到
Dasrio
@古月 您好,我们用的是激光雷达rplidar a2代替的kinect
古月
@Dasrio 那为什么会启动Openni,检查一下启动文件
陈同学
@Dasrio 我也是这个方案:plidar a2代替的kinect,请问你 这个问题解决了吗?我也遇到了 base_footprint -> odom->map 已经可以建地图,所以base_footprint -> odom已经没有问题,但到了amcl时,odom->map就失败了,查看了topic也有这两个,求教,非常谢谢
longbowliu
@陈同学 关键词 :base_footprint , 在local和global costmap 配置文件中都有配置, 一般情况改为base_link即可 (robot_base_frame: base_link)
天天
博主你好!请问一下 ,小车在到达目标点后,小车的最终指向与预设的方向不一样,出现这个问题的原因在哪?
古月
@天天 是否发生错误导致小车停止?还有配置文件中误差容许值的设置
天天
@古月 运行时没有出现错误,我试试改一下配置文件。非常感谢
lixiang
您好,我是一名学生,刚开始学习ROS两个月,有个问题想向您请教一下。
我把ros.org官网上的tutorials学完之后在寻找资料的过程中发现,已经有的大部分资料都是针对kinetic之前版本的ros,很多例子在kinetic上运行不了,像turtlebot机器人官网给出的simulator是针对indigo版本的,还有《ros_by_example》中使用的是groovy版本,我想请问您一下我该怎么使用这些资料,必须要重新装以前版本的bantu和ros吗?非常感谢!
古月
@lixiang 大部分的命令在几个版本之间是可以通用的,但是也有一些存在版本不兼容的问题,对于初学者来说,建议使用LTS的indigo版本
PPC
@lixiang 《ros by example》 有indigo版本的PDF,可以去下载。
233
博主你好,我现在导航出现了一种情况,给机器人发送一个指令让她走到位置,但是实际上只走了一半,地图里却显示已经走到了,为什么会出现这种情况啊?
古月
@233 我没遇到过这种情况,检查一下各种消息,位置信息是否已经到达
233
@古月 Costmap2DROS transform timeout. Current time: 1474621428.7977, global_pose stamp: 1474621428.4924, tolerance: 0.3000
Could not get robot pose, cancelling reconfiguration
报错信息是这样的,每次都是走不到目标就会停下,是不是在哪里可以设置这个tolerance参数呢,让它变大一点?
古月
@233 无法到达目标导致终止,在move_base启动的yaml文件里可以设置这些参数
233
@古月 每次都是在rviz中机器人很快就达到了目标位置,但是实际环境中还存在一段距离,我看您上面写的博客里没有设置这个参数,在global_costmap_params.yaml里面设置可以吗?
古月
@233 这个参数我使用的是默认的,一直没遇到问题,不确定你这个问题是不是参数导致的
233
@古月 嗯嗯,谢谢博主,我再改下试试
岳越月
@233 @233 您好,请问一下你的问题解决了吗,是与调节transform_tolerance的大小有关吗?我也遇到了相同的问题。
LLLLhhhh
@岳越月 我也遇到了相同的问题
博达
博主您好,我按照上面的教程进行了一遍,建立地图使用的是hectormapping,my_robot_configuration.launch文件可以正确运行,但是运行move_base.launch时显示无法加载参数是为什么呢?
古月
@博达 检查一下路径有没有问题
博达
@古月 嗯嗯,现在是导航加载地图之后,发现机器人的位置大致正确,但是显示的方向不对,请问一下这是为什么呢?
古月
@博达 机器人的初始位姿是根据配置文件中的参数设置的,也就是建地图的时候的机器人初始位姿,可以修改配置文件,也可以在rviz中用pose那个选项手动修改
博达
@古月 嗯嗯,多谢博主,我在研究研究。
博达
@博达 load_parameters: unable to set parameters (last param was [/move_base/resolution=0.05]): cannot marshal None unless allow_none is enabled
现在的报错信息有变成这样了,请问下是什么原因造成的呢?
博达
@古月 解决啦,多谢博主大神
高波
@博达 您好,我也遇到过,请问你是怎么解决的呢?
陈
博主你好,最近在别的机器人上想配置gmapping。在rviz里发布2d_goal后路径规划出来机器人没反应,手动推机器人odom能正确反馈,博主可以写一偏关于gmapping配置的文章吗?
古月
@陈 检查一下tf tree,每个topic的数据是否正确。
comedy
古大神你好。导航加载乐一个地图,但rviz显示中发现:机器人位置并不在构建的地图中,而是在格栅图的中央位置,这该怎么解决呢 ?、
古月
@comedy 修改地图配置文件中的默认起点位置
赵天阳
大神,你好。我是一个初学者,刚开始接触ros,想做一个机器人的导航。参考你的教程说明里面的步骤,我按着做了,但是有几个问题请教你。1,在创建机器人启动文件my_robot_configuration.launch的时候,文件里面的type="sensor_node_type" 和你的说明里面说的是传感器驱动包名称、类型、命名等信息和驱动包节点需要使用到的参数,我比较笨,一直不明白,type和param指的是什么,你能举个例子说明一下吗。2,那几个yaml文件是放在哪里的。3,基座控制器(base controller)怎么创建。我的问题有点多,麻烦你了。
古月
@赵天阳 1. type是指运行的可执行文件,param是指文件中需要的配置参数。可参考:http://wiki.ros.org/roslaunch/Tutorials/Roslaunch%20tips%20for%20larger%20projects
2. yaml文件放到创建的功能包里就可以,路径可以在launch文件中设置。
3. base controller是指机器人的控制器,解析ROS的订阅消息,并且通过硬件驱动,实现机器人的动作。
赵天阳
@古月 太感谢你了,我再试试看,谢谢。
流明的贤者
@古月 博主你好,关于my_robot_configuration.launch这个文件我还是没太明白,比如我按照一个教程安装了xv_11_laser_driver这个激光雷达,sensor_node_pkg=xv_11_laser_driver是吧,你说type应该是运行的可执行文件,这个一般是.cpp文件吗?最后的name又应该填什么呢?
param的配置参数具体又是哪些呢?
我也是初学者,问题比较多,麻烦大神啦
古月
@流明的贤者 不是cpp文件,是可执行文件,name是自己设置的节点名称,param需要根据说明来,看下功能包的wiki上提供哪些参数