创建功能包

cd ~/ur_ws/src# 创建功能包 control_robot
catkin_create_pkg control_robot std_msgs rospy roscpproscd control_robot# 新建scripts文件夹(用来放置python程序)
mkdir scripts# 新建.py文件
touch demo.py# 将.py文件变为可执行文件
sudo chmod +x talker.py

注意:

  • python的程序执行前,要先设置为可执行文件
sudo chmod +x [文件名.py]
  • 更重要的一点,在.py文件的第一行要有:
#!/usr/bin/env python

02 一些参考代码

2.1 代码1(python)

这个是可以正常使用

#!/usr/bin/env python# https://www.guyuehome.com/22221import rospy
import moveit_commanderrospy.init_node('grasp_object')
arm = moveit_commander.MoveGroupCommander("manipulator")
# grp = moveit_commander.MoveGroupCommander("gripper")# 表示方式1
arm.set_named_target('up')
arm.go(wait=True)# 表示方式2
arm.set_joint_value_target([-0.21957805043352518, -1.097296859939564, 1.8945345194815335,-2.366067038969164, -1.571228181260084, -1.0061550793898952])
arm.go(wait=True)# 表示方式3
pose = arm.get_current_pose().pose
pose.position.z -= 0.05
arm.set_pose_target(pose)
arm.go(wait=True)# 设置手抓
# grp.set_named_target('close')
# grp.go(wait=True)pose = arm.get_current_pose().pose
pose.position.z += 0.05
arm.set_pose_target(pose)
arm.go(wait=True)

2.2 代码2(python)

原代码rviz在不停的动,但是停止后不动,gazebo不动,说运动规划失败,所以做了修改

#!/usr/bin/env python
# -*- coding: utf-8 -*-# https://blog.csdn.net/weixin_45839124/article/details/106801986import rospy, sys
import moveit_commander
from moveit_commander import MoveGroupCommander
from geometry_msgs.msg import Pose
from copy import deepcopyclass MoveItCartesianDemo:def __init__(self):# 初始化move_group的APImoveit_commander.roscpp_initialize(sys.argv)# 初始化ROS节点rospy.init_node('moveit_cartesian_demo', anonymous=True)# 是否需要使用笛卡尔空间的运动规划,获取参数,如果没有设置,则默认为True,即走直线cartesian = rospy.get_param('~cartesian', True)# 初始化需要使用move group控制的机械臂中的arm grouparm = MoveGroupCommander('manipulator')# 当运动规划失败后,允许重新规划arm.allow_replanning(True)# 设置目标位置所使用的参考坐标系arm.set_pose_reference_frame('base_link')# 设置位置(单位:米)和姿态(单位:弧度)的允许误差arm.set_goal_position_tolerance(0.001)arm.set_goal_orientation_tolerance(0.001)# 设置允许的最大速度和加速度arm.set_max_acceleration_scaling_factor(0.5)arm.set_max_velocity_scaling_factor(0.5)# 获取终端link的名称end_effector_link = arm.get_end_effector_link()# 控制机械臂先回到初始化位置arm.set_named_target('home')arm.go()rospy.sleep(1)# 获取当前位姿数据为机械臂运动的起始位姿start_pose = arm.get_current_pose(end_effector_link).pose# 设置机器臂当前的状态作为运动初始状态arm.set_start_state_to_current_state()# 控制机械臂先回到预设位置arm.set_named_target('up')arm.go()rospy.sleep(1)# 关闭并退出moveitmoveit_commander.roscpp_shutdown()moveit_commander.os._exit(0)if __name__ == "__main__":try:MoveItCartesianDemo()except rospy.ROSInterruptException:pass

2.3 代码3(c++)

// https://blog.csdn.net/weixin_39312052/article/details/88130730
#include <moveit/move_group_interface/move_group_interface.h>
#include <moveit/planning_scene_interface/planning_scene_interface.h>#include <moveit_msgs/DisplayRobotState.h>
#include <moveit_msgs/DisplayTrajectory.h>
#include <moveit_msgs/AttachedCollisionObject.h>
#include <moveit_msgs/CollisionObject.h> int main(int argc, char **argv)
{ros::init(argc, argv, "movo_moveit");ros::NodeHandle node_handle; ros::AsyncSpinner spinner(1);spinner.start();moveit::planning_interface::MoveGroupInterface group("manipulator");//ur3对应moveit中选择的规划部分// 设置发送的数据,对应于moveit中的拖拽geometry_msgs::Pose target_pose1;target_pose1.orientation.x= 0.00196463;target_pose1.orientation.y = 0.7072;target_pose1.orientation.z = 0.707008;target_pose1.orientation.w = -0.00225032;target_pose1.position.x = 0.428326;target_pose1.position.y = 0.257828;target_pose1.position.z = 0.307195;group.setPoseTarget(target_pose1);group.setMaxVelocityScalingFactor(0.02);// 进行运动规划,计算机器人移动到目标的运动轨迹,对应moveit中的plan按钮moveit::planning_interface::MoveGroupInterface::Plan my_plan;bool success = group.plan(my_plan)== moveit::planning_interface::MoveItErrorCode::SUCCESS;;ROS_INFO("Visualizing plan 1 (pose goal) %s",success?"":"FAILED");   //让机械臂按照规划的轨迹开始运动,对应moveit中的execute。if(success)group.execute(my_plan);///第二个位置
geometry_msgs::Pose target_pose2;target_pose2.orientation.x= -0.00202662520084;target_pose2.orientation.y = -0.706992052889;target_pose2.orientation.z = -0.707215193629;target_pose2.orientation.w = 0.00219085420338;target_pose2.position.x =0.389998894713;target_pose2.position.y =0.31251544014;target_pose2.position.z = 0.361921853036;group.setPoseTarget(target_pose2);group.setMaxVelocityScalingFactor(0.02);// moveit::planning_interface::MoveGroupInterface::Plan my_plan;// 进行运动规划,计算机器人移动到目标的运动轨迹,对应moveit中的plan按钮moveit::planning_interface::MoveGroupInterface::Plan my_plan_1;
//bool success = (ptr_group->plan(my_plan_1) == moveit::planning_interface::MoveItErrorCode::SUCCESS;bool success1 = group.plan(my_plan_1)== moveit::planning_interface::MoveItErrorCode::SUCCESS;;ROS_INFO("Visualizing plan 1 (pose goal) %s",success?"":"FAILED");   //让机械臂按照规划的轨迹开始运动,对应moveit中的execute。if(success1)group.execute(my_plan_1);
// 第三个位置
geometry_msgs::Pose target_pose3;target_pose3.orientation.x= 0.00196463;target_pose3.orientation.y = 0.7072;target_pose3.orientation.z = 0.707008;target_pose3.orientation.w = -0.00225032;target_pose3.position.x = 0.428326;target_pose3.position.y = 0.257828;target_pose3.position.z = 0.307195;group.setPoseTarget(target_pose3);group.setMaxVelocityScalingFactor(0.01);// 进行运动规划,计算机器人移动到目标的运动轨迹,对应moveit中的plan按钮moveit::planning_interface::MoveGroupInterface::Plan my_plan_2;
//bool success = (ptr_group->plan(my_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS;bool success2 = group.plan(my_plan_2)== moveit::planning_interface::MoveItErrorCode::SUCCESS;;ROS_INFO("Visualizing plan 1 (pose goal) %s",success?"":"FAILED");   //让机械臂按照规划的轨迹开始运动,对应moveit中的execute。if(success2)group.execute(my_plan_2);ros::shutdown(); return 0;
}

每次修改后,都要catkin_make
运行

rosrun control_robot demo_node

03 报错及解决

问题1 /usr/bin/env: “python\r”: 没有那个文件或目录

guyue@guyue:~$ rosrun control_robot demo1.py
/usr/bin/env: "python\r": 没有那个文件或目录

解决:

这可能是因为这是在windows下创建的txt文件,然后另存为的.py文件。
可以像下面的链接一样修改,也可以touch新建一个.py文件,然后把原文件的东西复制进去。
参考:https://blog.csdn.net/qq_24894159/article/details/83957605

问题2 Kinematics solver doesn’t support

启动rviz的时候报错:

[ WARN] [1626783917.175885562, 69.111000000]: Kinematics solver doesn't support #attempts anymore, but only a timeout.
Please remove the parameter '/robot_description_kinematics/manipulator/kinematics_solver_attempts' from your configuration.

  • 参考:https://github.com/ros-planning/moveit/issues/1642
    这个一个弃用警告,忽略即可

问题3 Waiting for server

guyue@guyue:~$ rosrun control_robot demo.py
Waiting for server at /scaled_pos_joint_traj_controller/follow_joint_trajectory
[FATAL] [1626788950.130852, 875.302000]: Did not find trajectory server. Exiting.
guyue@guyue:~$ rosrun control_robot demo.py
Waiting for server at /pos_joint_traj_controller/follow_joint_trajectory
[FATAL] [1626789377.320829, 1301.956000]: Did not find trajectory server. Exiting.

问题4 The dependency target does not exist.

CMake Error at control_robot/CMakeLists.txt:155 (add_dependencies):The dependency target "control_robot_generate_messages_cpp" of target"movo_moveit" does not exist.

  • 解决
    修改CMakeList.txt,加入下面这些:
add_executable(demo_node src/demo.cpp)target_link_libraries(demo_node ${catkin_LIBRARIES})

问题5 moveit/move_group_interface/move_group.h: 没有那个文件或目录

在运行c++程序时报错

fatal error: moveit/move_group_interface/move_group.h: 没有那个文件或目录#include <moveit/move_group_interface/move_group.h>

  • 解决
    CmakeList.txt里:
find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgsmoveit_ros_planning_interfacemoveit_ros_move_group
)

cpp文件里

// #include <moveit/move_group_interface/move_group.h> 改为
#include <moveit/move_group_interface/move_group_interface.h>

问题6 ‘MoveGroup’ is not a member of ‘moveit::planning_interface’

在运行c++程序时报错

 error: ‘MoveGroup’ is not a member of ‘moveit::planning_interface’
  • 解决
// moveit::planning_interface::MoveGroup group("manipulator");//ur5对应moveit中选择的规划部分
// 改为
moveit::planning_interface::MoveGroupInterface group("manipulator");//ur5对应moveit中选择的规划部分

上面这么多错误,就是搜索,然后把所有的MoveGroup 改为MoveGroupInterface

问题7 No motion plan found. No execution attempted.

[ WARN] [1626940425.124303441, 78.920000000]: Fail: ABORTED: No motion plan found. No execution attempted.
  • 换个位置即可
    参考:https://blog.csdn.net/weixin_45462252/article/details/103856440

UR机械臂学习(7-2):MoveIt简单编程实现机械臂运动——一些参考代码和遇到的问题相关推荐

  1. Sawyer机械臂学习系列之Moveit!配置

    Sawyer机械臂学习系列之Moveit!配置 前言 1.Sawyer SDK安装及配置 2.Moveit!安装 3.Sawyer机械臂Moveit!配置 4.查看配置结果 前言 1.Sawyer S ...

  2. UR机械臂学习(7-1):MoveIt简单编程实现机械臂运动(正逆运动学)

    主要参考: MoveIt编程实现关节空间机械臂运动(正运动学) https://blog.csdn.net/zzu_seu/article/details/90611186 MoveIt编程实现关节空 ...

  3. UR机械臂学习(8):Python实现机械臂运动控制(不使用MoveIt)

    以下是在gazebo仿真中使用,如果是控制真实机械臂,只需要修改订阅的话题即可 后期肯定会自己进行轨迹算法规划,用moveit的话想要更换算法太麻烦,所以尝试自己写程序不通过moveit来控制机械臂. ...

  4. UR机械臂学习(5-1):驱动真实机械臂准备工作——示教器配置

    在使用Universal_Robots_ROS_Driver驱动真实机械臂前,需要在示教器上安装urcap 版本说明 使用的版本是 Ubuntu18.04 + ROS melodic + UR3(CB ...

  5. UR机械臂学习(5-2):使用Universal_Robots_ROS_Driver驱动真实机械臂

    使用的版本是 Ubuntu18.04 + ROS melodic + UR3(CB3.12) 因为后续需要使用手控器,手控器的驱动需要在Ubuntu18.04下才可以使用. 这篇文章是电脑上的设置,关 ...

  6. UR机械臂仿真和用上位机编程控制

    UR机械臂仿真和用上位机编程控制 在没有实物UR机械臂时怎么办,优傲提供了仿真工具可以满足开发者需求,这样也减少了实际操作机械臂时的麻烦. 需要下载和安装的软件 虚拟机 使用VMware是不错的选择, ...

  7. 使用 MoveIt 控制自己的真实机械臂【3】——优化轨迹发给真实机械臂执行

    上一篇文章中,使用 MoveIt 控制自己的真实机械臂[2]--编写 action server 端代码,已经实现了 action server 端代码,并且拿到了 MoveIt 规划的轨迹数据.当然 ...

  8. 机械臂学习——舵机的速度控制、坐标变换、DH模型、正运动学解、逆运动学解

    机械臂学习 文章目录 机械臂学习 前言 一.舵机的速度控制 1.舵机概述 2.代码实现 二.机械臂的坐标变换 1.坐标变换 2.坐标的几何概述 三.DH模型和正运动学解 四.逆运动学解 1.逆运动学几 ...

  9. 机械臂学习——标准DH法和改进MDH法建模法对比学习

    D-H法机械臂建模 D-H建模方法是由D和H两个人提出的,是用于机器人运动学上的建模方法,该方法是在每个连杆上建立一个坐标系,通过齐次变换来实现两个连杆上的坐标变换. 通过依次的变换最终可以推导处末端 ...

最新文章

  1. 领域驱动设计门槛很高,没有深厚的面向对象编码能力很难实践成功
  2. 纯脚本搞掂DataGrid表表头不动,表身滚动
  3. python学习之路-第七天-python面向对象编程简介
  4. .NET Core Run On Docker By Kubernetes 系列文章汇总
  5. Springboot整合缓存
  6. pyinstaller下载_《快速掌握PyQt5》第二十五章 Pyinstaller打包
  7. 图像匹配得到精确的旋转角度
  8. C语言,函数调用使用方法
  9. matlab处理图像的报告,matlab图像处理的 毕业论文中期考核报告怎么写
  10. c语言中罗马字母数字,罗马数字转整数C语言实现
  11. js Tree(梅花雪)最简单的例子(来字MEIZZ)
  12. wordpress入门主题_设置和运行WordPress网站的终极入门指南
  13. 一文读懂什么是EPP、EDR、CWPP、HIDS及业内主流产品
  14. addon游戏_addon_game_mode游戏基本情况设置
  15. uni-app上传图片到腾讯云
  16. oracle是ascii码,ascii码chr(9),chr(10),chr(13)在oracle中的用法
  17. Java实现多重继承
  18. 如何将Word转化为Markdown文本
  19. Linux系统设置命令大全
  20. sr550服务器配置硬盘,【联想SR550配置】联想SR5502颗服务器配置-ZOL中关村在线

热门文章

  1. Python画箱型图之seaborn
  2. html二级域名,免费二级域名申请
  3. Java基础二十二:函数式接口介绍,函数式接口作为方法参数、返回值,Supplier接口、Consumer接口、Predicate接口、Function接口基本介绍及其案例小练习
  4. 高通410随身WiFi之格行SP970系列刷机教程
  5. 装了激光雷达的iPad Pro,还能用鼠标了:苹果新键盘、新iPad Pro、新MacBook Air来了
  6. python输入随机的口算算式_小学生家长的福利来啦--利用EXCEL随机生成口算题目...
  7. 一、Echarts图表之X轴(xAxios)与Y轴(yAxios)配置项大全
  8. 【问题】yocto学习:ERROR: Execution of event handler ‘sstate_eventhandler2‘ failed
  9. fairmot_example
  10. Kinect DK相机与Realsense D435i相机记录