ROS+TMC4671实现机器人控制系统快速开发
在开发机器人硬件的过程中,面临着一系列技术挑战。其中一项重要挑战就是如何与电机进行有效通信,并按照实时生成的轨迹向其发送精确指令。由于电机需要根据轨迹精准执行动作,并且受到严格的时间限制,因此电机驱动器和控制器之间的通信必须无缝衔接。控制器还需要从电机接收最新的关节状态信息,包括位置、速度和力,以便准确验证轨迹的执行情况。而生成轨迹并将其发送给电机驱动器则是另一项关键任务。
为了满足这些严苛的要求,我们借助了机器人操作系统(ROS)框架提供的多种工具,如ROS-control和ROS-Moveit。ROS框架是机器人软件开发领域的一项创新,它集成了最先进的算法和工具,极大地简化了机器人硬件和软件的开发过程。
在控制关节作动器时,我们可以选择不同的方法,如指定关节位置、关节速度或关节作用力,这完全取决于应用所需的控制水平。通常情况下,如果低级处理如速度和扭矩控制环路都在硬件驱动内部执行,那么直接通过关节位置命令执行器就会变得相对简单。如果我们选择使用关节或关节作用力来命令执行器,就必须通过运行命令设备上的控制环路来生成位置接口,这通常涉及到运行ROS control实例的linux机器。
ROS-CONTROL是ROS框架中的一个软件包,它能够与多种硬件实例对接。它通过提供控制环路实现的抽象表示,使得控制任意电机或执行器变得简单,而无需考虑其硬件接口的具体细节。根据官方文件,ROS-control原生支持四种类型的硬件接口:关节命令接口、作用力关节接口、速度关节接口和位置关节接口。它还支持关节状态接口,这使我们能够实时了解机器人的运行状态。通过理解这些接口的工作原理和作用,我们可以更加有效地开发和调试机器人硬件,确保机器人能够按照我们的指令精准地执行任务。概念图:ROS硬件接口存储器】源自ros_control。
从这张图中,我们可以清晰地看到ROS control是如何通过存储器位置与执行器及电机进行通信的。想象一下,如果我们需要通过位置接口来命令电机,那么ROS control只需在特定的存储器位置“pos_cmd_”写入所需的位置值,这个值随后会通过电机的通信接口被传输到电机。以带有Landungsbrücke的TMC4671评估套件为例,这些接口可以灵活选择,如RS232、USB串口或RN171XV/RN42XV无线模块。对于速度和作用力接口,操作同样简单,只需将相应的要求值写入预定义的存储器位置即可。
那么,如何读取电机的关节状态呢?答案和发送命令一样直观:关节值被读入到存储器位置“pos_”、“vel_”和“eff_”。要命令和读取关节接口,只需按照一定的时间间隔更新这些存储器位置。这一过程可以通过以下代码片段轻松理解:
```cpp
class trinamic : public hardware_interface::RobotHW {
public:
trinamic(); // 利用构造函数进行初始化,例如设置通信接口,在我们的Landungsbrücke实现中为串口。
void read(); // 定期调用此函数以读取存储器位置
void 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的中间角色。通过USB串口建立通信后,我们可以发送命令位置(因为我们在操作硬件接口),并传输关节位置。Landungsbrücke接收到我们的命令位置后,会通过SPI将其写入到寄存器0x68(PID_POSITION_TARGET)。它还可以从寄存器0x6B(PID_POSITION_ACTUAL)获取当前位置,并通过USB串口发送回来。由于所有这些都是32位有符号整数,因此数据被组织成4个单字节无符号整数进行发送和接收。视频】TMC4671硬件伺服控制芯片配置实操指南
引领你步入伺服控制领域的核心领域,如何设置TMC4671硬件伺服控制芯片?你需要通过TMCL-IDE软件按照电机的特定参数对TMC4671进行初始配置。详细的步骤,建议观看我们的配置实操指南视频。
接下来的步骤是更新ROS_control.c中的init_motor()函数,使其能从IDE接收寄存器设置。然后,你可以在任何工作区下载ROSpackage,并通过启动文件启动硬件接口。随着ROS control节点的启动,你可以创建任何与之兼容的ROS控制器。控制器的配置可以在controller.yaml文件中完成。
使用TMC4671进行位置控制时,PI增益的调整是核心环节,它关乎速度和位置控制环路的稳定性。虽然可以使用寄存器0x58和0x5A进行手动调整,但我们强烈建议你不要轻易尝试,以免出现不稳定的情况。
参考文献:
S.Chitta等多位专家共同撰写的论文《ros_control: A generic and simple control framework for ROS》。这篇论文深入探讨了ros_control框架的通用性和简单性,为我们理解和应用TMC4671硬件伺服控制芯片提供了宝贵的理论依据和实践指导。
家用机器人
- ROS+TMC4671实现机器人控制系统快速开发
- 从机器人到协作式应用,EOAT或成为下一个千亿市
- 抢占人工智能城市C位:不建个AI产业园,敢说自
- 北京将加强互联网诊疗监管:严禁使用 AI 自动生
- 智能家居新标准,数百家企业签署Matter协议
- 智慧浪潮兴起 NEPCON China“电子智造梦工厂”展区
- 8月:智能硬科技领域重要投融资事件一览
- 全球好货汇聚!来中博会淘好货
- 物流机器人市场虚热导致盲从多
- 机器人正在大举入侵百货、餐饮和酒店业:自动
- 科技为硬装备插上“软”翅膀
- 未来十年如何布局,10万物联网人齐聚IOTE物联网
- 面对ChatGPT,新闻记者不应该有身份危机
- 2025,人工智能将对工业产生什么样的影响?
- LogiMAT China国际内部物流解决方案及流程管理展览
- 万亿半导体市场走向“台前”,EDA如何助力企业