diff --git a/clever/CMakeLists.txt b/clever/CMakeLists.txt
index 579cf6bd..523d79ca 100644
--- a/clever/CMakeLists.txt
+++ b/clever/CMakeLists.txt
@@ -2,12 +2,15 @@ cmake_minimum_required(VERSION 2.8.3)
project(clever)
## Compile as C++11, supported in ROS Kinetic and newer
-# add_compile_options(-std=c++11)
+add_compile_options(-std=c++11)
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
+ nodelet
+ pluginlib
+ roscpp
rospy
std_msgs
message_generation
@@ -131,13 +134,13 @@ catkin_package(
## Your package locations should be listed before other locations
include_directories(
# include
-# ${catkin_INCLUDE_DIRS}
+ ${catkin_INCLUDE_DIRS}
)
## Declare a C++ library
-# add_library(${PROJECT_NAME}
-# src/${PROJECT_NAME}/clever.cpp
-# )
+add_library(fcu_horiz
+ src/fcu_horiz.cpp
+)
## Add cmake target dependencies of the library
## as an example, code may need to be generated before libraries
@@ -160,9 +163,10 @@ include_directories(
# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
## Specify libraries to link a library or executable target against
-# target_link_libraries(${PROJECT_NAME}_node
-# ${catkin_LIBRARIES}
-# )
+target_link_libraries(fcu_horiz
+ ${catkin_LIBRARIES}
+ "/opt/ros/kinetic/lib/libtf2_ros.so"
+)
#############
## Install ##
diff --git a/clever/launch/clever.launch b/clever/launch/clever.launch
index a3fa16e3..e53cb5b5 100644
--- a/clever/launch/clever.launch
+++ b/clever/launch/clever.launch
@@ -28,6 +28,8 @@
+
+
diff --git a/clever/nodelet_plugins.xml b/clever/nodelet_plugins.xml
new file mode 100644
index 00000000..86ef931a
--- /dev/null
+++ b/clever/nodelet_plugins.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/clever/package.xml b/clever/package.xml
index b41ce0f3..5759150f 100644
--- a/clever/package.xml
+++ b/clever/package.xml
@@ -41,9 +41,15 @@
catkin
+ nodelet
+ roscpp
+
+ nodelet
+ roscpp
+
diff --git a/clever/src/fcu_horiz.cpp b/clever/src/fcu_horiz.cpp
new file mode 100644
index 00000000..4dd4adc0
--- /dev/null
+++ b/clever/src/fcu_horiz.cpp
@@ -0,0 +1,31 @@
+#include
+#include
+#include
+#include
+#include
+
+class FcuHoriz : public nodelet::Nodelet
+{
+ geometry_msgs::TransformStamped t_;
+
+ void handlePose(const geometry_msgs::PoseStampedConstPtr& msg)
+ {
+ static tf2_ros::TransformBroadcaster br;
+ t_.header.stamp = msg->header.stamp;
+ t_.header.frame_id = msg->header.frame_id;
+ t_.transform.translation.x = msg->pose.position.x;
+ t_.transform.translation.y = msg->pose.position.y;
+ t_.transform.translation.z = msg->pose.position.z;
+ br.sendTransform(t_);
+ }
+
+ void onInit()
+ {
+ t_.child_frame_id = "fcu_horiz";
+ t_.transform.rotation.w = 1;
+ static ros::Subscriber pose_sub = getNodeHandle().subscribe("mavros/local_position/pose", 1, &FcuHoriz::handlePose, this);
+ ROS_INFO("fcu_horiz initialized");
+ }
+};
+
+PLUGINLIB_EXPORT_CLASS(FcuHoriz, nodelet::Nodelet)
diff --git a/clever/src/simple_offboard.py b/clever/src/simple_offboard.py
index 9c4c8061..ecc909bc 100755
--- a/clever/src/simple_offboard.py
+++ b/clever/src/simple_offboard.py
@@ -28,26 +28,6 @@ tf_buffer = tf2_ros.Buffer()
tf_listener = tf2_ros.TransformListener(tf_buffer)
-def init_fcu_horiz():
- # `fcu_horiz` frame publishing
-
- tr = TransformStamped()
- tr.header.frame_id = 'local_origin'
- tr.child_frame_id = 'fcu_horiz'
-
- def update_pose(data):
- tr.header.stamp = data.header.stamp
- tr.transform.translation = vector3_from_point(data.pose.position)
- yaw = euler_from_orientation(data.pose.orientation)[2]
- tr.transform.rotation = orientation_from_euler(0, 0, yaw)
- tf_broadcaster.sendTransform(tr)
-
- rospy.Subscriber('/mavros/local_position/pose', PoseStamped, update_pose)
-
-
-init_fcu_horiz()
-
-
position_pub = rospy.Publisher('/mavros/setpoint_raw/local', PositionTarget, queue_size=1)
attitude_pub = rospy.Publisher('/mavros/setpoint_raw/attitude', AttitudeTarget, queue_size=1)
target_pub = rospy.Publisher('~target', PoseStamped, queue_size=1)