Giter Club home page Giter Club logo

Comments (6)

govvijaycal avatar govvijaycal commented on August 24, 2024 1

It's an implementation of the kinematic bicycle model used in this paper: "Kinematic and dynamic vehicle models for autonomous driving control design", IV 2015.
Link: https://api.semanticscholar.org/CorpusID:207012925 .

You can refer to the book "Vehicle Dynamics and Control", Rajamani Ch. 2, for the derivation details.
Link: https://link.springer.com/book/10.1007/978-1-4614-1433-9

from genesis_path_follower.

govvijaycal avatar govvijaycal commented on August 24, 2024 1

So the parameter approach makes the most sense for cases where the number of constraints is fixed but the specific values are time-varying (e.g. you have a speed limit). One question would be if MNO = 10 but only 1 obstacle is present, is there a way to set the parameter value such that the corresponding constraint is inactive. A silly method would be to just put the obstacle region way out of the N-reachable set of the ego vehicle, where N is the planning horizon.

There are several papers that look at collision avoidance using MPC/trajectory optimization, here are a sample of them:
(1) https://arxiv.org/pdf/1711.03449.pdf -> can handle convex obstacles like polygons / ellipsoids
(2) https://ieeexplore.ieee.org/abstract/document/8207782 -> treats other vehicles as time-varying ellipsoids with Gaussian uncertainty
(3) https://ieeexplore.ieee.org/abstract/document/7963821 with code documentation here: https://juliampc.github.io/MAVs/stable/packages/computing/planning/nloptcontrol_planner/main/

However, I think these problems involve changing the number of active constraints at runtime. You could simply try using Casadi but by creating a different optimization problem each time. Or perhaps Opti has a functionality to turn on/off constraints at runtime, not sure.

from genesis_path_follower.

jediofgever avatar jediofgever commented on August 24, 2024

One more thing I want to ask is , I see you comment to add obstacle avoidance as a constraint to the casadi. Can we set the those constraints at each iteration for the dynamic obstacle ?,
For the static known obstacle it should be straight forward but not sure if it will be possible for dynamic obstacles

from genesis_path_follower.

govvijaycal avatar govvijaycal commented on August 24, 2024

Yeah that's a good point. If you know the structure of the collision avoidance constraint (e.g. it's a simple stop line), you can simply set it as a parameter that is updated online.

But if the number/structure of constraints is constantly changing, a parameter-based approach might not work. You can definitely create a new optimization problem at each time step, but I'm not sure about computational speed.

from genesis_path_follower.

govvijaycal avatar govvijaycal commented on August 24, 2024

Easiest thing would be to figure out the stop line based on all obstacles in the scene and just take the most conservative one. Then you can have a single constraint as a parameter.

from genesis_path_follower.

jediofgever avatar jediofgever commented on August 24, 2024

Thanks a lot for the replies. The structure of obstacle is usually a polygon,
where the boundaries of each obstacle is defined by {(x_0,y_0) , . , . , . , .(x_n,y_n)}.
But all in all I am willing to narrow down structure to an approximate circle with (x,y,radius).

Maybe it would be to much to ask but I hope you don't mind;
Could you elaborate your suggestion with a few simple pseudo code ?

My understanding is that;
I can tackle this with something like;

# a circle where its center is located to CoG of car , and covers whole body of car
robot_radius = 1.3
# maximum number of obstacles
MNO = 10
# current obstacles as parameter:  [x_0, y_0, radius_0, ..... x_MNO, y_MNO, radius_MNO]
self.obs_curr  = self.opti.parameter(MNO,3)

for i in range(MNO):
		# Dynamic obstacle constraint
		self.opti.subject_to( sqrt(pow(self.z_curr(0,0) - obs_curr[i,0] , 2)  + pow(self.z_curr(0,1) - obs_curr[i,1] , 2))  >      robot_radius+ obs_curr[i,2]) )

I declare a parameter vector with a size of max obstacles, then after each iteration I update the obstacles.
Assuming my robot's footprint is represented by a circle ,
then the distance between current state and each obstacle should be greater than sum of the robot radius and obstacle radius for a collision free control action.

What do you think about this approach ?
Maybe it shouldn't be z_curr but z_dv ?

from genesis_path_follower.

Related Issues (2)

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.