#include "geometry_msgs/msg/twist.hpp" #include "ros2/ros2.hpp" #include "tasks/packet_typedef.hpp" #include #include #include #include using namespace wust_vision; class Nav: public rclcpp::Node { public: Nav(): Node("wust_vision_global_node") { cmd_sub_ = this->create_subscription( "cmd_vel", 10, std::bind(&Nav::twistCb, this, std::placeholders::_1) ); serial_ = std::make_shared(); wust_vl::common::drivers::SerialDriver::SerialPortConfig cfg { /*baud*/ 115200, /*csize*/ 8, boost::asio::serial_port_base::parity::none, boost::asio::serial_port_base::stop_bits::one, boost::asio::serial_port_base::flow_control::none }; serial_->init_port("/dev/ttyACM0", cfg); serial_->set_receive_callback(std::bind( &Nav::serialCallback, this, std::placeholders::_1, std::placeholders::_2 )); serial_->set_error_callback([&](const boost::system::error_code& ec) { WUST_ERROR("serial") << "serial error: " << ec.message(); }); } void serialCallback(const uint8_t* data, std::size_t len) {} void twistCb(const geometry_msgs::msg::Twist::SharedPtr msg) { NavRobotCmdData send_data; send_data.cmd_ID = ID_NAV_CMD; send_data.packet_type = ID_NAV_CONTROL; send_data.time_stamp = static_cast(std::chrono::duration_cast( wust_vl::common::utils::time_utils::now().time_since_epoch() ) .count()); send_data.vx = -msg->linear.y; send_data.vy = msg->linear.x; send_data.wz = msg->angular.z; if (serial_) { serial_->write(std::move(wust_vl::common::drivers::toVector(send_data))); } } rclcpp::Subscription::SharedPtr cmd_sub_; std::shared_ptr serial_; }; int main(int argc, char** argv) { rclcpp::init(argc, argv); { auto node = rclcpp::Node::make_shared("wust_vision_global_node"); rclcpp::spin(node); // rclcpp::shutdown(); } return 0; }