ROS与Orocos

实例一

Link Here:基于ROS和Orocos的机器人控制系统

通信协议接口:接收控制端输入的控制指令,选择控制指令相应的机器人运动规划的响应函数
算法模块:由响应函数,计算控制指令数据
通信管理模块:将控制指令数据输出至控制部件

第一接口:总控模块与算法模块之间通信连接
第二接口:算法模块与通信管理模块进行连接
第三接口:接收通信管理模块传入的反馈信息

基于ROS,利用Orocos的实时输入/输出接口,实现总控模块算法模块通信管理模块之间的通信

作为实施例
使用 ROS 的 procreate-catkin-pkg 方法创建 ROS 的 Package
并在 Package 中继承 OROCOS 的 RTT::Taskcontext 类
利用 OROCOS 的 RTT::Input 与 RTT::Output 方法定义实时输入/输出接口
0010
硬件结构模型:
在这里插入图片描述
总控模块接入控制端的人机交互界面的控制指令

Linux主机可以是X86架构的PC机,或者ARM芯片嵌入式架构的开发板。Linux主机中可以安装Xenomai或者其他实时内核补丁,安装ROS,Orocos,rFSM等软件

机器人控制系统搭建的软件架构图:
在这里插入图片描述

总控模块:

创建ROS的package,记为Ec_control_system,

然后在Package中,继承Orocos的RTT::TaskContext类,记为Ec_control_system_component

Ec_control_system_component类的构造函数中,执行以下操作:

  • 利用Orocos的RTT::Input和RTT::Output方法,对模块的输入\输出接口进行定义
  • 利用Orocos的Operational Caller方法设置函数调用接口,用于对算法模块的相应响应函数进行调用
  • 调用Orocos的Properties方法定义总控模块的属性,将总控模块定义为一个机械臂关节个数的属性

Ec_control_system_component的StartHook()成员函数,建立与人机交互界面的通信连接

Ec_control_system_component的CleanUpHook()成员函数,关闭与人机交互界面的通信连接

算法模块:

创建ROS的package,记为Ec_control_loop,

继承Orocos的RTT::TaskContext类,记为Ec_control_loop_component

  • 利用RTT::Input与RTT::Output,对输入\输出接口进行定义,输入状态机的数据,输出状态机的事件
  • 利用Orocos的Operational Caller方法设置函数调用接口,设置控制指令响应函数
  • 调用Orocos的Properties方法定义算法模块的属性,算法模块定义一个机械臂关节个数的属性

在Ec_control_loop_component的StarHook()成员函数中,检查是否有电机数据并上传至总控

在Ec_control_loop_component的UpdateHook()成员函数中,按照指定频率读取状态机状态

对于Ec_control_loop_component类,定义了运动的函数调用接口

通信管理模块

通过Linux主机minicom中的ttyACM0与ARM开发板通信,可以在ARM开发板上运行一个CANOpen主站协议。使用Orocos的RTT::Input与RTT::Output方法与机器人算法模块和总控模块进行通信

创建ROS的package,继承Orocos的RTT::TaskContext类,创建一个Orocos的实时模块,记为Ec_component

ROS通过rtt_ros_integration和Orocos连接,实现实时通信

创建ROS的package
在package中通过继承Orocos的RTT::TaskContext类,创建一个Orocos的实时模块
在RTT::TaskContext类的构造函数中,执行如下操作:

  • 利用Orocos的RTT::Input与RTT::Output方法,对输入,输出接口进行定义
  • 利用Orocos的Operational Caller方法设置函数调用接口,设置控制指令响应函数
  • 调用Orocos的Properties方法定义算法模块的属性

StartHook成员函数,初始化并建立连接
UpdateHook成员函数,按固定频率读取模块的状态(回调函数)
CleanUpHook成员函数,断开连接

控制器状态机的状态变化示意图:

设备状态机的状态变化示意图:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS(机器人操作系统)是一个用于开发机器人软件的框架,而STM32是一款常见的嵌入式微控制器。它们可以进行通信以实现机器人系统的控制和数据传输。 要实现ROS与STM32的通信,通常有两种方式:串口通信和ROS网络通信。 一种常见的方式是通过串口连接ROS主机和STM32。ROS主机可以使用基于Linux系统的计算机,如Ubuntu等。使用ROS提供的串口通信库,可以在ROS主机上编写节点程序,通过串口与STM32进行数据交换。在ROS主机上,可以将STM32作为一个外设设备接入ROS系统,通过串口读取STM32发送的数据,并将ROS主机的控制指令发送给STM32。 另一种方式是通过ROS网络通信。在STM32上运行一个ROS节点,该节点通过TCP/IP协议与ROS主机上的其他ROS节点进行通信。ROS节点可以通过STM32上的网卡或Wi-Fi模块连接到ROS主机所在的局域网。在ROS主机上,可以使用ROS提供的网络通信库与STM32节点进行通信,发送控制指令或接收传感器数据。 不论是串口通信还是网络通信,ROS与STM32的通信都需要定义消息格式。可以根据具体的需求,定义自己的ROS消息类型,包括控制指令、传感器数据等。在ROS主机上,可以使用ROS消息库来解析和处理这些消息。 总之,通过串口通信或ROS网络通信,可以实现ROS与STM32的通信,实现机器人系统的控制和数据传输。这种通信方式可以用于各种机器人应用,如无人车、机器人臂等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值