# exoskeleton_robot **Repository Path**: skyworth_exoskeleton/exoskeleton_robot ## Basic Information - **Project Name**: exoskeleton_robot - **Description**: 将main分支作为默认分支 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2025-02-08 - **Last Updated**: 2026-07-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # exoskeleton_robot 外骨骼机器人控制系统 ## 目录 - [快速开始](#快速开始) - [环境配置](#环境配置) - [编译](#编译) - [运行](#运行) - [控制命令](#控制命令) - [项目结构](#项目结构) - [故障排除](#故障排除) - [系统服务](#系统服务) ## 快速开始 ### SSH 连接 ```bash ssh sunrise@192.168.3.67 # 或 ssh sunrise@192.168.3.59 # 密码:sunrise ``` ### 实机运行流程 ```bash # 1. 连接远程设备 ssh sunrise@192.168.3.67 # 输入密码:sunrise # 2. 加载环境 source /workspace/er/bin/motion_source.env # 3. 运行主程序 /workspace/er/bin/motion_realmachine # 或使用启动脚本 /workspace/er/bin/start_exoskeleton.sh # 4. 配置 YAML(如需要) cd /workspace/er/lib/gait/config/ # 5. 初始化(按手柄 A 键) # 6. 设置控制模式 cd /tmp/er/control/motor_0 echo 5 > control_mode # 收紧助力绳 echo 4 > control_mode # 进入 ForcePD 模式 # 7. 可视化数据(可选) ros2 run plotjuggler plotjuggler ``` ## 环境配置 ### 新机环境配置流程 #### 连接 WiFi ```bash # 开启 WiFi sudo nmcli r wifi on # 扫描附近 WiFi sudo nmcli dev wifi # 连接 WiFi sudo nmcli dev wifi connect "vip" password "123456789" ifname wlan0 # 删除 WiFi 连接(如需要) sudo nmcli connection delete "vip" ``` #### 安装软件依赖包 ```bash # 切换到 root 用户 sudo su # 运行安装脚本 /workspace/er/bin/rootfs_aarch64_22_build.sh board ``` ## 编译 ### x86 编译运行 ```bash # 进入 Docker 容器 ./scripts/docker_load_x86_aarch64.sh x86 # 在 Docker 容器中编译 ./scripts/build_orin.sh x86 ``` > **注意**:运行命令待实现 ### aarch64 编译运行 ```bash # 进入 Docker 容器 ./scripts/docker_load_x86_aarch64.sh aarch64 # 在 Docker 容器中编译 ./scripts/build_cat.sh aarch64 ip address: 192.168.3.102 ``` ## 运行 ### 实机运行 ```bash # 1. 登录 ssh develop@192.168.3.102 password: 123456 # 2. 加载环境 /workspace/er/bin/start_exoskeleton.sh # 3. 设置控制模式 cd /tmp/er/control/motor_0 echo 6 > control_mode ``` ### 初始化流程 #### Estimator 初始化 1. 开机后,待人体站立直立 2. 按手柄 **A键** 进行初始化 3. 若初始化成功,终端会打印:`--------编码器位置已初始化--------` #### ForcePD 初始化 待人体站立直立时,进入 `echo 4` 模式,自动完成传感器初始化 ### 数据查看 #### 实机数据查看 ```bash # 查看输入结构 /workspace/er/bin/watch_cat_file.bash /tmp/er/inputStruct # 查看输出结构 /workspace/er/bin/watch_cat_file.bash /tmp/er/outputStruct ``` #### 可视化数据(上位机) ```bash ros2 run plotjuggler plotjuggler ``` **ROS2 话题:** - **Estimator 话题**:`est_msgs` - **ForcePD 话题**:`joint_angles` ### 手柄控制 - **Y 键**:启动 - **X 键**:停止 - **A 键**:初始化(见 [Estimator 初始化](#estimator-初始化)) ## 控制命令 ### 电机控制接口 ```bash # 进入电机控制目录(motor_0, motor_1, motor_2, motor_3) cd /tmp/er/control/motor_0 # 左电机,右电机为 motor_2 echo 6 > control_mode # 查看可用控制接口 ls # 输出: # CAN_PACKET_SET_CURRENT CAN_PACKET_SET_IDLE # CAN_PACKET_SET_CURRENT_BRAKE CAN_PACKET_SET_POS # CAN_PACKET_SET_POS_SPD CAN_PACKET_SET_RPM # control_mode control_param ``` ### 控制模式 #### 位置模式 ```bash echo 0 > CAN_PACKET_SET_POS # 位置,单位:弧度 echo 1 > CAN_PACKET_SET_POS echo 2 > CAN_PACKET_SET_POS ``` #### 转速模式 ```bash echo 1.57 > CAN_PACKET_SET_RPM # 转速,单位:弧度/s ``` > **注意**:真实单位为 `1.57/31.4 rad/s`,真实指令单位即 `0.05 rad/s`。 > 例如,期望速度 `1.57 rad/s`(2秒一圈),则命令数值应该为 `1.57/0.05 = 31.4` #### 位置速度环模式 ```bash echo 0 1.57 > CAN_PACKET_SET_POS_SPD # 第一个参数:位置,第二个参数:转速 echo 2 1.57 > CAN_PACKET_SET_POS_SPD echo -2 1.57 > CAN_PACKET_SET_POS_SPD ``` #### 电流环模式 ```bash echo 10 > CAN_PACKET_SET_CURRENT ``` #### 控制模式切换 ```bash echo 0 > CAN_PACKET_SET_IDLE # 进入空闲模式 echo 1 > control_mode echo 3 > control_mode # 膝关节助力 echo 4 > control_mode # 进入 ForcePD 模式 echo 5 > control_mode # 收紧助力绳 ``` ## 项目结构 ``` motion_realmachine/ ├── src/ │ ├── estimator/ # 感知层,状态估计(独立) │ ├── behavior_tree/ # 规划决策层(高优先级),BT(行为树) │ ├── action_server/ # 控制层,Action Server,具体执行(与BT交互) │ ├── Control/ # 原有运动控制(可被BT调用) │ └── ... ``` ### Action Server ```bash # 运行 gait cd /workspace/er/lib/gait && LD_LIBRARY_PATH=../:$LD_LIBRARY_PATH ./gait # 运行 motor_action_server cd /workspace/er/lib && ./motor_action_server/motor_action_server # 查看进程 ps aux | grep motor_action_server ``` ### 切换绳驱 ```bash motion_config # 连接绳驱设备(见上方 SSH 连接部分) ``` ## 故障排除 ### ROS2 相关问题 #### 检查 ROS2 安装 ```bash ros2 doctor --report ``` #### 安装缺失的 Python 包 ```bash pip3 install psutil catkin_pkg rosdistro sudo apt install --reinstall ros-humble-ros2doctor ``` #### 验证核心包 ```bash ros2 pkg list | grep -E 'rclcpp|rclpy|std_msgs' # 应输出:rclcpp, rclpy, std_msgs 等核心包 ``` #### 重新安装 Python 依赖(如验证失败) ```bash pip3 install --force-reinstall catkin_pkg rosdistro ``` #### 测试 ROS2 通信 ```bash # 启动 talker 和 listener ros2 run demo_nodes_cpp talker & ros2 run demo_nodes_py listener ``` #### 调试工具 ```bash # 安装 strace(如果缺失) sudo apt install strace # 检查 ros2 命令 nano /opt/ros2_humble_x86/bin/ros2 # 内容应为: # #!/usr/bin/python3 # #EASY-INSTALL-ENTRY-SCRIPT: 'ros2cli==0.18.7','console_scripts','ros2' ``` #### Python 警告抑制 ```python import warnings warnings.filterwarnings("ignore", category=DeprecationWarning) ``` ## 系统服务 ### 开机自启配置 ```bash # 安装服务 sudo cp -a /workspace/er/bin/exoskeleton.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable exoskeleton.service sudo systemctl start exoskeleton.service ``` ### 停止服务 ```bash sudo systemctl daemon-reload sudo systemctl stop exoskeleton.service ``` ### 移除服务 ```bash sudo systemctl daemon-reload sudo systemctl stop exoskeleton.service sudo systemctl disable exoskeleton.service ```