GithubHelp home page GithubHelp logo

zju-fast-lab / dftpav Goto Github PK

View Code? Open in Web Editor NEW
337.0 23.0 76.0 86.46 MB

A lightweight differential flatness-based trajectory planner for car-like robots

License: GNU General Public License v3.0

Shell 0.02% CMake 2.72% C++ 95.71% EmberScript 0.61% C 0.04% Python 0.91%

dftpav's Introduction

Dftpav

A lightweight Spatial-Temporal trajectory planner for car-like robots。

0. Overview

Related Paper:

Please cite the paper below if this repo helps you.

1. Setup

All the tests are conducted in the Linux environment on a computer equipped with an Intel Core i7-10700 CPU and a GeForce RTX 2060 GPU.

Moreover, Our software is developed and tested in Ubuntu 18.04, 20.04 with ROS installed.

ROS can be installed here: ROS Installation.

2. Build on ROS

  1. Install the dependence.

    sudo apt-get install libgoogle-glog-dev libdw-dev libopenblas-dev gfortran
    

    We use Protocol Buffers for parameter configuration. For the installation guide, please refer to this link.

  2. Create an empty new workspace and clone this repository to your workspace:

    cd ~/your_catkin_ws/src
    git clone https://github.com/ZJU-FAST-Lab/Dftpav
    cd ..
    
  3. Compile it.

    catkin_make -DCMAKE_BUILD_TYPE=Release
    

3. Run

Open a new terminal window, cd to ~/your_catkin_ws/ and type:

source devel/setup.bash

Then, run the script:

./run.sh 

Then, you can use the 2D Nav Goal in RVIZ to trigger the planning.

Here is an example:

4. Licence

The source code is released under GPLv3 license.

5. Maintaince

For any technical issue, please contact Zhichao HAN ([email protected]).

For commercial inquiries, please contact Fei GAO ([email protected]).

dftpav's People

Contributors

han-sin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dftpav's Issues

trajectory kappa is not in kappa constraint

Hello, in the process of using the code, I found that the curvature of the planned trajectory would not conform to the curvature constraint. May I ask whether the constraint became a soft constraint after being converted into the objective function?
image(forward and backward max kappa is 1)

你好,rviz启动成功,但一设置目标点,终端报错,rviz中所有车辆都变的静止不动,请问怎么解决

MainThread [0x7f527df57e48]
121: while (true) {
122: current_start_time = system_clock::now();
123: next_start_time = current_start_time + interval;
> 124: PlanCycleCallback();
125: std::this_thread::sleep_until(next_start_time);
126: }
127: }
#10 Source "/home/zz/open_learn_code/demo1_auto_drive_ws/src/Dftpav/src/Plan/traj_planner/src/traj_server_ros.cpp", line 168, in PlanCycleCallback [0x7f527df57d3c]
165: fsm_num++;
166: if (fsm_num > 100000||CheckReplan()) {
167: if (next_traj_ == nullptr) {
> 168: Replan();
169: // return;
170: }
171: if (next_traj_ !=nullptr) {
#9 | Source "/home/zz/open_learn_code/demo1_auto_drive_ws/src/Dftpav/src/Plan/traj_planner/src/traj_server_ros.cpp", line 417, in operator()
| 415: if(executing_traj_ ==nullptr){
| 416: p_planner_->set_initial_state(desired_state);
| > 417: if (trajplan()!= kSuccess) {
| 418: Display();
| 419: return kWrongStatus;
Source "/usr/include/c++/7/bits/std_function.h", line 706, in Replan [0x7f527df570d1]
703: {
704: if (_M_empty())
705: __throw_bad_function_call();
> 706: return _M_invoker(_M_functor, std::forward<ArgTypes>(args)...);
707: }
708:
709: #if cpp_rtti
#8 Source "/home/zz/open_learn_code/demo1_auto_drive_ws/src/Dftpav/src/Plan/traj_planner/src/traj_manager.cpp", line 203, in RunOnceParking [0x7f527a14a299]
200: }
201:
202: double frontendt1 = ros::Time::now().toSec();
> 203: if (getKinoPath(parking_end) != kSuccess){
204: LOG(ERROR) << "[PolyTrajManager Parking] fail to get the front-end.\n";
205: return kWrongStatus;
206: }
#7 Source "/home/zz/open_learn_code/demo1_auto_drive_ws/src/Dftpav/src/Plan/traj_planner/src/traj_manager.cpp", line 85, in getKinoPath [0x7f527a140562]
82: // start_state << -26.3909, 20.7379 ,1.57702 , 0; end_state << -45.4141, 10.3171 ,0.0600779 , 0.01;
83: std::cout<<"start state: "<<start_state.transpose()<<" end_state: "<<end_state.transpose()<<std::endl;
84: std::cout<<"init ctrl: "<<init_ctrl.transpose()<<std::endl;
> 85: int status = kino_path_finder
->search(start_state, init_ctrl, end_state, true);
86: double searcht2 = ros::Time::now().toSec();
87: if (status == path_searching::KinoAstar::NO_PATH)
88: {
#6 Source "/home/zz/open_learn_code/demo1_auto_drive_ws/src/Dftpav/src/Plan/traj_planner/src/kino_astar.cpp", line 92, in search [0x7f527a16661d]
89: double t1 = ros::Time::now().toSec();
90: if((cur_node->state.head(2) - end_state
.head(2)).norm()<15.0&& initsearch){
91:
> 92: is_shot_sucess(cur_node->state,end_state
.head(3));
93: }
94: double t2 = ros::Time::now().toSec();
95: // std::cout<<"one-shot time: "<<(t2-t1)*1000<<" ms"<<std::endl;
#5 Source "/home/zz/open_learn_code/demo1_auto_drive_ws/src/Dftpav/src/Plan/traj_planner/src/kino_astar.cpp", line 309, in is_shot_sucess [0x7f527a161d13]
306: std::vectorEigen::Vector3d path_list;
307: double len;
308: double ct1 = ros::Time::now().toSec();
> 309: computeShotTraj(state1,state2,path_list,len);
310: double ct2 = ros::Time::now().toSec();
311: // std::cout<<"compute shot traj time: "<<(ct2-ct1)*1000.0<<" ms"<<std::endl;
312: bool is_occ = false;
#4 Source "/home/zz/open_learn_code/demo1_auto_drive_ws/src/Dftpav/src/Plan/traj_planner/src/kino_astar.cpp", line 332, in computeShotTraj [0x7f527a1618c8]
329: double& len){
330: namespace ob = ompl::base;
331: namespace og = ompl::geometric;
> 332: ob::ScopedState<> from(shotptr), to(shotptr), s(shotptr);
333: from[0] = state1[0]; from[1] = state1[1]; from[2] = state1[2];
334: to[0] = state2[0]; to[1] = state2[1]; to[2] = state2[2];
335: std::vector reals;
#3 Source "/opt/ros/melodic/include/ompl/base/ScopedState.h", line 86, in ScopedState [0x7f527a16884e]
83: allocate a state. */
84: explicit ScopedState(StateSpacePtr space) : space(std::move(space))
85: {
> 86: State *s = space->allocState();
87:
88: // ideally, this should be a dynamic_cast and we
89: // should throw an exception in case of
#2 Object "/usr/lib/x86_64-linux-gnu/libompl.so.1.2.1", at 0x7f5277537ac6, in ompl::base::CompoundStateSpace::printState(ompl::base::State const*, std::ostream&) const
#1 Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25", at 0x7f527c7c2a77, in std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)
#0 Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25", at 0x7f527c7c23f6, in std::ostream::sentry::sentry(std::ostream&)
Segmentation fault (Signal sent by the kernel [(nil)])
[park_0-1] process has died [pid 30974, exit code -11, cmd /home/zz/open_learn_code/demo1_auto_drive_ws/devel/lib/planning_integrated/park ~arena_info_static:=/arena_info_static ~arena_info_dynamic:=/arena_info_dynamic ~ctrl:=/ctrl/agent_0 __name:=park_0 __log:=/home/zz/.ros/log/88641df6-4357-11ef-9389-50eb71d1e115/park_0-1.log].
log file: /home/zz/.ros/log/88641df6-4357-11ef-9389-50eb71d1e115/park_0-1*.log

No map is updated

when i run the script, "No map is updated" showed in the terminal.

..

啥时候开源源码啊

Question about the initial value of optimization

I wrote a similar code on a trajectory planner, and it failed to iterate, or iterated poorly, if the chosen initial values were not close to the true value.
我编写了一个和您论文中相似的算法,但是我经过测试,如果初值不是一个比较好的数值,那么迭代进行不下去,甚至会出错,如下图所示,我模仿TEB中的例子,一个圆形的可拖动的障碍物,如果初始路径点选取经过障碍物,尽管添加了障碍物约束,但是它不能有效的弹开,不能达到teb算法中的范例中的效果;
teb

我编写代码实现的效果图,效果比较差;
2023-05-23_16-19

这是我的代码运行效果的视频,请大佬给一点建议,诚盼您的回复,真心感激不尽!
https://github.com/ZJU-FAST-Lab/Dftpav/assets/42513042/5e7503de-1673-4e6b-ac29-e49de5bf4044

An error occurred when I was compiling

I encountered the following error while compiling the working directory, and I did not make any changes to the source code. May I ask if the author has encountered it before, or if there are any solutions.

/usr/bin/c++ -fPIC -std=c++14  -g -O3 -Wall -O3 -Wall -shared -Wl,-soname,libhkust_pl_ooqp_itf.so -o /home/kang/diffFlat_Planner/devel/lib/libhkust_pl_ooqp_itf.so CMakeFiles/hkust_pl_ooqp_itf.dir/src/common/solver/ooqp_interface.cc.o CMakeFiles/hkust_pl_ooqp_itf.dir/src/common/solver/qp_solver.cc.o  /home/kang/diffFlat_Planner/src/Dftpav/src/Sim/core/common/thirdparty/ooqp/lib/libooqpgensparse.a /home/kang/diffFlat_Planner/src/Dftpav/src/Sim/core/common/thirdparty/ooqp/lib/libooqpsparse.a /home/kang/diffFlat_Planner/src/Dftpav/src/Sim/core/common/thirdparty/ooqp/lib/libooqpgondzio.a /home/kang/diffFlat_Planner/src/Dftpav/src/Sim/core/common/thirdparty/ooqp/lib/libooqpbase.a /home/kang/diffFlat_Planner/src/Dftpav/src/Sim/core/common/thirdparty/ooqp/lib/libma27.a -lblas -lgfortran 
/usr/bin/ld: cannot find -lgfortran
collect2: error: ld returned 1 exit status
Dftpav/src/Sim/core/common/CMakeFiles/hkust_pl_ooqp_itf.dir/build.make:120: recipe for target '/home/kang/diffFlat_Planner/devel/lib/libhkust_pl_ooqp_itf.so' failed
make[2]: *** [/home/kang/diffFlat_Planner/devel/lib/libhkust_pl_ooqp_itf.so] Error 1
CMakeFiles/Makefile2:2636: recipe for target 'Dftpav/src/Sim/core/common/CMakeFiles/hkust_pl_ooqp_itf.dir/all' failed
make[1]: *** [Dftpav/src/Sim/core/common/CMakeFiles/hkust_pl_ooqp_itf.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

How to simulate in urban road environoments

Hi, we can obtain the simulation process of unstructured environments from the doc, but how can we simulate dynamic urban road environments? Could you provide some guidance on this?

undefined reference to `bool absl::lts_20230802::str_format_internal::FormatA rgImpl::Dispatch

非常感谢作者的分享,能否请教一个编译过程中遇到的问题?
尝试了重新安装absl与protobuf,两者应该都是最新版本,但是编译过程出现如下报错,与“absl::lts_20230802”相关。看起来与absl版本相关。

类似报错:protocolbuffers/protobuf#12292 ,没找到解决方法。

/home/ldx/ws/Dftpav/devel/lib/libhkust_pl_ssc.so: undefined reference to `bool absl::lts_20230802::str_format_internal::FormatA
rgImpl::Dispatch<long>(absl::lts_20230802::str_format_internal::FormatArgImpl::Data, absl::lts_20230802::str_format_internal::F
ormatConversionSpecImpl, void*)'                                                                                               
/home/ldx/ws/Dftpav/devel/lib/libhkust_pl_ssc.so: undefined reference to `bool absl::lts_20230802::str_format_internal::FormatA
rgImpl::Dispatch<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(absl::lts_20230802::str_form
at_internal::FormatArgImpl::Data, absl::lts_20230802::str_format_internal::FormatConversionSpecImpl, void*)'                   
/home/ldx/ws/Dftpav/devel/lib/libhkust_pl_ssc.so: undefined reference to `absl::lts_20230802::container_internal::DropDeletesWi
thoutResize(absl::lts_20230802::container_internal::CommonFields&, absl::lts_20230802::container_internal::PolicyFunctions cons
t&, void*)'                                                                                                                    
/home/ldx/ws/Dftpav/devel/lib/libhkust_pl_ssc.so: undefined reference to `absl::lts_20230802::hash_internal::MixingHashState::L
owLevelHashImpl(unsigned char const*, unsigned long)'                                                                          
/home/ldx/ws/Dftpav/devel/lib/libhkust_pl_ssc.so: undefined reference to `absl::lts_20230802::Mutex::AssertHeld() const'       
/home/ldx/ws/Dftpav/devel/lib/libhkust_pl_ssc.so: undefined reference to `absl::lts_20230802::log_internal::LogMessage& absl::l
ts_20230802::log_internal::LogMessage::operator<< <void*, 0>(void* const&)'                                                    
/home/ldx/ws/Dftpav/devel/lib/libhkust_pl_ssc.so: undefined reference to `absl::lts_20230802::strings_internal::CatPieces[abi:c
xx11](std::initializer_list<absl::lts_20230802::string_view>)'                                                                 
/home/ldx/ws/Dftpav/devel/lib/libhkust_pl_ssc.so: undefined reference to `absl::lts_20230802::numbers_internal::kHexTable'
/home/ldx/ws/Dftpav/devel/lib/libhkust_pl_ssc.so: undefined reference to `absl::lts_20230802::log_internal::LogMessage& absl::l
ts_20230802::log_internal::LogMessage::operator<< <unsigned short, 0>(unsigned short const&)'
/home/ldx/ws/Dftpav/devel/lib/libhkust_pl_ssc.so: undefined reference to `google::protobuf::internal::AssignDescriptors(google$
:protobuf::internal::DescriptorTable const* (*)(), absl::once_flag*, google::protobuf::Metadata const&)'
/home/ldx/ws/Dftpav/devel/lib/libhkust_pl_ssc.so: undefined reference to `absl::lts_20230802::internal_statusor::Helper::Crash(
absl::lts_20230802::Status const&)'
/home/ldx/ws/Dftpav/devel/lib/libhkust_pl_ssc.so: undefined reference to `absl::lts_20230802::hash_internal::MixingHashState::k
Seed'
/home/ldx/ws/Dftpav/devel/lib/libhkust_pl_ssc.so: undefined reference to `absl::lts_20230802::ascii_internal::kPropertyBits'
collect2: error: ld returned 1 exit status

关于曲率约束求导部分,代码实现中求导公式和论文公式不一致

论文中曲率求导的公式1. delta_G/delta_dsigma = 2*(ddsigma^T * B * dsigma) / ||dsigma||_2^3 (.....) 2. delta_G/delta_ddsigma = 2(ddsigma^T B* dsigma)(...), 在代码实现中公式1,只计算了括号内的,没有计算括号前的内容, 公式2, 括号内disigma二范数的6次方, 代码为 3次方,括号前的内容也没有计算,请问,代码是否计算错误,还是有意省略

I've been running into a bug and have tried many ways to solve it

n file included from /home/hou/dftpav/src/Dftpav/src/Sim/util/ssc_planner/inc/ssc_planner/ssc_planner.h:27,
from /home/hou/dftpav/src/Dftpav/src/Sim/util/ssc_planner/src/ssc_planner/ssc_planner.cc:9:
/home/hou/dftpav/build/Dftpav/src/Sim/util/ssc_planner/ssc_config.pb.h:10:10: fatal error: google/protobuf/port_def.inc: 没有那个文件或目录
10 | #include <google/protobuf/port_def.inc>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.