在moveit中添加点云场景

做完标定后,测试避障功能,都是坑

typedef pcl::PointXYZRGB PointT;
pcl::transformPointCloud(*cloud_in,*cloud,cam2rb);
pcl::copyPointCloud(*cloud_in,*cloud);
pcl::io::savePCDFileASCII ("cloud1_trans.pcd", *cloud); //pcl::io::savePCDFileBinary("cloud1_trans.pcd", *cloud); 

若以pcl::PointXYZRGB读取pcd文件,copy一份然后保存到硬盘,用pcl_viewer看不到保存的点云
而后以pcl::PointXYZ读取,便可以看到。之前遇到到这个问题,如果pcd文件不含有rgb信息但强行以pcl::PointXYZRGB读取会自动赋值rgb为黑色(0, 0, 0),而pcl_viewer背景为黑色,所以看不到任何点云。but这次我读取的是带有rgb信息的pcd啊…
这是小插曲,后面开始踩坑


坑一

方法:moveit自带的MotionPlanning可以直接import file

import file
试了下不能直接导入.pcd文件,但是可以直接导入.ply文件,所以直接运用
pcl::transformPointCloud(*cloud_in,*cloud,cam2rb);
得到基于机械臂base的点云,然后直接通过终端命令

pcl_pcd2ply xxx.pcd  xxx.ply

运行打开rviz

roslaunch ur3_moveit_config moveit_rviz.launch config:=true

import网上的standford bunny,效果如图:
bunny
import刚才生成的xxx.ply文件,报错如下:

eigen: too many iterations in Jacobi transform.
rviz: /build/ogre-1.9-mqY1wq/ogre-1.9-1.9.0+dfsg1/OgreMain/include/OgreAxisAlignedBox.h:252void Ogre::AxisAlignedBox<
  • 1
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
可以使用MoveIt提供的Python API将点云转换为场景(Scene)。以下是一个简单的示例代码: ```python import rospy from geometry_msgs.msg import PoseStamped from moveit_msgs.msg import PlanningScene, ObjectColor from moveit_python import PlanningSceneInterface from sensor_msgs.msg import PointCloud2 import sensor_msgs.point_cloud2 as pc2 def pointcloud_to_scene_callback(cloud_msg): # Convert point cloud message to a list of points point_list = [] for point in pc2.read_points(cloud_msg, skip_nans=True): point_list.append(point) # Create a PlanningScene object scene = PlanningScene() # Set the ID of the PlanningScene object scene.id = "my_scene" # Set the frame ID of the PlanningScene object scene.robot_state.attached_collision_objects[0].object.header.frame_id = "base_link" # Create an object in the PlanningScene object_pose = PoseStamped() object_pose.header.frame_id = "base_link" object_pose.pose.position.x = 0.5 object_pose.pose.position.y = 0.0 object_pose.pose.position.z = 0.5 object_pose.pose.orientation.w = 1.0 object_color = ObjectColor() object_color.id = "my_object" object_color.color.r = 1.0 object_color.color.g = 0.0 object_color.color.b = 0.0 object_color.color.a = 1.0 scene.world.collision_objects.append(PlanningSceneInterface.make_box("my_object", object_pose, size=(0.1, 0.1, 0.1))) scene.object_colors.append(object_color) # Publish the PlanningScene planning_scene_publisher.publish(scene) if __name__ == "__main__": rospy.init_node("pointcloud_to_scene_node") # Create a PlanningSceneInterface object planning_scene_interface = PlanningSceneInterface() # Create a PlanningScenePublisher object planning_scene_publisher = rospy.Publisher("/planning_scene", PlanningScene, queue_size=1) # Subscribe to the point cloud topic pointcloud_subscriber = rospy.Subscriber("/camera/depth/color/points", PointCloud2, pointcloud_to_scene_callback) rospy.spin() ``` 这个示例代码,我们定义了一个名为`pointcloud_to_scene_callback`的回调函数,它将传感器点云消息转换为场景(Scene)。在这个函数,我们首先将点云消息转换为一个点列表,然后创建一个PlanningScene对象,设置其ID和Frame ID,并创建一个对象在场景。最后,我们将PlanningScene发布到`/planning_scene`话题。 这个示例代码还使用了`PlanningSceneInterface`类,它是MoveIt提供的Python API,可以用于在PlanningScene添加或删除物体。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值