Skip to content

Commit 41bae7f

Browse files
committed
add armor_tester_controller for meta_utils_controller
1 parent 566bdd4 commit 41bae7f

File tree

6 files changed

+464
-0
lines changed

6 files changed

+464
-0
lines changed
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
cmake_minimum_required(VERSION 3.8) # the mininal version
2+
project(meta_utils_controller) # define the project name here, and it influence the variable ${PROJECT_NAME}
3+
4+
# only acts for GCC and Clang
5+
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
6+
add_compile_options(-Wall -Wextra -Wpedantic)
7+
endif()
8+
9+
# find dependencies
10+
find_package(ament_cmake REQUIRED) # ament_cmake is mandatory
11+
find_package(ament_cmake_auto REQUIRED) # ament_cmake_auto is also mandatory
12+
ament_auto_find_build_dependencies() # scan the package.xml to get the dependencies
13+
14+
# generate parameter library for controller
15+
generate_parameter_library(
16+
armor_tester_controller_parameters
17+
src/armor_tester_controller.yaml
18+
)
19+
20+
# generate_parameter_lib (
21+
# name_of_target, -> to generate target_name.cpp
22+
# yaml_file, -> generate the parameter listeners based on which yaml file
23+
# )
24+
25+
ament_auto_add_library(
26+
armor_tester_controller
27+
SHARED
28+
src/armor_tester_controller.cpp
29+
)
30+
31+
# ament_auto_add_library (
32+
# target_package_name
33+
# SHARED/STATIC/OBJECT
34+
# sorce file
35+
# )
36+
37+
target_include_directories(
38+
armor_tester_controller
39+
PUBLIC
40+
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>"
41+
"$<INSTALL_INTERFACE:include/${PROJECT_NAME}>"
42+
)
43+
44+
# target_include_directories(
45+
# cmake-target
46+
# PUBLIC
47+
# <BUILD_INTERFACE:.....> # used during build
48+
# <INSTALL_INTERFACE:...> # used during install
49+
# )
50+
51+
# link the the parameter listeners
52+
target_link_libraries(
53+
armor_tester_controller
54+
armor_tester_controller_parameters
55+
)
56+
# target_link_libraries(
57+
# cmake-target-package
58+
# cmake-target that cmake-target-package depends on
59+
# )
60+
61+
# where to find the description of the controller
62+
pluginlib_export_plugin_description_file(
63+
controller_interface
64+
armor_tester_controller.xml
65+
)
66+
# pluginlib_export_plugin_description_file(
67+
# base-class
68+
# description file
69+
# )
70+
71+
# test for building
72+
if(BUILD_TESTING)
73+
find_package(ament_lint_auto REQUIRED)
74+
# the following line skips the linter which checks for copyrights
75+
# comment the line when a copyright and license is added to all source files
76+
set(ament_cmake_copyright_FOUND TRUE)
77+
# the following line skips cpplint (only works in a git repo)
78+
# comment the line when this package is in a git repo and when
79+
# a copyright and license is added to all source files
80+
set(ament_cmake_cpplint_FOUND TRUE)
81+
ament_lint_auto_find_test_dependencies()
82+
endif()
83+
84+
ament_auto_package()
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<!--
2+
Copyright (c) 2024, Stogl Robotics Consulting UG (haftungsbeschränkt)
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
16+
17+
Source of this file are templates in
18+
[RosTeamWorkspace](https://github.com/StoglRobotics/ros_team_workspace) repository.
19+
-->
20+
21+
<library path="armor_tester_controller">
22+
<class name="armor_tester_controller/ArmorTesterController"
23+
type="armor_tester_controller::ArmorTesterController" base_class_type="controller_interface::ChainableControllerInterface">
24+
<description>
25+
An Armor Tester Controller.
26+
</description>
27+
</class>
28+
</library>
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#ifndef ARMOR_TESTER_CONTROLLER_HPP_
2+
#define ARMOR_TESTER_CONTROLLER_HPP_
3+
4+
#include <memory>
5+
#include <string>
6+
#include <vector>
7+
#include <control_toolbox/pid_ros.hpp>
8+
#include <rclcpp/subscription.hpp>
9+
10+
#include "controller_interface/controller_interface.hpp"
11+
#include "controller_interface/chainable_controller_interface.hpp"
12+
#include "rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp"
13+
#include "rclcpp/duration.hpp"
14+
#include "rclcpp_lifecycle/state.hpp"
15+
#include "realtime_tools/realtime_buffer.hpp"
16+
#include "realtime_tools/realtime_publisher.hpp"
17+
18+
#include <meta_utils_controller/armor_tester_controller_parameters.hpp>
19+
#include "behavior_interface/msg/armor.hpp" // dji_vel, unitree_vel
20+
21+
namespace armor_tester_controller // namespace begin here
22+
{
23+
24+
class ArmorTesterController : public controller_interface::ChainableControllerInterface
25+
{
26+
public:
27+
ArmorTesterController() = default;
28+
29+
// ControllerInterfaceBase and ChainableControllerInterface, a little strange
30+
~ArmorTesterController() = default;
31+
32+
// override method from ControllerInterfaceBase (done?)
33+
controller_interface::InterfaceConfiguration command_interface_configuration() const override;
34+
35+
// override method from ControllerInterfaceBase (done?)
36+
controller_interface::InterfaceConfiguration state_interface_configuration() const override;
37+
38+
// override method from ControllerInterfaceBase (done)
39+
controller_interface::CallbackReturn on_init() override;
40+
41+
// override method from ControllerInterfaceBase (done)
42+
controller_interface::CallbackReturn on_configure(
43+
const rclcpp_lifecycle::State & previous_state) override;
44+
45+
// override method from ControllerInterfaceBase (done)
46+
controller_interface::CallbackReturn on_activate(
47+
const rclcpp_lifecycle::State & previous_state) override;
48+
49+
// override method from ControllerInterfaceBase (done)
50+
controller_interface::CallbackReturn on_deactivate(
51+
const rclcpp_lifecycle::State & previous_state) override;
52+
53+
// override method from ChainableControllerInterface
54+
controller_interface::return_type update_and_write_commands(
55+
const rclcpp::Time & time, const rclcpp::Duration & period) override;
56+
57+
protected:
58+
// override method from ChainableControllerInterface
59+
controller_interface::return_type update_reference_from_subscribers() override;
60+
61+
// parameters
62+
armor_tester_controller::Params params_;
63+
std::shared_ptr<armor_tester_controller::ParamListener> param_listener_;
64+
65+
// pid for dji motor
66+
std::shared_ptr<control_toolbox::PidROS> dji_pid_;
67+
68+
// for subscriber
69+
rclcpp::Subscription<behavior_interface::msg::Armor>::SharedPtr vel_subscriber_ = nullptr;
70+
realtime_tools::RealtimeBuffer<std::shared_ptr<behavior_interface::msg::Armor>> vel_buffer_;
71+
72+
// override method from ChainableControllerInterface (done)
73+
std::vector<hardware_interface::CommandInterface> on_export_reference_interfaces() override;
74+
75+
private:
76+
// callback function for subscriber (done)
77+
void velocity_callback(const std::shared_ptr<behavior_interface::msg::Armor> msg);
78+
}; // class definition ends here
79+
80+
} // namespace ends here
81+
82+
#endif // ARMOR_TESTER_CONTROLLER_HPP_
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?xml version="1.0"?>
2+
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
3+
<package format="3">
4+
<name>meta_utils_controller</name>
5+
<version>0.0.0</version>
6+
<description>Package for Meta Utils</description>
7+
<maintainer email="[email protected]">hanbinzheng</maintainer>
8+
<license>TODO: License declaration</license>
9+
10+
<buildtool_depend>ament_cmake</buildtool_depend>
11+
<buildtool_depend>ament_cmake_auto</buildtool_depend>
12+
13+
<build_depend>generate_parameter_library</build_depend>
14+
15+
<depend>operation_interface</depend>
16+
<depend>geometry_msgs</depend>
17+
<depend>behavior_interface</depend>
18+
<depend>control_msgs</depend>
19+
<depend>control_toolbox</depend>
20+
<depend>controller_interface</depend>
21+
<depend>hardware_interface</depend>
22+
<depend>realtime_tools</depend>
23+
<depend>pluginlib</depend>
24+
<depend>rclcpp</depend>
25+
<depend>rclcpp_lifecycle</depend>
26+
<depend>rclcpp_components</depend>
27+
28+
<test_depend>ament_lint_auto</test_depend>
29+
<test_depend>ament_lint_common</test_depend>
30+
31+
<export>
32+
<build_type>ament_cmake</build_type>
33+
</export>
34+
</package>

0 commit comments

Comments
 (0)