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"/>