RosControl学习

本文详细介绍了ROS Control的核心架构,包括硬件接口、控制器管理、资源管理等方面的内容。阐述了Handle与Interface的角色,RobotHW、InterfaceManager及HardwareResourceManager类的功能,并解析了JointStateInterface和JointCommandInterface的工作原理。

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



ros_control定义了机器人硬件接口和机器人控制器的抽象接口,控制器管理类controller_manager类,具体的控制器的实现类是在ros_controllers包内实现的,其网址为:https://github.com/shadow-robot/ros_controllers

总结:

(1)在roscontrol中的**Handle为资源类,**Interface为接口类;

(2)RobotHW 类派生自InterfaceManger,编写自定义机器人硬件接口时,主要是从该类派生,该类提供了与控制器通讯的一系列机器人硬件接口,同时集成有资源冲突检测方法,并存储了一个硬件接口(**Interface)的map存储容器;其本质是RobotHW 内可以注册各种**Interface类,通过T* Get()函数可以获得某个Interface的实例,再通过**Interface类的gethandle(name)方法获取该Interface的资源对象,再通过资源对象获取相应的数据,如Pos,Vel,ACC等等。

(3)InterfaceManger类为接口管理类,其提供有RegisterInterface函数,用于注册机器人硬件的接口类(**Interface),每个类型的接口只能存储一个实例,并可以用T* Get()函数获取接口类的对象。

(4)HardwareResourceManger类派生自HardwareInterface和ResourceManger<ResourceHandle>,其中HardwareInterface提供claim()和clearClaim()函数用于声索资源和清除声索资源;ResourceManger<ResourceHandle>改类提供RegisterHandle(ResourceHandle handle),该函数向接口类注册资源handle,并提供gethandle(name)获取handle对象。

(5)以JointStateInterface为例,该类是提供joint的状态量的接口类,其派生自HardwareResourceManger<JointStateHandle>,特别之处是,其将ResourceHandle泛型替换为JointStateHandle实体类,也同时说具有(4)所属的所有方法。

(6)JointstateHandle为关节状态的资源类,其内部存储有:pos,vel,effort的获取接口。

(7)类似于JointStateInterface和JointstateHandle的一组接口资源类,还有JointHandle和JointCommandInterface,其中JointHandle不但包含了Jointstatehandle的所有内容,还包括了setcommand和getcommand两个命令接口,从这个JointCommandInterface类还派生出了PositionJointInterface,VelocityJointInterface,EffortJointInterface等类,其本质是一回事,就是实现一个控制量的读取和写入接口,同时获取joint的状态。

(8)PosVelJointHandle和PosVelJointInterface用于控制单个joint的速度和位置的硬件接口,不通与以上的是PosVelJointInterface类派生自HardwareResource<PosvelJointHandle,ClaimResource>,ClaimResource类的使用表明该接口声明了PosvelJointHandle的资源,类似的还有PosVelAccJointHandle和PosVelAccJointInterface,增加了加速度的控制。


(9)Controller类是控制器类的父类,其提供有Starting,stoping,update,并存储有vector<hardware_interface::InterfaceResources> ClaimedResources用于存储所声索的接口资源。其内部有个比较重要的函数为initRequest:,Controller为泛型类,T为接口的类型,具体定义某个控制类是需指定T,如class JointPositionController: public controller_interface::Controller<hardware_interface::VelocityJointInterface>


  virtual bool initRequest(hardware_interface::RobotHW* robot_hw,  机器人硬件接口类
                           ros::NodeHandle&             root_nh,  controllerManger所在的节点
                           ros::NodeHandle&             controller_nh, 本控制器所在的节点
                           ClaimedResources&            claimed_resources) 该控制器声索的资源
  {
    
    // get a pointer to the hardware interface 获取RobotHW中包含的**Interface类
    T* hw = robot_hw->get<T>();
  
    // return which resources are claimed by this controller
    hw->clearClaims();
    if (!init(hw, controller_nh) || !init(hw, root_nh, controller_nh))
    {
      ROS_ERROR("Failed to initialize the controller");
      return false;
    }
    hardware_interface::InterfaceResources iface_res(getHardwareInterfaceType(), hw->getClaims());//获取interface声索的Handle资源
    claimed_resources.assign(1, iface_res);
    hw->clearClaims();


    // success
    state_ = INITIALIZED;
    return true;
  }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值