我在Answers.ros.org和gazebo.ros.org上问了这个问题,但仍然没有任何答案。我在这里发布问题,希望有人能帮助我。

在我们的机器人中,Kinect可以安装在手臂的侧面,如下面的屏幕快照所示。在Fuerte中运行模拟时,我发现了这种奇怪的行为。正如您在图像上看到的那样,点云与机器人模型不匹配(我们在屏幕截图的左下方看到了手/手臂的局部图像,应该在机器人模型上)。



一旦我将kinect相对于其X轴旋转(使kinect处于水平状态,如第二幅屏幕截图所示),则点云和机器人模型就正确对齐了。



kinect xacro和dae是乌龟机器人中的一个。我只是简单地旋转它们:

<joint name="base_camera_joint" type="fixed">
  <origin  xyz="0.01216 0.1713 0.433"
       rpy="-${M_PI/2} ${M_PI/4} -${M_PI/12}" /> 
  <!-- This -pi/2 in origin rpy is the offending parameter -->

  <parent link="shadowarm_trunk"/>
  <child link="camera_link" />
</joint>


代码可以在github上看到。

任何帮助都将不胜感激!

#1 楼

David Butterworth的回答解决了我的问题!谢谢大卫。


我发现,如果您修改视觉/碰撞网格以使其与关节原点对齐,那么就可以了。
不要做额外的平移/旋转
传感器数据的方向应取决于Gazebo宏,但其中应仅包含平移,并额外旋转两对摄像机框架,并进行2次联合旋转。

我的Gazebo宏基于PR2,但视觉/碰撞网格已按上述方式固定并重新缩放。
最终结果是,任何平移/旋转仅是在head_mount_kinect关节上完成了其他所有操作后,您就可以成功上下或垂直俯仰传感器。

我猜在您的情况下,PointCloud数据实际上位于正确的位置,但是由于网格的错误,视觉模型放置在错误的位置。

评论


$ \ begingroup $
如果这是您问题的答案,那么您可以接受它(甚至是您自己的答案!),并在答案文本的左侧加上对勾标记。
$ \ endgroup $
–卡盘
19年1月2日在20:38