当前位置: 首页 > news >正文

ROS2 Rviz 实战:给 panda 机械臂场景塞个圆柱体

视频讲解

ROS2 Rviz 实战:给 panda 机械臂场景塞个圆柱体

创建add_cylinder的package

ros2 pkg create add_cylinder --build-type ament_cmake --dependencies rclcpp control_msgs moveit_ros_planning_interface

在src中添加add_cylinder.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("add_cylinder");

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

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

    // 添加圆柱体到规划场景
    moveit_msgs::msg::CollisionObject collision_object;
    collision_object.header.frame_id = move_group.getPlanningFrame();
    collision_object.id = "cylinder";

    shape_msgs::msg::SolidPrimitive primitive;
    primitive.type = primitive.CYLINDER;
    primitive.dimensions.resize(2);
    primitive.dimensions[0] = 0.05;  // 高度
    primitive.dimensions[1] = 0.01;   // 半径

    geometry_msgs::msg::Pose cylinder_pose;
    cylinder_pose.orientation.w = 1.0;
    cylinder_pose.position.x = 0.5;
    cylinder_pose.position.y = 0.0;
    cylinder_pose.position.z = 0.0;

    collision_object.primitives.push_back(primitive);
    collision_object.primitive_poses.push_back(cylinder_pose);
    collision_object.operation = collision_object.ADD;

    std::vector<moveit_msgs::msg::CollisionObject> collision_objects;
    collision_objects.push_back(collision_object);
    planning_scene_interface.applyCollisionObjects(collision_objects);

    rclcpp::shutdown();
    return 0;
}

CMakeLists.txt文件如下

cmake_minimum_required(VERSION 3.8)
project(add_cylinder)

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(add_cylinder src/add_cylinder.cpp)
ament_target_dependencies(add_cylinder rclcpp moveit_ros_planning_interface)

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

ament_package()

编译

cd ~/ws_moveit 
colcon build --packages-select add_cylinder

先启动Rviz2的panda机械臂场景

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

在其一个终端,输入如下指令

source install/setup.bash 
ros2 run add_cylinder add_cylinder

相关文章:

  • Win7重装不翻车!ISO镜像安全下载渠道+BIOS设置避雷手册
  • `label` 标签的 `for` 属性详解
  • Nacos高频面试题10个
  • Mybatis的优缺点
  • 苹果商店上架流程,app上架发布流程
  • supervisord管理Gunicorn进程,使用Nginx作为反向代理运行flask web项目
  • 【无监督学习】层次聚类步骤及matlab实现
  • SQL语句执行顺序是什么?
  • Linux之SO_REUSEPORT属性笔记
  • 牛客周赛 Round 83
  • 996引擎-问题处理:实现自定义道具变身卡
  • R语言——数据类型
  • Embedding技术:DeepWalkNode2vec
  • 开发社交陪玩app小程序
  • 三口插头 接线定义
  • 【Ubuntu】Vim 9.1.0821 编译安装
  • 【论文分享】推理大模型Post-Training技术的全面综述
  • Android Framework 常见面试题
  • 前端基础入门-高级
  • IntelliJ IDEA 中的 Git 操作指南
  • 韩国吃秀在哪个网站做直播/百度收录
  • 惠州网站制作培训/seo网站推广助理
  • 招商网站大全五金电器/广州seo工程师
  • 网站开发培训学院/cms自助建站系统
  • 购物网站前台功能模块/百度搜索广告
  • ftp上传网站全教程/营销活动怎么做吸引人