ros中和RVIZ交互显示的InteractiveMarker简单例子

devtools/2024/10/18 2:50:02/
#include <ros/ros.h>
#include <visualization_msgs/InteractiveMarkerFeedback.h>
#include <interactive_markers/interactive_marker_server.h>
#include <sstream>  // 包含 stringstream// 回调函数,用于处理用户的互动反馈
void processFeedback(const visualization_msgs::InteractiveMarkerFeedbackConstPtr &feedback)
{ROS_INFO_STREAM(feedback->marker_name << " is now at "<< feedback->pose.position.x << ", " << feedback->pose.position.y<< ", " << feedback->pose.position.z);
}int main(int argc, char** argv)
{// 初始化ROS节点ros::init(argc, argv, "multiple_markers");ros::NodeHandle n;// 创建一个交互式标记服务器interactive_markers::InteractiveMarkerServer server("multiple_markers");// 定义要创建的方块数量const int num_cubes = 3;// 为每个方块创建交互式标记for (int i = 0; i < num_cubes; ++i) {// 创建一个交互式标记visualization_msgs::InteractiveMarker int_marker;int_marker.header.frame_id = "base_link";std::stringstream ss;ss << "cube_" << i;int_marker.name = ss.str();int_marker.description = "Simple 3-DOF Control";// 设置方块的位置int_marker.pose.position.x = i * 1.0;  // 沿X轴放置方块int_marker.pose.orientation.w = 1.0;// 创建一个灰色立方体作为可视化元素visualization_msgs::Marker box_marker;box_marker.type = visualization_msgs::Marker::CUBE;box_marker.scale.x = 0.45;box_marker.scale.y = 0.45;box_marker.scale.z = 0.45;box_marker.color.r = 0.5;box_marker.color.g = 0.5;box_marker.color.b = 0.5;box_marker.color.a = 1.0;// 创建一个总是可见的控制项,包含上面的立方体visualization_msgs::InteractiveMarkerControl box_control;box_control.always_visible = true;box_control.markers.push_back(box_marker);// 将控制项添加到交互式标记int_marker.controls.push_back(box_control);// 创建三个可以沿X、Y、Z轴移动的控制项for (int j = 0; j < 3; ++j) {visualization_msgs::InteractiveMarkerControl control;control.orientation.w = 1;control.orientation.x = 0;control.orientation.y = 0;control.orientation.z = 0;// 使用 stringstream 来格式化名称std::stringstream ss_control;ss_control << "move_" << j;control.name = ss_control.str();control.interaction_mode = visualization_msgs::InteractiveMarkerControl::MOVE_AXIS;if (j == 0) {control.orientation.y = 1;control.orientation.w = 0;} else if (j == 1) {control.orientation.z = 1;control.orientation.w = 0;}int_marker.controls.push_back(control);}// 将交互式标记插入服务器,并设置回调函数server.insert(int_marker, &processFeedback);}// 应用更改server.applyChanges();// 进入主循环ros::spin();return 0;
}

visualization_msgs::InteractiveMarker int_marker;controls里都是InteractiveMarkerControl对象,其中InteractiveMarkerControl 可以添加若干Marker(若干静态元素,默认是静态)如box_control,也添加可以是控制方式如:control。
通常:一个int_marker里添加若干个InteractiveMarkerControl,其中一个InteractiveMarkerControl添加Maker定义物体尺寸,其余若干个InteractiveMarkerControl表示对这个物体的控制。 然后在将int_marker添加到交互服务server.insert(int_marker, &processFeedback);
若:int_marker里有多个Maker,则表示对这多个物体一起控制
若:想添加两个不同的物体独立控制,则向server.insert两个InteractiveMarker即可


http://www.ppmy.cn/devtools/125357.html

相关文章

Llama-3.2-3B-Instruct PyTorch模型微调最佳实践

1 引言 Meta Llama 3.2多语言大型语言模型集合&#xff08;LM&#xff09;是一个1B和3B大小&#xff08;文本输入/文本输出&#xff09;的预训练和指令微调模型集合。Llama 3.2指令调整的纯文本模型针对多语言对话用例进行了优化&#xff0c;包括智能检索和总结任务。它们在常…

【万字长文】Word2Vec计算详解(二)Skip-gram模型

【万字长文】Word2Vec计算详解&#xff08;二&#xff09;Skip-gram模型 写在前面 本篇介绍Word2Vec中的第二个模型Skip-gram模型 【万字长文】Word2Vec计算详解&#xff08;一&#xff09;CBOW模型 markdown行 9000 【万字长文】Word2Vec计算详解&#xff08;二&#xff09;S…

PHP常见机制

文章目录 前言1.魔术方法2.类型提示3.闭包和匿名函数4. Traits5. 命名空间6. 序列化与反序列化7. 反向映射总结 前言 前面说了反射机制&#xff08;详见https://blog.csdn.net/weixin_42695345/article/details/142766219&#xff09;除了反射&#xff0c;PHP中还有一些其他机…

Python网络爬虫技术

Python网络爬虫技术详解 引言 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;又称网络蜘蛛&#xff08;Web Spider&#xff09;或网络机器人&#xff08;Web Robot&#xff09;&#xff0c;是一种按照一定规则自动抓取互联网信息的程序或脚本。它们通过遍历网页链…

JavaEE: HTTPS的魅力与优势揭秘

文章目录 HTTPSHTTPS 是什么HTTPS 基本工作过程Fiddle 等抓包工具,为啥能解析 HTTPS 的数据? HTTPS HTTPS 是什么 HTTPS 是一个应用层协议,是在 HTTP 协议的基础上引入了一个加密层. 几个核心概念: 明文: 要传输的原始数据.密文: 把明文进行加密之后得到一个让别人不能理解…

uniapp学习(003-3 vue3学习 Part.3)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第21p-第p25的内容 文章目录 双向绑定的实现原理例子 计算属性例子1双向绑定格式改成计算属性 例子2 watchwatc…

Cesium 区域高程图

Cesium 区域高程图 const terrainAnalyse new HeightMapMaterial({viewer,style: {stops: [0, 0.05, 0.5, 1],//颜色梯度设置colors: [green, yellow, blue , red],}});

k8s的pod的管理

常用的Pod基础命令 列出所有命名空间中的所有Pod kubectl get pods --all-namespaces 列出指定命名空间中的所有Pod kubectl get pods -n <namespace> 显示指定Pod的详细信息&#xff0c;包括状态、事件等 kubectl describe pod <pod-name> -n <namespace>…