ROS 导航设计随笔

1  tf变换

 <node pkg="tf" type="static_transform_publisher" name="map_odom_broadcaster" args="0 0 0 0 0 0 /map /odom 100" />

作用:设置一个/odom与/map之间的静态坐标变换,前六个参数分别是xyz和rpy,100代表100ms刷新一次.

2  view_frames

view_frames是可视化的调试工具,可以生成pdf调试信息,来显示整颗tf树的信息.

命令执行方式:

rosrun tf view_frames
evince frames.pdf

 参考:https://www.guyuehome.com/279

3  机器人的(位姿)位置和姿态

  ROS中定义了MoveBaseActionGoal数据结构来存储导航的目标位置数据,其中最重要的就是位置坐标(position)和方向(orientation)

rosmsg show MoveBaseActionGoal  
  
[move_base_msgs/MoveBaseActionGoal]:  
std_msgs/Header header  
  uint32 seq  
  time stamp  
  string frame_id  
actionlib_msgs/GoalID goal_id  
  time stamp  
  string id  
move_base_msgs/MoveBaseGoal goal  
  geometry_msgs/PoseStamped target_pose  
    std_msgs/Header header  
      uint32 seq  
      time stamp  
      string frame_id  
    geometry_msgs/Pose pose  
      geometry_msgs/Point position  
        float64 x  
        float64 y  
        float64 z  
      geometry_msgs/Quaternion orientation  
        float64 x  
        float64 y  
        float64 z  
        float64 w

其中position中的x,y,z分别代表机器人的位置坐标, oriention中的x,y,z,w是四元数,用来描述角度角度转换关系见下图.

       四元数和欧拉角和rpy(https://www.cnblogs.com/21207-ihome/p/6894128.html)

  其中K = (kx,ky,kz)为旋转轴的方向向量

4  模型上下摆动问题

  在运行导航文件 nav_cloister_demo.launch的时候, 发现模型在rviz中上下摆动, 观察坐标系发现是odom坐标系不在地图表面,而是在地图的下面,所以tf每发布一次/odom和/map之间的坐标变换就导致轮椅上下摆动一次.

  接下来就是漫长的排除之路,最后排除发现是amcl的问题,然后对比古月的代码发现并没有不同的,最后查阅参数发现 ~base_frame_id 没有配置,他的默认值是base_link,而我的模型应该是base_footprint,所以加入以下就可以解决了

<param name="base_frame_id" value="base_footprint"/>
原文地址:https://www.cnblogs.com/vtas-Yao/p/12825803.html