热搜: 佳士科技irobot开云电竞官网下载app机器人机器人产业联盟ABB发那科机械手码垛机器人库卡

ROS+TMC4671实现机器人控制系统快速开发

日期:2021-11-23 来源:TRINAMIC电机驱动控制系统 作者:angela 评论:0
开发机器人硬件时面临的挑战之一是处理与电机的通信,以及根据实时生成的轨迹向其发送命令。由于接受轨迹的电机应遵守时间限制,所以电机驱动器和控制器之间的无缝通信变得至关重要。此外,控制器还应从电机接收最新的关节状态(位置、速度、力)信息,从而能够验证轨迹执行情况。然后剩下的最后一项挑战是实际生成轨迹并将其发送给电机驱动器。

为了满足这些要求,ROS(机器人操作系统)框架为我们提供了ROS-control和ROS-Moveit等多款工具。ROS (机器人操作系统)是一种软件框架,实施了最先进的算法和工具,能够以最低的工作量简化机器人硬件和软件开发。

控制关节作动器的方法可能有多种,例如指定关节位置、关节速度或关节作用力,完全依赖于应用所需的控制水平。由于速度和扭矩控制环路等所有低级处理都是在驱动硬件内执行的,如果关节位置直接用于命令执行器,事情就变得比较简单。但是,如果使用关节或关节作用力命令执行器,那么就必须通过运行命令设备上的控制环路来生成位置接口,在我们的例子中为运行ROS control实例的linux机器。


ROS-CONTROL


ROS-control是一个ROS package,能够与以上所述的多种硬件实例对接。为了实现以上目的,ROS-control提供对控制环路实现的抽象表示,从而可以控制任意电机或执行器,而不必考虑其硬件接口。

根据官方文件,ROS-control可原生支持4种类型的硬件接口:

1.关节命令接口

  • 作用力关节接口

  • 速度关节接口

  • 位置关节接口


2.关节状态接口

  • 通过下图能够很好地理解该接口。


【ROS硬件接口存储器概念图。来源:ros_control】

从图中可以看出,ROS control使用存储器位置与执行器及电机通信。例如,如果必须使用位置接口命令电机,ROS control只需在存储器位置“pos_cmd_”写入位置要求值,该值将被通过电机的通信接口传输到电机。以带有Landungsbrücke的TMC4671评估套件为例,这些接口可以是RS232、USB串口或RN171XV/RN42XV无线模块。类似地,对于速度和作用力接口,要求值也被写入到预先定义的相应存储器位置。现在,剩下的问题是,如何从电机读取关节状态。与关节命令接口类似,关节值被读入到存储器位置“pos_”、“vel_”和“eff_”。
现在,只需以一定的间隔更新这些存储器位置,即可命令和读取关节接口。利用以下的代码片段很容易解释这一过程:

class trinamic: public hardware_interface::RobotHW
{
public:
trinamic();
void read();
void write();
};

这里,可利用构造函数初始化,比如,通信接口(在我们使用Landungsbrücke的实现中为串口)。更进一步,在循环中定期调用trinamic::read()和trinamic::write()函数,从而以固定间隔更新存储器位置。

ROS控制器


硬件接口启动并运行后,我们可以生成许多控制器之一,例如position_controllers、velocity_controllers、joint_state_controller、joint_trajectory_controller。这些控制器仅仅是硬件接口作为ROS topics的抽象表示。如上所述,这里可以使用速度关节接口启动position_controller,使控制环路在主机上运行。此外,joint_trajectory_controller兼容所有类型的关节命令接口。值得注意的是,我们应始终检查冲突,确保没有两个控制器同时访问相同的硬件接口。

建立ROS CONTROL和TMC4671之间的通信


得益于TMCL API,利用Landungsbrücke可以毫不费力地建立ROS和TMC4671之间的通信。如上所述,通过USB串口建立通信,支持命令位置(因为我们正在建立硬件接口)和传输关节位置。Landungsbrücke接收到该命令位置后,通过SPI将该值写入到寄存器0x68, PID_POSITION_TARGET。此外,从寄存器0x6B, PID_POSITION_ACTUAL获取当前位置并通过USB串口传输。由于所有这些值都是32位有符号整数,数据被编组为4个单字节无符号整数进行发送和接收。


如何设置


视频 硬件伺服控制芯片TMC4671配置过程指导

最初利用TMCL-IDE根据电机设置TMC4671,具体过程说明请观看硬件伺服控制芯片TMC4671配置过程指导视频。更新在ROS_control.c中的init_motor()函数中从IDE接收的寄存器设置。现在,在任意工作区下载ROSpackage,并利用启动文件启动硬件接口。可以随启动文件中的ROS control节点生成任意兼容的ROS控制器。可在controller.yaml中配置控制器。

使用TMC4671进行位置控制时,最重要的部分是调节速度和位置控制环路的PI增益。可使用寄存器0x58和0x5A手动调节这些环路。但强烈建议不要这么做。


参考


1. S.Chitta, E. Marder-Eppstein, W. Meeussen, V. Pradeep, A. RodríguezTsouroukdissian, J. Bohren, D. Coleman, B. Magyar, G. Raiola, M. Lüdtke and E. Fernandez Perdomo
  • “ros_control: A generic and simple control framework for ROS”

声明:凡开云电子链接 来源注明为其他媒体来源的信息,均为转载自其他媒体,并不代表本网站赞同其观点,也不代表本网站对其真实性负责。您若对该文章内容有任何疑问或质疑,请立即与开云客户(www.www.wykobounce.com)联系,本网站将迅速给您回应并做处理。
电话:021-39553798-8007
更多> 相关开云电子链接
0 相关评论

推荐图文
推荐开云电子链接
点击排行
Baidu
map