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命名的文件:

  1. <launch>
  2.   <node pkg="sensor_node_pkg" type="sensor_node_type" name="sensor_node_name" output="screen">
  3.     <param name="sensor_param" value="param_value" />
  4.   </node>
  5.  
  6.   <node pkg="odom_node_pkg" type="odom_node_type" name="odom_node" output="screen">
  7.     <param name="odom_param" value="param_value" />
  8.   </node>
  9.  
  10.   <node pkg="transform_configuration_pkg" type="transform_configuration_type" name="transform_configuration_name" output="screen">
  11.     <param name="transform_configuration_param" value="param_value" />
  12.   </node>
  13. </launch>


   让我们来详细的解读以上内容的含义

  1. <launch>
  2.   <node pkg="sensor_node_pkg" type="sensor_node_type" name="sensor_node_name" output="screen">
  3.     <param name="sensor_param" value="param_value" />


      这部分代码用来启动机器人的传感器,根据以上格式,修改你所使用到的传感器驱动包名称、类型、命名等信息,并且添加驱动包节点需要使用到的参数。当然,如果你需要使用多个传感器,可以使用相同的方法,启动多个传感器的驱动节点。

  1.   <node pkg="odom_node_pkg" type="odom_node_type" name="odom_node" output="screen">
  2.     <param name="odom_param" value="param_value" />
  3.   </node>


      这部分代码用来启动机器人上的里程计,根据需要修改功能包名、类型、节点名、参数。

  1.   <node pkg="transform_configuration_pkg" type="transform_configuration_type" name="transform_configuration_name" output="screen">
  2.     <param name="transform_configuration_param" value="param_value" />
  3.   </node>


      这部分代码需要启动机器人相关的坐标变换。

4.3、代价地图的配置 (local_costmap)& (global_costmap)

       导航功能包使用两种代价地图存储周围环境中的障碍信息,一种用于全局路径规划,一种用于本地路径规划和实时避障。两种代价地图需要使用一些共同和独立的配置文件:通用配置文件,全局规划配置文件,本地规划配置文件。以下将详细讲解这三种配置文件:

(1)通用配置文件(Common Configuration (local_costmap) &(global_costmap))

      代价地图用来存储周围环境的障碍信息,其中需要注明地图关注的机器人传感器消息,以便于地图信息进行更行。针对两种代价地图通用的配置选项,创建名为costmap_common_params.yaml的配置文件:

  1. obstacle_range: 2.5  
  2. raytrace_range: 3.0  
  3. footprint: [[x0, y0], [x1, y1], ... [xn, yn]]  
  4. #robot_radius: ir_of_robot  
  5. inflation_radius: 0.55  
  6.  
  7. observation_sources: laser_scan_sensor point_cloud_sensor  
  8.  
  9. laser_scan_sensor: {sensor_frame: frame_name, data_type: LaserScan, topic: topic_name, marking: true, clearing: true}  
  10.  
  11. point_cloud_sensor: {sensor_frame: frame_name, data_type: PointCloud, topic: topic_name, marking: true, clearing: true}


      详细解析以上配置文件的内容:

  1. obstacle_range: 2.5  
  2. raytrace_range: 3.0


      这两个参数用来设置代价地图中障碍物的相关阈值。obstacle_range参数用来设置机器人检测障碍物的最大范围,设置为2.5意为在2.5米范围内检测到的障碍信息,才会在地图中进行更新。raytrace_range参数用来设置机器人检测自由空间的最大范围,设置为3.0意为在3米范围内,机器人将根据传感器的信息,清除范围内的自由空间。

  1. footprint: [[x0, y0], [x1, y1], ... [xn, yn]]  
  2. #robot_radius: ir_of_robot  
  3. inflation_radius: 0.55


       这些参数用来设置机器人在二维地图上的占用面积,如果机器人外形是圆形,则需要设置机器人的外形半径。所有参数以机器人的中心作为坐标(00)点。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表示传感器发布的话题名称,而markingclearing参数用来表示是否需要使用传感器的实时信息来添加或清楚代价地图中的障碍物信息。
2)全局规划配置文件(Global Configuration (global_costmap)
        全局规划配置文件用来存储用于全局代价地图的配置参数,我们使用global_costmap_params.yaml来命名,内容如下:

  1. global_costmap:  
  2.  global_frame: /map  
  3.  robot_base_frame: base_link  
  4.  update_frequency: 5.0  
  5.  static_map:true


     global_frame参数用来表示全局代价地图需要在那个参考系下运行,这里我们选择了map这个参考系。robot_base_frame参数表示代价地图可以参考的机器人本体的参考系。update_frequency参数绝地全局地图信息更新的频率,单位是Hzstatic_map参数决定代价地图是否需要根据map_server提供的地图信息进行初始化,如果你不需要使用已有的地图或者map_server,最好将该参数设置为false

3)本地规划配置文件(Local Configuration (local_costmap)

       本地规划配置文件用来存储用于本地代价地图的配置参数,命名为local_costmap_params.yaml,内容如下:

  1. local_costmap:  
  2.  global_frame: odom  
  3.  robot_base_frame: base_link  
  4.  update_frequency: 5.0  
  5.  publish_frequency: 2.0  
  6.  static_map:false  
  7.  rolling_window: true  
  8.  width: 6.0  
  9.  height: 6.0  
  10.  resolution:0.05


     "global_frame", "robot_base_frame","update_frequency",  "static_map"参数的意义与全局规划配置文件中的参数相同。publish_frequency设置代价地图发布可视化信息的频率,单位是Hzrolling_window参数是用来设置在机器人移动过程中是否需要滚动窗口,以保持机器人处于中心位置。"width," "height," "resolution" 设置设置代价地图长(米)、高(米)和分辨率(米/格)。分辨率可以设置的与静态地图不同,但是一般情况下两者是相同的。

4.4 本地规划器配置

       本地规划器base_local_planner的主要作用是根据规划的全局路径,计算发布给机器人的速度指令。该规划器需要我们根据机器人的规格,配置一些相应的参数。我们创建名为base_local_planner_params.yaml的配置文件:

  1. TrajectoryPlannerROS:  
  2.   max_vel_x: 0.45  
  3.   min_vel_x: 0.1  
  4.   max_vel_theta: 1.0  
  5.   min_in_place_vel_theta: 0.4  
  6.  
  7.   acc_lim_theta: 3.2  
  8.   acc_lim_x: 2.5  
  9.   acc_lim_y: 2.5  
  10.  
  11.   holonomic_robot: true


      该配置文件声明了机器人的本地规划采用Trajectory Rollout算法。第一段设置了机器人的速度阈值,第二段设置了机器人的加速度阈值。

4.5 为导航功能包创建一个启动文件

      到此为止,我们已经创建完毕所有需要用到的配置文件,接下来我们需要创建一个启动文件,来启动所有需要的功能。创建move_base.launch的文件:

  1. <launch>
  2.   <master auto="start"/>
  3.  
  4.   <!-- Run the map server -->
  5.   <node name="map_server" pkg="map_server" type="map_server" args="$(find my_map_package)/my_map.pgm my_map_resolution"/>
  6.  
  7.   <!--- Run AMCL -->
  8.   <include file="$(find amcl)/examples/amcl_omni.launch" />
  9.  
  10.   <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
  11.     <rosparam file="$(find my_robot_name_2dnav)/costmap_common_params.yaml" command="load" ns="global_costmap" />
  12.     <rosparam file="$(find my_robot_name_2dnav)/costmap_common_params.yaml" command="load" ns="local_costmap" />
  13.     <rosparam file="$(find my_robot_name_2dnav)/local_costmap_params.yaml" command="load" />
  14.     <rosparam file="$(find my_robot_name_2dnav)/global_costmap_params.yaml" command="load" />
  15.     <rosparam file="$(find my_robot_name_2dnav)/base_local_planner_params.yaml" command="load" />
  16.   </node>
  17. </launch>


      在该配置文件中,你需要修改的只有map-server输入的地图,以及如果使用差分驱动的机器人,需要修改"amcl_omni.launch""amcl_diff.launch"

4.6 AMCL功能包的设置

      AMCL有许多的参数设置,会影响机器人的定位效果,具体参考amcldocumentation

 

5、运行导航功能包

 

       现在,我们已经完成了所有需要的工作,最后一步,运行启动文件,开始导航之旅:

  1. roslaunch my_robot_configuration.launch  
  2. roslaunch move_base.launch

       现在导航功能包应该已经可以顺利运行了,但这绝对不是结束,因为你只能从终端里看到一端乱蹦的代码,如何使用更友好的方式进行机器人导航呢?如果你想使用UI界面,请参考rviz and navigationtutorial,如果你想使用代码,请参考Sending SimpleNavigation Goals 


原创文章,转载请注明: 转载自古月居

本文链接地址: ROS探索总结(十九)——如何配置机器人的导航功能

微信 OR 支付宝 扫描二维码
为本文作者 打个赏
pay_weixinpay_weixin

评论

85条评论
  1. Gravatar 头像

    岳越月 回复

    @古月 博主您好,看了您的文章受益匪浅,我现在遇到了一些问题请教您一下:
    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的配置参数
      另外,这款机器人没有配套的源码么

  2. Gravatar 头像

    杨光辉 回复

    您好,请教一个问题,我现在给一个机器人发布命令,发布数据为:x、y z ,如果我现在想获取ROS通过TF转换完成之后的数据,怎么获取?
    谢谢!

  3. Gravatar 头像

    木木 回复

    想请教一下博主,我用rplidar在turtlebot上面,采用gmapping构建了地图,然后利用turtlebot app里的amcl想做自主导航,把相应的文件修改后,读取地图之后,用rviz查看发现,虽然有雷达数据,但是数据没有被认定为是障碍。我去对比了turtlebot app中的demo,默认传感器是Kinect,文件内容差不多,但是不知道怎么去查看和修改文件,才能使得雷达的信息,转换成障碍信息。

    • 古月

      古月 回复

      @木木 turtlebot使用的是kinect,有一个depthtoscan的包会把点云转换成激光数据,如果直接使用激光,就不需要这个包了,应该要针对传感器部分的launch文件修改一下

  4. Gravatar 头像

    ROS新手 回复

    古大神你好,
    我刚用ROS导航包建立导航功能,
    但发现其精准度误差约10公分,
    如果到达目标点后,
    想用2D laser做更精准的导航,
    让定位精度更小,
    ros有现成的package或方法可搭配吗
    感谢

    • 古月

      古月 回复

      @ROS新手 你好,ROS现在的slam和导航本身就是基于2d激光数据的,可以直接使用

  5. Gravatar 头像

    Elbert 回复

    博主您好,有个问题想请教一下,我用的是先锋pioneer3机器人,差分式的,Gmapping建图之后在rviz上进行定点导航,但是机器人不是按照直线行走,s型的路线行驶,并且中间会转圈,请问这是什么问题?move_base中的global地图参数配置有误?

    • 古月

      古月 回复

      @Elbert 应该和机器人本地规划器有关系,看下这个配置参数

  6. Gravatar 头像

    卢双 回复

    博主,我用arbotix做障碍物仿真的时候,机器人总会先转几圈再走 是什么原因 🙂

    • 古月

      古月 回复

      @卢双 可能是move_base的recovery作用的,机器人无法规划得到路线,需要旋转。

  7. Gravatar 头像

    要火 回复

    博主你好,导航最后是要订阅cmd_vel这个话题是吧,对于差分机器人来说,一般只用到x轴线速度和z轴角速度就好了,那么这两个值我是直接计算左右轮速度后给电机,还是需要先做个什么处理再计算速度最后给电机?

    • 古月

      古月 回复

      @要火 是的,根据角度计算两个轮的速度,然后驱动两个电机

  8. Gravatar 头像

    白天 回复

    大神,你好。我在启动基础节点配置的时候出现了这个问题:
    [ 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/

    • Gravatar 头像

      露露 回复

      @白天 你的这个问题解决了吗?怎么弄的?

  9. Gravatar 头像

    稀客稀客 回复

    博主你好,我用的是激光雷达扫描的地图,用过的hector_slam包实时扫描地图,而不是静态地图,应该怎么修改move_base.launch里的参数呢?

    • 古月

      古月 回复

      @稀客稀客 这个最好还是找个已有的例程参考一下,具体参数修改我也不太清楚

      • Gravatar 头像

        稀客稀客 回复

        @古月 我想的是,因为上面的教程是一定需要地图的,能不能边扫描地图边走

        • 古月

          古月 回复

          @稀客稀客 可以一边扫描一边导航,参考http://wiki.ros.org/husky_navigation/Tutorials/Husky%20Gmapping%20Demo

  10. Gravatar 头像

    稀客稀客 回复

    博主你好,如果我用hector_slam这个包构建的地图,就是用激光雷达扫描地图,而不是静态地图,应该怎么改move_base里的args参数呢?

  11. Gravatar 头像

    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不能驱动吧

  12. Gravatar 头像

    jnwalker 回复

    古月你好。我用ORB-SLAM2、Cartographer等算法生成的地图,也能用AMCL算法进行导航吧?(也即,是否可认为导航所用算法和SLAM所用算法是相互独立的)

    • Gravatar 头像

      jnwalker 回复

      @jnwalker 补充一下。之所以提出这个问题,是因为刚在TurtleBot2上试了一下ORB-SLAM2,效果还可以。我就想,下一步如何使用在ORB-SLAM2得到的地图进行导航呢?不必非的用ORB特征吧。。。

      • 古月

        古月 回复

        @jnwalker 你好,我没研究过其他SLAM算法,之前使用过hector和gmapping,应该是通用的。
        我认为只要生成的是统一格式的栅格地图,应该是可以通用的。

        • Gravatar 头像

          jnwalker 回复

          @古月 应该是这样的。谢谢

          • Gravatar 头像

            Pink 回复

            @jnwalker 请教orb-slam2生成的地图在turtlebot2上导航可行吗?是非得生成栅格地图吗?

      • Gravatar 头像

        Pink 回复

        @jnwalker 请教orb-slam2生成的地图在turtlebot2上导航可行吗?是非得生成栅格地图吗?

  13. Gravatar 头像

    Nyquistlk 回复

    大神,你好!我能不能绘制一张地图呢(就是不借助机器人,自己绘制一张地图,通过编程或者某个软件)。我试过用ps绘制了一张pgm的图片,然后执行虚拟导航,图片能够加载,但指定目标后导航,它会忽略障碍,直接规划了一条起点到终点的直线。

    • 古月

      古月 回复

      @Nyquistlk 你好,可以自己绘制的,我之前试过用Ubuntu下边的GIMP软件试过,还要注意地图相应的yaml文件也要有。

      • Gravatar 头像

        nyquist-k 回复

        @古月 嗯,确实可以,ps和gimp制作的地图都可以,png、pgm格式都支持。有个问题yaml中的地图分辨率是什么单位像素/英寸还是像素/m?

          • Gravatar 头像

            nyquist-k 回复

            @古月 嗯嗯,我查到了,真是太感谢了!

          • Gravatar 头像

            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包开发自己的包?

              • Gravatar 头像

                nyquist-k 回复

                @古月 哦哦,晓得了,谢谢!

              • Gravatar 头像

                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。

                  • Gravatar 头像

                    nyquist-k 回复

                    @古月 哦哦,原来如此!

      • Gravatar 头像

        nyquist-k 回复

        @古月 嗯,确实可以,ps、gimp制作的图像都支持,可能之前我的图像有问题,所以导航才会出错。还有png、pgm图像格式也都支持。

    • Gravatar 头像

      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中的里程计进行优化,是这样吗

  14. Gravatar 头像

    邓广伟 回复

    博主您好:
    我按照您说的做但是出现了下面的问题:
    Unable to get starting pose of robot, unable to create global plan
    [ WARN] [1483076626.651900031]: Could not get robot pose, cancelling reconfiguration
    请问您指导如何解决吗?

    • Gravatar 头像

      pangzonghui 回复

      @邓广伟 你好,你的问题解决了吗,谢谢

  15. Gravatar 头像

    小锐 回复

    您好!
    我要通过ros和激光雷达进行连接(hokuyo),但是提示 无法访问 /dev/ttyACM0:没有那个文件或目录。我是在vm虚拟机下运行的!!!

    • 古月

      古月 回复

      @小锐 你好,使用虚拟机的时候需要注意是否把设备切换到了虚拟机内,可以在虚拟机的设置中查看

  16. Gravatar 头像

    小锐 回复

    您好!
    我要通过ros和激光雷达进行连接(hokuyo),但是提示 无法访问 /dev/ttyACM0:没有那个文件或目录

  17. Gravatar 头像

    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的设备没有找到

      • Gravatar 头像

        Dasrio 回复

        @古月 您好,我们用的是激光雷达rplidar a2代替的kinect

        • 古月

          古月 回复

          @Dasrio 那为什么会启动Openni,检查一下启动文件

        • Gravatar 头像

          陈同学 回复

          @Dasrio 我也是这个方案:plidar a2代替的kinect,请问你 这个问题解决了吗?我也遇到了 base_footprint -> odom->map 已经可以建地图,所以base_footprint -> odom已经没有问题,但到了amcl时,odom->map就失败了,查看了topic也有这两个,求教,非常谢谢

  18. Gravatar 头像

    天天 回复

    博主你好!请问一下 ,小车在到达目标点后,小车的最终指向与预设的方向不一样,出现这个问题的原因在哪?

    • 古月

      古月 回复

      @天天 是否发生错误导致小车停止?还有配置文件中误差容许值的设置

      • Gravatar 头像

        天天 回复

        @古月 运行时没有出现错误,我试试改一下配置文件。非常感谢

  19. Gravatar 头像

    lixiang 回复

    您好,我是一名学生,刚开始学习ROS两个月,有个问题想向您请教一下。
    我把ros.org官网上的tutorials学完之后在寻找资料的过程中发现,已经有的大部分资料都是针对kinetic之前版本的ros,很多例子在kinetic上运行不了,像turtlebot机器人官网给出的simulator是针对indigo版本的,还有《ros_by_example》中使用的是groovy版本,我想请问您一下我该怎么使用这些资料,必须要重新装以前版本的bantu和ros吗?非常感谢!

    • 古月

      古月 回复

      @lixiang 大部分的命令在几个版本之间是可以通用的,但是也有一些存在版本不兼容的问题,对于初学者来说,建议使用LTS的indigo版本

    • Gravatar 头像

      PPC 回复

      @lixiang 《ros by example》 有indigo版本的PDF,可以去下载。

  20. Gravatar 头像

    233 回复

    博主你好,我现在导航出现了一种情况,给机器人发送一个指令让她走到位置,但是实际上只走了一半,地图里却显示已经走到了,为什么会出现这种情况啊?

    • 古月

      古月 回复

      @233 我没遇到过这种情况,检查一下各种消息,位置信息是否已经到达

      • Gravatar 头像

        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文件里可以设置这些参数

          • Gravatar 头像

            233 回复

            @古月 每次都是在rviz中机器人很快就达到了目标位置,但是实际环境中还存在一段距离,我看您上面写的博客里没有设置这个参数,在global_costmap_params.yaml里面设置可以吗?

            • 古月

              古月 回复

              @233 这个参数我使用的是默认的,一直没遇到问题,不确定你这个问题是不是参数导致的

              • Gravatar 头像

                233 回复

                @古月 嗯嗯,谢谢博主,我再改下试试

                • Gravatar 头像

                  岳越月 回复

                  @233 @233 您好,请问一下你的问题解决了吗,是与调节transform_tolerance的大小有关吗?我也遇到了相同的问题。

  21. Gravatar 头像

    博达 回复

    博主您好,我按照上面的教程进行了一遍,建立地图使用的是hectormapping,my_robot_configuration.launch文件可以正确运行,但是运行move_base.launch时显示无法加载参数是为什么呢?

      • Gravatar 头像

        博达 回复

        @古月 嗯嗯,现在是导航加载地图之后,发现机器人的位置大致正确,但是显示的方向不对,请问一下这是为什么呢?

        • 古月

          古月 回复

          @博达 机器人的初始位姿是根据配置文件中的参数设置的,也就是建地图的时候的机器人初始位姿,可以修改配置文件,也可以在rviz中用pose那个选项手动修改

          • Gravatar 头像

            博达 回复

            @古月 嗯嗯,多谢博主,我在研究研究。

            • Gravatar 头像

              博达 回复

              @博达 load_parameters: unable to set parameters (last param was [/move_base/resolution=0.05]): cannot marshal None unless allow_none is enabled
              现在的报错信息有变成这样了,请问下是什么原因造成的呢?

          • Gravatar 头像

            博达 回复

            @古月 解决啦,多谢博主大神

            • Gravatar 头像

              高波 回复

              @博达 您好,我也遇到过,请问你是怎么解决的呢?

  22. Gravatar 头像

    回复

    博主你好,最近在别的机器人上想配置gmapping。在rviz里发布2d_goal后路径规划出来机器人没反应,手动推机器人odom能正确反馈,博主可以写一偏关于gmapping配置的文章吗?

    • 古月

      古月 回复

      @陈 检查一下tf tree,每个topic的数据是否正确。

  23. Gravatar 头像

    comedy 回复

    古大神你好。导航加载乐一个地图,但rviz显示中发现:机器人位置并不在构建的地图中,而是在格栅图的中央位置,这该怎么解决呢 ?、

  24. Gravatar 头像

    赵天阳 回复

    大神,你好。我是一个初学者,刚开始接触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的订阅消息,并且通过硬件驱动,实现机器人的动作。

      • Gravatar 头像

        赵天阳 回复

        @古月 太感谢你了,我再试试看,谢谢。

      • Gravatar 头像

        流明的贤者 回复

        @古月 博主你好,关于my_robot_configuration.launch这个文件我还是没太明白,比如我按照一个教程安装了xv_11_laser_driver这个激光雷达,sensor_node_pkg=xv_11_laser_driver是吧,你说type应该是运行的可执行文件,这个一般是.cpp文件吗?最后的name又应该填什么呢?
        param的配置参数具体又是哪些呢?
        我也是初学者,问题比较多,麻烦大神啦

        • 古月

          古月 回复

          @流明的贤者 不是cpp文件,是可执行文件,name是自己设置的节点名称,param需要根据说明来,看下功能包的wiki上提供哪些参数

发表评论

电子邮件地址不会被公开。 必填项已用*标注