Coding
PromptBeginner5 minmarkdown
Markdown Converter
Agent skill for markdown-converter
7
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Sign in to like and favorite skills
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This is
btrajSim_2025-08, a ROS-based UAV trajectory planning simulation framework called Btraj. It generates safe, dynamically feasible trajectories in unknown environments using a two-stage approach: front-end path finding (Fast Marching* or A*) and back-end trajectory optimization with Bezier curves.
The system implements the algorithm from "Online Safe Trajectory Generation For Quadrotors Using Fast Marching Method and Bernstein Basis Polynomial" (Fei Gao et al., ICRA 2018).
catkin_make# From repository root - Build and start ROS Melodic container ./build.sh # Auto-detects Windows IP for X11 forwarding via SSH # Enter running container for development ./start.sh # Inside container - build workspace cd /root/catkin_ws catkin_make source devel/setup.bash
Important:
build.sh automatically detects the Windows client IP address when connecting via SSH to configure X11 display forwarding. The DISPLAY_IP environment variable is set to <detected-windows-ip>:0.0 and passed to docker-compose.
# Install dependencies sudo apt-get install libarmadillo-dev ros-melodic-desktop-full # Build from catkin workspace root (NOT repository root) cd catkin_ws catkin_make source devel/setup.bash
# Launch main simulation (includes rviz visualization) roslaunch bezier_planer simulation.launch # Use 3D Nav Goal tool in rviz to set waypoints: # - Click tool, press left mouse button on position # - Drag up/down while holding left button for height # - Release to send target
is_use_fm (true=Fast Marching*, false=A*)simulation.launchThe planning pipeline follows this sequence:
waypoint_generator → publishes waypointsrandom_forest_sensing → publishes point cloud map based on sensor rangeodom_generator → simulates robot state feedbackb_traj_node receives waypoints + map + odometry:
PolynomialTrajectory (Bezier coefficients)b_traj_server → converts coefficients to real-time position commandsodom_generator → closes simulation looptrajectory_generator.h): QP solver interface using Mosek. Main function BezierPloyCoeffGeneration() takes flight corridors, constraints (vel/acc limits), and MQM matrices to generate optimal Bezier coefficients.bezier_base.h): Pre-computes basis transformation matrices (Bernstein↔Monomial), cost matrices (MQM), and combinatorial constants. Must be initialized before trajectory generation.a_star.h): A* implementation on 3D grid using multimap priority queue. Uses Manhattan/Euclidean/Diagonal heuristics.The
bezier_planer package compiles to 4 executables (see CMakeLists.txt):
/waypoint_generator/waypoints, /odom/fake_odom, /random_forest_sensing/random_forest/position_cmd (PositionCommand), /b_traj_node/trajectory (PolynomialTrajectory)Supporting packages (catkin_ws/src/plan_utils/):
waypoint_generator: Converts RViz goals to waypoint messagesodom_visualization: Displays robot state in RVizrviz_plugins: Custom 3D Nav Goal tool (drag for height)quadrotor_msgs: Message definitions (PolynomialTrajectory, PositionCommand)Three main callbacks drive the planning system:
rcvOdometryCallbck(): Updates _start_pt, _start_vel, _start_acc from odometryrcvPointCloudCallBack(): Inflates obstacles into collision map, triggers replanning if checkExecTraj() detects collisionrcvWaypointsCallback(): Receives goal, calls trajPlanning() to generate trajectorypoly_order (8): Bezier polynomial order - higher = smoother but more control pointsmin_order (2.5): Optimization target - fractional values interpolate between derivatives (2.5 = blend acceleration + jerk minimization)is_use_fm (true/false): Algorithm selection - Fast Marching* for smooth paths, A* for faster computationmosek.lic in ~/mosek/ directory (host) or mount to /root/mosek/ (container)../mosek:/root/mosek in docker-compose.ymllink_directories(third_party/mosek/lib/mosek8_1) and mosek64 library# If RViz fails to start, check X11 forwarding: echo $DISPLAY xhost +local:docker # On host machine
# Enter running container: docker exec -it btraj-sim-melodic bash # Rebuild after code changes: cd /root/catkin_ws && catkin_make source devel/setup.bash
planning/is_use_fm in launch file (Fast Marching* vs A*)map/x_size, map/y_size, map/z_size (default: 50x50x5m)planning/max_vel, planning/max_acc (default: 2.0 m/s, 2.0 m/s²)optimization/poly_order (default: 8th order Bezier curves)map/margin (default: 0.2m obstacle inflation)If using this for academic research, cite the original paper:
@inproceedings{Fei2018ICRA, Author = {F. Gao and W.Wu and Y. Lin and S. Shen}, Title = {Online Safe Trajectory Generation For Quadrotors Using Fast Marching Method and Bernstein Basis Polynomial}, Booktitle = {Proc. of the {IEEE} Intl. Conf. on Robot. and Autom.}, Address = {Brisbane, Australia}, Month = May, Year = {2018} }