Pārlūkot izejas kodu

[fix]guardian qos & some topics

wangep1 1 gadu atpakaļ
vecāks
revīzija
9fb8b610ec

+ 17 - 17
saturn_controller/CMakeLists.txt

@@ -1,8 +1,6 @@
 cmake_minimum_required(VERSION 3.10)
 project(saturn_controller)
 
-option(BUILD_TEST "whether building tests" OFF)
-
 # Default to C99                                                               
 if(NOT CMAKE_C_STANDARD)                                                       
   set(CMAKE_C_STANDARD 99)                                                     
@@ -23,7 +21,6 @@ find_package(rclcpp_components REQUIRED)
 find_package(ysc_robot_msgs REQUIRED)
 find_package(daystar_navigation_msgs REQUIRED)
 find_package(saturn_msgs REQUIRED)
-#find_package(yaml-cpp REQUIRED)
 
 set(THIS_PACKAGE_INCLUDE_DEPENDS
   rclcpp
@@ -36,7 +33,7 @@ set(THIS_PACKAGE_INCLUDE_DEPENDS
 include_directories(./sdk/include)
 include_directories(./include)
 
-#message(COMMAND echo "The current binary directory is: ${CMAKE_CURRENT_BINARY_DIR}")
+message(COMMAND echo "The current binary directory is: ${CMAKE_CURRENT_BINARY_DIR}")
 file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../../install/saturn_controller/lib)
 file(COPY ./sdk/lib/x86_64/libmc_client.so DESTINATION 
   ${CMAKE_CURRENT_BINARY_DIR}/../../install/saturn_controller/lib/)
@@ -45,24 +42,27 @@ link_directories(${CMAKE_CURRENT_BINARY_DIR}/../../install/saturn_controller/lib
 
 file(GLOB main_files src/*.cpp)
 
-add_library(saturn_controller SHARED src/saturn_controller.cpp ${main_files})
-#target_link_libraries(saturn_controller yaml-cpp -lmc_client)
-ament_target_dependencies(saturn_controller ${THIS_PACKAGE_INCLUDE_DEPENDS})
-rclcpp_components_register_nodes(saturn_controller "saturn_ros2::SaturnController")
+add_library(saturn_controller_component SHARED src/saturn_controller.cpp ${main_files})
+target_link_libraries(saturn_controller_component -lmc_client)
+ament_target_dependencies(saturn_controller_component ${THIS_PACKAGE_INCLUDE_DEPENDS})
+rclcpp_components_register_nodes(saturn_controller_component "saturn_ros2::SaturnController")
+
 
-install(TARGETS saturn_controller
+install(TARGETS 
+  saturn_controller_component
   ARCHIVE DESTINATION lib
   LIBRARY DESTINATION lib
-  RUNTIME DESTINATION bin
-)
+  RUNTIME DESTINATION lib/${PROJECT_NAME}/
+  )
 
-install(DIRECTORY config launch
-  DESTINATION share/${PROJECT_NAME}/
+install(DIRECTORY
+  include/
+  DESTINATION include/
 )
 
-if(BUILD_TESTING)
-  find_package(ament_lint_auto REQUIRED)
-  ament_lint_auto_find_test_dependencies()
-endif()
+install(DIRECTORY
+  config
+  launch
+  DESTINATION share/${PROJECT_NAME}/)
 
 ament_package()

+ 26 - 0
saturn_controller/include/saturn_controller/config_handler.hpp

@@ -0,0 +1,26 @@
+#ifndef CONFIG_HANDLER_HPP_
+#define CONFIG_HANDLER_HPP_
+
+#include <rclcpp/rclcpp.hpp>
+//#include "yaml-cpp/yaml.h"
+#include <ament_index_cpp/get_package_share_directory.hpp>
+#include <std_msgs/msg/bool.hpp>
+
+namespace saturn_ros2 {
+class ConfigHandler {
+   public:
+    ConfigHandler(std::shared_ptr<rclcpp::Node> node);
+
+    bool is_simulation_;
+    std::string motion_computer_ip_address_;
+    float main_timer_frequency_;
+    float imu_timer_frequency_;
+    float legged_odom_timer_frequency_;
+    
+   private:
+    std::shared_ptr<rclcpp::Node> node_;
+
+    void loadConfig();
+};
+}
+#endif

+ 153 - 0
saturn_controller/include/saturn_controller/saturn_controller.hpp

@@ -0,0 +1,153 @@
+#include <daystar_navigation_msgs/msg/guardian.hpp>
+#include <daystar_navigation_msgs/srv/guardian.hpp>
+#include <geometry_msgs/msg/pose_stamped.hpp>
+#include <geometry_msgs/msg/twist.hpp>
+#include <nav_msgs/msg/odometry.hpp>
+#include <saturn_msgs/msg/common_status.hpp>
+#include <sensor_msgs/msg/battery_state.hpp>
+#include <sensor_msgs/msg/imu.hpp>
+#include <sensor_msgs/msg/joint_state.hpp>
+#include <std_msgs/msg/float32_multi_array.hpp>
+#include <std_msgs/msg/int32.hpp>
+#include <std_msgs/msg/u_int32.hpp>
+#include <std_msgs/msg/u_int8.hpp>
+#include <ysc_robot_msgs/srv/robot_command.hpp>
+#include "common.h"
+#include "config_handler.hpp"
+#include "mc_client_interface.h"
+#include "rclcpp/rclcpp.hpp"
+#include "rclcpp_components/register_node_macro.hpp"
+#include "std_msgs/msg/string.hpp"
+
+namespace saturn_ros2 {
+
+class SaturnController {
+   public:
+    SaturnController(const rclcpp::NodeOptions& options);
+    rclcpp::node_interfaces::NodeBaseInterface::SharedPtr get_node_base_interface() const;
+
+   private:
+    std::shared_ptr<rclcpp::Node> node_;
+    std::shared_ptr<ConfigHandler> config_handler_;
+
+    rclcpp::TimerBase::SharedPtr main_timer_;
+    rclcpp::TimerBase::SharedPtr imu_timer_;
+    rclcpp::TimerBase::SharedPtr legged_odom_timer_;
+
+    // subscription
+
+    //订阅导航速度指令
+    rclcpp::Subscription<geometry_msgs::msg::Twist>::SharedPtr cmd_vel_sub_;
+
+    //订阅从navigation发出的停障结果,用于遥控器停障
+    rclcpp::Subscription<daystar_navigation_msgs::msg::Guardian>::SharedPtr guardian_sub_;
+
+    //订阅是否处于sub状态
+    rclcpp::Subscription<std_msgs::msg::Bool>::SharedPtr task_mode_sub_;
+
+    // publisher
+
+    //六足机器人腿部里程计
+    rclcpp::Publisher<nav_msgs::msg::Odometry>::SharedPtr legged_odom_publisher_;
+
+    //六足机器人IMU数据
+    rclcpp::Publisher<sensor_msgs::msg::Imu>::SharedPtr imu_publisher_;
+
+    //机器人基本状态
+    // 0 -> lie down
+    // 1 -> standingup
+    // 2 -> standup
+    // 3 -> enable forcecontrol
+    // 4 -> motion
+    // 5 -> sitting down
+    // 6 -> fall down
+    // 7 -> null
+    rclcpp::Publisher<std_msgs::msg::UInt32>::SharedPtr robot_state_publisher_;
+
+    // dock_state(std_msgs::msg::UInt32): 机器人上桩状态
+    // 0 -> idle
+    // 1 -> going to dock
+    // 2 -> stand above dock
+    // 3 -> adjust pose
+    // 4 -> lie on dock
+    // 5 -> standing after charging
+    // 6 -> leaving dock
+    // 7 -> leave dock
+    rclcpp::Publisher<std_msgs::msg::UInt32>::SharedPtr docking_state_publisher_;
+
+    //控制模式
+    // 0 -> 手持遥控
+    // 1 -> 导航
+    rclcpp::Publisher<std_msgs::msg::UInt8>::SharedPtr control_mode_publisher_;
+
+    //设置六足机器人场景
+    // 0 -> null
+    // 1 -> 趴下
+    // 2 -> 行走步态
+    // 3 -> 楼梯步态
+    // 4 -> 充电
+    rclcpp::Publisher<std_msgs::msg::UInt8>::SharedPtr scene_publisher_;
+
+    //电池电量信息,目前只有percentage字段有意义
+    rclcpp::Publisher<sensor_msgs::msg::BatteryState>::SharedPtr battery_state_publisher_;
+
+    //机器人模式,用于向巡检平台上报
+    // 0 ->空闲(默认)
+    // 1 ->手持遥控
+    // 2 ->任务
+    // 3 ->充电中
+    rclcpp::Publisher<std_msgs::msg::Int32>::SharedPtr robot_mode_publisher_;
+
+    //机器人在充电桩充电返回true,否则返回false
+    rclcpp::Publisher<std_msgs::msg::Bool>::SharedPtr charging_state_publisher_;
+
+    // services
+    rclcpp::Service<ysc_robot_msgs::srv::RobotCommand>::SharedPtr robot_command_service_;
+
+    //用于导航停障中的服务接口
+    rclcpp::Service<daystar_navigation_msgs::srv::Guardian>::SharedPtr guardian_service_;
+
+    robot_control::common::MC_MOTION_IMU_DATA imu_data_;
+    robot_control::common::JETSON_VISUAL_FOOTHOLD_STATE foothold_state_data_;
+    robot_control::common::ROBOT_COMMON_STATUS common_status_data_;
+
+    bool is_robot_in_idle_state_ = true;
+    long int robot_heartbeat_ = 0;
+    float guardian_velocity_decay_ratio_ = 1.0;
+
+    void init();
+
+    void cmdVelCallback(const geometry_msgs::msg::Twist::SharedPtr vel_msg);
+
+    void robotCommandCallback(const ysc_robot_msgs::srv::RobotCommand::Request::SharedPtr request,
+                              ysc_robot_msgs::srv::RobotCommand::Response::SharedPtr response);
+
+    void guardianCallback(const daystar_navigation_msgs::msg::Guardian::SharedPtr guardian_msg);
+
+    void guardianServiceCallback(
+        const daystar_navigation_msgs::srv::Guardian::Request::SharedPtr request,
+        daystar_navigation_msgs::srv::Guardian::Response::SharedPtr response);
+
+    void taskModeCallback(const std_msgs::msg::Bool::SharedPtr task_mode);
+
+    void mainTimerCallback();
+
+    void imuTimerCallback();
+
+    void leggedOodmTimerCallback();
+
+    void publishRobotState();
+
+    void publishDockingState();
+
+    void publishControlMode();
+
+    void publishScene();
+
+    void publishBatteryState();
+
+    void publishChargingState();
+
+    void publishRobotMode();
+};
+}  // namespace saturn_ros2

+ 1 - 1
saturn_controller/src/config_handler.cpp

@@ -1,4 +1,4 @@
-#include "config_handler.hpp"
+#include "saturn_controller/config_handler.hpp"
 
 namespace saturn_ros2 {
 ConfigHandler::ConfigHandler(std::shared_ptr<rclcpp::Node> node)

+ 5 - 5
saturn_controller/src/saturn_controller.cpp

@@ -1,4 +1,4 @@
-#include "saturn_controller.hpp"
+#include "saturn_controller/saturn_controller.hpp"
 namespace saturn_ros2 {
 SaturnController::SaturnController(const rclcpp::NodeOptions& options)
     : node_(std::make_shared<rclcpp::Node>("saturn_controller", options)) {
@@ -32,13 +32,13 @@ void SaturnController::init() {
 
     // subscription
     cmd_vel_sub_ = node_->create_subscription<geometry_msgs::msg::Twist>(
-        "/cmd_vel", rclcpp::QoS(10),
+        "cmd_vel", rclcpp::QoS(10),
         std::bind(&SaturnController::cmdVelCallback, this, std::placeholders::_1));
     guardian_sub_ = node_->create_subscription<daystar_navigation_msgs::msg::Guardian>(
-        "/guardian", rclcpp::QoS(10),
+        "guardian", rclcpp::QoS(1),
         std::bind(&SaturnController::guardianCallback, this, std::placeholders::_1));
     task_mode_sub_ = node_->create_subscription<std_msgs::msg::Bool>(
-        "/task_mode", rclcpp::QoS(10),
+        "task_mode", rclcpp::QoS(10),
         std::bind(&SaturnController::taskModeCallback, this, std::placeholders::_1));
 
     // publisher
@@ -325,4 +325,4 @@ void SaturnController::publishRobotMode() {
 }
 
 }  // namespace saturn_ros2
-RCLCPP_COMPONENTS_REGISTER_NODE(saturn_ros2::SaturnController)
+RCLCPP_COMPONENTS_REGISTER_NODE(saturn_ros2::SaturnController)