Closed Pine-Pine closed 8 months ago
追記:
octomapを任意のエリア (bounding box) のみに生成するように修正.bounding boxの位置は以下のoccupancy_*
パラメータで提議する:
occupancy_frame
: 生成するbounding boxの原点とするframe_id. TFに存在するframe_idであることoccupancy_min_x
, occupancy_max_x
, occupancy_max_y
occupancy_min_y
occupancy_max_z
occupancy_min_z
: occupancy_frame
を原点としたbounding boxの大きさ実機で動作確認できたらdraft解除します.
@nyxrobotics 実機で動作確認取れましたが,ロボットアーム本体のoctomapが除去されない現象が見えましたが,何かこころあたりありますか?
self_filterがcollisionのオフセット情報を含んでいないため処理されるメッシュの位置がずれているのが原因だと思っているのですがデバッグ情報が可視化できておらず確証がありません https://github.com/sbgisen/moveit/blob/322728ee63c5b2cf8f9bfebe81cab97cd4996d20/moveit_ros/perception/depth_image_octomap_updater/src/depth_image_octomap_updater.cpp#L237-L244
このaddMeshesはリンク原点にメッシュ原点が来る動作をしており、link->getCollisionOriginTransforms();
で取れる「リンク原点からメッシュ原点のオフセット」が考慮されていません
depth_self_filter_nodeletはデバッグ用にdepth imageが出るのでわかりやすいです
この点をなんとかしようとして作業していたのが下記ですがaddMeshがいろいろな場所で使われており追いきれませんでした
参考にしてください
https://github.com/sbgisen/moveit/commit/6efb0299a05aa81c8ee820c3bd6a797b3c0bbeec
mapからoctomap_frameへの変換も必要そうです(参考:下記はlink->collisionの変換が足りない)
mesh_filter::MeshHandle DepthImageOctomapUpdater::excludeShape(const shapes::ShapeConstPtr& shape)
{
geometry_msgs::TransformStamped tf_world2octomap;
Eigen::Isometry3d isometry_world2octomap = Eigen::Isometry3d::Identity();
try
{
tf_world2octomap = tf_buffer_->lookupTransform(monitor_->getMapFrame(), monitor_->getOctomapFrame(), ros::Time(0));
isometry_world2octomap = tf2::transformToEigen(tf_world2octomap);
}
catch (tf2::TransformException& ex)
{
isometry_world2octomap = Eigen::Isometry3d::Identity();
}
mesh_filter::MeshHandle h = 0;
if (mesh_filter_)
{
if (shape->type == shapes::MESH)
h = mesh_filter_->addMesh(static_cast<const shapes::Mesh&>(*shape), isometry_world2octomap);
else
{
std::unique_ptr<shapes::Mesh> m(shapes::createMeshFromShape(shape.get()));
if (m)
h = mesh_filter_->addMesh(*m, isometry_world2octomap);
}
}
else
ROS_ERROR_NAMED(LOGNAME, "Mesh filter not yet initialized!");
return h;
}
一応アームキャリブレーションしたURDFを確認してみましたが,キャリブレーション前と変わらずself-meshできていない部分があります.
一旦mesh filterのコミットを外し issueを立てました (#15)