Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
cmake_minimum_required(VERSION 3.0.2)
project(test_cbf)

## Compile as C++11, supported in ROS Kinetic and newer
# 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
roscpp
std_msgs
sdu_math
)
find_package(osqp REQUIRED)
find_package(Eigen3 REQUIRED)
find_package(CGAL)
generate_messages(
DEPENDENCIES std_msgs # Or other packages containing msgs
)

catkin_package(
INCLUDE_DIRS include
# LIBRARIES belt_task
CATKIN_DEPENDS roscpp std_msgs
DEPENDS system_lib
)

###########
## Build ##
###########

#set(MOSEK_LIBRARY_DIRS "/home/yik/mosek/10.0/tools/platform/linux64x86/bin/")
#set(MOSEK_LIBRARIES
#"/home/yik/mosek/10.0/tools/platform/linux64x86/bin/libmosek64.so.10.0"
#)

## Specify additional locations of header files
## Your package locations should be listed before other locations
#include_directories(/home/yik/osqp-cpp/include)
include_directories(
include
include/test_cbf
${catkin_INCLUDE_DIRS}
${EIGEN3_INCLUDE_DIR}
)
set( SOURCE_FILES
src/test_cbf.cpp
src/control_barrier_functions.cpp
)

#link_directories(/home/yik/mosek/10.0/tools/platform/linux64x86/bin/)
add_executable(test_cbf ${SOURCE_FILES})
#target_link_libraries(test_cbf ${catkin_LIBRARIES} rtde osqp::osqp mosek64 fusion64 cgal CGAL::CGAL)
target_link_libraries(test_cbf ${catkin_LIBRARIES} rtde quadprog)
#add_dependencies(test_mosek mosek64)
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
/*
* control_barrier_functions.h
*
* Created on: Feb 20, 2023
* Author: yik
*/

#ifndef SDU_MOSEK_TEST_TEST_MOSEK_INCLUDE_TEST_MOSEK_CONTROL_BARRIER_FUNCTIONS_H_
#define SDU_MOSEK_TEST_TEST_MOSEK_INCLUDE_TEST_MOSEK_CONTROL_BARRIER_FUNCTIONS_H_

#include <Eigen/Dense>
#include <iostream>
#include "QuadProg++/Array.hh"
#include "QuadProg++/QuadProg++.hh"
//#include "osqp++.h"

Check warning on line 15 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/control_barrier_functions.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove the commented out code.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKjzNJ_7KktN-oZi&open=AZq6QKjzNJ_7KktN-oZi&pullRequest=30


//// //mosek
//#include "fusion.h"
//
//using namespace mosek::fusion;
//using namespace monty;

Check warning on line 22 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/control_barrier_functions.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove the commented out code.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKjzNJ_7KktN-oZj&open=AZq6QKjzNJ_7KktN-oZj&pullRequest=30

// CGAL
//#include <cassert>
//#include <CGAL/QP_models.h>
//#include <CGAL/QP_functions.h>

Check warning on line 27 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/control_barrier_functions.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove the commented out code.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKjzNJ_7KktN-oZk&open=AZq6QKjzNJ_7KktN-oZk&pullRequest=30
//// choose exact integral type
//#ifdef CGAL_USE_GMP
//#include <CGAL/Gmpz.h>
//typedef CGAL::Gmpz ET;
//#else
//#include <CGAL/MP_Float.h>
//typedef CGAL::MP_Float ET;
//#endif

Check warning on line 35 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/control_barrier_functions.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove the commented out code.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKjzNJ_7KktN-oZl&open=AZq6QKjzNJ_7KktN-oZl&pullRequest=30
//// program and solution types
//typedef CGAL::Quadratic_program<double> Program;
//typedef CGAL::Quadratic_program_solution<ET> Solution;

Check warning on line 38 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/control_barrier_functions.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove the commented out code.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKjzNJ_7KktN-oZm&open=AZq6QKjzNJ_7KktN-oZm&pullRequest=30

class ControlBarrierFunctions
{
public:
ControlBarrierFunctions(double control_time);

Check failure on line 43 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/control_barrier_functions.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Add the "explicit" keyword to this constructor.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKjzNJ_7KktN-oZg&open=AZq6QKjzNJ_7KktN-oZg&pullRequest=30
~ControlBarrierFunctions();
void CalculateKelvinVoigtContactModelSimulatedForce(double safe_contact_force);
void CBFKelvinVoigtContactModel(double x, double dot_x, double nominal_ctrl_input,double alpha_CBF);
void ACBFKelvinVoigtContactModel(double x, double dot_x, double nominal_ctrl_input,double alpha_aCBF);
void RACBFKelvinVoigtContactModel(double x, double dot_x, double nominal_ctrl_input,double alpha_RaCBF,double mp_error);


double GetSimulatedRealForce();
double GetSafeControlForce();
Eigen::Matrix<double, 2 ,1> GetSimulatedStates();

void SetSafetyForce(double force_min, double force_max);
void initialize();


private:
double control_time_;

//theta
Eigen::Matrix<double, 2 ,1> theta_real_;


//modeled_force
double simulated_contact_force_;

//force limit
Eigen::Matrix<double, 2 ,1> safety_limit_; //force min max

//control output
double safe_contact_force_;

// control barrier function
double h_CBF_;
double f_min_;
double f_max_;

Eigen::Matrix<double, 1 ,2> delta_h_CBF_;
Eigen::Matrix<double, 2 ,1> f_h_CBF_;
Eigen::Matrix<double, 2 ,1> g_h_CBF_;
Eigen::Matrix<double, 2 ,2> F_h_CBF_;

Eigen::Matrix<double, 1 ,1> A_;
Eigen::Matrix<double, 1 ,1> B_;
Eigen::Matrix<double, 1 ,1> temp_B_;

quadprogpp::Matrix<double> G, CE, CI;

Check warning on line 89 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/control_barrier_functions.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Define each identifier in a dedicated statement.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKjzNJ_7KktN-oZc&open=AZq6QKjzNJ_7KktN-oZc&pullRequest=30
quadprogpp::Vector<double> g0, ce0, ci0, u;

Check warning on line 90 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/control_barrier_functions.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Define each identifier in a dedicated statement.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKjzNJ_7KktN-oZd&open=AZq6QKjzNJ_7KktN-oZd&pullRequest=30
int n, m, p;

Check warning on line 91 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/control_barrier_functions.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Define each identifier in a dedicated statement.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKjzNJ_7KktN-oZe&open=AZq6QKjzNJ_7KktN-oZe&pullRequest=30
double sum;
char ch;

double alpha_;

// adaptive control barrier function
double h_aCBF_;
double alpha_aCBF_;
Eigen::Matrix<double, 2 ,2> adaptive_gain_;

Eigen::Matrix<double, 1 ,2> delta_h_aCBF_;
Eigen::Matrix<double, 1 ,2> delta_param_h_aCBF_;
Eigen::Matrix<double, 2 ,1> f_h_aCBF_;
Eigen::Matrix<double, 2 ,1> g_h_aCBF_;
Eigen::Matrix<double, 2 ,2> F_h_aCBF_;

// robust adaptive control barrier function
double h_RaCBF_;
double alpha_RaCBF_;
Eigen::Matrix<double, 2 ,2> adaptive_gain_RaCBF_;

Eigen::Matrix<double, 1 ,2> delta_h_RaCBF_;
Eigen::Matrix<double, 1 ,2> delta_param_h_RaCBF_;
Eigen::Matrix<double, 2 ,1> f_h_RaCBF_;
Eigen::Matrix<double, 2 ,1> g_h_RaCBF_;
Eigen::Matrix<double, 2 ,2> F_h_RaCBF_;



//simulation states
double b_model_;
double k_model_;
double uncertain_k_;
double uncertain_b_;
double real_k_;
double real_b_;
Eigen::Matrix<double, 2 ,1> theta_model_;

double mass_;
double x_;
double dx_;
double ddx_;
Eigen::Matrix<double, 2 ,1> states_;
};





#endif /* SDU_MOSEK_TEST_TEST_MOSEK_INCLUDE_TEST_MOSEK_CONTROL_BARRIER_FUNCTIONS_H_ */
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/*
* test_mosek.h
*
* Created on: Feb 20, 2023
* Author: yik
*/

#ifndef SDU_MOSEK_TEST_TEST_MOSEK_INCLUDE_TEST_MOSEK_TEST_MOSEK_H_
#define SDU_MOSEK_TEST_TEST_MOSEK_INCLUDE_TEST_MOSEK_TEST_MOSEK_H_

#define LOOP_PERIOD 2e6 //Expressed in ticks // 2ms control time

Check failure on line 11 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/test_cbf.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Replace this macro by "const", "constexpr" or an "enum".

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKl7NJ_7KktN-oZn&open=AZq6QKl7NJ_7KktN-oZn&pullRequest=30
#define TIMESPEC_ADD(A,B) /* A += B */ \
do { \
(A).tv_sec += (B).tv_sec; \
(A).tv_nsec += (B).tv_nsec; \
if ( (A).tv_nsec >= 1000000000 ) { \
(A).tv_sec++; \
(A).tv_nsec -= 1000000000; \
} \
} while (0)

#define TIMESPEC_SUB(A,B) /* A -= B */ \

Check failure on line 22 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/test_cbf.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Replace this function-like macro with a C++ function or another construct.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKl7NJ_7KktN-oZp&open=AZq6QKl7NJ_7KktN-oZp&pullRequest=30
do { \
(A).tv_sec -= (B).tv_sec; \
(A).tv_nsec -= (B).tv_nsec; \
if ( (A).tv_nsec < 0 ) { \
(A).tv_sec--; \
(A).tv_nsec += 1000000000; \
} \
} while (0)
//typedef actionlib::SimpleActionClient<test_client::belt_task_actionAction> Client;

Check warning on line 31 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/test_cbf.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove the commented out code.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKl7NJ_7KktN-oZx&open=AZq6QKl7NJ_7KktN-oZx&pullRequest=30

#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
#include <map>
#include "control_barrier_functions.h"
#include "sdu_math/control_function.h"
// //osqp
//#include "osqp.h"
//

//preempt rt system
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>
#include <sys/mman.h>
#include <limits.h>
#include <sched.h>
#include <signal.h>


//memory lock
#include <mutex>

#include "ros/ros.h"
#include "std_msgs/Float64MultiArray.h"
#include "std_msgs/Float64.h"
#include "std_msgs/Bool.h"
#include "std_msgs/String.h"

#include <ur_rtde/rtde_receive_interface.h> // 로봇으로 데이터를 받을때 쓰는 헤더
#include <ur_rtde/rtde_control_interface.h> // 로봇으로 데이터를 줄때 쓰는 헤더 (control)

using std::cout; using std::cerr;
using std::endl; using std::string;
using std::ifstream; using std::ostringstream;
using std::istringstream;

#include <Eigen/Dense>

std::mutex m;
volatile bool exit_program = false;

Check warning on line 75 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/test_cbf.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Make this global variable "constexpr" or remove it by passing the value as a function argument.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKl7NJ_7KktN-oZs&open=AZq6QKl7NJ_7KktN-oZs&pullRequest=30
//ros
ros::Publisher raw_force_torque_pub_;
std_msgs::Float64MultiArray raw_force_torque_msg_;

//control
double control_time;

Check warning on line 81 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/test_cbf.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Make this global variable "constexpr" or remove it by passing the value as a function argument.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKl7NJ_7KktN-oZt&open=AZq6QKl7NJ_7KktN-oZt&pullRequest=30
std::shared_ptr<ControlBarrierFunctions> cbf_x;
std::shared_ptr<PID_function> force_x_compensator_;

double nominal_ctrl_output;

Check warning on line 85 in src/safety/control_barrier_function/cpp_example/test_cbf/include/test_cbf/test_cbf.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Make this global variable "constexpr" or remove it by passing the value as a function argument.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKl7NJ_7KktN-oZv&open=AZq6QKl7NJ_7KktN-oZv&pullRequest=30
double desired_force;

#endif /* SDU_MOSEK_TEST_TEST_MOSEK_INCLUDE_TEST_MOSEK_TEST_MOSEK_H_ */
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<?xml version="1.0"?>
<package format="2">
<name>test_cbf</name>
<version>0.0.0</version>
<description>The test_mosek package</description>

<!-- One maintainer tag required, multiple allowed, one person per tag -->
<!-- Example: -->
<!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
<maintainer email="yik@todo.todo">yik</maintainer>


<!-- One license tag required, multiple allowed, one license per tag -->
<!-- Commonly used license strings: -->
<!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
<license>TODO</license>


<!-- Url tags are optional, but multiple are allowed, one per tag -->
<!-- Optional attribute type can be: website, bugtracker, or repository -->
<!-- Example: -->
<!-- <url type="website">http://wiki.ros.org/test_mosek</url> -->


<!-- Author tags are optional, multiple are allowed, one per tag -->
<!-- Authors do not have to be maintainers, but could be -->
<!-- Example: -->
<!-- <author email="jane.doe@example.com">Jane Doe</author> -->


<!-- The *depend tags are used to specify dependencies -->
<!-- Dependencies can be catkin packages or system dependencies -->
<!-- Examples: -->
<!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
<!-- <depend>roscpp</depend> -->
<!-- Note that this is equivalent to the following: -->
<!-- <build_depend>roscpp</build_depend> -->
<!-- <exec_depend>roscpp</exec_depend> -->
<!-- Use build_depend for packages you need at compile time: -->
<!-- <build_depend>message_generation</build_depend> -->
<!-- Use build_export_depend for packages you need in order to build against this package: -->
<!-- <build_export_depend>message_generation</build_export_depend> -->
<!-- Use buildtool_depend for build tool packages: -->
<!-- <buildtool_depend>catkin</buildtool_depend> -->
<!-- Use exec_depend for packages you need at runtime: -->
<!-- <exec_depend>message_runtime</exec_depend> -->
<!-- Use test_depend for packages you need only for testing: -->
<!-- <test_depend>gtest</test_depend> -->
<!-- Use doc_depend for packages you need only for building documentation: -->
<!-- <doc_depend>doxygen</doc_depend> -->

Check warning on line 50 in src/safety/control_barrier_function/cpp_example/test_cbf/package.xml

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this commented out code.

See more on https://sonarcloud.io/project/issues?id=SDU-Robotics_sdu_controllers&issues=AZq6QKmKNJ_7KktN-oZ0&open=AZq6QKmKNJ_7KktN-oZ0&pullRequest=30
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<build_depend>sdu_math</build_depend>
<build_export_depend>roscpp</build_export_depend>
<build_export_depend>rospy</build_export_depend>
<build_export_depend>std_msgs</build_export_depend>
<build_export_depend>sdu_math</build_export_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>


<!-- The export tag contains other, unspecified, tags -->
<export>
<!-- Other tools can request additional information be placed here -->

</export>
</package>
Loading
Loading