如何在moveit环境中导入stl文件

moveit官网给的示例中有讲解如何在moveit环境中加入自定义障碍Planning Scene ROS API — moveit_tutorials Noetic documentation (ros-planning.github.io)

但是并没有讲怎么添加stl文件这种,而且moveit的官网不像opencv那种那样对每个函数的讲解特别特别详细,所以可能看起来比较麻烦,我整理了一个用Planning Scene ROS API实现的把stl导入自己的运动规划组中去。

#include <iostream>
#include <ros/ros.h>
#include <moveit/move_group_interface/move_group_interface.h>
#include <geometry_msgs/Pose.h>
#include <tf/LinearMath/Quaternion.h>
#include <moveit/planning_scene_interface/planning_scene_interface.h>
#include <geometric_shapes/shape_operations.h>

using namespace std;

int main(int argc, char **argv) {
    // 初始化节点
    string nodeName = "aubo5_scene_node";
    ros::init(argc, argv, nodeName);
    ros::NodeHandle node;
    ros::AsyncSpinner spinner(1);
    spinner.start();

    moveit::planning_interface::MoveGroupInterface group("cr20");
    moveit::planning_interface::PlanningSceneInterface scene;

    // 加载STL文件并创建网格
    shapes::Mesh* m = shapes::createMeshFromResource("file:///home/robot/场景1.stl");
    shape_msgs::Mesh mesh;
    shapes::ShapeMsg mesh_msg;
    shapes::constructMsgFromShape(m, mesh_msg);
    mesh = boost::get<shape_msgs::Mesh>(mesh_msg);

    // 创建碰撞对象
    moveit_msgs::CollisionObject collision_object;
    collision_object.header.frame_id = group.getPlanningFrame();
    collision_object.id = "my_mesh_object";
    collision_object.meshes.push_back(mesh);

    // 设置对象的位置和姿态
    geometry_msgs::Pose mesh_pose;
    mesh_pose.orientation.w = 1.0;
    mesh_pose.position.x = 0.1;
    mesh_pose.position.y = 0.2;
    mesh_pose.position.z = 0.3;
    collision_object.mesh_poses.push_back(mesh_pose);

    collision_object.operation = collision_object.ADD;

    // 在场景中添加障碍物
    std::vector<moveit_msgs::CollisionObject> collision_objects;
    collision_objects.push_back(collision_object);
    scene.applyCollisionObjects(collision_objects);

    ros::waitForShutdown();
    return 0;
}

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在进行MoveIt配置后,需要在Gazebo仿真环境进行实验,可以按照以下步骤进行: 1. 启动Gazebo仿真环境 使用roslaunch命令启动Gazebo仿真环境,加载机械臂模型和MoveIt配置文件。例如,如果机械臂模型的ROS包名称为my_robot,MoveIt配置文件的名称为my_robot_moveit_config,可以使用以下命令启动仿真环境: ``` roslaunch my_robot_gazebo my_robot_world.launch roslaunch my_robot_moveit_config move_group.launch ``` 2. 运行MoveIt节点 在终端输入以下命令,启动MoveIt的ROS节点: ``` roslaunch my_robot_moveit_config moveit_rviz.launch config:=true ``` 该命令会启动MoveIt的可视化工具,可以用来可视化机械臂的运动规划结果。 3. 进行机械臂运动规划 使用MoveIt的API或者可视化工具,在仿真环境进行机械臂的运动规划。可以手动设置机械臂的起始姿态和目标姿态,然后使用MoveIt的运动规划插件进行运动规划。 4. 执行机械臂运动 在机械臂运动规划完成后,将运动规划结果发送给机械臂控制器,控制机械臂执行运动规划。可以使用以下命令启动机械臂控制器: ``` roslaunch my_robot_moveit_config moveit_planning_execution.launch ``` 该命令会启动机械臂控制器节点,将运动规划结果转换为机械臂的控制命令,并驱动机械臂在仿真环境执行运动。 需要注意的是,在进行实验时需要注意机械臂的安全性,避免机械臂与环境的障碍物发生碰撞。同时,还需要对机械臂的运动规划、控制等方面进行细致的调试,确保机械臂能够准确地执行任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值