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

ubuntu20复现NBV探索

官网代码

后退地平线下一个最佳景观规划师

      这个代码有些久远,issue里面有人已经在ubuntu20里面使用了3dmr,但是他那个代码我也运行不成功,docker网络一直也不佳,所以还是自己重新修改源码靠谱。

最终实现的代码等有时间上传到github上。

最终实现的代码:下载后直接编译,我前面配置过环境所以都不缺,如果有什么缺的可以回复,我完善下。

GitHub - anning808/nbvplanner: A real-time capable exploration and inspection path planner (next best view planning)

catkin build

roslaunch interface_nbvp_rotors flat_exploration.launch

规划器的安装和执行

要运行当前版本,请编译包 nbvplanner。要获取它,请导航到 ros 工作区的源文件夹:

git clone https://github.com/ethz-asl/nbvplanner.git

cd nbvplanner git submodule init --

git submodule sync --recursive

git submodule update --recursive

cd ..

此外,请确保您拥有所有必要的库:

sudo apt-get install ros-noetic-octomap-*

sudo apt-get install python-catkin-tools

编译问题:

  1. rotors_gazebo_plugins/common.h 添加 #include <gazebo/sensors/Sensor.hh>

  2. gazebo_odometry_plugin.cpp 更改:

octomath::Vector3 p = to_check.top();
if ((p.x() > bounding_box_origin.x - bounding_box_lengths.x / 2) &&(p.x() < bounding_box_origin.x + bounding_box_lengths.x / 2) &&(p.y() > bounding_box_origin.y - bounding_box_lengths.y / 2) &&(p.y() < bounding_box_origin.y + bounding_box_lengths.y / 2) &&(p.z() > bounding_box_origin.z - bounding_box_lengths.z / 2) &&(p.z() < bounding_box_origin.z + bounding_box_lengths.z / 2) &&(!octomap_->search(p))) {octomap_->setNodeValue(p, 0);

改为 : 

ignition::math::Vector3<double> p = to_check.top();octomap::point3d point(p.X(), p.Y(), p.Z());if ((p.X() > bounding_box_origin.X() - bounding_box_lengths.X() / 2) &&(p.X() < bounding_box_origin.X() + bounding_box_lengths.X() / 2) &&(p.Y() > bounding_box_origin.Y() - bounding_box_lengths.Y() / 2) &&(p.Y() < bounding_box_origin.Y() + bounding_box_lengths.Y() / 2) &&(p.Z() > bounding_box_origin.Z() - bounding_box_lengths.Z() / 2) &&(p.Z() < bounding_box_origin.Z() + bounding_box_lengths.Z() / 2) &&(!octomap_->search(point))) {octomap_->setNodeValue(point, 0);

3.版本不同需要更换的内容,使用vscode全局搜索,全局替换(有部分不是全局修改)

最好选择一个个编译,一个一个改。

  • 全局替换:add_definitions(-std=c++11)  →add_definitions(-std=c++14)

  • 全局替换:GetPhysicsEngine() →Physics()

  • 全局替换:#include <gazebo/math/Vector3.hh> → #include <ignition/math.hh>

  • 全局替换:math::Vector3 → ignition::math::Vector3<double>

  • 全局替换:event::Events::DisconnectWorldUpdateBegin(updateConnection); → this->updateConnection.reset();

  • 全局替换:GetSimTime →SimTime

  • 全局替换:include_directories(${Eigen_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS}) → include_directories(${Eigen_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS} ../../../devel/include)

  • 全局替换:GetAngle(0).Radian(); → Position(0);

  • 全局替换:event::Events::DisconnectWorldUpdateBegin(update_connection_); → this->updateConnection.reset();

  • GetGlobalAxis →GlobalAxis

  • math::Quaternion → ignition::math::Quaternion<double>

  • GetWorldCoGPose →WorldCoGPose

  • pose_difference.rot.RotateVector →pose_difference.Rot().RotateVector

  • GetRelativeLinearVel → RelativeLinearVel

  • GetWorldPose → WorldPose

  • GetEntity → EntityByName

  • GetRelativeAngularVel → RelativeAngularVel

  • .rot. → .Rot().

  • .rot → .Rot()

  • GetInverse → Inverse

  • sdf::Vector3 → ignition::math::Vector3<double>

  • CV_LOAD_IMAGE_GRAYSCALE -> cv::IMREAD_GRAYSCALE

  • GetRelativeLinearAccel -> RelativeLinearAccel

  • GetWorldAngularVel -> WorldAngularVel

  • GetLength -> Length

  • 参考:

官方7-》8的迁移记录,可以换tag找其他版本

https://github.com/gazebosim/gazebo-classic/blob/gazebo8_8.0.0_beta1/Migration.md

gazebo7---->gazebo9代码迁移_event::events::disconnectworldupdatebegin(this->up-CSDN博客

编译nbv_planner遇到的问题_nbvplanner-CSDN博客

4.usr/bin/ld: 找不到 -lUUID::UUID sudo apt-get install uuid-dev 还是找不到就自己软链接:locate libuuid搜索位置 然后创建软链接 cd /usr/lib/ sudo ln -s x86_64-linux-gnu/libuuid.so libUUID::UUID.so

5.error: ‘class ignition::math::v6::Vector3<double>’ has no member named ‘x’ 类似很多vel.z的xyz的格式改为 vel→X()格式,但是不能全局替换,只能根据报错部分一点点替换改为大写的X()Y()Z()

6.将 interface_nbvp_rotors 的 CMakeLists.txt 从

include_directories(${Eigen_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS})

更改为

include_directories(${Eigen_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS} ../../../devel/include)

7.修改添加头文件 gazebo_imu_plugin.cpp里面的

gravity_W_ = world->Physics()->GetGravity();

imu_parameters.gravity_magnitude = gravity_W_.GetLength();

更换为
#include <gazebo/physics/World.hh>(添加到最前面)

(替换上面位置)  gravity_W_ = world_->Physics()->World()->Gravity();imu_parameters_.gravity_magnitude = gravity_W_.Length();

编译

catkin build 

成功!

几个运行问题:

对于模拟演示启动

运行失败noetic启动方式改变:

$(find rotors_description)/scripts/xacro.py

改为:

$(find rotors_description)/scripts/xacro

还有部分问题根据别人的回答解决:

​​​​​​​Error running demo launch file · Issue #30 · ethz-asl/nbvplanner · GitHub

https://orfaustria1.com/?_=/ethz-asl/rotors_simulator/issues/710#KJWqMdlUlBnsIvkdRR+uhIT4

运行:

roslaunch interface_nbvp_rotors flat_exploration.launch

成功!

http://www.lryc.cn/news/414444.html

相关文章:

  • 【51单片机仿真】基于51单片机设计的温湿度采集检测系统仿真源码文档视频——文末资料下载
  • 【Hadoop-驯化】一文学会hadoop访问hdfs中常用命令使用技巧
  • 【Spring】Bean详细解析
  • 决策树总结
  • 通俗易懂!495页看漫画学Python入门教程(全彩版)Git首发破万Star
  • websocket实现简易聊天室
  • vulhub-wordpress
  • 【机器学习算法基础】(基础机器学习课程)-10-逻辑回归-笔记
  • 自动驾驶行业知识汇总
  • C#根据反射操作对象
  • 打包python脚本(flask、jinja2)为exe文件
  • 嵌入式初学-C语言-练习三
  • 最新版Sonible Plugins Bundle v2024 winmac,简单智能,持续更新长期有效
  • J032_实现简易版的B/S架构
  • 【前端面试】五、框架
  • C语言 | Leetcode C语言题解之第316题去除重复字母
  • 本地部署 Llama-3-EvoVLM-JP-v2
  • Evaluating the Generation Capabilities of Large Chinese Language Models
  • YOLOv8添加注意力模块并测试和训练
  • 「Unity3D」自动布局LayoutElement、ContentSizeFitter、AspectRatioFitter、GridLayoutGroup
  • 【Golang 面试 - 进阶题】每日 3 题(十六)
  • Redis2
  • C语言--函数
  • Shell 编程的高级技巧和实战应用
  • VMWare虚拟机如何连接U盘
  • 【学习笔记】后缀自动机(SAM)
  • Godot的节点与场景
  • C++ 学习(2) ---- std::cout 格式化输出
  • 前端拿不到Long类型成员变量,用@JsonSerialize(using = ToStringSerializer.class)序列化一下
  • JWT登录校验流程