当前位置: 首页 > 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

http://www.dtcms.com/a/53188.html

相关文章:

  • 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 操作指南
  • 风电场安全革命:博冠8K超高清AI巡检如何避免坠塔悲剧重演
  • 指针的运用补充
  • linux | Vim 命令快捷操作
  • 基于HAproxy搭建负载均衡
  • 线程池详解:三大方法、七大参数、四大拒绝策略
  • 信号与系统第二章学习(七)
  • 【NetTopologySuite类库】geojson和shp互转,和自定义对象互转
  • Minikube+HyperV 踩坑记
  • 2025-03-06 学习记录--C/C++-PTA 习题6-6 使用函数输出一个整数的逆序数
  • linux应用:文件描述符、lseek