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)