# ws_MotorCtrl **Repository Path**: jasting10/ws_MotorCtrl ## Basic Information - **Project Name**: ws_MotorCtrl - **Description**: 12312312313123123 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-07 - **Last Updated**: 2025-12-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ws_MotorCtrl ### 介绍 本工作空间用于 ARM_V2 机械臂相关的 MoveIt2 规划与示例程序。当前重点包: - `ARM_V2_description`:URDF/Xacro + meshes - `arm_v2_moveit_config`:MoveIt2 配置与启动文件 - `arm_v2_ctrl`:**只做规划并打印轨迹点**(不下发控制) ### 软件架构 - `arm_v2_ctrl` 通过 MoveIt2 的 `move_action`(MoveGroup action)发起 **plan_only** 规划请求,并把返回的 `planned_trajectory.joint_trajectory` 打印出来。 - 启动采用一键 launch:`robot_state_publisher` + `static TF(world->base_link)` + `move_group` + `arm_v2_ctrl`。 ### 安装/依赖 默认基于 ROS 2 Humble + MoveIt2。 > 提示:如果你系统里 DDS/网络环境比较复杂,建议使用 CycloneDDS,并隔离 ROS_DOMAIN_ID(下方 launch 已默认处理)。 ### 编译 在工作空间根目录执行: ```bash cd /home/sunrise/Desktop/MotoControl/power-flow-motor-control-library/code/ws_MotorCtrl colcon build ``` 只编译相关包(推荐,速度快): ```bash cd /home/sunrise/Desktop/MotoControl/power-flow-motor-control-library/code/ws_MotorCtrl colcon build --packages-select ARM_V2_description arm_v2_moveit_config arm_v2_ctrl ``` 编译完成后记得 source: ```bash cd /home/sunrise/Desktop/MotoControl/power-flow-motor-control-library/code/ws_MotorCtrl . install/setup.bash ``` ### 运行(只规划并打印,不控制) 一键启动(会自动退出): ```bash cd /home/sunrise/Desktop/MotoControl/power-flow-motor-control-library/code/ws_MotorCtrl . install/setup.bash ros2 launch arm_v2_ctrl arm_v2_ctrl.launch.py ``` ### 常用参数 `arm_v2_ctrl.launch.py` 支持以下常用参数(可按需覆盖): - **`ros_domain_id`**:默认 `77`,用于隔离网络里其它 DDS 节点,减少奇怪的 DDS/序列化报错噪声 - **`ctrl_start_delay_sec`**:默认 `8.0`,延迟启动 `arm_v2_ctrl`,避免 `move_group` 尚未 ready 时过早发起规划 - **`group_name`**:默认 `arm_v2`(来自 `ARM_V2.srdf` 的 group) - **`end_effector_link`**:默认 `JAW_7_1` - **`planning_time`**:默认 `5.0` - **`goal_position_tolerance`**:默认 `0.001` - **`goal_orientation_tolerance`**:默认 `0.01` - **`print_max_points` / `print_stride`**:控制打印的轨迹点数量与步长,避免刷屏 - **目标点参数**: - `point_a.{x,y,z}`:单点 PTP 目标 - `point_start.{x,y,z}`、`point_end.{x,y,z}`:两段规划(到 start、到 end) - `orientation.{w,x,y,z}`:目标姿态 示例(把启动延迟改大一点): ```bash ros2 launch arm_v2_ctrl arm_v2_ctrl.launch.py ctrl_start_delay_sec:=15.0 ``` ### 常见现象/说明 - **“规划器反应慢 / 等很久才开始规划”**: - 典型原因是 `move_group` 在启动时加载规划管线、初始化场景监视器、或处理复杂碰撞网格。 - 本仓库已优化:`move_group` 只加载 OMPL(`arm_v2_moveit_config/launch/move_group.launch.py`)。 - **move_group 退出时偶发 SIGSEGV**: - 这是 MoveIt/插件卸载链路中偶发问题;不影响“规划并打印后退出”的主流程(`arm_v2_ctrl` 已完成并退出)。 ### 移植关键要点(非常重要) 1) **URDF mesh 路径不要写死绝对路径** - 错误示例:`file:///home/xxx/.../install/.../meshes/*.stl` - 推荐:`package://ARM_V2_description/meshes/*.stl` 本仓库已将 `ARM_V2_description/urdf/ARM_V2.urdf` 和 `ARM_V2_description/urdf/ARM_V2.xacro` 的 mesh 路径统一为 `package://...`。 2) **MoveIt 规划组名要与 SRDF 一致** `arm_v2_moveit_config/config/ARM_V2.srdf` 中 group 是 **`arm_v2`**,所以 `arm_v2_ctrl` 默认 `group_name=arm_v2`。 3) **world/base_link 的 TF 必须存在** 如果 SRDF 里虚拟关节 parent_frame 是 `world`,务必提供 `world -> base_link` 的 TF。 本仓库在 `arm_v2_ctrl.launch.py` 中已 include `arm_v2_moveit_config/launch/static_virtual_joint_tfs.launch.py`。 4) **DDS/网络环境要“隔离”** 如果同网段有其它 ROS2 节点,可能出现莫名其妙的 DDS 序列化/反序列化报错噪声。 建议: - 统一使用 `RMW_IMPLEMENTATION=rmw_cyclonedds_cpp` - 设置独立 `ROS_DOMAIN_ID`(本仓库 launch 默认 `77`) 5) **启动慢的核心:碰撞网格太重** 如果 collision 使用高顶点 STL,`move_group` 启动会非常慢,甚至出现警告: `It is likely there are too many vertices in collision geometry`。 建议做法: - 开发/演示阶段:用简化 collision(primitive)或直接不提供 collision - 真机/严谨碰撞:提供 decimated 的 collision mesh(低面数),不要直接用视觉 STL 6) **真机接入时(如果你之后要控制)** 当前 `arm_v2_ctrl` 是“只规划不执行”。真机控制要点: - 必须有稳定的 `joint_states`(来自 `ros2_control` 或驱动) - MoveIt 的 `move_group` 才能用真实当前状态作为 start_state,规划更可靠 - controller/trajectory_execution 需要与实际控制器匹配(见 `arm_v2_moveit_config/config/moveit_controllers.yaml`、`ros2_controllers.yaml`)