├── .github
└── workflows
│ └── docker-build.yaml
├── .gitmodules
├── Dockerfile
├── README.md
├── titan_launch
├── CMakeLists.txt
├── config
│ ├── px4_config.yaml
│ └── px4_pluginlists.yaml
├── launch
│ ├── px4.launch
│ └── startup_ground.launch
└── package.xml
└── video_thumbnail.png
/.github/workflows/docker-build.yaml:
--------------------------------------------------------------------------------
1 | name: docker-build-CI
2 |
3 | # Only build base when any of the files in the base directory are modified
4 | on:
5 | push:
6 | branches: [main, ci]
7 | tags:
8 | - '*'
9 | workflow_dispatch:
10 | schedule:
11 | - cron: '0 0 * * 0'
12 |
13 | jobs:
14 | main:
15 | runs-on: ubuntu-20.04
16 |
17 | steps:
18 | -
19 | name: Free Disk Space
20 | uses: jlumbroso/free-disk-space@main
21 | with:
22 | tool-cache: true
23 | -
24 | name: Set up QEMU
25 | uses: docker/setup-qemu-action@v3
26 | -
27 | name: Set up Docker Buildx
28 | uses: docker/setup-buildx-action@v3
29 | -
30 | name: Build and push
31 | id: docker_build
32 | uses: docker/build-push-action@v5
33 | with:
34 | context: "{{defaultContext}}"
35 | push: false
36 | platforms: linux/amd64
37 | build-args: git_hash=${{ github.sha }}
38 | -
39 | name: Image digest
40 | run: echo ${{ steps.docker_build.outputs.digest }}
41 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "semantics_manager"]
2 | path = semantics_manager
3 | url = https://github.com/KumarRobotics/semantics_manager.git
4 | [submodule "rofl-beta"]
5 | path = rofl-beta
6 | url = https://github.com/versatran01/rofl-beta
7 | [submodule "spomp"]
8 | path = spomp
9 | url = https://github.com/KumarRobotics/spomp.git
10 | [submodule "asoom"]
11 | path = asoom
12 | url = https://github.com/KumarRobotics/asoom.git
13 | [submodule "air_router"]
14 | path = air_router
15 | url = https://github.com/KumarRobotics/air_router.git
16 | [submodule "MOCHA"]
17 | path = MOCHA
18 | url = https://github.com/KumarRobotics/MOCHA.git
19 | [submodule "dependencies/orbslam3_ros"]
20 | path = dependencies/orbslam3_ros
21 | url = https://github.com/iandouglas96/orbslam3_ros.git
22 | [submodule "dependencies/erfnet_pytorch_ros"]
23 | path = dependencies/erfnet_pytorch_ros
24 | url = https://github.com/iandouglas96/erfnet_pytorch_ros.git
25 | [submodule "dependencies/rangenet_inf"]
26 | path = dependencies/rangenet_inf
27 | url = https://github.com/KumarRobotics/rangenet_inf.git
28 | [submodule "tools/sill"]
29 | path = tools/sill
30 | url = https://github.com/iandouglas96/sill.git
31 | [submodule "dependencies/grid_map"]
32 | path = dependencies/grid_map
33 | url = https://github.com/KumarRobotics/grid_map.git
34 | [submodule "tools/rviz_textured_quads"]
35 | path = tools/rviz_textured_quads
36 | url = https://github.com/lucasw/rviz_textured_quads
37 | [submodule "dependencies/ouster_decoder"]
38 | path = dependencies/ouster_decoder
39 | url = https://github.com/KumarRobotics/ouster_decoder.git
40 | [submodule "top_down_renderer"]
41 | path = top_down_renderer
42 | url = https://github.com/KumarRobotics/top_down_renderer.git
43 | [submodule "dependencies/ORB_SLAM3"]
44 | path = dependencies/ORB_SLAM3
45 | url = https://github.com/KumarRobotics/ORB_SLAM3.git
46 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | # Note: this Dockerfile is only used for the CI. Please refer to the
2 | # instructions in README.md to use this repo
3 |
4 | FROM kumarrobotics/dcist-master:latest
5 |
6 | # Requires a docker build argument `user_id`
7 | ARG user_id=1000
8 | env USER dcist
9 |
10 | # Create a base docker environment
11 | RUN . /home/$USER/dcist_ws/devel/setup.sh \
12 | && mkdir -p /home/$USER/user_ws/src && cd /home/$USER/user_ws \
13 | && catkin config --extend ~/dcist_ws/devel \
14 | && catkin build --no-status -DCMAKE_BUILD_TYPE=Release
15 |
16 | # Copy the spomp environment into the user workspace
17 | COPY --chown=$USER:$USER . /home/$USER/user_ws/src/spomp-system
18 |
19 | # Build the workspace
20 | RUN cd /home/$USER/user_ws \
21 | && catkin build --no-status -DCMAKE_BUILD_TYPE=Release \
22 | && catkin build
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SPOMP: Semantic Panoramic Online Mapping and Planning
2 | 
3 |
4 | This is the public code repository for our work SPOMP.
5 | Here are all the submodules needed for the stack.
6 |
7 | ## Video
8 |
9 | [
](https://www.youtube.com/watch?v=jcPOVRsdUhU)
10 |
11 | ## Paper
12 | IEEE T-FR: [https://doi.org/10.1109/TFR.2024.3424748](https://doi.org/10.1109/TFR.2024.3424748)
13 | arXiv: [https://doi.org/10.48550/arXiv.2407.09902](https://doi.org/10.48550/arXiv.2407.09902)
14 |
15 | Citation:
16 | ```
17 | @ARTICLE{10587299,
18 | author={Miller, Ian D. and Cladera, Fernando and Smith, Trey and Taylor, Camillo Jose and Kumar, Vijay},
19 | journal={IEEE Transactions on Field Robotics},
20 | title={Air-Ground Collaboration with SPOMP: Semantic Panoramic Online Mapping and Planning},
21 | year={2024},
22 | volume={},
23 | number={},
24 | pages={1-1},
25 | keywords={Semantics;Laser radar;Task analysis;Planning;Robot sensing systems;Sensors;Three-dimensional displays},
26 | doi={10.1109/TFR.2024.3424748}}
27 | ```
28 |
29 | ## How to run the code?
30 | We provide Docker images that can be used to run this code:
31 | ```
32 | # Clone and run the master docker image
33 | git clone https://github.com/KumarRobotics/dcist_master.git
34 | cd dcist_master
35 | ./run.bash dcist-master
36 |
37 | # Clone the repo and build
38 | cd user_ws
39 | mkdir src
40 | git clone --recursive -j8 https://github.com/KumarRobotics/spomp-system.git src/spomp-system
41 | catkin config --extend ~/dcist_ws/devel && catkin build -DCMAKE_BUILD_TYPE=Release
42 | ```
43 |
44 | Launch files for air and ground robots can be found inside `semantics_manager`.
45 |
46 | ## Main modules
47 |
48 | - [semantics_manager](http://github.com/KumarRobotics/semantics_manager): Starting point for launch files and configuration management
49 | - [ROFL](https://github.com/versatran01/rofl-beta): LiDAR odometry
50 | - [SPOMP](http://github.com/KumarRobotics/spomp): Autonomy stack for UGVs. Handles terrain analysis and global and local planning.
51 | - [ASOOM](http://github.com/KumarRobotics/asoom): Aerial orthomapper
52 | - [top_down_renderer](https://github.com/KumarRobotics/top_down_renderer): Crossview localizer
53 | - [air_router](https://github.com/KumarRobotics/air_router): High-level planner for UAV
54 | - [MOCHA](http://github.com/KumarRobotics/MOCHA): Distributed, opportunistic communication framework
55 |
56 | ## Dependencies
57 |
58 | - [grid_map](https://github.com/KumarRobotics/grid_map): Fork of grid_map with resizing and compression capabilities
59 | - [orbslam3_ros](https://github.com/iandouglas96/orbslam3_ros/): ROS wrapper for ORBSLAM3
60 | - [erfnet_pytorch_ros](https://github.com/iandouglas96/erfnet_pytorch_ros): ROS wrapper for erfnet (for aerial image segmentation)
61 | - [rangenet_inf](https://github.com/KumarRobotics/rangenet_inf): ROS wrapper for RangeNet++ (for depth panorama segmentation)
62 | - [ouster_decoder](https://github.com/KumarRobotics/ouster_decoder): Ouster LiDAR driver (needed for ROFL)
63 | - [ORB_SLAM3](https://github.com/KumarRobotics/ORB_SLAM3): Fork of ORB_SLAM3 with loop closure deactivated.
64 |
65 | ## Tools
66 | These are not needed to run the stack, but may be useful.
67 |
68 | - [SILL](https://github.com/iandouglas96/sill): Depth panorama/LiDAR labelling tool
69 | - [rviz_textured_quads](https://github.com/lucasw/rviz_textured_quads) Useful tool for visualizing map images in rviz
70 |
--------------------------------------------------------------------------------
/titan_launch/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.0.2)
2 | project(titan_launch)
3 |
4 | ## Compile as C++11, supported in ROS Kinetic and newer
5 | # add_compile_options(-std=c++11)
6 |
7 | ## Find catkin macros and libraries
8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
9 | ## is used, also find other catkin packages
10 | find_package(catkin REQUIRED)
11 |
12 | ## System dependencies are found with CMake's conventions
13 | # find_package(Boost REQUIRED COMPONENTS system)
14 |
15 |
16 | ## Uncomment this if the package has a setup.py. This macro ensures
17 | ## modules and global scripts declared therein get installed
18 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
19 | # catkin_python_setup()
20 |
21 | ################################################
22 | ## Declare ROS messages, services and actions ##
23 | ################################################
24 |
25 | ## To declare and build messages, services or actions from within this
26 | ## package, follow these steps:
27 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in
28 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
29 | ## * In the file package.xml:
30 | ## * add a build_depend tag for "message_generation"
31 | ## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET
32 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
33 | ## but can be declared for certainty nonetheless:
34 | ## * add a exec_depend tag for "message_runtime"
35 | ## * In this file (CMakeLists.txt):
36 | ## * add "message_generation" and every package in MSG_DEP_SET to
37 | ## find_package(catkin REQUIRED COMPONENTS ...)
38 | ## * add "message_runtime" and every package in MSG_DEP_SET to
39 | ## catkin_package(CATKIN_DEPENDS ...)
40 | ## * uncomment the add_*_files sections below as needed
41 | ## and list every .msg/.srv/.action file to be processed
42 | ## * uncomment the generate_messages entry below
43 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
44 |
45 | ## Generate messages in the 'msg' folder
46 | # add_message_files(
47 | # FILES
48 | # Message1.msg
49 | # Message2.msg
50 | # )
51 |
52 | ## Generate services in the 'srv' folder
53 | # add_service_files(
54 | # FILES
55 | # Service1.srv
56 | # Service2.srv
57 | # )
58 |
59 | ## Generate actions in the 'action' folder
60 | # add_action_files(
61 | # FILES
62 | # Action1.action
63 | # Action2.action
64 | # )
65 |
66 | ## Generate added messages and services with any dependencies listed here
67 | # generate_messages(
68 | # DEPENDENCIES
69 | # std_msgs # Or other packages containing msgs
70 | # )
71 |
72 | ################################################
73 | ## Declare ROS dynamic reconfigure parameters ##
74 | ################################################
75 |
76 | ## To declare and build dynamic reconfigure parameters within this
77 | ## package, follow these steps:
78 | ## * In the file package.xml:
79 | ## * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
80 | ## * In this file (CMakeLists.txt):
81 | ## * add "dynamic_reconfigure" to
82 | ## find_package(catkin REQUIRED COMPONENTS ...)
83 | ## * uncomment the "generate_dynamic_reconfigure_options" section below
84 | ## and list every .cfg file to be processed
85 |
86 | ## Generate dynamic reconfigure parameters in the 'cfg' folder
87 | # generate_dynamic_reconfigure_options(
88 | # cfg/DynReconf1.cfg
89 | # cfg/DynReconf2.cfg
90 | # )
91 |
92 | ###################################
93 | ## catkin specific configuration ##
94 | ###################################
95 | ## The catkin_package macro generates cmake config files for your package
96 | ## Declare things to be passed to dependent projects
97 | ## INCLUDE_DIRS: uncomment this if your package contains header files
98 | ## LIBRARIES: libraries you create in this project that dependent projects also need
99 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need
100 | ## DEPENDS: system dependencies of this project that dependent projects also need
101 | catkin_package(
102 | # INCLUDE_DIRS include
103 | # LIBRARIES titan_launch
104 | # CATKIN_DEPENDS other_catkin_pkg
105 | # DEPENDS system_lib
106 | )
107 |
108 | ###########
109 | ## Build ##
110 | ###########
111 |
112 | ## Specify additional locations of header files
113 | ## Your package locations should be listed before other locations
114 | include_directories(
115 | # include
116 | # ${catkin_INCLUDE_DIRS}
117 | )
118 |
119 | ## Declare a C++ library
120 | # add_library(${PROJECT_NAME}
121 | # src/${PROJECT_NAME}/titan_launch.cpp
122 | # )
123 |
124 | ## Add cmake target dependencies of the library
125 | ## as an example, code may need to be generated before libraries
126 | ## either from message generation or dynamic reconfigure
127 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
128 |
129 | ## Declare a C++ executable
130 | ## With catkin_make all packages are built within a single CMake context
131 | ## The recommended prefix ensures that target names across packages don't collide
132 | # add_executable(${PROJECT_NAME}_node src/titan_launch_node.cpp)
133 |
134 | ## Rename C++ executable without prefix
135 | ## The above recommended prefix causes long target names, the following renames the
136 | ## target back to the shorter version for ease of user use
137 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
138 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
139 |
140 | ## Add cmake target dependencies of the executable
141 | ## same as for the library above
142 | # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
143 |
144 | ## Specify libraries to link a library or executable target against
145 | # target_link_libraries(${PROJECT_NAME}_node
146 | # ${catkin_LIBRARIES}
147 | # )
148 |
149 | #############
150 | ## Install ##
151 | #############
152 |
153 | # all install targets should use catkin DESTINATION variables
154 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
155 |
156 | ## Mark executable scripts (Python etc.) for installation
157 | ## in contrast to setup.py, you can choose the destination
158 | # catkin_install_python(PROGRAMS
159 | # scripts/my_python_script
160 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
161 | # )
162 |
163 | ## Mark executables for installation
164 | ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html
165 | # install(TARGETS ${PROJECT_NAME}_node
166 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
167 | # )
168 |
169 | ## Mark libraries for installation
170 | ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
171 | # install(TARGETS ${PROJECT_NAME}
172 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
173 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
174 | # RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
175 | # )
176 |
177 | ## Mark cpp header files for installation
178 | # install(DIRECTORY include/${PROJECT_NAME}/
179 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
180 | # FILES_MATCHING PATTERN "*.h"
181 | # PATTERN ".svn" EXCLUDE
182 | # )
183 |
184 | ## Mark other files for installation (e.g. launch and bag files, etc.)
185 | # install(FILES
186 | # # myfile1
187 | # # myfile2
188 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
189 | # )
190 |
191 | #############
192 | ## Testing ##
193 | #############
194 |
195 | ## Add gtest based cpp test target and link libraries
196 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_titan_launch.cpp)
197 | # if(TARGET ${PROJECT_NAME}-test)
198 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
199 | # endif()
200 |
201 | ## Add folders to be run by python nosetests
202 | # catkin_add_nosetests(test)
203 |
--------------------------------------------------------------------------------
/titan_launch/config/px4_config.yaml:
--------------------------------------------------------------------------------
1 | # Common configuration for PX4 autopilot
2 | #
3 | # node:
4 | startup_px4_usb_quirk: true
5 |
6 | # --- system plugins ---
7 |
8 | # sys_status & sys_time connection options
9 | conn:
10 | heartbeat_rate: 1.0 # send hertbeat rate in Hertz
11 | timeout: 10.0 # hertbeat timeout in seconds
12 | timesync_rate: 10.0 # TIMESYNC rate in Hertz (feature disabled if 0.0)
13 | system_time_rate: 1.0 # send system time to FCU rate in Hertz (disabled if 0.0)
14 |
15 | # sys_status
16 | sys:
17 | min_voltage: 10.0 # diagnostics min voltage
18 | disable_diag: false # disable all sys_status diagnostics, except heartbeat
19 |
20 | # sys_time
21 | time:
22 | time_ref_source: "fcu" # time_reference source
23 | timesync_mode: MAVLINK
24 | timesync_avg_alpha: 0.6 # timesync averaging factor
25 |
26 | # --- mavros plugins (alphabetical order) ---
27 |
28 | # 3dr_radio
29 | tdr_radio:
30 | low_rssi: 40 # raw rssi lower level for diagnostics
31 |
32 | # actuator_control
33 | # None
34 |
35 | # command
36 | cmd:
37 | use_comp_id_system_control: false # quirk for some old FCUs
38 |
39 | # dummy
40 | # None
41 |
42 | # ftp
43 | # None
44 |
45 | # global_position
46 | global_position:
47 | frame_id: "map" # origin frame
48 | child_frame_id: "base_link" # body-fixed frame
49 | rot_covariance: 99999.0 # covariance for attitude?
50 | gps_uere: 1.0 # User Equivalent Range Error (UERE) of GPS sensor (m)
51 | use_relative_alt: true # use relative altitude for local coordinates
52 | tf:
53 | send: false # send TF?
54 | frame_id: "map" # TF frame_id
55 | global_frame_id: "earth" # TF earth frame_id
56 | child_frame_id: "base_link" # TF child_frame_id
57 |
58 | # imu_pub
59 | imu:
60 | frame_id: "base_link"
61 | # need find actual values
62 | linear_acceleration_stdev: 0.0003
63 | angular_velocity_stdev: !degrees 0.02
64 | orientation_stdev: 1.0
65 | magnetic_stdev: 0.0
66 |
67 | # local_position
68 | local_position:
69 | frame_id: "map"
70 | tf:
71 | send: false
72 | frame_id: "map"
73 | child_frame_id: "base_link"
74 | send_fcu: false
75 |
76 | # param
77 | # None, used for FCU params
78 |
79 | # rc_io
80 | # None
81 |
82 | # safety_area
83 | safety_area:
84 | p1: {x: 1.0, y: 1.0, z: 1.0}
85 | p2: {x: -1.0, y: -1.0, z: -1.0}
86 |
87 | # setpoint_accel
88 | setpoint_accel:
89 | send_force: false
90 |
91 | # setpoint_attitude
92 | setpoint_attitude:
93 | reverse_thrust: false # allow reversed thrust
94 | use_quaternion: false # enable PoseStamped topic subscriber
95 | tf:
96 | listen: false # enable tf listener (disable topic subscribers)
97 | frame_id: "map"
98 | child_frame_id: "target_attitude"
99 | rate_limit: 50.0
100 |
101 | setpoint_raw:
102 | thrust_scaling: 1.0 # used in setpoint_raw attitude callback.
103 | # Note: PX4 expects normalized thrust values between 0 and 1, which means that
104 | # the scaling needs to be unitary and the inputs should be 0..1 as well.
105 |
106 | # setpoint_position
107 | setpoint_position:
108 | tf:
109 | listen: false # enable tf listener (disable topic subscribers)
110 | frame_id: "map"
111 | child_frame_id: "target_position"
112 | rate_limit: 50.0
113 | mav_frame: LOCAL_NED
114 |
115 | # setpoint_velocity
116 | setpoint_velocity:
117 | mav_frame: LOCAL_NED
118 |
119 | # vfr_hud
120 | # None
121 |
122 | # waypoint
123 | mission:
124 | pull_after_gcs: true # update mission if gcs updates
125 |
126 | # --- mavros extras plugins (same order) ---
127 |
128 | # adsb
129 | # None
130 |
131 | # debug_value
132 | # None
133 |
134 | # distance_sensor
135 | ## Currently available orientations:
136 | # Check http://wiki.ros.org/mavros/Enumerations
137 | ##
138 | distance_sensor:
139 | hrlv_ez4_pub:
140 | id: 0
141 | frame_id: "hrlv_ez4_sonar"
142 | orientation: PITCH_270 # RPY:{0.0, 270.0, 0.0} - downward-facing
143 | field_of_view: 0.0 # XXX TODO
144 | send_tf: true
145 | sensor_position: {x: 0.0, y: 0.0, z: -0.1}
146 | lidarlite_pub:
147 | id: 1
148 | frame_id: "lidarlite_laser"
149 | orientation: PITCH_270
150 | field_of_view: 0.0 # XXX TODO
151 | send_tf: true
152 | sensor_position: {x: 0.0, y: 0.0, z: -0.1}
153 | sonar_1_sub:
154 | subscriber: true
155 | id: 2
156 | orientation: PITCH_270
157 | laser_1_sub:
158 | subscriber: true
159 | id: 3
160 | orientation: PITCH_270
161 |
162 | # image_pub
163 | image:
164 | frame_id: "px4flow"
165 |
166 | # fake_gps
167 | fake_gps:
168 | # select data source
169 | use_mocap: true # ~mocap/pose
170 | mocap_transform: true # ~mocap/tf instead of pose
171 | use_vision: false # ~vision (pose)
172 | # origin (default: Zürich)
173 | geo_origin:
174 | lat: 47.3667 # latitude [degrees]
175 | lon: 8.5500 # longitude [degrees]
176 | alt: 408.0 # altitude (height over the WGS-84 ellipsoid) [meters]
177 | eph: 2.0
178 | epv: 2.0
179 | satellites_visible: 5 # virtual number of visible satellites
180 | fix_type: 3 # type of GPS fix (default: 3D)
181 | tf:
182 | listen: false
183 | send: false # send TF?
184 | frame_id: "map" # TF frame_id
185 | child_frame_id: "fix" # TF child_frame_id
186 | rate_limit: 10.0 # TF rate
187 | gps_rate: 5.0 # GPS data publishing rate
188 |
189 | # landing_target
190 | landing_target:
191 | listen_lt: false
192 | mav_frame: "LOCAL_NED"
193 | land_target_type: "VISION_FIDUCIAL"
194 | image:
195 | width: 640 # [pixels]
196 | height: 480
197 | camera:
198 | fov_x: 2.0071286398 # default: 115 [degrees]
199 | fov_y: 2.0071286398
200 | tf:
201 | send: true
202 | listen: false
203 | frame_id: "landing_target"
204 | child_frame_id: "camera_center"
205 | rate_limit: 10.0
206 | target_size: {x: 0.3, y: 0.3}
207 |
208 | # mocap_pose_estimate
209 | mocap:
210 | # select mocap source
211 | use_tf: false # ~mocap/tf
212 | use_pose: true # ~mocap/pose
213 |
214 | # odom
215 | odometry:
216 | in:
217 | frame_id: "odom"
218 | child_frame_id: "base_link"
219 | frame_tf:
220 | local_frame: "local_origin_ned"
221 | body_frame_orientation: "flu"
222 | out:
223 | frame_tf:
224 | # available: check MAV_FRAME odometry local frames in
225 | # https://mavlink.io/en/messages/common.html
226 | local_frame: "vision_ned"
227 | # available: ned, frd or flu (though only the tf to frd is supported)
228 | body_frame_orientation: "frd"
229 |
230 | # px4flow
231 | px4flow:
232 | frame_id: "px4flow"
233 | ranger_fov: !degrees 6.8 # 6.8 degreens at 5 meters, 31 degrees at 1 meter
234 | ranger_min_range: 0.3 # meters
235 | ranger_max_range: 5.0 # meters
236 |
237 | # vision_pose_estimate
238 | vision_pose:
239 | tf:
240 | listen: false # enable tf listener (disable topic subscribers)
241 | frame_id: "map"
242 | child_frame_id: "vision_estimate"
243 | rate_limit: 10.0
244 |
245 | # vision_speed_estimate
246 | vision_speed:
247 | listen_twist: true # enable listen to twist topic, else listen to vec3d topic
248 | twist_cov: true # enable listen to twist with covariance topic
249 |
250 | # vibration
251 | vibration:
252 | frame_id: "base_link"
253 |
254 | # wheel_odometry
255 | wheel_odometry:
256 | count: 2 # number of wheels to compute odometry
257 | use_rpm: false # use wheel's RPM instead of cumulative distance to compute odometry
258 | wheel0: {x: 0.0, y: -0.15, radius: 0.05} # x-, y-offset (m,NED) and radius (m)
259 | wheel1: {x: 0.0, y: 0.15, radius: 0.05} # x-, y-offset (m,NED) and radius (m)
260 | send_raw: true # send wheel's RPM and cumulative distance (~/wheel_odometry/rpm, ~/wheel_odometry/distance)
261 | send_twist: false # send geometry_msgs/TwistWithCovarianceStamped instead of nav_msgs/Odometry
262 | frame_id: "map" # origin frame
263 | child_frame_id: "base_link" # body-fixed frame
264 | vel_error: 0.1 # wheel velocity measurement error 1-std (m/s)
265 | tf:
266 | send: true
267 | frame_id: "map"
268 | child_frame_id: "base_link"
269 |
270 | # vim:set ts=2 sw=2 et:
271 |
272 |
--------------------------------------------------------------------------------
/titan_launch/config/px4_pluginlists.yaml:
--------------------------------------------------------------------------------
1 | plugin_blacklist:
2 | # common
3 | - safety_area
4 | # extras
5 | - image_pub
6 | - vibration
7 | - distance_sensor
8 | - rangefinder
9 | - wheel_odometry
10 |
11 |
12 | plugin_whitelist: []
13 | #- 'sys_*'
14 |
--------------------------------------------------------------------------------
/titan_launch/launch/px4.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/titan_launch/launch/startup_ground.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/titan_launch/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | titan_launch
4 | 0.0.0
5 | The titan_launch package
6 |
7 |
8 |
9 |
10 | fclad
11 |
12 |
13 |
14 |
15 |
16 | TODO
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | catkin
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/video_thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KumarRobotics/spomp-system/5ad429a94b762a9200fd1fb5f43ec88a45b4e608/video_thumbnail.png
--------------------------------------------------------------------------------