diff --git a/scripts/lbot_arm_control.sh b/scripts/lbot_arm_control.sh index a0bb1b9..4c650cd 100755 --- a/scripts/lbot_arm_control.sh +++ b/scripts/lbot_arm_control.sh @@ -66,19 +66,19 @@ start_bag_recorder() { echo "Rosbag log: ${BAG_LOG_FILE}" : > "${BAG_LOG_FILE}" - setsid bash -lc " + setsid env WS_DIR="${WS_DIR}" bash -lc ' set -euo pipefail set +u - source '${WS_DIR}/install/setup.bash' + source "${WS_DIR}/install/setup.bash" set -u while true; do - start_time=\\\$(date +%Y%m%d_%H%M%S) - output=/tmp/lbot_arm_\\${start_time}.mcap - echo \"Starting rosbag: \\${output}\" + start_time=$(date +%Y%m%d_%H%M%S) + output=/tmp/lbot_arm_${start_time}.mcap + echo "Starting rosbag: ${output}" set +e timeout 3600 ros2 bag record \ --storage mcap \ - --output \"\\${output}\" \ + --output "${output}" \ --polling-interval 2 \ --include-unpublished-topics \ --disable-keyboard-controls \ @@ -92,13 +92,13 @@ start_bag_recorder() { --services \ /robot1/left_arm/move_joint \ /robot1/right_arm/move_joint - rc=\\$? + rc=$? set -e - if [[ \\${rc} -ne 124 ]]; then - exit \\${rc} + if [[ ${rc} -ne 124 ]]; then + exit ${rc} fi done - " >> "${BAG_LOG_FILE}" 2>&1 & + ' >> "${BAG_LOG_FILE}" 2>&1 & local pid=$! local pgid diff --git a/src/officer_sdk/lbot_driver/src/lbot_driver.cpp b/src/officer_sdk/lbot_driver/src/lbot_driver.cpp index 028aef6..edd6bdd 100644 --- a/src/officer_sdk/lbot_driver/src/lbot_driver.cpp +++ b/src/officer_sdk/lbot_driver/src/lbot_driver.cpp @@ -144,7 +144,8 @@ bool LBot::connect_robot() { g_conn_state.store(GlobalConnState::CONNECTING); // 更新全局状态 lbot_handle = lbot_api.lbot_init(arm_ip_.c_str()); - if (lbot_handle->id > 0) { + bool success = lbot_handle != nullptr && lbot_handle->id > 0; + if (success) { RCLCPP_INFO(this->get_logger(), "Connected to LBot at %s", arm_ip_.c_str()); // 获取机械臂信息 @@ -169,11 +170,10 @@ bool LBot::connect_robot() { } } else { - RCLCPP_ERROR(this->get_logger(), "Failed to connect to LBot"); - publish_system_error(-1, "Failed to connect to LBot"); + RCLCPP_ERROR(this->get_logger(), "Failed to connect to LBot, UDP reconnecting"); + publish_system_error(-1, "UDP Reconnecting"); } - bool success = lbot_handle->id > 0; conn_state_ = success ? GlobalConnState::CONNECTED : GlobalConnState::DISCONNECTED; g_conn_state.store(conn_state_); // 更新全局状态 @@ -391,6 +391,10 @@ void LBot::reconnect_timer_callback() if (reconnect_thread_running_) return; // 线程正在运行,不重复启动 + if (reconnect_thread_.joinable()) { + reconnect_thread_.join(); + } + reconnect_thread_running_ = true; reconnect_thread_ = std::thread([this]() {