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

化工企业网站jsp培训机构网站

化工企业网站jsp,培训机构网站,深圳高端集团网站建设公司,婚恋网站建设项目创业计划书在机器人操作系统(ROS)中,环境建模是实现自主导航、路径规划和环境感知的关键。除了二维地图表示方法如OccupancyGrid,ROS还支持更为精细的三维地图表示方法——OctoMap。 在ROS中,验证路径规划算法的一个重要步骤是环…

在机器人操作系统(ROS)中,环境建模是实现自主导航、路径规划和环境感知的关键。除了二维地图表示方法如OccupancyGrid,ROS还支持更为精细的三维地图表示方法——OctoMap

在ROS中,验证路径规划算法的一个重要步骤是环境建模,因而需要我们具备发布地图的能力。在二维地图中主要是基于OccupancyGrid,但是该方法不支持三维地图,本文将介绍基于OctoMap库的方法来建立三维地图。

1 安装相关库

首先需要安装octomap库。以noetic版本为例,输入以下指令即可安装octomap相关库。安装完之后可以在/opt/ros/noetic/share路径下查看。特别需要注意ros-noetic-octomap-rviz-plugins,该插件可以使地图在Rviz中显示。

sudo apt-get install ros-noetic-octomap 
sudo apt-get install ros-noetic-octomap-mapping 
sudo apt-get install ros-noetic-octomap-msgs 
sudo apt-get install ros-noetic-octomap-ros 
sudo apt-get install ros-noetic-octomap-rviz-plugins
sudo apt-get install ros-noetic-octomap-server

2 创建工作空间

#include <ros/ros.h>  /* octomap 相关头文件 */
#include <octomap/ColorOcTree.h>            // 引入颜色Octree的相关定义
#include <octomap/Pointcloud.h>             // 引入点云的定义
#include <octomap/OcTree.h>                 // 引入Octree的定义/* octomap_msgs 相关头文件 */
#include <octomap_msgs/Octomap.h>  
#include <octomap_msgs/conversions.h>       // 用于Octomap与Ros消息之间的消息转换int main(int argc, char *argv[])  
{ros::init(argc, argv, "octomap_node");  ros::NodeHandle nh;  ros::Publisher octomap_pub = nh.advertise<octomap_msgs::Octomap>("octomap_full", 1, true);double resolution = 0.1;                // 设置Octree的分辨率为0.1米octomap::OcTree octree(resolution);     // 创建一个OcTree对象,使用指定的分辨率// 1、可以自行设置一些节点octree.updateNode(octomap::point3d(0.5, 0.5, 0.5), true); // true表示该位置被占据octree.updateNode(octomap::point3d(-0.5, -0.5, -0.5), true); octree.updateNode(octomap::point3d(1.0, 1.0, 1.0), true); // 2、也可以接收点云信息octomap::Pointcloud pointcloud; pointcloud.push_back(0.0, 0.0, 0.0);  pointcloud.push_back(1.0, 0.0, 0.0);  pointcloud.push_back(0.0, 1.0, 0.0);  pointcloud.push_back(0.0, 0.0, 1.0);  // 遍历点云中的每一个点,并将其更新到Octree中for (size_t i = 0; i < pointcloud.size(); i++){octree.updateNode(pointcloud.getPoint(i), true);  }octomap_msgs::Octomap octomap_msg; octomap_msgs::fullMapToMsg(octree, octomap_msg);  // 将Octree转换为Octomap消息格式octomap_msg.header.frame_id = "map";              // 设置消息的坐标系为“map”octomap_msg.header.stamp = ros::Time::now();      // 设置消息的时间戳为当前时间while(ros::ok())  {octomap_pub.publish(octomap_msg);  ros::spinOnce();  }return 0;  
}

2.1 创建包

添加的依赖为:rospy roscpp std_msgs octomap_ros octomap_msgs

mkdir -p demo1_octomap_ws/src
cd demo1_octomap
catkin_make
cd src
catkin_create_pkg octomap_pkg rospy roscpp std_msgs octomap_ros octomap_msgs

2.2 编写.cpp文件

#include <ros/ros.h>  /* octomap 相关头文件 */
#include <octomap/ColorOcTree.h>            // 引入颜色Octree的相关定义
#include <octomap/Pointcloud.h>             // 引入点云的定义
#include <octomap/OcTree.h>                 // 引入Octree的定义/* octomap_msgs 相关头文件 */
#include <octomap_msgs/Octomap.h>  
#include <octomap_msgs/conversions.h>       // 用于Octomap与Ros消息之间的消息转换int main(int argc, char *argv[])  
{ros::init(argc, argv, "octomap_node");  ros::NodeHandle nh;  ros::Publisher octomap_pub = nh.advertise<octomap_msgs::Octomap>("octomap_full", 1, true);double resolution = 0.1;                // 设置Octree的分辨率为0.1米octomap::OcTree octree(resolution);     // 创建一个OcTree对象,使用指定的分辨率// 1、可以自行设置一些节点octree.updateNode(octomap::point3d(0.5, 0.5, 0.5), true); // true表示该位置被占据octree.updateNode(octomap::point3d(-0.5, -0.5, -0.5), true); octree.updateNode(octomap::point3d(1.0, 1.0, 1.0), true); // 2、也可以接收点云信息octomap::Pointcloud pointcloud; pointcloud.push_back(0.0, 0.0, 0.0);  pointcloud.push_back(1.0, 0.0, 0.0);  pointcloud.push_back(0.0, 1.0, 0.0);  pointcloud.push_back(0.0, 0.0, 1.0);  // 遍历点云中的每一个点,并将其更新到Octree中for (size_t i = 0; i < pointcloud.size(); i++){octree.updateNode(pointcloud.getPoint(i), true);  }octomap_msgs::Octomap octomap_msg; octomap_msgs::fullMapToMsg(octree, octomap_msg);  // 将Octree转换为Octomap消息格式octomap_msg.header.frame_id = "map";              // 设置消息的坐标系为“map”octomap_msg.header.stamp = ros::Time::now();      // 设置消息的时间戳为当前时间while(ros::ok())  {octomap_pub.publish(octomap_msg);  ros::spinOnce();  }return 0;  
}

2.3 编写CMakeLists 文件

cmake_minimum_required(VERSION 3.0.2)
project(octomap_pkg)find_package(catkin REQUIRED COMPONENTSoctomap_rosroscpprospystd_msgsoctomap_msgs
)catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES octomap_pkg
#  CATKIN_DEPENDS octomap_ros roscpp rospy std_msgs
#  DEPENDS system_lib
)include_directories(
# include${catkin_INCLUDE_DIRS}
)add_executable(octomap_node src/octomap_node.cpp)
target_link_libraries(octomap_node ${catkin_LIBRARIES})

3 实现效果

运行代码,打开rviz,按照如下步骤选择消息类型并且订阅话题。

以下是程序效果

http://www.dtcms.com/wzjs/11915.html

相关文章:

  • 马鞍山网站制作互联网域名注册查询
  • 做模板网站镇江seo优化
  • 广州知名网站设计网络精准营销推广
  • 人民日报客户端我爱红旗推动防控措施持续优化
  • 麻涌东莞网站建设市场营销推广方案模板
  • 门户网站建设工作汇报网络推广渠道都有哪些
  • 邯郸做网站的博客广告投放是什么工作
  • 南通网站建设推广收录网
  • 帝国cms怎么做网站地图天津关键词优化网排名
  • 网站模板排名宁波seo公司哪家好
  • 潍坊网站建设招聘seo外链推广
  • 一级a做爰片在线看免播放器网站搜索引擎推广的基本方法
  • 银行 网站开发 干什么网店推广运营策略
  • 怎么搭建一个自己的网站网络推广运营团队
  • 基础建设龙头股班级优化大师app下载学生版
  • 全国大学生职业生涯规划大赛官网徐州seo公司
  • 做网站的人多吗网站设计与实现毕业设计
  • 区校合作网站建设方案外贸网站推广与优化
  • 手机硬件开发竞价托管优化公司
  • 永康网站建设公司付费推广外包
  • 头条有没有做网站的网站seo方案模板
  • 如何建立自己推广网站市场调研问卷调查怎么做
  • 网站建设的重要性关键词排名怎么做上首页
  • 做精酿啤酒购买的网站dreamweaver网页制作
  • 建材类网站模板长沙网站推广排名优化
  • 青岛城阳网站建设志鸿优化设计官网
  • 用dw制作网站模板下载营销对企业的重要性
  • 阿里云网站搭建教程美食软文300字
  • 哪个网站可以帮助做数学题百家号关键词seo优化
  • 国务院办公厅关于加强政府网站信息内容建设的意见 首次郑州高端网站建设