From 62f791dc9a4ab79bf9f187fb4d363811c29e73d6 Mon Sep 17 00:00:00 2001
From: Franz Bethke <bethke@math.hu-berlin.de>
Date: Tue, 3 Apr 2018 17:28:31 +0200
Subject: [PATCH] First steps of EgoMotion

---
 .../src/car/include/environment/Environment.h |  2 +-
 .../src/car/include/mainNode/EgoMotion.h      | 11 +++++++++
 .../src/car/include/mavLink/MavLink.h         |  5 ++++
 .../src/car/msg/environmentDataMsg.msg        |  2 +-
 .../src/car/src/environment/Environment.cpp   |  6 ++---
 .../src/car/src/mainNode/EgoMotion.cpp        | 23 ++++++++++++++++++-
 .../catkin_ws/src/car/src/mavLink/MavLink.cpp | 14 +++++++++++
 7 files changed, 57 insertions(+), 6 deletions(-)

diff --git a/modules/catkin_ws/src/car/include/environment/Environment.h b/modules/catkin_ws/src/car/include/environment/Environment.h
index 00f19700..ff28f961 100644
--- a/modules/catkin_ws/src/car/include/environment/Environment.h
+++ b/modules/catkin_ws/src/car/include/environment/Environment.h
@@ -25,7 +25,7 @@ private:
     std::string name_;
 
     float distance;
-    float prevSpeed;
+    float relativeSpeed;
 
     ros::Publisher environmentData;
     ros::Subscriber ussData;
diff --git a/modules/catkin_ws/src/car/include/mainNode/EgoMotion.h b/modules/catkin_ws/src/car/include/mainNode/EgoMotion.h
index d398bd90..ea796eb2 100644
--- a/modules/catkin_ws/src/car/include/mainNode/EgoMotion.h
+++ b/modules/catkin_ws/src/car/include/mainNode/EgoMotion.h
@@ -5,8 +5,10 @@
 #include <ros/ros.h>
 
 #include <functional>
+#include <atomic>
 
 #include "car/environmentDataMsg.h"
+#include "car/stmDataMsg.h"
 
 namespace car
 {
@@ -22,9 +24,18 @@ class EgoMotion
     Callback cruiseControllerNotify;
     
   private:
+    std::atomic<float> distance{0};
+    std::atomic<float> stmSpeed{0};
+    std::atomic<float> relSpeed{0};
+    std::atomic<float> prvSpeed{0};
+    
     ros::Subscriber environmentData;
+    ros::Subscriber stmData;
+    
     void environmentDataCallback(const environmentDataMsg::ConstPtr & inMsg);
+    void stmDataCallback(const stmDataMsg::ConstPtr & inMsg);
     
+    void computeAndNotify();
 };
 }
 
diff --git a/modules/catkin_ws/src/car/include/mavLink/MavLink.h b/modules/catkin_ws/src/car/include/mavLink/MavLink.h
index 836a23f0..857c542d 100644
--- a/modules/catkin_ws/src/car/include/mavLink/MavLink.h
+++ b/modules/catkin_ws/src/car/include/mavLink/MavLink.h
@@ -8,6 +8,8 @@
 #include "car/laneDataMsg.h"
 #include "car/rcEnabledMsg.h"
 
+#include "boost/thread.hpp"
+
 namespace car
 {
 	class MavLink : public nodelet::Nodelet
@@ -30,6 +32,9 @@ namespace car
       void ccDataCallback(const ccDataMsg::ConstPtr& inMsg);
       void laneDataCallback(const laneDataMsg::ConstPtr& inMsg);
       void rcEnabledCallback(const rcEnabledMsg::ConstPtr& inMsg);
+      
+      
+      boost::thread main;
 	};
 }
 #endif
diff --git a/modules/catkin_ws/src/car/msg/environmentDataMsg.msg b/modules/catkin_ws/src/car/msg/environmentDataMsg.msg
index 8fb4625f..080ad908 100644
--- a/modules/catkin_ws/src/car/msg/environmentDataMsg.msg
+++ b/modules/catkin_ws/src/car/msg/environmentDataMsg.msg
@@ -1,2 +1,2 @@
 float32 distance
-float32 prevSpeed
+float32 relativeSpeed
diff --git a/modules/catkin_ws/src/car/src/environment/Environment.cpp b/modules/catkin_ws/src/car/src/environment/Environment.cpp
index df596bbc..8718a215 100644
--- a/modules/catkin_ws/src/car/src/environment/Environment.cpp
+++ b/modules/catkin_ws/src/car/src/environment/Environment.cpp
@@ -15,7 +15,7 @@ namespace car
     nh_(nh), 
     name_(name),
     distance(0),
-    prevSpeed(0) {}
+    relativeSpeed(0) {}
   
 	Environment::Environment() {}
   
@@ -34,11 +34,11 @@ namespace car
   {
     // std::cout << "Environment recived new uss data (" << inMsg->distance << ").\n";
     distance = inMsg->distance;
-    prevSpeed = 1.0;
+    relativeSpeed = 1.0;
     
     environmentDataMsg outMsg;
     outMsg.distance = distance;
-    outMsg.prevSpeed = prevSpeed;
+    outMsg.relativeSpeed = relativeSpeed;
     
     environmentData.publish(outMsg);
   }
diff --git a/modules/catkin_ws/src/car/src/mainNode/EgoMotion.cpp b/modules/catkin_ws/src/car/src/mainNode/EgoMotion.cpp
index 8ad351c0..261d606f 100644
--- a/modules/catkin_ws/src/car/src/mainNode/EgoMotion.cpp
+++ b/modules/catkin_ws/src/car/src/mainNode/EgoMotion.cpp
@@ -8,11 +8,32 @@ EgoMotion::EgoMotion(ros::NodeHandle nh)
       , cruiseControllerNotify()
 {
     environmentData = nh.subscribe("environmentData", 1, &EgoMotion::environmentDataCallback, this);
+    stmData = nh.subscribe("stmData", 1, &EgoMotion::stmDataCallback, this);
 }
 
 void EgoMotion::environmentDataCallback(const environmentDataMsg::ConstPtr & inMsg)
 {
-    std::cout << "EgoMotion recived new environmentData data (" << inMsg->distance << ", " << inMsg->prevSpeed << ").\n";
+    std::cout << "EgoMotion recived new environmentData data (" << inMsg->distance << ", " << inMsg->relativeSpeed << ")." << std::endl;
+    distance = inMsg->distance;
+    relSpeed = inMsg->relativeSpeed;
+    sleep(3);
+    computeAndNotify();
+    std::cout << "EgoMotion done with environmentData data (" << inMsg->distance << ", " << inMsg->relativeSpeed << ")." << std::endl;
+}
+
+
+void EgoMotion::stmDataCallback(const stmDataMsg::ConstPtr & inMsg)
+{
+    std::cout << "EgoMotion recived new stmData data (" << inMsg->speed << ", " << inMsg->angle << ")." << std::endl;
+    stmSpeed = inMsg->speed;
+    sleep(1);
+    computeAndNotify();
+    std::cout << "EgoMotion done with stmData data (" << inMsg->speed << ", " << inMsg->angle << ")." << std::endl;
+}
+
+void EgoMotion::computeAndNotify()
+{
+    prvSpeed = stmSpeed + relSpeed;
     cruiseControllerNotify();
 }
 
diff --git a/modules/catkin_ws/src/car/src/mavLink/MavLink.cpp b/modules/catkin_ws/src/car/src/mavLink/MavLink.cpp
index 6a735c5f..dcd99e90 100644
--- a/modules/catkin_ws/src/car/src/mavLink/MavLink.cpp
+++ b/modules/catkin_ws/src/car/src/mavLink/MavLink.cpp
@@ -28,6 +28,20 @@ namespace car
 	  ccData = nh_.subscribe("ccData", 1, &MavLink::ccDataCallback, this);
 	  laneData = nh_.subscribe("laneData", 1, &MavLink::laneDataCallback, this);
 	  rcEnabled = nh_.subscribe("rcEnabled", 1, &MavLink::rcEnabledCallback, this);
+    main = boost::thread(
+        [this]()
+        {
+            int counter = 0;
+            ros::Rate rate{1};
+            while (ros::ok())
+            {
+                stmDataMsg msg;
+                msg.speed = counter++;
+                msg.angle = 0;
+                stmData.publish(msg);
+                rate.sleep();
+            }
+        });
 		NODELET_INFO("MavLink::onInit -- END");
 	}
 
-- 
GitLab