refactor: rename driver_sick_code plugin to driver_sick_tim

The driver targets the SICK TiM 5xx/7xx family over CoLa-A; "code" described
neither the devices nor the protocol. driver_id stays sick_tim_driver.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-13 06:21:45 +07:00
parent 5b2c74bd36
commit f02d81c031
6 changed files with 21 additions and 21 deletions

View File

@@ -29,7 +29,7 @@ xlidar_driver/
│ ├── common/plugin_helpers.hpp │ ├── common/plugin_helpers.hpp
│ ├── driver_rplidar/ # → driver_rplidar.so (rplidar_c1_driver) │ ├── driver_rplidar/ # → driver_rplidar.so (rplidar_c1_driver)
│ ├── driver_olei/ # → driver_olei.so (olei_lidar_driver) │ ├── driver_olei/ # → driver_olei.so (olei_lidar_driver)
│ ├── driver_sick_code/ # → driver_sick_code.so (sick_tim_driver) │ ├── driver_sick_tim/ # → driver_sick_tim.so (sick_tim_driver)
│ ├── driver_sick_safety/ # → driver_sick_safety.so (sick_nanoscan3_driver) │ ├── driver_sick_safety/ # → driver_sick_safety.so (sick_nanoscan3_driver)
│ └── driver_espe/ # → driver_espe.so (espe_lga60_driver) │ └── driver_espe/ # → driver_espe.so (espe_lga60_driver)
├── examples/ # list_drivers, example, lidar_app ├── examples/ # list_drivers, example, lidar_app
@@ -211,7 +211,7 @@ khi load: `brand`+`model` → `driver_id`, cặp `angle_*_deg` cũ → remap.
|---|---|---|---|---|---| |---|---|---|---|---|---|
| `rplidar_c1_driver` | `driver_rplidar.so` | Slamtec RPLIDAR | serial | `AUTO`, `C1` | Build trên SDK vendor; default C1 @ 460800; A/S series dùng được với baud tương ứng. Health check lúc `open()`, model/firmware tự nhận | | `rplidar_c1_driver` | `driver_rplidar.so` | Slamtec RPLIDAR | serial | `AUTO`, `C1` | Build trên SDK vendor; default C1 @ 460800; A/S series dùng được với baud tương ứng. Health check lúc `open()`, model/firmware tự nhận |
| `olei_lidar_driver` | `driver_olei.so` | OLEI 2D | udp | `AUTO`, `VB`, `VF`, `LR-1F`, `LR-1FMI`, `LR-1BS5`, `LR-16F`, `GS1-5` | Tự nhận diện giao thức Family A/B/C theo frame ID từng gói; `AUTO` tự dò model (Family B/C). Port mặc định 2368 | | `olei_lidar_driver` | `driver_olei.so` | OLEI 2D | udp | `AUTO`, `VB`, `VF`, `LR-1F`, `LR-1FMI`, `LR-1BS5`, `LR-16F`, `GS1-5` | Tự nhận diện giao thức Family A/B/C theo frame ID từng gói; `AUTO` tự dò model (Family B/C). Port mặc định 2368 |
| `sick_tim_driver` | `driver_sick_code.so` | SICK TiM 5xx/7xx | tcp | `SICK-TIM5xx`, `SICK-TIM571`, `SICK-TIM7xx` | SOPAS/CoLa-A; `open()` tự start stream. Port 2111. Verify trên TiM781S thật | | `sick_tim_driver` | `driver_sick_tim.so` | SICK TiM 5xx/7xx | tcp | `SICK-TIM5xx`, `SICK-TIM571`, `SICK-TIM7xx` | SOPAS/CoLa-A; `open()` tự start stream. Port 2111. Verify trên TiM781S thật |
| `sick_nanoscan3_driver` | `driver_sick_safety.so` | SICK nanoScan3/microScan3 | udp | `SICK-nanoScan3` | Receiver thụ động UDP safety-data; đích UDP cấu hình sẵn bằng Safety Designer. Port 6060. Chưa verify phần cứng | | `sick_nanoscan3_driver` | `driver_sick_safety.so` | SICK nanoScan3/microScan3 | udp | `SICK-nanoScan3` | Receiver thụ động UDP safety-data; đích UDP cấu hình sẵn bằng Safety Designer. Port 6060. Chưa verify phần cứng |
| `espe_lga60_driver` | `driver_espe.so` | ESPE LGA60 | tcp (+udp) | `ESPE-LGA60` | FOV 320°; `open()` gửi `RAuto`; tham số thiết bị theo tool Windows của hãng. Port 8080. Chưa verify phần cứng | | `espe_lga60_driver` | `driver_espe.so` | ESPE LGA60 | tcp (+udp) | `ESPE-LGA60` | FOV 320°; `open()` gửi `RAuto`; tham số thiết bị theo tool Windows của hãng. Port 8080. Chưa verify phần cứng |

View File

@@ -23,7 +23,7 @@ function(xlidar_add_plugin name)
endfunction() endfunction()
add_subdirectory(driver_olei) add_subdirectory(driver_olei)
add_subdirectory(driver_sick_code) add_subdirectory(driver_sick_tim)
add_subdirectory(driver_sick_safety) add_subdirectory(driver_sick_safety)
add_subdirectory(driver_espe) add_subdirectory(driver_espe)
add_subdirectory(driver_rplidar) add_subdirectory(driver_rplidar)

View File

@@ -1 +0,0 @@
xlidar_add_plugin(driver_sick_code sick_code_driver.cpp)

View File

@@ -0,0 +1 @@
xlidar_add_plugin(driver_sick_tim sick_tim_driver.cpp)

View File

@@ -1,6 +1,6 @@
// SICK TiM 5xx/7xx — SOPAS/CoLa-A ASCII telegrams over TCP ("sSN/sRA // SICK TiM 5xx/7xx — SOPAS/CoLa-A ASCII telegrams over TCP ("sSN/sRA
// LMDscandata" parsing). // LMDscandata" parsing).
#include "sick_code_driver.hpp" #include "sick_tim_driver.hpp"
#include "plugin_helpers.hpp" #include "plugin_helpers.hpp"
#include <cctype> #include <cctype>
@@ -42,14 +42,14 @@ std::vector<std::string> tokenize(const std::string& s) {
} }
} // namespace } // namespace
SickCodeDriver::SickCodeDriver(const ModelConfig& cfg, const std::string& ip, uint16_t port, SickTimDriver::SickTimDriver(const ModelConfig& cfg, const std::string& ip, uint16_t port,
bool inverted) bool inverted)
: cfg_(cfg), detected_model_name_(cfg.name ? cfg.name : ""), ip_(ip), port_(port), : cfg_(cfg), detected_model_name_(cfg.name ? cfg.name : ""), ip_(ip), port_(port),
inverted_(inverted) {} inverted_(inverted) {}
SickCodeDriver::~SickCodeDriver() { close(); } SickTimDriver::~SickTimDriver() { close(); }
ErrorCode SickCodeDriver::open() { ErrorCode SickTimDriver::open() {
if (is_open()) return set_error(ErrorCode::AlreadyOpen); if (is_open()) return set_error(ErrorCode::AlreadyOpen);
sockaddr_in addr{}; sockaddr_in addr{};
@@ -79,7 +79,7 @@ ErrorCode SickCodeDriver::open() {
return set_error(ErrorCode::Ok); return set_error(ErrorCode::Ok);
} }
void SickCodeDriver::close() { void SickTimDriver::close() {
if (sock_fd_ >= 0) { if (sock_fd_ >= 0) {
send_telegram("sEN LMDscandata 0"); // best-effort send_telegram("sEN LMDscandata 0"); // best-effort
::close(sock_fd_); ::close(sock_fd_);
@@ -87,7 +87,7 @@ void SickCodeDriver::close() {
} }
} }
bool SickCodeDriver::send_telegram(const std::string& body) { bool SickTimDriver::send_telegram(const std::string& body) {
if (sock_fd_ < 0) return false; if (sock_fd_ < 0) return false;
std::string framed; std::string framed;
framed.reserve(body.size() + 2); framed.reserve(body.size() + 2);
@@ -106,7 +106,7 @@ bool SickCodeDriver::send_telegram(const std::string& body) {
// CoLa-A has no length prefix, so ETX is the only frame boundary; recv_buf_ // CoLa-A has no length prefix, so ETX is the only frame boundary; recv_buf_
// carries leftover bytes across calls. // carries leftover bytes across calls.
bool SickCodeDriver::read_telegram(std::string& out, int timeout_ms) { bool SickTimDriver::read_telegram(std::string& out, int timeout_ms) {
if (!is_open()) { set_error(ErrorCode::NotOpen); return false; } if (!is_open()) { set_error(ErrorCode::NotOpen); return false; }
for (;;) { for (;;) {
@@ -139,7 +139,7 @@ bool SickCodeDriver::read_telegram(std::string& out, int timeout_ms) {
} }
} }
bool SickCodeDriver::recv_scan(ScanResult& out, int timeout_ms) { bool SickTimDriver::recv_scan(ScanResult& out, int timeout_ms) {
for (;;) { for (;;) {
std::string telegram; std::string telegram;
if (!read_telegram(telegram, timeout_ms)) return false; if (!read_telegram(telegram, timeout_ms)) return false;
@@ -148,7 +148,7 @@ bool SickCodeDriver::recv_scan(ScanResult& out, int timeout_ms) {
} }
} }
bool SickCodeDriver::spin_once() { bool SickTimDriver::spin_once() {
std::string telegram; std::string telegram;
if (!read_telegram(telegram, 0)) return false; if (!read_telegram(telegram, 0)) return false;
@@ -160,7 +160,7 @@ bool SickCodeDriver::spin_once() {
// CoLa-A "sSN/sRA LMDscandata": space-separated ASCII hex tokens, field order // CoLa-A "sSN/sRA LMDscandata": space-separated ASCII hex tokens, field order
// per SICK's Telegram Listing. "DIST1" → ranges, "RSSI1" → intensities. // per SICK's Telegram Listing. "DIST1" → ranges, "RSSI1" → intensities.
bool SickCodeDriver::parse_lmdscandata(const std::string& telegram, ScanResult& out) { bool SickTimDriver::parse_lmdscandata(const std::string& telegram, ScanResult& out) {
std::vector<std::string> tok = tokenize(telegram); std::vector<std::string> tok = tokenize(telegram);
if (tok.size() < 20) return false; if (tok.size() < 20) return false;
if (tok[0] != "sSN" && tok[0] != "sRA") return false; if (tok[0] != "sSN" && tok[0] != "sRA") return false;
@@ -301,7 +301,7 @@ const ModelConfig* model_by_name(const std::string& name) {
} // namespace } // namespace
DriverInfo SickCodeDriver::get_driver_info() const { return kDriverInfo; } DriverInfo SickTimDriver::get_driver_info() const { return kDriverInfo; }
} // namespace xlidar } // namespace xlidar
@@ -315,5 +315,5 @@ create_driver_instance(const xlidar::DeviceConfig* cfg) {
const ModelConfig* preset = model_by_name(cfg->model); const ModelConfig* preset = model_by_name(cfg->model);
if (!preset) preset = &MODEL_SICK_TIM571; // brand default if (!preset) preset = &MODEL_SICK_TIM571; // brand default
const uint16_t port = cfg->port ? cfg->port : 2111; const uint16_t port = cfg->port ? cfg->port : 2111;
return new SickCodeDriver(apply_device_config(*preset, *cfg), cfg->ip, port, cfg->inverted); return new SickTimDriver(apply_device_config(*preset, *cfg), cfg->ip, port, cfg->inverted);
} }

View File

@@ -17,17 +17,17 @@ inline constexpr ModelConfig MODEL_SICK_TIM7XX { "SICK-TIM7xx", -135.f, 135.f, 0
// SICK TiM5xx/7xx over SOPAS/CoLa-A (TCP, default port 2111). // SICK TiM5xx/7xx over SOPAS/CoLa-A (TCP, default port 2111).
// Verified against a real TiM781S (FW V5.11). NOT verified: NumEncoders > 0, // Verified against a real TiM781S (FW V5.11). NOT verified: NumEncoders > 0,
// the 8-bit channel branch, and the TIM5xx/TIM571 FOV/range numbers. // the 8-bit channel branch, and the TIM5xx/TIM571 FOV/range numbers.
class SickCodeDriver : public LidarDriverInterface { class SickTimDriver : public LidarDriverInterface {
public: public:
// inverted: unit mounted upside-down → mirror the scan. // inverted: unit mounted upside-down → mirror the scan.
explicit SickCodeDriver(const ModelConfig& cfg, explicit SickTimDriver(const ModelConfig& cfg,
const std::string& ip, const std::string& ip,
uint16_t port = 2111, uint16_t port = 2111,
bool inverted = false); bool inverted = false);
~SickCodeDriver(); ~SickTimDriver();
SickCodeDriver(const SickCodeDriver&) = delete; SickTimDriver(const SickTimDriver&) = delete;
SickCodeDriver& operator=(const SickCodeDriver&) = delete; SickTimDriver& operator=(const SickTimDriver&) = delete;
DriverInfo get_driver_info() const override; DriverInfo get_driver_info() const override;