Moveit2 第一个C++规划程序

编写C++项目

1、创建包

cd到src目录

bash 复制代码
cd src

创建C++包

bash 复制代码
ros2 pkg create \
 --build-type ament_cmake \
 --dependencies moveit_ros_planning_interface rclcpp \
 --node-name hello_moveit hello_moveit

请注意,我们已将 <package_name>``moveit_ros_planning_interface <package_name> 添加为依赖项。这将对 <package_name><package_name> 文件rclcpp进行必要的更改,以便我们可以依赖这两个软件包。package.xml``CMakeLists.txt

2、创建 ROS 节点和执行器

c++ 复制代码
#include <memory>
#include <rclcpp/rclcpp.hpp>
#include <moveit/move_group_interface/move_group_interface.hpp>

int main(int argc, char *argv[])
{
  // 初始化ROS并创建节点
  rclcpp::init(argc, argv);
  auto const node = std::make_shared<rclcpp::Node>(
      "hello_moveit",
      rclcpp::NodeOptions().automatically_declare_parameters_from_overrides(true));

  // 创建 ROS logger
  auto const logger = rclcpp::get_logger("hello_moveit");

  // 下一步,创建 MoveIt! 的 MoveGroupInterface 对象

  // 关闭 ROS
  rclcpp::shutdown();
  return 0;
}

将目录切换回工作区目录ws_moveitcd ..,然后运行以下命令:

bash 复制代码
colcon build --mixin debug

成功后,打开一个新的终端,然后在该新终端中执行工作区环境脚本

bash 复制代码
cd ~/ws_moveit
source install/setup.bash

运行程序并查看输出结果

bash 复制代码
ros2 run hello_moveit hello_moveit

使用 MoveGroupInterface 进行计划和执行

将"下一步,创建 MoveIt! 的 MoveGroupInterface 对象"的注释替换为以下代码

c++ 复制代码
  using moveit::planning_interface::MoveGroupInterface;
  auto move_group_interface = MoveGroupInterface(node, "manipulator");

  // 设置一个目标位姿
  // 起始姿态隐式地等于关节状态发布器发布的位置,
  auto const target_pose = []
  {
    geometry_msgs::msg::Pose msg;
    msg.orientation.w = 1.0;
    msg.position.x = 0.28;
    msg.position.y = -0.2;
    msg.position.z = 0.5;
    return msg;
  }();
  move_group_interface.setPoseTarget(target_pose);

  // 创建一个目标点规划
  auto const [success, plan] = [&move_group_interface]
  {
    moveit::planning_interface::MoveGroupInterface::Plan msg;
    auto const ok = static_cast<bool>(move_group_interface.plan(msg));
    return std::make_pair(ok, msg);
  }();

  // 执行规划
  if (success)
  {
    move_group_interface.execute(plan);
  }
  else
  {
    RCLCPP_ERROR(logger, "Planning failed!");
  }
  • 启始姿态可以通过MoveGroupInterface::setStartState*设置

在工作区目录中ws_moveit,运行以下命令:

bash 复制代码
colcon build --mixin debug

在另一个终端中,加载工作区,然后执行以下命令:

bash 复制代码
ros2 launch moveit2_tutorials demo.launch.py

在第三个终端中,加载工作区并运行你的程序

bash 复制代码
source install/setup.bash

ros2 run hello_moveit hello_moveit

RViz 中的机器人会移动并最终摆出以下姿势:

如果在 10 秒内找不到robot_description就会报错退出

相关推荐
AI工具测评家6 分钟前
降低AIGC检测率的5种有效策略:从技术原理出发,别再只会同义词替换了
人工智能·aigc·降重·ai检测·查重·降ai
m4Rk_8 分钟前
【论文阅读】Agent 记忆机制(63):SAMem——把经验记忆细化为带长期价值的状态—Thought
论文阅读·人工智能·学习·开源·github
龍德明宇8 分钟前
从「桔槔之诫」到 Vibe Coding:你的控制权正在被偷走-龍德明宇
人工智能·大语言模型llm·vibe coding·负主体性·ai存在论
飞哥数智坊10 分钟前
周末薅 Token 羊毛,没想到 ZCode 已经把开发和测试打通了
人工智能·ai编程
matlab代码13 分钟前
matlab车牌出入库识别系统停车场演示【源码61期】
人工智能·计算机视觉
醍醐实验室16 分钟前
测试时搜索 vs 采样扩展:Pass@k 与 Majority Voting 的效率边界
人工智能
hyunbar77720 分钟前
腾讯云 Ubuntu 24.04上通过 Docker 部署 PostgreSQL
人工智能
向哆哆22 分钟前
鸡行为目标检测数据集:3类别 | 目标检测
人工智能·目标检测·计算机视觉
MindUp28 分钟前
免费AI工具实测:3款编程与办公辅助方案对比(2026)
人工智能
XIANGCHU88828 分钟前
市场周刊| 促进中小企业发展“十五五”规划发布 推进残疾学生职业教育和就业衔接发展
人工智能