一文搞定!ROS2 中用 MoveIt2 精准操控 Panda 机械臂末端至固定位姿

视频讲解

一文搞定!ROS2 中用 MoveIt2 精准操控 Panda 机械臂末端至固定位姿

在《ROS2 应用:按键控制 MoveIt2 中 Panda 机械臂关节位置》中介绍了如何控制关节位置,今天介绍下如何控制笛卡尔空间下的末端位姿

创建package,命名panda_moveit_controller,依赖moveit_ros_planning_interface

ros2 pkg create --build-type ament_cmake panda_moveit_controller --dependencies rclcpp moveit_ros_planning_interface

在~/ros2_ws/src/panda_moveit_controller/src目录下创建panda_moveit_control.cpp

#include <rclcpp/rclcpp.hpp>
#include <moveit/move_group_interface/move_group_interface.h>
#include <moveit/planning_scene_interface/planning_scene_interface.h>

#include <tf2/LinearMath/Quaternion.h>
#include <tf2_geometry_msgs/tf2_geometry_msgs.h>

#include <cmath>

// 定义一个将度数转换为弧度的函数
double degreesToRadians(double degrees) {
    return degrees * M_PI / 180.0;
}

int main(int argc, char** argv)
{
    rclcpp::init(argc, argv);
    auto node = rclcpp::Node::make_shared("panda_moveit_control");

    // 创建MoveGroupInterface对象,指定规划组名称
    moveit::planning_interface::MoveGroupInterface move_group(node, "panda_arm");

    // 创建PlanningSceneInterface对象
    moveit::planning_interface::PlanningSceneInterface planning_scene_interface;

    // 获取规划组的参考坐标系
    std::string planning_frame = move_group.getPlanningFrame();
    RCLCPP_INFO(node->get_logger(), "Planning frame: %s", planning_frame.c_str());

    // 获取规划组的末端执行器名称
    std::string end_effector_link = move_group.getEndEffectorLink();
    RCLCPP_INFO(node->get_logger(), "End effector link: %s", end_effector_link.c_str());

    // 设置目标位置
    geometry_msgs::msg::Pose target_pose;

    // 定义欧拉角(单位:弧度)
    double roll = degreesToRadians(0.0);
    double pitch = degreesToRadians(180.0);
    double yaw = degreesToRadians(0.0);

    // 创建一个四元数对象
    tf2::Quaternion quaternion;
    // 根据欧拉角设置四元数
    quaternion.setRPY(roll, pitch, yaw);

    // 将tf2的四元数转换为geometry_msgs的四元数
    target_pose.orientation = tf2::toMsg(quaternion);

    target_pose.position.x = 0.4;
    target_pose.position.y = 0.1;
    target_pose.position.z = 0.4;
    move_group.setPoseTarget(target_pose);

    // 进行运动规划
    moveit::planning_interface::MoveGroupInterface::Plan my_plan;
    bool success = (move_group.plan(my_plan) == moveit::core::MoveItErrorCode::SUCCESS);
    RCLCPP_INFO(node->get_logger(), "Planning %s", success ? "SUCCEEDED" : "FAILED");

    // 执行运动规划
    if (success) {
        move_group.execute(my_plan);
    }

    rclcpp::shutdown();
    return 0;
}

修改CMakeLists.txt文件

cmake_minimum_required(VERSION 3.8)
project(panda_moveit_controller)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# 查找依赖项
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(moveit_ros_planning_interface REQUIRED)

# 添加可执行文件
add_executable(panda_moveit_control src/panda_moveit_control.cpp)
ament_target_dependencies(panda_moveit_control rclcpp moveit_ros_planning_interface)

# 安装可执行文件
install(TARGETS
  panda_moveit_control
  DESTINATION lib/${PROJECT_NAME}
)

ament_package()

编译运行

一个终端启动panda机械臂在Rviz中的场景

ros2 launch moveit2_tutorials demo.launch.py rviz_config:=panda_moveit_config_demo_empty.rviz

另一个启动末端控制

cd ~/ros2_ws
colcon build --packages-select panda_moveit_controller
source install/setup.bash
ros2 run panda_moveit_controller panda_moveit_control

03-08
### MoveIt2 安装配置教程及常见问题解决 #### 一、MoveIt2 概述 MoveIt 是一个用于机器人运动规划的强大框架,广泛应用于工业和服务机器人领域。随着ROS 2的发展,MoveIt也升级到了MoveIt2版本,在ROS 2环境中提供了更强大的功能和支持[^1]。 #### 二、安装准备工作 为了顺利安装MoveIt2,需先完成一些前置条件的设置: - **环境准备**:确保已安装Ubuntu操作系统以及对应的ROS 2发行版(如Foxy Fitzroy)。对于特定的操作系统和ROS版本组合,请参照官方文档确认兼容性。 - **依赖项安装**:通过命令行工具`apt-get update && apt-get install ros-$ROS_DISTRO-moveit`来获取必要的依赖库和其他组件。 #### 三、安装MoveIt2源码并构建工作空间 按照如下步骤操作可以将最新的MoveIt2源码克隆到本地,并建立相应的工作目录结构以便后续开发: 1. 创建一个新的ROS 2工作区: ```bash mkdir -p ~/ws_moveit2/src cd ~/ws_moveit2/ ``` 2. 下载MoveIt2仓库中的最新代码: ```bash vcs import src < https://raw.githubusercontent.com/ros-planning/moveit2/main/dependencies.repos git clone --branch main https://github.com/ros-planning/moveit2.git src/moveit2 ``` 3. 更新子模块并初始化: ```bash cd src/moveit2 git submodule update --init --recursive cd .. ``` 4. 构建整个项目: ```bash colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release source install/setup.bash ``` #### 四、验证安装成果 启动RViz可视化界面测试是否能正常加载MoveIt2插件及相关资源文件: ```bash ros2 launch moveit2_examples demo.launch.py ``` 如果一切正常,则可以在图形界面上看到机器人的模型及其周围的空间障碍物表示形式。 #### 常见问题解答 当尝试运行上述过程时可能会遇到各种各样的挑战,下面列举了一些常见的错误提示及其解决方案: - 如果收到关于找不到某些包的信息,这通常意味着还需要额外安装其他依赖关系;可以通过搜索具体的报错信息找到相应的APT包名来进行补充安装。 - 对于编译失败的情况,建议仔细检查CMakeLists.txt文件内的路径定义是否有误,同时注意不同平台间可能存在差异化的编译参数需求。 - 当无法连接至互联网从而影响git拉取速度甚至失败时,考虑更换国内镜像站点加速下载效率。 ```cpp // 示例:创建简单的MoveIt!节点 #include <moveit/move_group_interface/move_group_interface.h> int main(int argc, char **argv){ rclcpp::init(argc, argv); auto const node = std::make_shared<rclcpp::Node>("hello_moveit"); // 初始化MoveGroup接口实例... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值