RMVL  2.5.0-dev
Robotic Manipulation and Vision Library
载入中...
搜索中...
未找到

机器人运动学模型、状态发布、轨迹规划等功能扩展 更多...

机器人功能扩展 的协作图:

class  rm::lpss::ctl::ControlLawBase
 【控制律组件】控制律基类,供 RobotController 组合调用 更多...
class  rm::lpss::ctl::UnitTF
 【控制律组件】单位传递函数, \(G(s)=1\) 更多...
class  rm::lpss::ctl::FeedForward
 【控制律组件】离散动态全补偿的前馈环节,适合在已知系统模型或有外部扰动补偿需求时使用 更多...
class  rm::lpss::ctl::PID
 【控制律组件】单环离散比例-积分-微分控制器 更多...
class  rm::lpss::RobotPlanner
 机器人规划模块,提供 URDF 解析、正/逆运动学求解、轨迹规划等运动学功能 更多...
class  rm::lpss::RobotController
 机器人控制模块 更多...
class  rm::lpss::RobotStatePublisher
 机器人状态发布者,周期性发布 TF 和 URDF 消息 更多...
class  rm::lpss::async::RobotStatePublisher
 异步机器人状态发布者,基于定时器周期性发布 TF 和 URDF 消息 更多...

类型定义

using rm::lpss::ctl::InSampleMapping = void (*)(const msg::JointState &d_in, const msg::JointState &fb_in, std::vector<double> &d_out, std::vector<double> &fb_out) noexcept
 输入采样映射,定义了如何从 JointState 中提取向量供控制律计算使用
using rm::lpss::ctl::OutSampleMapping = void (*)(std::vector<double> cmd_in, msg::JointState &cmd_out) noexcept
 输出采样映射,定义了如何将控制律计算结果写回 JointState 输出

枚举

enum class  rm::lpss::ctl::ControlStatus : uint8_t { rm::lpss::ctl::ControlStatus::Ok = 0 , rm::lpss::ctl::ControlStatus::InvalidInput , rm::lpss::ctl::ControlStatus::Diverged , rm::lpss::ctl::ControlStatus::Failed }
 控制律计算状态 更多...

函数

void rm::lpss::ctl::basic_pos_imapping (const msg::JointState &d_in, const msg::JointState &fb_in, std::vector< double > &d_out, std::vector< double > &fb_out) noexcept
 基础位置采样输入映射,从 position 字段提取
void rm::lpss::ctl::basic_vel_imapping (const msg::JointState &d_in, const msg::JointState &fb_in, std::vector< double > &d_out, std::vector< double > &fb_out) noexcept
 基础速度采样输入映射,从 velocity 字段提取
void rm::lpss::ctl::basic_eff_imapping (const msg::JointState &d_in, const msg::JointState &fb_in, std::vector< double > &d_out, std::vector< double > &fb_out) noexcept
 基础力矩采样输入映射,从 effort 字段提取
void rm::lpss::ctl::basic_pos_omapping (std::vector< double > cmd_in, msg::JointState &cmd_out) noexcept
 基础位置采样输出映射,将结果写回 position 字段
void rm::lpss::ctl::basic_vel_omapping (std::vector< double > cmd_in, msg::JointState &cmd_out) noexcept
 基础速度采样输出映射,将结果写回 velocity 字段
void rm::lpss::ctl::basic_eff_omapping (std::vector< double > cmd_in, msg::JointState &cmd_out) noexcept
 基础力矩采样输出映射,将结果写回 effort 字段
msg::Quaternion rm::msg::operator* (const msg::Quaternion &q1, const msg::Quaternion &q2) noexcept
 四元数乘法: \(q_1\times q_2\)
msg::Vector3 rm::msg::rotate (const msg::Quaternion &q, const msg::Vector3 &v) noexcept
 对向量执行旋转操作
msg::Pose rm::msg::operator* (const msg::Transform &t, const msg::Pose &p) noexcept
 位姿变换
msg::Transform rm::msg::operator* (const msg::Transform &t1, const msg::Transform &t2) noexcept
 合并两个 SE(3) 变换

详细描述

机器人运动学模型、状态发布、轨迹规划等功能扩展

该模块提供了

  • 机器人运动学模型规划器 lpss::RobotPlanner ,支持 URDF 解析、正/逆运动学求解、轨迹规划等功能
  • 机器人状态发布者,通过传入 lpss::RobotPlanner 对象和 lpss::Node (或 lpss::async::Node )节点对象周期性发布 TF、URDF 和 JointTrajectory 消息,一般在调试时供其他模块订阅使用
  • 相关消息类型转换函数,如四元数乘法、位姿变换、复合 SE(3) 变换等
    机器人功能扩展模块示意图

类型定义说明

◆ InSampleMapping

using rm::lpss::ctl::InSampleMapping = void (*)(const msg::JointState &d_in, const msg::JointState &fb_in, std::vector<double> &d_out, std::vector<double> &fb_out) noexcept

#include <rmvl/lpss/ctl/base.hpp>

输入采样映射,定义了如何从 JointState 中提取向量供控制律计算使用

参数
[in]d_inmsg::JointState 表示的期望值
[in]fb_inmsg::JointState 表示的反馈值
[out]d_outstd::vector 表示的期望值,供控制律计算使用
[out]fb_outstd::vector 表示的反馈值,供控制律计算使用

用户可自定义此类函数实现复杂的提取逻辑,如多字段融合等

◆ OutSampleMapping

using rm::lpss::ctl::OutSampleMapping = void (*)(std::vector<double> cmd_in, msg::JointState &cmd_out) noexcept

#include <rmvl/lpss/ctl/base.hpp>

输出采样映射,定义了如何将控制律计算结果写回 JointState 输出

参数
[in]cmd_instd::vector 表示的控制量,这是控制律的直接输出
[out]cmd_outmsg::JointState 表示的控制量,供用户使用

枚举类型说明

◆ ControlStatus

enum class rm::lpss::ctl::ControlStatus : uint8_t
strong

#include <rmvl/lpss/ctl/base.hpp>

控制律计算状态

枚举值
Ok 

本周期计算成功

InvalidInput 

输入维度或数据非法

Diverged 

计算过程发散

Failed 

其他失败

函数说明

◆ basic_eff_imapping()

void rm::lpss::ctl::basic_eff_imapping ( const msg::JointState & d_in,
const msg::JointState & fb_in,
std::vector< double > & d_out,
std::vector< double > & fb_out )
noexcept

#include <rmvl/lpss/ctl/base.hpp>

基础力矩采样输入映射,从 effort 字段提取

◆ basic_eff_omapping()

void rm::lpss::ctl::basic_eff_omapping ( std::vector< double > cmd_in,
msg::JointState & cmd_out )
noexcept

#include <rmvl/lpss/ctl/base.hpp>

基础力矩采样输出映射,将结果写回 effort 字段

◆ basic_pos_imapping()

void rm::lpss::ctl::basic_pos_imapping ( const msg::JointState & d_in,
const msg::JointState & fb_in,
std::vector< double > & d_out,
std::vector< double > & fb_out )
noexcept

#include <rmvl/lpss/ctl/base.hpp>

基础位置采样输入映射,从 position 字段提取

◆ basic_pos_omapping()

void rm::lpss::ctl::basic_pos_omapping ( std::vector< double > cmd_in,
msg::JointState & cmd_out )
noexcept

#include <rmvl/lpss/ctl/base.hpp>

基础位置采样输出映射,将结果写回 position 字段

◆ basic_vel_imapping()

void rm::lpss::ctl::basic_vel_imapping ( const msg::JointState & d_in,
const msg::JointState & fb_in,
std::vector< double > & d_out,
std::vector< double > & fb_out )
noexcept

#include <rmvl/lpss/ctl/base.hpp>

基础速度采样输入映射,从 velocity 字段提取

◆ basic_vel_omapping()

void rm::lpss::ctl::basic_vel_omapping ( std::vector< double > cmd_in,
msg::JointState & cmd_out )
noexcept

#include <rmvl/lpss/ctl/base.hpp>

基础速度采样输出映射,将结果写回 velocity 字段

◆ operator*() [1/3]

msg::Quaternion rm::msg::operator* ( const msg::Quaternion & q1,
const msg::Quaternion & q2 )
noexcept

#include <rmvl/lpss/robot.hpp>

四元数乘法: \(q_1\times q_2\)

参数
[in]q1msg::Quaternion 表示的四元数 1
[in]q2msg::Quaternion 表示的四元数 2
返回
四元数乘积

◆ operator*() [2/3]

msg::Pose rm::msg::operator* ( const msg::Transform & t,
const msg::Pose & p )
noexcept

#include <rmvl/lpss/robot.hpp>

位姿变换

将位姿 \(p\) 从坐标系 \(A\) 变换到坐标系 \(B\),变换关系由 \(T\) 定义,即 \(B\) 相对于 \(A\) 的变换。

参数
[in]tmsg::Transform 表示的变换
[in]pmsg::Pose 表示的位姿
返回
msg::Pose 表示的变换后的位姿

◆ operator*() [3/3]

msg::Transform rm::msg::operator* ( const msg::Transform & t1,
const msg::Transform & t2 )
noexcept

#include <rmvl/lpss/robot.hpp>

合并两个 SE(3) 变换

具体来说符合以下规则:

  • 在最初的坐标系下应用 \(T_2\) 变换,再在原来的坐标系下应用 \(T_1\) 变换,等价于在最初的坐标系下应用 \(T_1T_2\) 变换,即 “复合变换”
  • 在最初的坐标系下应用 \(T_1\) 变换,再在 \(T_1\) 变换后的坐标系下应用 \(T_2\) 变换,等价于在最初的坐标系下应用 \(T_1T_2\) 变换,即 “相对于坐标系的变换”
参数
[in]t1msg::Transform 表示的变换 1
[in]t2msg::Transform 表示的变换 2
返回
msg::Transform 表示的合并后的变换

◆ rotate()

msg::Vector3 rm::msg::rotate ( const msg::Quaternion & q,
const msg::Vector3 & v )
noexcept

#include <rmvl/lpss/robot.hpp>

对向量执行旋转操作

参数
[in]qmsg::Quaternion 表示的旋转四元数
[in]vmsg::Vector3 表示的向量
返回
msg::Vector3 表示的旋转后的向量