下载完后的rtde包内有rtde和examples两个文件夹,前者是接口,后者是例程,采集数据在examples下有例程。

讯享网
如下所示,对我们采集数据有用的有两个文件:record_configuration.xml、record.py

将上述两个文件及库拷贝到工作空间下,如下图所示:

打开record_configuration.xml,写入如下代码段内容,目的是采集时间戳、运动状态及理想运动状态数据。值得注意的是,采集的数据中一个时间戳所对应的数据顺序即按如下代码标签顺序存储,即:
时间戳 — q1 — q2 — … — q6 — dq1 — dq2 — … — dq6 — i1 — i2 — … — i6 — qd1 — qd2 …
对于其他标签数据的采集,可参考《Real Time Data Exchange(RTDE) Guide》或官网。
<?xml version="1.0"?> <rtde_config> <recipe key="out"> <field name="timestamp" type="DOUBLE"/> <field name="actual_q" type="VECTOR6D"/> <field name="actual_qd" type="VECTOR6D"/> <field name="actual_current" type="VECTOR6D"/> <field name="target_q" type="VECTOR6D"/> <field name="target_qd" type="VECTOR6D"/> <field name="target_qdd" type="VECTOR6D"/> <field name="target_current" type="VECTOR6D"/> </recipe> </rtde_config>
讯享网
打开record.py,修改IP和采样频率,此处UR3e的IP被博主修改为了192.168.1.200,按最大采样频率500Hz进行采集。

修改的代码见文末,运行record.py,会在工作空间中生成robot_data.csv文件,删除数据title,使用load命令导入MATLAB处理即可。
讯享网#!/usr/bin/env python # -*- coding: utf-8 -*- import argparse import logging import sys sys.path.append('') import rtde.rtde as rtde import rtde.rtde_config as rtde_config import rtde.csv_writer as csv_writer import rtde.csv_binary_writer as csv_binary_writer #parameters parser = argparse.ArgumentParser() parser.add_argument('--host', default='192.168.1.200', help='name of host to connect to (localhost)') parser.add_argument('--port', type=int, default=30004, help='port number (30004)') parser.add_argument('--samples', type=int, default=0, help='number of samples to record') parser.add_argument('--frequency', type=int, default=500, help='the sampling frequency in Herz') parser.add_argument('--config', default='record_configuration.xml', help='data configuration file to use (record_configuration.xml)') parser.add_argument('--output', default='robot_data.csv', help='data output file to write to (robot_data.csv)') parser.add_argument("--verbose", help="increase output verbosity", action="store_true") parser.add_argument("--buffered", help="Use buffered receive which doesn't skip data", action="store_true") parser.add_argument("--binary", help="save the data in binary format", action="store_true") args = parser.parse_args() if args.verbose: logging.basicConfig(level=logging.INFO) conf = rtde_config.ConfigFile(args.config) output_names, output_types = conf.get_recipe('out') con = rtde.RTDE(args.host, args.port) con.connect() # get controller version con.get_controller_version() # setup recipes if not con.send_output_setup(output_names, output_types, frequency = args.frequency): logging.error('Unable to configure output') sys.exit() #start data synchronization if not con.send_start(): logging.error('Unable to start synchronization') sys.exit() writeModes = 'wb' if args.binary else 'w' with open(args.output, writeModes) as csvfile: writer = None if args.binary: writer = csv_binary_writer.CSVBinaryWriter(csvfile, output_names, output_types) else: writer = csv_writer.CSVWriter(csvfile, output_names, output_types) writer.writeheader() i = 1 keep_running = True while keep_running: if i%args.frequency == 0: if args.samples > 0: sys.stdout.write("\r") sys.stdout.write("{:.2%} done.".format(float(i)/float(args.samples))) sys.stdout.flush() else: sys.stdout.write("\r") sys.stdout.write("{:3d} samples.".format(i)) sys.stdout.flush() if args.samples > 0 and i >= args.samples: keep_running = False try: if args.buffered: state = con.receive_buffered(args.binary) else: state = con.receive(args.binary) if state is not None: writer.writerow(state) i += 1 except KeyboardInterrupt: keep_running = False except rtde.RTDEException: con.disconnect() sys.exit() sys.stdout.write("\rComplete! \n") con.send_pause() con.disconnect()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/61567.html