diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Revision history for ogma-core
 
+## [1.4.0] - 2024-05-21
+
+* Version bump 1.4.0 (#145).
+* Make ros command generate dockerfile (#136).
+* Map float and double to the same types in C++ (#138).
+
 ## [1.3.0] - 2024-03-21
 
 * Version bump 1.3.0 (#133).
diff --git a/ogma-core.cabal b/ogma-core.cabal
--- a/ogma-core.cabal
+++ b/ogma-core.cabal
@@ -32,7 +32,7 @@
 build-type:          Simple
 
 name:                ogma-core
-version:             1.3.0
+version:             1.4.0
 homepage:            http://nasa.gov
 license:             OtherLicense
 license-file:        LICENSE.pdf
@@ -60,9 +60,10 @@
                      templates/copilot-cfs/fsw/src/copilot_cfs_version.h
                      templates/copilot-cfs/fsw/src/copilot_cfs.h
                      templates/copilot-cfs/fsw/src/copilot_cfs_events.h
-                     templates/ros/CMakeLists.txt
-                     templates/ros/src/.keep
-                     templates/ros/package.xml
+                     templates/ros/Dockerfile
+                     templates/ros/copilot/CMakeLists.txt
+                     templates/ros/copilot/src/.keep
+                     templates/ros/copilot/package.xml
                      templates/fprime/CMakeLists.txt
                      templates/fprime/Dockerfile
                      templates/fprime/instance-copilot
@@ -109,13 +110,13 @@
     , IfElse
     , mtl
 
-    , ogma-extra              >= 1.3.0 && < 1.4
-    , ogma-language-c         >= 1.3.0 && < 1.4
-    , ogma-language-cocospec  >= 1.3.0 && < 1.4
-    , ogma-language-copilot   >= 1.3.0 && < 1.4
-    , ogma-language-jsonspec  >= 1.3.0 && < 1.4
-    , ogma-language-smv       >= 1.3.0 && < 1.4
-    , ogma-spec               >= 1.3.0 && < 1.4
+    , ogma-extra              >= 1.4.0 && < 1.5
+    , ogma-language-c         >= 1.4.0 && < 1.5
+    , ogma-language-cocospec  >= 1.4.0 && < 1.5
+    , ogma-language-copilot   >= 1.4.0 && < 1.5
+    , ogma-language-jsonspec  >= 1.4.0 && < 1.5
+    , ogma-language-smv       >= 1.4.0 && < 1.5
+    , ogma-spec               >= 1.4.0 && < 1.5
 
   hs-source-dirs:
     src
diff --git a/src/Command/ROSApp.hs b/src/Command/ROSApp.hs
--- a/src/Command/ROSApp.hs
+++ b/src/Command/ROSApp.hs
@@ -136,7 +136,7 @@
           foldr f ([], [], [], []) varNames
 
     let rosFileName =
-          targetDir </> "src" </> "copilot_monitor.cpp"
+          targetDir </> "copilot" </> "src" </> "copilot_monitor.cpp"
         rosFileContents =
           unlines $
             rosMonitorContents varNames vars ids infos datas monitors
@@ -144,7 +144,7 @@
     writeFile rosFileName rosFileContents
 
     let rosFileName =
-          targetDir </> "src" </> "copilot_logger.cpp"
+          targetDir </> "copilot" </> "src" </> "copilot_logger.cpp"
         rosFileContents =
           unlines $
             rosLoggerContents varNames vars ids infos datas monitors
@@ -403,8 +403,8 @@
           "int16_t"  -> "std::int16_t"
           "int32_t"  -> "std::int32_t"
           "int64_t"  -> "std::int64_t"
-          "float"    -> "std::float32"
-          "double"   -> "std::float64"
+          "float"    -> "float"
+          "double"   -> "double"
           def        -> def
 
     msgSubscriptionS     = unlines
diff --git a/templates/ros/CMakeLists.txt b/templates/ros/CMakeLists.txt
deleted file mode 100644
--- a/templates/ros/CMakeLists.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-cmake_minimum_required(VERSION 3.8)
-project(copilot)
-
-if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-  add_compile_options(-Wall -Wextra -Wpedantic)
-endif()
-
-# find dependencies
-find_package(ament_cmake REQUIRED)
-find_package(rclcpp REQUIRED)
-find_package(std_msgs REQUIRED)
-
-add_executable(copilot src/copilot_monitor.cpp)
-ament_target_dependencies(copilot rclcpp std_msgs)
-
-# Uncomment to enable compiling the copilot logger
-# add_executable(copilot_logger src/copilot_logger.cpp)
-# ament_target_dependencies(copilot_logger rclcpp std_msgs)
-
-install(TARGETS
-  copilot
-  DESTINATION lib/${PROJECT_NAME})
-
-if(BUILD_TESTING)
-  find_package(ament_lint_auto REQUIRED)
-  ament_lint_auto_find_test_dependencies()
-endif()
-
-ament_package()
diff --git a/templates/ros/Dockerfile b/templates/ros/Dockerfile
new file mode 100644
--- /dev/null
+++ b/templates/ros/Dockerfile
@@ -0,0 +1,16 @@
+FROM osrf/space-ros:latest
+
+ARG USER=spaceros-user
+ARG PACKAGE_PATH=/home/${USER}/monitors
+ARG ROS_PATH=/home/${USER}/spaceros/
+
+RUN mkdir -p ${PACKAGE_PATH}/src/
+ADD copilot ${PACKAGE_PATH}/src/copilot
+USER root
+RUN chown -R ${USER} ${PACKAGE_PATH}
+USER ${USER}
+
+SHELL ["/bin/bash", "-c"]
+WORKDIR ${PACKAGE_PATH}
+RUN source ${ROS_PATH}/install/setup.bash && \
+    colcon build
diff --git a/templates/ros/copilot/CMakeLists.txt b/templates/ros/copilot/CMakeLists.txt
new file mode 100644
--- /dev/null
+++ b/templates/ros/copilot/CMakeLists.txt
@@ -0,0 +1,29 @@
+cmake_minimum_required(VERSION 3.8)
+project(copilot)
+
+if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+  add_compile_options(-Wall -Wextra -Wpedantic)
+endif()
+
+# find dependencies
+find_package(ament_cmake REQUIRED)
+find_package(rclcpp REQUIRED)
+find_package(std_msgs REQUIRED)
+
+add_executable(copilot src/copilot_monitor.cpp)
+ament_target_dependencies(copilot rclcpp std_msgs)
+
+# Uncomment to enable compiling the copilot logger
+# add_executable(copilot_logger src/copilot_logger.cpp)
+# ament_target_dependencies(copilot_logger rclcpp std_msgs)
+
+install(TARGETS
+  copilot
+  DESTINATION lib/${PROJECT_NAME})
+
+if(BUILD_TESTING)
+  find_package(ament_lint_auto REQUIRED)
+  ament_lint_auto_find_test_dependencies()
+endif()
+
+ament_package()
diff --git a/templates/ros/copilot/package.xml b/templates/ros/copilot/package.xml
new file mode 100644
--- /dev/null
+++ b/templates/ros/copilot/package.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
+<package format="3">
+  <name>copilot</name>
+  <version>0.0.0</version>
+  <description>TODO: Package description</description>
+  <maintainer email="root@todo.todo">root</maintainer>
+  <license>TODO: License declaration</license>
+
+  <buildtool_depend>ament_cmake</buildtool_depend>
+  <depend>rclcpp</depend>
+  <depend>std_msgs</depend>
+
+  <test_depend>ament_lint_auto</test_depend>
+  <test_depend>ament_lint_common</test_depend>
+
+  <export>
+    <build_type>ament_cmake</build_type>
+  </export>
+</package>
diff --git a/templates/ros/copilot/src/.keep b/templates/ros/copilot/src/.keep
new file mode 100644
--- /dev/null
+++ b/templates/ros/copilot/src/.keep
diff --git a/templates/ros/package.xml b/templates/ros/package.xml
deleted file mode 100644
--- a/templates/ros/package.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
-<package format="3">
-  <name>copilot</name>
-  <version>0.0.0</version>
-  <description>TODO: Package description</description>
-  <maintainer email="root@todo.todo">root</maintainer>
-  <license>TODO: License declaration</license>
-
-  <buildtool_depend>ament_cmake</buildtool_depend>
-  <depend>rclcpp</depend>
-  <depend>std_msgs</depend>
-
-  <test_depend>ament_lint_auto</test_depend>
-  <test_depend>ament_lint_common</test_depend>
-
-  <export>
-    <build_type>ament_cmake</build_type>
-  </export>
-</package>
diff --git a/templates/ros/src/.keep b/templates/ros/src/.keep
deleted file mode 100644
--- a/templates/ros/src/.keep
+++ /dev/null
