首页 > 编程知识 正文

点云坐标转换,自定义坐标系与世界坐标系互换

时间:2023-05-05 11:32:50 阅读:172835 作者:2511

前言1、基于TF的坐标系变换关系2、点云坐标系变换1、四元数变换为旋转矩阵2、点云变换3、总结实验结果

首先,在再现PoinNetGPD以及整个捕获系统的构筑中,需要在模拟环境中将Kinect_2中得到的点群从照相机坐标系/kinect2_ir_optical_frame传送到世界坐标系/world 因为是用gazebo构筑的模拟环境,所以照相机和world/base_link之间的tf变换是已知的。 记录如下。

另一方面,TF获得坐标系变换关系,首先通过TF获得trans和quat。 指以/world为参照系,从/world到/kinect2_ir_optical_frame所需的平移向量trans和旋转四元数quat。

:得到的quat为xyzw的顺序,一般用作旋转Euler角等操作。

listener=TF.transform listener (get _ transform=falsewhilenotget _ transform 3360 try 3360 trans,quat=listener.listener ) rospy.time(0) #print ) trans,quat ) #quatxyzw(0.842040469131246,# [-0.7071067251356604,0.7071067247627317 0.0002824822165117067 (转换为xyzw # wxyz格式quat _ wxyz [0]=quat [3] quat _ wxyz [1]=quat [0] quat _ wxyz [2] ) 点群p是相对的行向量,所以实际上p’=prt。 (这里我们理解的是,平时处理点的旋转时,点一般是列向量,所以旋转矩阵向左乘以rp,这里是行向量,所以向右乘以。 ) )。

1 .将四元数转换为旋转矩阵defquat2rot(quat_ ) :q=quat_n=np.dot(q ) q,并(q ) ifnNP.Finfo(q.dtype ).EPS : r60 n ) q=np.outer(q ) rot 2) q [ 3,0 ]、q [ 1,3 ]-q [ 2,0 ]、[ q [ 1,2 ]-q [ 3,0 ]、1.0-q [ 1,1 ] 3]q 1(-q,2 ) ]、dype=q.dtype (return rot _ matrix # [ 1.05656190 e-09-1.0000000 e00-1.32679448 e-06 ] # [-9.9999682 e-01.76682 e-01.76661 [ 7.97653505 e-04.32679490 e-06-9.99999682 e-01 ]2.点云变换points _=NP.dot (pot

用python订阅该topic得到点云并变换为numpy后,将其坐标系变换为世界坐标系,然后将numpy变换为点云PointCloud2形式,将/world作为参照坐标系公开

发现两者没有差别,证明上述过程是正确的。

虽然没有什么可总结的,但是有洞的是lookuptransform得到的quaternion是xyzw的形式,所以需要变换。

希望之后配备真正的机械臂(珞石工业机械臂),好好学习一些东西。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。