Ros

用rviz理解旋转,及三维坐标系旋转的顺时针、逆时针问题

数学课学过,按逆时针方向旋转出的角度是正,反之,顺时针是负。那如何理解三维坐标系旋转的顺时针、逆时针:用右手坐标系,抽出(固定)旋转轴,按“x->y->z->x->y->...”前进的就是顺时针方向,反之是逆时针。举个例子,z是旋转轴,那抽出Z轴,前、后分别是y、x,即从x转到y的方向就是逆时针方向。设y是旋转轴,那抽出y轴,从z转到x的方向就是逆时针方向。

int test_node(bool& exit)
{
    int argc = 0;
    ros::init(argc, nullptr, "");

    ros::CallbackQueue cbqueue;
    tf2_ros::TransformBroadcaster br(&cbqueue);

    geometry_msgs::TransformStamped transform;
    transform.transform.translation.x = 0;
    transform.transform.translation.y = 0;
    transform.transform.translation.z = 1;

    tf2::Quaternion q;
    q.setRPY(-M_PI/4, -M_PI/6, M_PI/2);
    transform.transform.rotation.x = q.x();
    transform.transform.rotation.y = q.y();
    transform.transform.rotation.z = q.z();
    transform.transform.rotation.w = q.w();

    transform.header.frame_id = "world";
    transform.child_frame_id = "camera";

    int k = 0;
    while (!exit && ros::ok()) {
        transform.header.stamp = ros::Time::now();
        br.sendTransform(transform);
        k ++;
        SDL_Delay(1000);
    }

    return 0;
}

打开rviz,按图1左侧设置。

图1 q.setRPY(-M_PI/4, -M_PI/6, M_PI/2)

 

在图1右侧,红色为x轴,绿色为y轴,蓝色为z轴。粗的(Radius=0.2)代表摄像头坐标系,细的(Radius=0.1)代表世界坐标系。图中经过三次旋转,为便为理解,让依次分析。第一次,只绕Z轴旋转。

图2 q.setRPY(0, 0, M_PI/2);

绕Z轴旋转90度,角度是正表示逆时针方向,即在xoy平面,由x转到y,转90度。

有了绕Z轴旋转90度后的图像后,再绕Y轴旋转-30度。角度是负表示顺时针方向,即在zox平面,由x转到z,转30度。

图3 q.setRPY(0, -M_PI/6, M_PI/2)

有了q.setRPY(0, -M_PI/6, M_PI/2)图像后,再绕x轴旋转-45度。角度是负表示顺时针方向,即在yoz平面,由z转到y,转45度,就得到图1结果。

全部评论: 0

    写评论: