如何读取UR5机械臂关节数据并进行实时的读取

本文介绍如何在ROS环境下,通过c++程序订阅关节话题,实时读取并存储UR5机械臂的关节位置和速度数据。使用Universal Robot包和socket控制UR5python包,创建节点监听关节状态,将数据写入txt文件,以便后续分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题产生:

最近帮助一位师兄做一个机械臂关节的数据采集,然后需要读取机械臂在运动过程中的关节数据,然后进行一个读取,本身ROS可以利用rqt_gui可以实时的显示关节轨迹或者通过rostopic echo /joint_state 来查看发布的具体内容,但是这两种方式都不能让我们获得完整的文本数据。所以这篇文章主要是利用ros节点结合c++文本存储的方法来读取写入实时的关节数据。

需要环境

ubuntu 16.04 + Ros kinetic

Universal Robot 包

socket控制UR5python包

机械臂控制包

socket控制UR5python包

获取到当前的位置数据:

get_current_tcp()

控制指令

move_to_tcp()

注意这里接收的指令关于旋转部分是旋转向量(Rx,Ry,Rz),也就是UR5上示教器所接收到的数据,并不是我们传统意义上的欧拉角。它们俩之间有一个转换关系,也在上面的python包中提供了。
如下对比图:
在这里插入图片描述

程序实现

具体实现就是:

首先订阅关节话题,然后打开存储文件的位置和名称,最后把相应的关节位置和速度信息取出放在文件中存储。

这里我订阅的频率是1000hz,然后为了大致算出每个取出数据的大致时间,我通过把此时时间减去起始时间得出当前取出数据的时间。

#include "ros/ros.h"
//#include <ros/package.h>
#include "std_msgs/String.h"
#include <iostream>
#include <fstream>
#include "sensor_msgs/JointState.h"
/**
 * This tutorial demonstrates simple receipt of messages over the ROS system.
 */
using namespace std;

ofstream f1, f2;

double duration=0; //time duration

double start_time = 0;


void jointstatesCallback(const sensor_msgs::JointStateConstPtr& msg)
{
   

  
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值