ros --- base notes ( tf ...)
1. ros 查看 tf
1、view_frames能够监听当前时刻所有通过ROS广播的tf坐标系,并绘制出树状图表示坐标系之间的连接关系保存到离线文件中:
$ rosrun tf view_frames
2、rqt_tf_tree工具
虽然view_frames能够将当前坐标系关系保存在离线文件中,但是无法实时反映坐标关系,所以可以用rqt_tf_tree实时刷新显示坐标系关系:
rosrun rqt_tf_tree rqt_tf_tree
3、tf_echo工具
使用tf_echo工具可以查看两个广播参考系之间的关系。
rosrun tf tf_echo [reference_frame] [target_frame]
如:
rosrun tf tf_echo camera_link imu_link
2. 相机到imu坐标系的变换关系
rosrun tf tf_echo camera_link imu_link
相机到imu坐标系的变换关系为
R
c
b
R_c^b
Rcb :
-
Rotation: in Quaternion [0.000, 0.005, 0.001, 1.000]
in RPY (radian) [0.000, 0.010, 0.003]
in RPY (degree) [0.001, 0.567, 0.146]四元数[0,0,0,1] :虚部为[0,0,0],实部为 1
它对应的 旋转矩阵为: [ 1 0 0 0 1 0 0 0 1 ] \begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix} ⎣⎡100010001⎦⎤
t c b t_c^b tcb :
- Translation: [-0.006, 0.000, -1.165]
四元数构建和转为旋转矩阵
//四元数
Eigen::Quaterniond test_q(1, 0, 0, 0); // 实部在前
cout << "test_q 实部 \n"
<< test_q.w() << "\n"
<< "虚部 \n"
<< test_q.vec() << endl;
std::cout << "四元素 to 旋转矩阵 = \n"
<< test_q.toRotationMatrix() << std::endl;