官网代码
后退地平线下一个最佳景观规划师
这个代码有些久远,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
编译问题:
-
rotors_gazebo_plugins/common.h 添加 #include <gazebo/sensors/Sensor.hh>
-
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
成功!