【ROS】使用C++编写简单moveit终态位姿控制以及position数据可视化

2023-05-16

1.前言

这几天主要还是在研究用C++编写moveit target pose的例程,中途出现了各种问题,一度怀疑人生,好在现在也算是磕磕碰碰的解决了一点……虽然还是不知道why,不过也是增强了继续学习的信心。

困扰最久的问题是经常出现逆运动学解算结果只有平移,没有旋转,首先,target pose的设置存在一定问题,其次,默认的KDL解算插件确实不给力!后来参考古月大神的解算插件配置,改为TRAC-IK,情况改善了很多,本来想用IKFAST的,但是因为C++11的各种问题,导致make不出来,花式报错,故放弃……

项目上传至github:https://github.com/SCUPRISCILLA/My_ROS_Package/tree/master/crp09_test

2.moveit简单编程

对target pose的控制是通过传递goal话题来实现的,如图所示,其中my_crp09_moveit是编写的CPP文件中定义的,我们还可以通过rostopic echo来查看关节位置状态topic: /joint_states,来进一步处理数据

代码如下:

#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>

#include<iostream>
using namespace std;

//每当修改,都要重新catkin_make
int main(int argc, char **argv)
{
    ros::init(argc, argv, "my_crp09_moveit");
    ros::NodeHandle node_handle;
    ros::AsyncSpinner spinner(1);
    spinner.start();
    sleep(2.0);

    moveit::planning_interface::MoveGroupInterface group("arm");
    //moveit::planning_interface::PlanningSceneInterface planning_scene_interface;

   // ros::Publisher display_publisher  = node_handle.advertise<moveit_msgs::DisplayTrajectory> ("/move_group/display_planned_path", 1, true);
  //  moveit_msgs::DisplayTrajectory display_trajectory;
    ROS_INFO("Reference frame: %s", group.getEndEffectorLink().c_str());

    geometry_msgs::Pose target_pose1;

  
   target_pose1.orientation.x= 0.343915;
    target_pose1.orientation.y = -0.000155354;
    target_pose1.orientation.z = -0.000143756;
    target_pose1.orientation.w = 0.939001;

    target_pose1.position.x = -0.0656481;
    target_pose1.position.y = 0.415693;
    target_pose1.position.z = 1.04234;

    group.setPoseTarget(target_pose1);

    moveit::planning_interface::MoveGroupInterface::Plan my_plan;
    moveit::planning_interface::MoveItErrorCode success = group.plan(my_plan);
    ROS_INFO("Visualizing plan 1 (pose goal) %s", success ? "WHY SUCCESS" : "FUCKING FALLED");
    if(success)
      group.execute(my_plan);
    else
      cout << "falled"<<endl;
    sleep(5.0);
    ros::shutdown();
}

该CPP文件也可以作为一个模板使用。通过修改orientation和position参数来设置不同的target pose,然后使用group.execute执行。

运行结果:

机械臂自行规划运动到target pose

3.打印joint position

使用echo > 将joint position数据打印到指定文件中,然后使用Python matplot进行可视化处理

代码为:

import numpy as np
import matplotlib.pyplot as plt
import re

# read files
origin_file = open('joint_states.txt','r')
position_file = open('position_data.txt','w')
lines = origin_file.readlines()
origin_file.close()

# get position datas and put into a list "data"
data = []
for line in lines:
   if "position" in line:
		position_file.write(line)
		data.append(re.findall(r"\-?\d+\.?\d*",line))
position_file.close()
print('All the position data number is:', len(data))

# get each joints' position data
joint1_postion = []
joint2_postion = []
joint3_postion = []
joint4_postion = []
joint5_postion = []
joint6_postion = []
finger_joint1 = []
finger_joint2 = []
for i in range(len(data)):  # i is from 0 to data number -1
	joint1_postion.append(float(data[i][0]))
	joint2_postion.append(float(data[i][1]))
	joint3_postion.append(float(data[i][2]))
	joint4_postion.append(float(data[i][3]))
	joint5_postion.append(float(data[i][4]))
	joint6_postion.append(float(data[i][5]))
	finger_joint1.append(float(data[i][6]))
	finger_joint2.append(float(data[i][7]))

# PLOT A FIGURE BY MATPLOTLIB
t = np.linspace(0, 10, len(data))
plt.xlabel("move time t") 
plt.ylabel("joint postion arc") 

plt.subplot(2,3,1)
plt.title("joint 1") 
plt.plot(t, joint1_postion)

plt.subplot(2,3,2)
plt.title("joint 2") 
plt.plot(t, joint2_postion)

plt.subplot(2,3,3)
plt.title("joint 3") 
plt.plot(t, joint3_postion)

plt.subplot(2,3,4)
plt.title("joint 4") 
plt.plot(t, joint4_postion)

plt.subplot(2,3,5)
plt.title("joint 5") 
plt.plot(t, joint5_postion)

plt.subplot(2,3,6)
plt.title("joint 6") 
plt.plot(t, joint6_postion)

plt.show()

运行结果为:

中途有很奇怪抖动,大概是电机启动时的啥啥啥?

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【ROS】使用C++编写简单moveit终态位姿控制以及position数据可视化 的相关文章

  • Python利用Moivepy给视频添加背景音乐源代码

    usr bin env python span class token property coding span span class token punctuation span utf 8 span class token string
  • 串口参数详解:波特率,数据位,停止位,奇偶校验位

    串口通讯 9600波特率 数据格式是8 N 1 请问一秒可以传输多少个字节的数据 xff1f 9600 xff0c n 8 1 实际上 xff0c 在发送一个字节的时候 xff0c 除了需要发送8BIT数据外 xff0c 还需要发送1bit
  • apt-get update更新失败问题

    本文借鉴自https blog csdn net weixin 43976343 article details 86326215 遇到错误 Err 1 http mirrors aliyun com ubuntu xenial InRel
  • 知识管理——学习篇

    你的知识需要管理 田志刚 2009年11月 现在 xff0c 根据本书的理念 xff0c 你的使命不仅仅是获取该书的知识 xff08 获取什么 xff1f 他的前瞻性思考判断 xff0c 人家10年前有这种知识管理预见和意识 xff01 作
  • 文件权限_前进的火车_新浪博客

    1 文件权限简介 linux文件权限有9个 xff0c 三组表示 xff0c owner group others 每组又包含r xff0c w xff0c x三种状态 2 根据数字修改权限 r xff0c w xff0c x三种权限通过数
  • python实现爬取网页将特定信息存入excel

    python爬虫爬取网页将特定信息存入excel 背景 1 最近遇到一个需要进行数据分析的项目 xff0c 主要是将网页上需要的信息 xff0c 进行归拢 xff0c 分析 当信息量少的时候 xff0c 采用复制粘贴 excel分析还比较快
  • ESP32实验-自建web服务器配网01

    目标 通过esp32自建web服务器实现配网 具体来说 xff1a 1 esp32上电 xff0c 手机 电脑 平板连上esp32的wifi 2 用浏览器访问esp32的网址esp32默认是192 168 4 1 3 在web页面中输入需要
  • ESP实验02-读取DS1307&eerom34c32

    1 模块介绍 本实验主要用到两个模块 esp32 tinyRTC 模块的图片如下所示 xff1a esp32模块型号为ESP32Devkitc v4 xff0c 是启明云端官方的开发板 与乐鑫官方的完全一致 xff0c 引脚顺序 xff0c
  • stm32f407 RTC不更新问题排查

    1 问题 在做stm32f407rtc实验时 xff0c 代码是用cubemx生成的 xff0c 通过串口打印出时间值 xff0c 1s打印一次 但是结果与料想中的不一致 发现打印出来的值一直不更新 按下复位键 xff0c 后时间会更新一次
  • GD32 can发送报no mailbox 故障

    1 问题描述 在使用GD32can通信时 xff0c 发现如果can线断开了 xff0c 再把can线连上 xff0c 用can分析仪监测不到总线数据 xff0c 调试后发现can发送没有成功 xff0c 通过串口打印出错误 xff0c 显
  • windows配置c语言编译系统-wingw gcc cmake

    前言 笔者在做嵌入式mcu编程的时候 xff0c 有时候想要验证一下部分代码的功能 xff0c 需要先编译成bin文件 xff0c 然后烧录到mcu内执行 每次编译烧录运行耗时较久 于是想到是不是可以在电脑上配置一个c的编译环境 xff0c
  • MacOS Python安装which is required to install pyproject.toml-based projects解决办法

    问题 使用pip安装的时候 xff0c 很多时候报错 xff1a which is required to install pyproject toml based project 使用pip instll pyproject toml无法
  • 自动以版本号命名keil生成的bin文件

    0 前言 在做项目中一直遇到一个小问题 一直也没管 xff0c 最近花了点时间处理了 xff0c 效果还不错 问题是这样的 xff1a 每次编译后的生成的bin文件需要给客户 xff0c 烧录到设备里进行更新 每次生成的bin文件都是固定的
  • protobuf编码格式解析

    示例 假如定义一个如下的protobuf类型 message Person span class token punctuation span required string user name span class token opera
  • 初探STM32掉电复位PDR

    STM32F407 144脚封装的第143脚PDR xff0c 一直没有关注过 xff0c 板子上是直接对其悬空处理 xff0c 悬空到底对系统有没有什么影响 xff0c 查看了STM32F4系列的技术手册也没有发祥有相关说明 只是说明了P
  • keil中自定义输出信息到编译窗口

    写程序的过程中 xff0c 会有不少的条件编译命令 xff0c 但是条件编译过多会导致忘记了定义那些条件 xff0c 排查起来也非常麻烦 xff0c 有没有什么好的方法来查找是否是否有该定义呢 xff1f 答案是有的 xff1a 那就 wa
  • STM32F4 FPU简单设置

    第一步 xff1a 在stm32f4xx h中定义宏 FPU PRESENT FPU USED span class hljs preprocessor span class hljs keyword define span CM4 REV
  • PX4飞控bootloader编译

    以前在使用pix4中 xff0c bootloader是在出厂的时候默认烧写好的 xff0c 我们直接可以通过USB更新固件 xff0c 但是要做二次开发过程中 xff0c 我们需要编译代码并进行烧写 xff0c 我们以前用的编译命令是默认
  • 如何转行游戏行业及我眼中的理想游戏开发团队

    前置内容 xff1a 很久没有写文章啦 xff0c 今天就来继续和大家聊一聊关于游戏制作的一些东西 今天主要聊两个方面 xff0c 一个是其他行业转游戏行业的一些注意事项以及需要具备的东西 xff1b 第二是和大家聊一聊我心目中理想的游戏开
  • W: GPG error: ...the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8

    在debian10上执行命令 xff1a sudo apt get update 更新清华源时 xff0c 报错如下 xff1a Cannot initiate the connection to mirrors tuna tsinghua

随机推荐

  • 四旋翼无人机的动力学模型

    1 四旋翼无人机UAV unmanned aerial vehicles 简介 四旋翼无人机是一种能够垂直起降的非共轴的多旋翼飞行器 xff0c 同一对角线上的一组旋翼采用逆时针旋转 xff0c 另一组旋翼采用顺时针旋转 xff0c 相互抵
  • 植保无人机PID调参经验

    1 P I D输出要限幅 2 P D是相对的 xff0c 如果系统震荡 xff0c 降低P或者加大D xff0c 在不震荡的条件下 xff0c 尽量让P大 3 I是可以不用的 xff0c 基本上PD控制器就可以控地很稳了 xff0c 如果感
  • 测试环境建设原则和管理实践

    1 问题 测试环境是指为了完成软件测试工作所必需的计算机硬件 软件 网络设备 历史数据等的总称 即够支持完成测试工作所需要的软件和硬件 测试环境是测试活动的基础 正确模拟生产环境 稳定支持测试活动是测试环境的基本要求 稳定可控的测试环境能够
  • ESP8266 WIFI数传 Pixhaw折腾笔记

    最近3DR数传老是断线 xff0c 重连 xff0c 数据刷不出来 xff0c 折腾了几天数传问题 xff0c 总结如下 xff1a 3DR RADIO xff1a 淘宝100多一对的 xff0c 别的无线数传也可以 xff0c 但一定保证
  • PX4的CMake解析

    home yanlei src Firmware cmake common 中定义了其他CMakeLists txt中所使用的一些函数 使用最多的函数px4 add module在px4 base cmake中 ekf2的CMakeList
  • PX4的软件仿真(SITL)环境配置过程

    官方地址 xff1a https dev px4 io en simulation gazebo html 框架图 xff0c 各个UDP端口一目了然 xff0c 仅有连接到模拟器的udp端口是随机的 xff0c 从下图的启动界面可以看出
  • PX4的硬件仿真(HITL)环境配置过程

    官方链接 xff1a https dev px4 io en simulation hitl html 硬件在环仿真 HITL 结构图 A HITL configuration is selected via QGroundControl
  • ubuntu 分区安装

    分配大小 60G 选择安装Ubuntu 安装选项 安装类型 xff1a 选择其他选项 新建分区表 1 swap区 xff1a 设为逻辑分区 xff1b 作用跟电脑内存类似 xff0c 大小也可以和电脑内存一样大 xff1b 一般2G就可以2
  • 飞控

    现在市面上的飞行控制器 xff08 下面简称飞控 xff09 分为两种 一种是由商业公司设计生产的 xff0c 例如DJI的Naze系列飞控 xff0c 一般都是闭源的 xff0c 并且经过正规系统的测试 xff0c 稳定性方面有保障 另外
  • Ubuntu16.04下编译Pangolin时失败的解决方法

    从github上下载了最新版本的Pangolin xff0c 依赖项都安齐了 xff0c 但是编译时提示找不到libopencv core so 2 4和libopencv imgproc so 2 4 xff0c 然后处理libavfil
  • Windows10+Ubuntu16.04LTS双系统,卸载Ubuntu16.04LTS并安装Ubuntu18.04LTS

    1 背景 xff1a 本来是Windows10 43 Ubuntu16 04双系统 xff0c 想直接从Ubuntu16 04升级到18 04 xff0c 点的软件更新器里的更新 xff0c 结果重启之后一直黑屏 xff0c 左上角有光标闪
  • 深度学习环境配置(Ubuntu18.04+PyTorch1.9.0)

    准备一台有GPU的电脑 一个Ubuntu18 04 xff0c 把软件源换成清华源 xff0c 安装gcc xff08 这个若版本不对可以后续再调整 xff09 安装Anaconda xff1a 选取版本3 5 2 0 xff0c 这个版本
  • 拯救者Y9000P2022版安装Ubuntu

    前言 当我们买了一个新电脑 新笔记本时 xff0c 如果型号比较新 xff08 通常为了追求性能 xff0c 我们总会选择新型号 xff09 xff0c 大概率Ubuntu会没有相应的硬件驱动支持 xff0c 通常是显卡和网卡不支持 配置
  • 一页PPT自动生成短视频的研究

    希望通过一些技术 xff0c 将以前自己讲过的PPT转换成有解说的短视频 xff0c 从而进行一些分发 旁白到语音 从文字转换成语音我们首先想到的就是TTS xff0c 这其中我也是用了各式各样的TTS xff0c 发现发音电子音非常强 x
  • 选择Mathtype数学公式编辑器的N个理由

    Mathtype是一款强大的数学公式编辑器 xff0c 是理科 生必备的工具 为什么选择这款软件呢 xff1f 不仅仅是因为它有很强的实用性 xff0c 而且他还有许多公式编辑器无可替代的强大功能 今天就来和大家一起细数细数为什么选 择ma
  • Python中局部变量、全局变量和修改全局变量

    局部变量 1 什么是局部变量 如下图所示 2 小总结 局部变量 xff0c 就是在函数内部定义的变量不同的函数 xff0c 可以定义相同的名字的局部变量 xff0c 但是各用个的不会产生影响局部变量的作用 xff0c 为了临时保存数据需要在
  • 用Python抓包工具查看周边拼车情况

    说起Python爬虫 xff0c 很多人第一个反应可能会是Scrapy或者Pyspider xff0c 但是今天文章里用到是Python下一个叫Mitmproxy的抓包工具 xff0c 对付一些非常规的数据获取还是很有效的 不过凡事都是有利
  • 在Python中定义Main函数

    许多编程语言都有一个特殊的函数 xff0c 当操作系统开始运行程序时会自动执行该函数 这个函数通常被命名为main xff0c 并且依据语言标准具有特定的返回类型和参数 另一方面 xff0c Python解释器从文件顶部开始执行脚本 xff
  • realsense D435i安装及标定遇到的问题

    realsense D435i安装 这里的安装是基于ros的安装 xff0c 前提是要安装ros系统 下载realsense ros包 span class token function mkdir span p catkin ws src
  • 【ROS】使用C++编写简单moveit终态位姿控制以及position数据可视化

    1 前言 这几天主要还是在研究用C 43 43 编写moveit target pose的例程 xff0c 中途出现了各种问题 xff0c 一度怀疑人生 xff0c 好在现在也算是磕磕碰碰的解决了一点 虽然还是不知道why xff0c 不过