vladyslavusenko / ewok Goto Github PK
View Code? Open in Web Editor NEWEwok: Real-Time Trajectory Replanning for MAVs using Uniform B-splines and 3D Circular Buffer
Ewok: Real-Time Trajectory Replanning for MAVs using Uniform B-splines and 3D Circular Buffer
i've installed all dependencies and the packages but when i run catkin_make
it appears like this
[ 83%] Building CXX object ewok/ewok_simulation/CMakeFiles/bspline_lee_position_controller_node.dir/src/bspline_lee_position_controller_node.cpp.o
/home/lgm/demo_ros/src/ewok/ewok_simulation/src/bspline_lee_position_controller_node.cpp:22:10: fatal error: mav_msgs/default_topics.h: don't have that file
22 | #include <mav_msgs/default_topics.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
While working with the EWOK repository I identified an opportunity to enhance its versatility and usability, particularly in scenarios involving wheeled robots. To achieve this, I have introduced a modification that allows for different map sizes along different axes.
In many practical environments, it is essential to accommodate varying map sizes to meet specific requirements. This adjustment makes the codebase more generic, adaptable, and suitable for a broader range of applications, including cases where the map size along the z-axis is notably smaller.
Having implemented this enhancement in my local branch, I believe that it could be a valuable addition to the EWOK project and of benefit to the entire community. It aligns with the principles of modularity and flexibility, enabling users to configure map sizes in a way that suits their specific needs.
If the community and maintainers find this feature promising and in line with the project's goals, I am eager to contribute it formally. Please let me know your thoughts on this proposal, and if deemed suitable, I am prepared to create a new pull request to facilitate its integration into the main project.
Hi @vsu91
Thank you for your work to make it open source.
I am getting the following error while trying to run the package.
[ INFO] [1597325860.517856371]: path: /home/double/catkin_ewok/src/ewok/ewok_simulation/benchmarking/
[ INFO] [1597325860.537020784]: InitializeParams
[ INFO] [1597325860.550767455]: Finished BSplineLeePositionControllerNode constructor
[ INFO] [1597325860.566771333]: Started hovering example with parameters: start - -15.000000 15.000000 1.000000 -0.785398, middle - 5.000000 0.000000 1.000000 -0.785398, stop - -15.000000 -15.000000 1.000000 -0.785398
[ INFO] [1597325860.566796963]: dt: 0.500000, num_opt_points: 7
Trajectory times: 20.8333 20.8333
[ INFO] [1597325860.567721641]: Wait for 1 second before trying to unpause Gazebo again.
[ INFO] [1597325860.753415419]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1597325860.753885578]: waitForService: Service [/gazebo/set_physics_properties] has not been advertised, waiting...
[ INFO] [1597325860.768833402]: Finished loading Gazebo ROS API Plugin.
[ INFO] [1597325860.769230398]: waitForService: Service [/gazebo/set_physics_properties] has not been advertised, waiting...
SpawnModel script started
[INFO] [1597325860.942607, 0.000000]: Loading model XML from ros parameter
[INFO] [1597325860.947402, 0.000000]: Waiting for service /gazebo/spawn_urdf_model
[INFO] [1597325861.551739, 0.000000]: Calling service /gazebo/spawn_urdf_model
[INFO] [1597325861.710047, 0.000000]: Spawn status: SpawnModel: Successfully spawned entity
[ INFO] [1597325861.710074699]: Unpaused the Gazebo simulation.
[ INFO] [1597325861.861922785]: Camera Plugin: Using the 'robotNamespace' param: '/firefly/'
[ INFO] [1597325861.864644260]: Camera Plugin (ns = /firefly/) <tf_prefix_>, set to "/firefly"
[firefly/spawn_firefly-3] process has finished cleanly
log file: /home/double/.ros/log/d9ed7e34-dd66-11ea-9c94-94c691bb0330/firefly-spawn_firefly-3*.log
[ INFO] [1597325861.991002440, 154.896000000]: waitForService: Service [/gazebo/set_physics_properties] is now available.
[ INFO] [1597325861.991768525, 154.896000000]: waitForService: Service [/gazebo/set_physics_properties] is now available.
[ INFO] [1597325862.069342955, 154.966000000]: Physics dynamic reconfigure ready.
[ INFO] [1597325862.074381926, 154.976000000]: Physics dynamic reconfigure ready.
[ INFO] [1597325862.260282563, 155.166000000]: LeePositionController got first odometry message.
[firefly/bspline_lee_position_controller_node-4] process has died [pid 14863, exit code -11, cmd /home/double/catkin_ewok/devel/lib/ewok_simulation/bspline_lee_position_controller_node odometry:=odometry_sensor1/odometry __name:=bspline_lee_position_controller_node __log:=/home/double/.ros/log/d9ed7e34-dd66-11ea-9c94-94c691bb0330/firefly-bspline_lee_position_controller_node-4.log].
log file: /home/double/.ros/log/d9ed7e34-dd66-11ea-9c94-94c691bb0330/firefly-bspline_lee_position_controller_node-4*.log
[ INFO] [1597325866.975614268, 159.876000000]: Publishing waypoint on namespace //firefly: [-15.000000, 15.000000, 1.000000, -0.785398].
[ INFO] [1597325871.978982062, 164.876000000]: Origin: -14.8778 14.964 0.258 idx -100 99 1
Sometimes the drone will fly disorderly, sometimes the drone will not start. I use the Ubuntu 16.4.
How can I fix it ?Thanks.
To solve this issue you have to install libatlas-base-dev
sudo apt-get install libatlas-base-dev
Hi @vsu91
I read your paper and played with your simulator, it is excellent!
Thank you for your work to make it open source.
Then when I try to launch trajectory_replanning_forest.launch, I found forest0.world file is missing.
Would it be open in the future?
Thx in advance.
https://github.com/VladyslavUsenko/ewok/blob/master/ewok_ring_buffer/benchmarking/benchmark.py#L11
dataset_url = 'http://filecremers3.informatik.tu-muenchen.de/rgbd/dataset/freiburg2/rgbd_dataset_freiburg2_pioneer_slam.tgz'
file location change to:
https://vision.in.tum.de/rgbd/dataset/freiburg2/rgbd_dataset_freiburg2_pioneer_slam.tgz
Hello,
I just started from scratch and these packages are missing:
libgoogle-glog-dev
ros-melodic-mavros
ros-melodic-mavros-extras
...and obviously gazebo is not yet compatible with openCV4... I had to roll back
Thanks for sharing
Regards
In code, there are some parameters such as num_opt_points, dt, distance_threshold and so on. I changed some of them. For example , dt, when I changed it, 0.5->1, or 0.5 ->0.25, the line became very weird, no smooth with many turning points. So, what's the meaning of them and how can i adjust them?
Hello everyone,
Recently I'm looking into this algorithm,
However I can't find where to run RRT* algorithm to generate global trajectory.
Can anyone give me some help?
Many thanks for your help in advance
With warm regards
Kangning
Hi Vladyslav,
First of all, great work! I am trying to use this repo for collision avoidance with a delivery drone. All is working fine except the ring buffer. I am suspecting that the image processing part is not working.
May I ask why you divide the depth value by 5000?
Hi, I just follow your steps in readme running "Circular Buffer vs Octomap benchmarking", now the phenomenon is like: after I type "./benchmark.py", no message output,so I want to type in "ctrl+c" to terminate this program, now start log some output(debugging message), however, there is no message out.
why is that?
Can I use this planner with ardupilot?
thanks
I have no idea what's the problem, I can not find the solution on the google. Please help me !
I guess it is about Eigen library. The detail errors is in the following, thank you so much.
....
[78%] [ 78%] Built target polynomial_optimization_example
Building CXX object ewok/ewok_optimization/CMakeFiles/spline_optimization_example.dir/src/spline_optimization_example.cpp.o
[ 78%] Building CXX object ewok/ewok_optimization/CMakeFiles/spline_optimization_example2.dir/src/spline_optimization_example2.cpp.o
In file included from /home/ahmad/haiwen/rotorS/src/ewok/ewok_ring_buffer/include/ewok/raycast_ring_buffer.h:28:0,
from /home/ahmad/haiwen/rotorS/src/ewok/ewok_ring_buffer/include/ewok/ed_ring_buffer.h:27,
from /home/ahmad/haiwen/rotorS/src/ewok/ewok_optimization/include/ewok/uniform_bspline_3d_optimization.h:29,
from /home/ahmad/haiwen/rotorS/src/ewok/ewok_optimization/src/spline_optimization_example.cpp:28:
/home/ahmad/haiwen/rotorS/src/ewok/ewok_ring_buffer/include/ewok/ring_buffer_base.h: In instantiation of ‘void ewok::RingBufferBase<_POW, _Datatype, _Scalar>::getIdx(const Vector3&, ewok::RingBufferBase<_POW, _Datatype, _Scalar>::Vector3i&) const [with int _POW = 6; _Datatype = float; _Scalar = float; ewok::RingBufferBase<_POW, _Datatype, _Scalar>::Vector3 = Eigen::Matrix<float, 3, 1>; ewok::RingBufferBase<_POW, _Datatype, _Scalar>::Vector3i = Eigen::Matrix<int, 3, 1>]’:
/home/ahmad/haiwen/rotorS/src/ewok/ewok_ring_buffer/include/ewok/ed_ring_buffer.h:121:5: required from ‘_Scalar ewok::EuclideanDistanceRingBuffer<_POW, _Datatype, _Scalar, _Flag>::getDistanceWithGrad(const Eigen::MatrixBase&, const Eigen::MatrixBase&) [with Derived = Eigen::Matrix<double, 3, 1>; int _POW = 6; _Datatype = short int; _Scalar = float; _Flag = unsigned char]’
/home/ahmad/haiwen/rotorS/src/ewok/ewok_optimization/include/ewok/uniform_bspline_3d_optimization.h:507:64: required from ‘double ewok::UniformBSpline3DOptimization<_N, _Scalar>::collisionError(const ewok::UniformBSpline3D<_N, _Scalar>&, double, std::vector&) const [with int _N = 6; _Scalar = double]’
/home/ahmad/haiwen/rotorS/src/ewok/ewok_optimization/include/ewok/uniform_bspline_3d_optimization.h:425:67: required from ‘double ewok::UniformBSpline3DOptimization<_N, _Scalar>::combinedError(const std::vector&, std::vector&) [with int _N = 6; _Scalar = double]’
/home/ahmad/haiwen/rotorS/src/ewok/ewok_optimization/include/ewok/uniform_bspline_3d_optimization.h:358:32: required from ‘static double ewok::UniformBSpline3DOptimization<_N, _Scalar>::wrap(const std::vector&, std::vector&, void*) [with int _N = 6; _Scalar = double]’
/home/ahmad/haiwen/rotorS/src/ewok/ewok_optimization/include/ewok/uniform_bspline_3d_optimization.h:155:5: required from ‘void ewok::UniformBSpline3DOptimization<_N, _Scalar>::setNumControlPointsOptimized(int) [with int _N = 6; Scalar = double]’
/home/ahmad/haiwen/rotorS/src/ewok/ewok_optimization/src/spline_optimization_example.cpp:59:53: required from here
/home/ahmad/haiwen/rotorS/src/ewok/ewok_ring_buffer/include/ewok/ring_buffer_base.h:70:11: error: ‘const class Eigen::ArrayWrapper<const Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op, const Eigen::Matrix<float, 3, 1> > >’ has no member named ‘floor’
idx = (point / resolution).array().floor().template cast();
^
In file included from /home/ahmad/haiwen/rotorS/src/ewok/ewok_ring_buffer/include/ewok/raycast_ring_buffer.h:28:0,
from /home/ahmad/haiwen/rotorS/src/ewok/ewok_ring_buffer/include/ewok/ed_ring_buffer.h:27,
from /home/ahmad/haiwen/rotorS/src/ewok/ewok_optimization/include/ewok/uniform_bspline_3d_optimization.h:29,
from /home/ahmad/haiwen/rotorS/src/ewok/ewok_optimization/src/spline_optimization_example2.cpp:28:
/home/ahmad/haiwen/rotorS/src/ewok/ewok_ring_buffer/include/ewok/ring_buffer_base.h: In instantiation of ‘void ewok::RingBufferBase<_POW, _Datatype, _Scalar>::getIdx(const Vector3&, ewok::RingBufferBase<_POW, _Datatype, _Scalar>::Vector3i&) const [with int _POW = 6; _Datatype = float; _Scalar = float; ewok::RingBufferBase<_POW, _Datatype, _Scalar>::Vector3 = Eigen::Matrix<float, 3, 1>; ewok::RingBufferBase<_POW, _Datatype, _Scalar>::Vector3i = Eigen::Matrix<int, 3, 1>]’:
/home/ahmad/haiwen/rotorS/src/ewok/ewok_ring_buffer/include/ewok/ed_ring_buffer.h:121:5: required from ‘_Scalar ewok::EuclideanDistanceRingBuffer<_POW, _Datatype, _Scalar, _Flag>::getDistanceWithGrad(const Eigen::MatrixBase&, const Eigen::MatrixBase&) [with Derived = Eigen::Matrix<double, 3, 1>; int _POW = 6; _Datatype = short int; _Scalar = float; _Flag = unsigned char]’
/home/ahmad/haiwen/rotorS/src/ewok/ewok_optimization/include/ewok/uniform_bspline_3d_optimization.h:507:64: required from ‘double ewok::UniformBSpline3DOptimization<_N, _Scalar>::collisionError(const ewok::UniformBSpline3D<_N, _Scalar>&, double, std::vector&) const [with int _N = 6; _Scalar = double]’
/home/ahmad/haiwen/rotorS/src/ewok/ewok_optimization/include/ewok/uniform_bspline_3d_optimization.h:425:67: required from ‘double ewok::UniformBSpline3DOptimization<_N, _Scalar>::combinedError(const std::vector&, std::vector&) [with int _N = 6; _Scalar = double]’
/home/ahmad/haiwen/rotorS/src/ewok/ewok_optimization/include/ewok/uniform_bspline_3d_optimization.h:358:32: required from ‘static double ewok::UniformBSpline3DOptimization<_N, _Scalar>::wrap(const std::vector&, std::vector&, void*) [with int _N = 6; _Scalar = double]’
/home/ahmad/haiwen/rotorS/src/ewok/ewok_optimization/include/ewok/uniform_bspline_3d_optimization.h:155:5: required from ‘void ewok::UniformBSpline3DOptimization<_N, _Scalar>::setNumControlPointsOptimized(int) [with int _N = 6; Scalar = double]’
/home/ahmad/haiwen/rotorS/src/ewok/ewok_optimization/src/spline_optimization_example2.cpp:62:53: required from here
/home/ahmad/haiwen/rotorS/src/ewok/ewok_ring_buffer/include/ewok/ring_buffer_base.h:70:11: error: ‘const class Eigen::ArrayWrapper<const Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op, const Eigen::Matrix<float, 3, 1> > >’ has no member named ‘floor’
idx = (point / resolution).array().floor().template cast();
^
make[2]: *** [ewok/ewok_optimization/CMakeFiles/spline_optimization_example.dir/src/spline_optimization_example.cpp.o] Error 1
make[1]: *** [ewok/ewok_optimization/CMakeFiles/spline_optimization_example.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make[2]: *** [ewok/ewok_optimization/CMakeFiles/spline_optimization_example2.dir/src/spline_optimization_example2.cpp.o] Error 1
make[1]: *** [ewok/ewok_optimization/CMakeFiles/spline_optimization_example2.dir/all] Error 2
make: *** [all] Error 2
Invoking "make -j2 -l2" failed
On ubuntu 20.04, Simulation example failed: the robot in gazebo cannot be in control.
Rviz terminal shows:
[ WARN] [1642574340.231446324]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame firefly/rotor_3 at time 247.976000 according to authority unknown_publisher
[ WARN] [1642574340.231461790]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame firefly/rotor_4 at time 247.976000 according to authority unknown_publisher
[ WARN] [1642574340.231479710]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame firefly/rotor_5 at time 247.976000 according to authority unknown_publisher
[ WARN] [1642574340.340303253]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame firefly/rotor_0 at time 248.076000 according to authority unknown_publisher
[ WARN] [1642574340.340439294]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame firefly/rotor_1 at time 248.076000 according to authority unknown_publisher
gazebo terminal shows:
Warning: TF_REPEATED_DATA ignoring data with redundant timestamp for frame firefly/rotor_3 at time 255.476000 according to authority unknown_publisher
at line 278 in /tmp/binarydeb/ros-noetic-tf2-0.7.5/src/buffer_core.cpp
Warning: TF_REPEATED_DATA ignoring data with redundant timestamp for frame firefly/rotor_4 at time 255.476000 according to authority unknown_publisher
at line 278 in /tmp/binarydeb/ros-noetic-tf2-0.7.5/src/buffer_core.cpp
Warning: TF_REPEATED_DATA ignoring data with redundant timestamp for frame firefly/rotor_5 at time 255.476000 according to authority unknown_publisher
at line 278 in /tmp/binarydeb/ros-noetic-tf2-0.7.5/src/buffer_core.cpp
Warning: TF_REPEATED_DATA ignoring data with redundant timestamp for frame firefly/rotor_0 at time 255.576000 according to authority unknown_publisher
Notes: On ubuntu18.04, it works.
Hello @vsu91,
I was trying to work on a more verbose debug build by changing the compiler options specified in the ewok_ring_buffer CMakeLists.txt from ... -g -O3 ...
to ... -g -O0 ...
I'm getting the following error during linking when I don't specify an optimization level:
[ 94%] Linking CXX shared library /home/user/catkin_ws/devel/lib/librotors_gazebo_odometry_plugin.so
[ 96%] Built target rotors_gazebo_gps_plugin
CMakeFiles/ring_buffer_example.dir/src/ring_buffer_example.cpp.o: In function `ewok::RaycastRingBuffer<6, short, float, unsigned char>::RaycastRingBuffer(float const&)':
/home/user/catkin_ws/src/ewok/ewok_ring_buffer/include/ewok/raycast_ring_buffer.h:77: undefined reference to `ewok::RaycastRingBuffer<6, short, float, unsigned char>::updated_flag'
CMakeFiles/ring_buffer_example.dir/src/ring_buffer_example.cpp.o: In function `ewok::RingBufferBase<6, short, float>::insideVolume(Eigen::Matrix<int, 3, 1, 0, 3, 1> const&)':
/home/user/catkin_ws/src/ewok/ewok_ring_buffer/include/ewok/ring_buffer_base.h:144: undefined reference to `ewok::RingBufferBase<6, short, float>::_NEG_MASK'
/home/user/catkin_ws/src/ewok/ewok_ring_buffer/include/ewok/ring_buffer_base.h:144: undefined reference to `ewok::RingBufferBase<6, short, float>::_NEG_MASK'
/home/user/catkin_ws/src/ewok/ewok_ring_buffer/include/ewok/ring_buffer_base.h:144: undefined reference to `ewok::RingBufferBase<6, short, float>::_NEG_MASK'
collect2: error: ld returned 1 exit status
ewok/ewok_ring_buffer/CMakeFiles/ring_buffer_example.dir/build.make:156: recipe for target '/home/user/catkin_ws/devel/lib/ewok_ring_buffer/ring_buffer_example' failed
make[2]: *** [/home/user/catkin_ws/devel/lib/ewok_ring_buffer/ring_buffer_example] Error 1
CMakeFiles/Makefile2:3435: recipe for target 'ewok/ewok_ring_buffer/CMakeFiles/ring_buffer_example.dir/all' failed
I don't know why adding optimization flags removes this error. Do you have any ideas?
Thank you,
Curtis
Hi. I think there is a problem in line 145 of 'trajectory_replanning_example.cpp.'
As far as I understand, offset in Ring Buffer is the lower left corner of the map. However, it seems that you are setting the sensor origin as offset in initialization step(line 139-147). Well, in your simulation case there was no problem, but in the situation of me this caused the problem.
Eigen::Vector3i _OFF(_N_2, _N_2, _N_2);
edrb->setOffset(idx - _OFF);
It would be nice to change line145 this way.
Thanks.
During the experiment ,how you can know where the mav is ,use visual inertial odometry or RGBD slam
Hi! I'm trying to plan a path using RRT with your ring buffer. But I'm not sure how to get the minimum and maximum voxel position to generate random location of the nodes. This is my code, am I doing it right? Thank you!
Vector3 point_min, point_max, rand_point, center_point;
Vector3i point_idx, center_idx;
occupancy_buffer_.getVolumeMinMax(point_min, point_max);
center_idx = occupancy_buffer_.getVolumeCenter();
occupancy_buffer_.getPoint(center_idx, center_point);
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.