diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..cafb7b1
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,23 @@
+cmake_minimum_required(VERSION 3.0.2)
+project(mach1_navigation)
+
+find_package(catkin REQUIRED COMPONENTS
+ geometry_msgs
+ mach1_msgs
+ roscpp
+ std_msgs
+)
+
+catkin_package(
+ INCLUDE_DIRS include
+ CATKIN_DEPENDS geometry_msgs roscpp std_msgs
+)
+
+include_directories(
+ include
+ ${catkin_INCLUDE_DIRS}
+)
+
+add_executable(vel_switch_node src/vel_switch.cpp)
+
+target_link_libraries(vel_switch_node ${catkin_LIBRARIES})
diff --git a/package.xml b/package.xml
new file mode 100644
index 0000000..0d00ddc
--- /dev/null
+++ b/package.xml
@@ -0,0 +1,19 @@
+
+
+ mach1_navigation
+ 0.0.0
+ The mach1_navigation package used to control motion of robot.
+ Julian Rendon
+ MIT
+ catkin
+ geometry_msgs
+ mach1_msgs
+ roscpp
+ std_msgs
+ geometry_msgs
+ roscpp
+ std_msgs
+ geometry_msgs
+ roscpp
+ std_msgs
+
diff --git a/src/vel_switch.cpp b/src/vel_switch.cpp
new file mode 100644
index 0000000..246995e
--- /dev/null
+++ b/src/vel_switch.cpp
@@ -0,0 +1,152 @@
+/**
+ * @file vel_switch.cpp
+ * @author Julian Rendon (julianrendon514@gmail.com)
+ * @brief ROS node that handles robot navigation logic.
+ * @version 1.0
+ * @date 2023-05-08
+ *
+ * ROS node that switches between different types of velocity messages (from joystick, keyboard, or
+ * autonomous navigation) and publishes the prioritized velocity messages.
+ *
+ * The VelSwitch class defines the behavior of the node, with member functions for subscribing to
+ * different velocity messages, a task loop that selects the velocity message to publish
+ * based on the current navigation mode, and a constructor that sets up the node's publishers and
+ * subscribers.
+ *
+ * @copyright Copyright (c) 2023
+ *
+ */
+#include
+#include
+#include