# RoboticArm **Repository Path**: summer-pocket-august/robotic-arm ## Basic Information - **Project Name**: RoboticArm - **Description**: 二維機械臂控制 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-02-28 - **Last Updated**: 2025-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 机械臂运动控制 目前此版本只写了电机1和电机2的控制,机械爪子目前可控,当查询需要发送查询数据来查询 其中爪子最大512,最小0,比如查询爪子的电流,就能间接的知道是否抓住东西,并且有没有掉下去 ### 说明 1号机械臂夹爪ID 0x120 2号机械臂夹爪ID 0x121 STM32_FW_H7xx_V1.12_CANopenNode_2.24\Application\Bsp目录下为添加的文件 并且增加了三个任务 1. /*任務一. CAN2 接受並解碼 優先級最高*/ void RoboticArmCan_task(void *argument); 2. /*任務二.運動學算法和逆運動學算法實現 優先級此次*/ void Kinematics_task(void *argument); 3. /*任務三.向機械臂發送數據.機械臂上的電機相應太慢,需要控制發送節奏,否則不聽話 優先級最低*/ void RoboticArmCanSend_task(void *argument); ### 未添加的部分 禁行区域的设定,这个从原理上比较简单,当实际实行起来相当麻烦 电机3和电机4的控制,其实就是照着代码再抄一遍而已 上位机回数(考虑到 不一定使用郭的上位机控制就没回) flash存储 2025.3.6 增加位置反算,以下是位置反算举例 application.cpp 390行 目前这里算的是上一次的位置, 需要的话可以更新这个函数的位置已调整反算时间 double ftest1 , ftest2; int ntest1 , ntest2; forward_kinematics((double)(g_motortarNum1.MotorTargetAngle / 100.00), (double)(g_motortarNum2.MotorTargetAngle / 100.00), 500.00 , 350.00 , &ftest1, &ftest2); ntest1 = ftest1 * 100; ntest2 = ftest2 * 100; SEGGER_RTT_CustomFunction(4 , 0 , "coordinate:X = %d , coordinate:Y = %d \n" , ntest1 , ntest2); SEGGER_RTT_CustomFunction(4 , 0 , "--------------------------------- \n"); 2025.3.11 增加同步电机1和电机2的速度功能,存在以下5种可能性(排查发现之前自己写的队列在跨任务传输数据时,传入队列和传出队列的数据不一样) 条件1. 大电机与小电机的差值相等或者近 条件2. 大电机运动,小电机不动或者近乎不动 条件4. 大电机减速运动,小电机正常运动 条件3. 小电机运动,大电机不动或者近乎不动 条件5. 小电机减速运动,大电机正常运动 2025.3.13 增加限位角度设定,可通过协议或者上位机装订当前大臂和小臂的限位角度 2025.4.9 增加可按照正解或者负解的方式运动 ![验证.jpg](验证.jpg)