【MoveIt 2】直接通过 C++ API 使用 MoveIt :机器人模型和机器人状态

直接通过 C++ API 使用 MoveIt 

使用 MoveIt 构建更复杂的应用程序通常需要开发人员深入研究 MoveIt 的 C++ API。额外的好处是,直接使用 C++ API 可以跳过许多 ROS 服务/操作层,从而显著提高性能。

  • 机器人模型和机器人状态

  •  规划场景

  •  规划场景监视器

  • 规划场景 ROS API

  •  运动规划 API

  • 运动规划管道

  •  创建 MoveIt 插件

  •  可视化碰撞

  •  时间参数化

  • 近似约束流形的规划

  •  挑选和放置

  •  MoveIt 抓取

  •  MoveIt 深度抓取

  •  子帧

  •  MoveItCpp 教程

  • 使用 Bullet 进行碰撞检测

  • 差动驱动移动底座和机械臂的规划

机器人模型和机器人状态 

13dbb658fff69f77aec12d1f00221e1e.png

在本节中,我们将向您介绍在 MoveIt 中使用运动学的 C++ API。

RobotModel 和 RobotState 类 

RobotModel  和 RobotState 类是使您能够访问机器人运动学的核心类。

https://github.com/moveit/moveit2/blob/main/moveit_core/robot_model/include/moveit/robot_model/robot_model.h

https://github.com/moveit/moveit2/blob/main/moveit_core/robot_state/include/moveit/robot_state/robot_state.h

RobotModel 类包含所有连杆和关节之间的关系,包括从 URDF 加载的关节限制属性。RobotModel 还将机器人的连杆和关节分为 SRDF 中定义的规划组。可以在此处找到有关 URDF 和 SRDF 的单独教程:URDF 和 SRDF 教程 https://moveit.picknik.ai/main/doc/examples/urdf_srdf/urdf_srdf_tutorial.html

RobotState 包含有关机器人在某个时间点的信息,存储关节位置的向量,并可选地存储速度和加速度此信息可用于获取依赖于机器人当前状态的运动学信息,例如末端执行器的雅可比矩阵

RobotState 还包含用于根据末端执行器位置(笛卡尔姿态)设置手臂位置和计算笛卡尔轨迹的辅助函数。

在这个例子中,我们将演示如何使用这些类与 Panda。

 入门 

如果您还没有这样做,请确保您已完成入门中的步骤。

 运行代码 

本教程中的所有代码都可以从您作为 MoveIt 设置一部分的 moveit2_tutorials 包中编译和运行。

直接从 moveit2_tutorials 运行代码的启动文件:

ros2 launch moveit2_tutorials robot_model_and_robot_state_tutorial.launch.py

 预期输出 

预期输出将如下所示。数字将不匹配,因为我们使用的是随机关节值:

7c2d6f7775fb1c3fcdc8b36f6226d59a.png

... [robot_model_and_state_tutorial]: Model frame: world
... [robot_model_and_state_tutorial]: Joint panda_joint1: 0.000000
... [robot_model_and_state_tutorial]: Joint panda_joint2: 0.000000
... [robot_model_and_state_tutorial]: Joint panda_joint3: 0.000000
... [robot_model_and_state_tutorial]: Joint panda_joint4: 0.000000
... [robot_model_and_state_tutorial]: Joint panda_joint5: 0.000000
... [robot_model_and_state_tutorial]: Joint panda_joint6: 0.000000
... [robot_model_and_state_tutorial]: Joint panda_joint7: 0.000000
... [robot_model_and_state_tutorial]: Current state is not valid
... [robot_model_and_state_tutorial]: Current state is valid
... [robot_model_and_state_tutorial]: Translation:
-0.368232
0.645742
0.752193


... [robot_model_and_state_tutorial]: Rotation:
 0.362374 -0.925408  -0.11093
 0.911735  0.327259  0.24
### 关于MoveIt2机器人模型使用教程 #### 1. MoveIt2中的机器人模型基础 在MoveIt2中,机器人模型通常由URDF(Unified Robot Description Format)文件定义,并通过SRDF(Semantic Robot Description Format)扩展其语义描述。这些文件用于表示机器人的几何形状、关节配置以及运动学约束[^1]。 #### 2. 获取官方教程资源 官方提供了详细的`moveit2_tutorials`包,其中包含了多个关于机器人建模状态管理的例子。可以通过运行以下命令来启动示例程序并查看预期输出: ```bash ros2 launch moveit2_tutorials robot_model_and_robot_state_tutorial.launch.py ``` 此命令会加载预设的机器人模型,并演示如何操作查询机器人状态。 #### 3. 下载安装教程 为了获取完整的MoveIt2教程及其配套资源,可以按照官方指南克隆仓库到本地工作空间。具体步骤如下所示: ```bash git clone https://github.com/ros-planning/moveit2_tutorials.git -b humble-devel src/moveit2_tutorials colcon build --symlink-install source install/setup.bash ``` 上述脚本适用于基于ROS Humble版本的操作环境。如果使用的其他发行版,则需调整分支名称以匹配相应版本号[^2]。 #### 4. 示例代码解析 下面展示了一个简单的C++ API调用实例,该片段展示了如何初始化一个机器人模型对象并与之交互: ```cpp #include <rclcpp/rclcpp.hpp> #include <moveit/robot_model_loader/robot_model_loader.h> int main(int argc, char **argv) { rclcpp::init(argc, argv); // 加载机器人模型 auto node = std::make_shared<rclcpp::Node>("robot_model_test"); moveit::core::RobotModelLoaderPtr model_loader(new moveit::core::RobotModelLoader("robot_description")); const moveit::core::RobotModelConstPtr& kinematic_model = model_loader->getModel(); RCLCPP_INFO(node->get_logger(), "Loaded a robot model with %zu joints", kinematic_model->getJointModels().size()); return 0; } ``` 这段代码创建了一个节点,加载了指定参数名下的机器人描述数据,并打印出活动关节的数量作为验证。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值