如何解决如何通过 ROS Moveit 操作 UR5?
我想操纵我的机械臂 (UR5e) 来执行取放任务
所以我在 Ubuntu 18.04 上使用 ROS 和 Moveit,我参考了 Moveit 教程(链接如下)
这是我代码的一部分
const std::vector<double> CAMERA_JOINT = {-1.57899937,-1.63659524,-1.02328654,-2.0525072,1.57446152,0.0};
const std::vector<double> HOME_JOINT = {-3.14159265,-1.01839962,-1.43169359,-2.26212124,1.57376339,0.0};
class MyRobotPlanning
{
private:
const std::string PLANNING_GROUP = "manipulator";
const robot_state::JointModelGrouP* joint_model_group;
moveit::planning_interface::MoveGroupInterface move_group;
moveit::planning_interface::MoveGroupInterface::Plan my_plan;
public:
MyRobotPlanning(): move_group(PLANNING_GROUP)
{
move_group.allowReplanning(true);
move_group.setNumPlanningAttempts(10);
}
void goToGoalPose(geometry_msgs::Pose &pose);
void goToJointState(std::vector<double> setting_values);
};
bool robotMove(capston::FeedBack::Request &req,capston::FeedBack::Response &res)
{
MyRobotPlanning UR;
cout << "ready to sort your tools!!" << endl;
if (req.next_action == 1)
{
UR.goToJointState(CAMERA_JOINT);
res.Feed_back = true;
return true;
}
else if(req.next_action == 2)
{
ros::NodeHandle nh;
ros::ServiceClient client = nh.serviceClient<capston::GraspPose>("grasppose");
capston::GraspPose g_pose;
if (client.call(g_pose))
{
geometry_msgs::Pose goal_pose;
goal_pose.position.x = g_pose.response.grasp_pose.position.x;
goal_pose.position.y = g_pose.response.grasp_pose.position.y;
goal_pose.position.z = g_pose.response.grasp_pose.position.z;
goal_pose.orientation.w = 1.0;
UR.goToGoalPose(goal_pose);
ROS_INFO("Tool Number: %d",(int)g_pose.response.tool_number);
ROS_INFO("tool_pose: [%f,%f,%f]",g_pose.response.grasp_pose.position.x,g_pose.response.grasp_pose.position.y,g_pose.response.grasp_pose.position.z);
return true;
}
else
{
ROS_ERROR("Failed to call service");
return false;
}
}
cout << "This code is not complete";
return true;
}
int main(int argc,char **argv)
{
ros::init(argc,argv,"action_part");
ros::NodeHandle nh;
ros::AsyncSpinner spinner(1);
spinner.start();
ros::ServiceServer server = nh.advertiseService("Feedback",robotMove);
ROS_INFO("Ready srv server!!!");
ros::spin();
return 0;
}
void MyRobotPlanning::goToGoalPose(geometry_msgs::Pose &pose)
{
move_group.setPoseTarget(pose);
ros::Duration(0.5).sleep();
move_group.move();
}
void MyRobotPlanning::goToJointState(std::vector<double> setting_values)
{
move_group.setJointValueTarget(setting_values);
ros::Duration(0.5).sleep();
move_group.move();
}
这既是服务器节点又是客户端节点
所以它从另一个节点接收对象(我们想要抓取的)的 xyz 坐标
并从另一个节点接收 next_action
然后移动我的 UR5e
当它收到服务 Feedback.request.next_action = 1
时,它调用 MyRobotPlanning::goToJointState
函数,我的 UR5e 成功移动到 CAMERA_JOINT
位置,但不再继续
我认为 move_group.move()
中有些东西卡住了,但我不知道为什么
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。