Skip to content

Commit f1bdaf4

Browse files
YusukeKatoShotaAk
andauthored
2.1.0リリースのためにros2-develの更新内容をhumble-develへマージ (#60)
* Add unit tests (#52) * Use pointer for SerialPort instance instead of inheritance * Add test using fakeit * Install git comand in indsutrial_ci * Refactoring * Update CI * Use AFTER_SETUP_TARGET_WORKSPACE * driverインスタンスのメンバ変数のテストを追加 * バイナリデータが読み込まれたことを確認するテストを追加 * ASCIIデータが読み込まれたことを確認するテストを追加 * バイナリでもASCIIでもないデータが読み込まれたことを確認するテストを追加 * テストが通る状態に修正 --------- Co-authored-by: ShotaAk <[email protected]> * checkDataFormat() and unit test updates (#54) * Binaryデータ出力時は実機とテストの両方で動作確認完了、ASCIIデータには未対応、デバッグ用出力あり * 実機とテストの両方でBinaryとASCIIの判定に成功、BinaryでもASCIIでもないデータには未対応 * タイムアウト機能を追加&hasCompletedFormatCheck()と関係する変数を削除 * 不正なデータをチェックするようにテストを修正 * readを成功させるためにwhileループにsleep処理を追加 * 必要がなかったため、while文のsleep処理を削除 * テスト用データの作成で重複している箇所を関数化 * RCLCPP_INFOをWARNに変更&不要なコメントを削除 * const autoをできる限り使用 * actions/checkoutのバージョンを3から4に更新 * 読み取ったデータをある程度貯めてからデータ形式を判定するように変更 * 貯めるデータを更新するように修正 * メンバ変数の名前を修正&256を定数化 * Add test for readSensorData() (#57) * readSensorData()実行後のhasRefreshedImuData()の応答のテストを追加 * テストにコメントを追加 * 0.0を入力として与えたテストを追加 * ASCII形式のテストデータを作成する際、引数で値を渡せるように変更 * Binary形式でもテストデータを引数で渡せるように変更 * テストケースを使い回せるように変更 * readSensorData()実行時にセンサデータが正しく変換されたか検証するテストを追加 * デバッグ用の関数を削除 * short intをint16_tに変更 * int16を8bitずつに分ける関数をhighとlowそれぞれ用意 * 既存のテストに影響を与えないようにデータ作成の関数をオーバーロード * set_data関数をprivateに変更 * 変換後の数値を直打ち * data_format_を設定する関数を削除 * 不要な箇所を削除 * Fix to get the latest data (#58) * 最新データ取得のテストを追加 * PR#50を参考に最新のデータを取得できるように変更 * 複数セットのデータ取得時に最新のデータをセットするように変更、テストは通るが挙動がおかしい * 最新データの取得方法を修正 * 取得するデータが適切な長さであることを保証する * 2.1.0リリースのためにCHANGELOG.rstとpackage.xmlを更新 (#59) * CHANGELOGを更新 * 2.1.0 --------- Co-authored-by: ShotaAk <[email protected]>
1 parent 94f1714 commit f1bdaf4

File tree

9 files changed

+866
-115
lines changed

9 files changed

+866
-115
lines changed

.github/workflows/industrial_ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ jobs:
1515
strategy:
1616
matrix:
1717
env:
18-
- { ROS_DISTRO: humble, ROS_REPO: ros }
18+
- { ROS_DISTRO: humble, ROS_REPO: ros, AFTER_SETUP_TARGET_WORKSPACE: 'apt update && apt install -y git' }
1919

2020
runs-on: ubuntu-latest
2121
steps:
22-
- uses: actions/checkout@v3
22+
- uses: actions/checkout@v4
2323
- uses: "ros-industrial/industrial_ci@master"
2424
env: ${{ matrix.env }}

CHANGELOG.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,15 @@
22
Changelog for package rt_usb_9axisimu_driver
33
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
44

5+
2.1.0 (2024-08-23)
6+
------------------
7+
* Fix to get the latest data (`#58 <https://github.com/rt-net/rt_usb_9axisimu_driver/issues/58>`_)
8+
* Add test for readSensorData() (`#57 <https://github.com/rt-net/rt_usb_9axisimu_driver/issues/57>`_)
9+
* checkDataFormat() and unit test updates (`#54 <https://github.com/rt-net/rt_usb_9axisimu_driver/issues/54>`_)
10+
* Add unit tests (`#52 <https://github.com/rt-net/rt_usb_9axisimu_driver/issues/52>`_)
11+
Co-authored-by: ShotaAk <[email protected]>
12+
* Contributors: YusukeKato
13+
514
2.0.2 (2023-01-26)
615
------------------
716
* Support Humble (`#42 <https://github.com/rt-net/rt_usb_9axisimu_driver/issues/42>`_)

CMakeLists.txt

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,25 @@ install(DIRECTORY
8282
DESTINATION share/${PROJECT_NAME}/
8383
)
8484

85-
#if(BUILD_TESTING)
85+
if(BUILD_TESTING)
8686
# find_package(ament_lint_auto REQUIRED)
8787
# ament_lint_auto_find_test_dependencies()
88-
#endif()
88+
Set(FETCHCONTENT_QUIET FALSE)
89+
include(FetchContent)
90+
FetchContent_Declare(
91+
fakeit
92+
GIT_REPOSITORY https://github.com/eranpeer/FakeIt
93+
GIT_TAG 2.4.0
94+
GIT_PROGRESS TRUE)
95+
FetchContent_MakeAvailable(fakeit)
96+
97+
find_package(ament_cmake_gtest)
98+
ament_add_gtest(test_driver test/test_driver.cpp src/rt_usb_9axisimu_driver.cpp)
99+
target_include_directories(test_driver PRIVATE ${fakeit_SOURCE_DIR}/single_header/gtest)
100+
ament_target_dependencies(test_driver
101+
rclcpp
102+
sensor_msgs
103+
)
104+
endif()
89105

90106
ament_package()

include/rt_usb_9axisimu_driver/rt_usb_9axisimu.hpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ class Consts
106106
IMU_ASCII_DATA_SIZE
107107
};
108108

109+
static constexpr int READ_BUFFER_SIZE = 512;
110+
109111
// Convertor
110112
const double CONVERTOR_RAW2G;
111113
const double CONVERTOR_RAW2DPS;
@@ -178,23 +180,23 @@ class SerialPort
178180
{
179181
}
180182

181-
~SerialPort()
183+
virtual ~SerialPort()
182184
{
183185
closeSerialPort();
184186
}
185187

186-
void setPort(const char * port)
188+
virtual void setPort(const char * port)
187189
{
188190
port_name_ = port;
189191
}
190192

191-
bool openPort(const char * port)
193+
virtual bool openPort(const char * port)
192194
{
193195
port_name_ = port;
194196
return openSerialPort();
195197
}
196198

197-
bool openSerialPort()
199+
virtual bool openSerialPort()
198200
{
199201
int fd = 0;
200202

@@ -221,7 +223,7 @@ class SerialPort
221223
return fd > 0;
222224
}
223225

224-
void closeSerialPort()
226+
virtual void closeSerialPort()
225227
{
226228
if (port_fd_ > 0) {
227229
tcsetattr(port_fd_, TCSANOW, &old_settings_);
@@ -230,7 +232,7 @@ class SerialPort
230232
}
231233
}
232234

233-
int readFromDevice(unsigned char * buf, unsigned int buf_len)
235+
virtual int readFromDevice(unsigned char * buf, unsigned int buf_len)
234236
{
235237
if (port_fd_ < 0) {
236238
return -1;
@@ -239,7 +241,7 @@ class SerialPort
239241
return read(port_fd_, buf, buf_len);
240242
}
241243

242-
int writeToDevice(unsigned char * data, unsigned int data_len)
244+
virtual int writeToDevice(unsigned char * data, unsigned int data_len)
243245
{
244246
if (port_fd_ < 0) {
245247
return -1;

include/rt_usb_9axisimu_driver/rt_usb_9axisimu_driver.hpp

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,38 @@
4444
#include "sensor_msgs/msg/magnetic_field.hpp"
4545
#include "std_msgs/msg/float64.hpp"
4646

47-
class RtUsb9axisimuRosDriver : public rt_usb_9axisimu::SerialPort
47+
class RtUsb9axisimuRosDriver
4848
{
49-
private:
50-
// ros::NodeHandle nh_;
49+
public:
50+
explicit RtUsb9axisimuRosDriver(std::string serialport);
51+
RtUsb9axisimuRosDriver(std::unique_ptr<rt_usb_9axisimu::SerialPort> serial_port);
52+
~RtUsb9axisimuRosDriver();
5153

52-
// ros::Publisher imu_data_raw_pub_;
53-
// ros::Publisher imu_mag_pub_;
54-
// ros::Publisher imu_temperature_pub_;
54+
enum ReadStatus
55+
{
56+
SUCCESS = 0,
57+
NEED_TO_CONTINUE,
58+
FAILURE
59+
};
60+
61+
void setImuFrameIdName(std::string frame_id);
62+
void setImuPortName(std::string port);
63+
void setImuStdDev(double linear_acceleration, double angular_velocity, double magnetic_field);
64+
65+
bool startCommunication();
66+
void stopCommunication(void);
67+
void checkDataFormat(const double timeout = 5.0);
68+
bool hasAsciiDataFormat(void);
69+
bool hasBinaryDataFormat(void);
70+
bool hasRefreshedImuData(void);
71+
72+
std::unique_ptr<sensor_msgs::msg::Imu> getImuRawDataUniquePtr(const rclcpp::Time timestamp);
73+
std::unique_ptr<sensor_msgs::msg::MagneticField> getImuMagUniquePtr(const rclcpp::Time timestamp);
74+
std::unique_ptr<std_msgs::msg::Float64> getImuTemperatureUniquePtr(void);
75+
ReadStatus readSensorData();
76+
77+
private:
78+
std::unique_ptr<rt_usb_9axisimu::SerialPort> serial_port_;
5579

5680
rt_usb_9axisimu::SensorData sensor_data_;
5781

@@ -61,6 +85,11 @@ class RtUsb9axisimuRosDriver : public rt_usb_9axisimu::SerialPort
6185
double magnetic_field_stddev_;
6286
rt_usb_9axisimu::Consts consts;
6387

88+
unsigned char bin_read_buffer_[rt_usb_9axisimu::Consts::READ_BUFFER_SIZE];
89+
unsigned char ascii_read_buffer_[rt_usb_9axisimu::Consts::READ_BUFFER_SIZE];
90+
unsigned int bin_read_buffer_idx_ = 0;
91+
unsigned int ascii_read_buffer_idx_ = 0;
92+
6493
enum DataFormat
6594
{
6695
NONE = 0,
@@ -70,39 +99,18 @@ class RtUsb9axisimuRosDriver : public rt_usb_9axisimu::SerialPort
7099
ASCII,
71100
INCORRECT
72101
};
73-
bool has_completed_format_check_;
74102
DataFormat data_format_;
75103
bool has_refreshed_imu_data_;
76104

77105
// Method to combine two separate one-byte data into one two-byte data
78106
int16_t combineByteData(unsigned char data_h, unsigned char data_l);
79107
// Method to extract binary sensor data from communication buffer
80108
rt_usb_9axisimu::ImuData<int16_t> extractBinarySensorData(unsigned char * imu_data_buf);
81-
bool isBinarySensorData(unsigned char * imu_data_buf);
82-
bool readBinaryData(void);
109+
bool isBinarySensorData(unsigned char * imu_data_buf, unsigned int data_size);
110+
ReadStatus readBinaryData(void);
111+
bool isAsciiSensorData(unsigned char * imu_data_buf, unsigned int data_size);
83112
bool isValidAsciiSensorData(std::vector<std::string> imu_data_vector_buf);
84-
bool readAsciiData(void);
85-
86-
public:
87-
explicit RtUsb9axisimuRosDriver(std::string serialport);
88-
~RtUsb9axisimuRosDriver();
89-
90-
void setImuFrameIdName(std::string frame_id);
91-
void setImuPortName(std::string port);
92-
void setImuStdDev(double linear_acceleration, double angular_velocity, double magnetic_field);
93-
94-
bool startCommunication();
95-
void stopCommunication(void);
96-
void checkDataFormat(void);
97-
bool hasCompletedFormatCheck(void);
98-
bool hasAsciiDataFormat(void);
99-
bool hasBinaryDataFormat(void);
100-
bool hasRefreshedImuData(void);
101-
102-
std::unique_ptr<sensor_msgs::msg::Imu> getImuRawDataUniquePtr(const rclcpp::Time timestamp);
103-
std::unique_ptr<sensor_msgs::msg::MagneticField> getImuMagUniquePtr(const rclcpp::Time timestamp);
104-
std::unique_ptr<std_msgs::msg::Float64> getImuTemperatureUniquePtr(void);
105-
bool readSensorData();
113+
ReadStatus readAsciiData(void);
106114
};
107115

108116
#endif // RT_USB_9AXISIMU_DRIVER__RT_USB_9AXISIMU_DRIVER_HPP_

package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
33
<package format="3">
44
<name>rt_usb_9axisimu_driver</name>
5-
<version>2.0.2</version>
5+
<version>2.1.0</version>
66
<description>The rt_usb_9axisimu_driver package</description>
77

88
<maintainer email="[email protected]">RT Corporation</maintainer>

0 commit comments

Comments
 (0)