关于该点可查看前辈博客。本文对其中不一致的地方进行记录,但为了查阅方便,该文也记录了完整的操作步骤。

1、demo.launch文件中参数fake_execution的值改为false

  <arg name="fake_execution" value="false"/>

2、修改moveit_controller_manager参数

根据前辈博客中描述为,move_group.launch文件中,moveit_controller_manager在选择参数值时,“unless”前面那个velue值要修改,写一个自己机器人名称作为前缀。但如果已经是自己的机器人名称,可以不用修改。

  <arg name="moveit_controller_manager" value="csrobot" unless="$(arg fake_execution)"/>

3、修改csrobot_moveit_controller_manager.launch.xml文件

        根据前辈博客中描述,修改如下。

<launch><!-- Set the param that trajectory_execution_manager needs to find the controller plugin --><arg name="moveit_controller_manager" default="moveit_simple_controller_manager/MoveItSimpleControllerManager" /><param name="moveit_controller_manager" value="$(arg moveit_controller_manager)"/><arg name="use_controller_manager" default="true" /><param name="use_controller_manager" value="$(arg use_controller_manager)" /><!-- load controller_list --><rosparam file="$(find csrobot_moveit_config)/config/controllers.yaml"/></launch>

但需要补充的是,在该版本中运行demo.launch文件会报如下错误。

RLException: unused args [execution_type] for include of [/home/lee/CSRobot/src/csrobot_moveit_config/launch/csrobot_moveit_controller_manager.launch.xml]
The traceback for the exception was written to the log file

解决该错误可参考连接。需要在csrobot_moveit_controller_manager.launch.xml中声明excution_type。即csrobot_moveit_controller_manager.launch.xml内容如下。

<launch><!-- loads moveit_controller_manager on the parameter server which is taken as argumentif no argument is passed, moveit_simple_controller_manager will be set --><arg name="moveit_controller_manager" default="moveit_simple_controller_manager/MoveItSimpleControllerManager" /><param name="moveit_controller_manager" value="$(arg moveit_controller_manager)"/><arg name="execution_type" /><arg name="use_controller_manager" default="true" /><param name="use_controller_manager" value="$(arg use_controller_manager)" /><!-- loads ros_controllers to the param server --><rosparam file="$(find csrobot_moveit_config)/config/ros_controllers.yaml"/>
</launch>

4、创建controllers.yaml配置文件

该版本中已经生成由ros_controllers.yaml文件,csrobot_moveit_controller_manager.launch.xml文件中也是调用的这个文件,这里不用重新生成

5、解决真实机械臂与joint_states_publisher消息冲突的问题

根据前辈博文中描述,当控制真实机械臂时,moveit的配置文件中,demo.launch文件中关于joint_states_publisher的一段代码需要注释掉,因为该程序也在发布机械臂关节状态,而且是一个模拟的状态,与真实机械臂状态是不相符的,若不注释掉该代码,rviz下显示的机械臂状态总是在不停的跳变,将原本的注释,使用真实的传感器发布的/joint_states来控制。

  <!-- We do not have a robot connected, so publish fake joint states --><node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"><param name="/use_gui" value="$(arg use_gui)"/><!--rosparam param="/source_list">[/move_group/fake_controller_joint_states]</rosparam --><rosparam param="/source_list">[/joint_states]</rosparam ></node>

6、解决真实机械臂轨迹执行时间超时的问题

根据前辈博文中描述,moveit配置文件中有几个参数还需要添加上,否则后续真实机械臂执行轨迹时会报超时的错误。需要在move_group.launch文件中增加几个参数,来延长允许执行轨迹的时间。 找到 所对应的标签组,在其中加入以下参数。

<param name="trajectory_execution/allowed_execution_duration_scaling" value="6"/>      //允许轨迹执行时间的一个放大倍数,可以根据实际情况自行修改<param name="trajectory_execution/allowed_goal_duration_margin" value="0.5"/>            //超时的一个百分比范围或者加入下面的参数,直接关掉监视轨迹执行状况的一个monitoring<param name="trajectory_execution/execution_duration_monitoring" value="false"/>

7、创建一个新的功能包

catkin_create_pkg trajectory_server roscpp std_msgs actionlin actionlib_msgs

然后在该功能包src文件夹下写入cpp文件,内容如前辈博文中所示。

#include <ros/ros.h>
#include <iostream>
#include <actionlib/server/simple_action_server.h>
#include <control_msgs/FollowJointTrajectoryAction.h>
#include <std_msgs/Float32MultiArray.h>#include <sstream>
#include <stdlib.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <signal.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#include <pthread.h>using namespace std;typedef actionlib::SimpleActionServer<control_msgs::FollowJointTrajectoryAction> Server;std::basic_string<char> joint1;
std::basic_string<char> joint2;
std::basic_string<char> joint3;
std::basic_string<char> joint4;
std::basic_string<char> joint5;
std::basic_string<char> joint6;/* 目标位置 */
double cp1;
double cp2;
double cp3;
double cp4;
double cp5;
double cp6;/* 目标位置 */
double tp1;
double tp2;
double tp3;
double tp4;
double tp5;
double tp6;/* 收到action的goal后调用的回调函数 */
void execute(const control_msgs::FollowJointTrajectoryGoalConstPtr& goal, Server* as)
{//ros::Rate rate(1);joint1 = goal->trajectory.joint_names[0];joint2 = goal->trajectory.joint_names[1];joint3 = goal->trajectory.joint_names[2];joint4 = goal->trajectory.joint_names[3];joint5 = goal->trajectory.joint_names[4];joint6 = goal->trajectory.joint_names[5];cp1 = goal->trajectory.points[0].positions[0];cp2 = goal->trajectory.points[0].positions[1];cp3 = goal->trajectory.points[0].positions[2];cp4 = goal->trajectory.points[0].positions[3];cp5 = goal->trajectory.points[0].positions[4];cp6 = goal->trajectory.points[0].positions[5];tp1 = goal->trajectory.points[1].positions[0];tp2 = goal->trajectory.points[1].positions[1];tp3 = goal->trajectory.points[1].positions[2];tp4 = goal->trajectory.points[1].positions[3];tp5 = goal->trajectory.points[1].positions[4];tp6 = goal->trajectory.points[1].positions[5];// 并且按照1hz的频率发布进度feedback// control_msgs::FollowJointTrajectoryFeedback feedback;//feedback = NULL;//as->publishFeedback(feedback);// 当action完成后,向客户端返回结果//printf("goal=[%f,%f,%f,%f,%f,%f]\n",tp1,tp2,tp3,tp4,tp5,tp6);ROS_INFO("Recieve action successful!");as->setSucceeded();
}/* 主函数主要用于动作订阅和套接字通信 */
int main(int argc, char** argv)
{ros::init(argc, argv, "trajectory_server");ros::NodeHandle nh;// 定义一个服务器Server server(nh, "csrobot/follow_joint_trajectory", boost::bind(&execute, _1, &server), false);// 服务器开始运行server.start();ros::spin();}

8、编译功能包

需要注意的是,用solidworks生成urdf文件时,不要将关节1命名为j1,否则会出现以下编译时会出现以下错误。

/home/lee/ros/urdf_test/src/action_server/src/main.cpp:24:25: error: ‘std::__cxx11::basic_string<char> j1’ redeclared as different kind of symbolstd::basic_string<char> j1;
......
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:218:1: note: previous declaration ‘double j1(double)’__MATHCALL (j1,, (_Mdouble_));

9、查看action内容

这里可查看该博文,注意运行顺序。然后在rviz中拖动末端,然后点击plan&Excute就可以在第三个窗口中显示插补数据,如下图。

参考:

1、https://blog.csdn.net/qq_34935373/article/details/95916111

2、https://blog.csdn.net/qq_45398213/article/details/109631149

ros melodic控制真实机械臂之获取moveit规划插补点相关推荐

  1. ros melodic控制真实机械臂之等周期输出插补点

    在上一节中,通过修改相关配置文件,使moveit能够输出真实的插补点,并可通过 control_msgs::FollowJointTrajectoryGoalConstPtr 获取轨迹信息,并将获取的 ...

  2. ros melodic控制真实机械臂之moveit_setup_assistant配置

    一.通过moveit_setup_assistant进行配置 二.运行配置后的功能包 通过上一篇已经知道如何将三维模型导入到ros系统中,该篇主要记录通过moveit_setup_assistant为 ...

  3. ros melodic控制真实机械臂之urdf模型生成

    目录 一.solidworks及sw_urdf_repoter插件安装 二.在solidworks中为机械臂模型加入坐标系 三.用插件导出urdf模型 四.在ros中验证导出的模型是否成功 如果需要控 ...

  4. ros melodic控制真实机械臂之openmanipulator参考

    目录 一.源码下载及编译 1.相关参考网站 2.创建工作空间及源码下载 二.对openmanipulator进行仿真 前面的一段时间,针对自己的机器人做了模型配置,moveit配置等,但想真正的实现真 ...

  5. ros通过moveit控制真实机械臂

    1.demo.launch文件 在生成的demo.launch文件中,参数fake_execution的值改为false <include file="$(find tk7arm_mo ...

  6. ros kinetic-moveit驱动ur3机械臂------控制真实机械臂并且能动

    ros kinetic-moveit驱动ur3机械臂------控制真实机械臂并且能动 本文工作环境配置: ubuntu16.04.6 ros-kinetic ur3 已验证本教程代码在Ubuntu1 ...

  7. 机器人学习必看系列:如何使用moveit控制真实机械臂?

    大家好,我是你们可爱的小鱼.最近关于moveit相关的问题感觉非常多,毕竟机械臂+视觉的应用的确是非常的火爆,小鱼都想直接开课教机械臂运动规划相关的了. 有的同学问小鱼,怎么使用moveit控制真实机 ...

  8. 通过ROS控制真实机械臂(2)----单轴运动,手柄控制

    创建ROS包,包名redwall_arm ,通过自定义的消息,将手柄的数据发布 msg/ joycontrol.msg,内容如下,分别对应罗技手柄的按钮和遥杆轴. int32 button1 int3 ...

  9. 通过ROS控制真实机械臂(15) --- 视觉抓取之手眼标定

    通过视觉传感器赋予机械臂"眼睛"的功能,配合ATI力和力矩传感器,就可以完成机械臂"手眼"结合的能力,完成视觉抓取过程.目前测试的视觉传感器为 ZED mini ...

最新文章

  1. 【周末阅读】你不得不知道的10大AI赋能行业,你身边都能找到!
  2. UISearchbar placeholder 文本和icon居左 iOS7
  3. [HNOI 2011]数矩形
  4. leetcode算法题--格雷编码
  5. contenttype添加field
  6. thinkphp3 页面跳转外部链接_一文看懂小程序跳转的规则和注意事项
  7. 虚拟世界来自现实世界,同时又促进现实世界
  8. 《相关性准则——大数据时代的高效能之道》一一2.3 数字信息
  9. C#高仿腾讯QQ截图程序
  10. 数据挖掘:探索性数据分析(EDA)(补充)
  11. 专属于程序猿的成语,进来看,进来笑!
  12. Python 输出到文件两种方式
  13. Android 仿美团GridView分页滑动(类似直播礼物列表效果)
  14. python提取图片中的文字自动填表,python提取图片中的文字并生成word文档
  15. 将U盘的图标改成自己喜欢的图案
  16. 论文翻译 | RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds
  17. vscode 网易云音乐插件
  18. 本地项目如何被外网访问(外网穿透工具一——natapp)
  19. 计算机等级证打字每分钟多少字才算合格?
  20. 微信公众号客服系统怎么实现消息提醒,快速回复粉丝留言?

热门文章

  1. webpack4+vue打包简单入门
  2. 【刷算法】LeetCode- 阶乘后的零
  3. Android ConstraintLayout 最新使用小结
  4. 2017CCPC秦皇岛 L题One-Dimensional MazeZOJ3992【模拟】
  5. 加密解密技术基础、PKI及创建私有私有CA
  6. centos6.7 搭建jenkins
  7. jQuery - Ajax解决跨域问题
  8. OpenCV-累计概率霍夫变换cv::HoughLinesP
  9. android 查看gpu频率_借骁龙 855 Plus,聊聊 CPU / GPU 怎样影响手机游戏性能
  10. linux 去掉登陆密码吗,Linux 清除 Windows用户登录密码