dual_aubo-i3_arm仿真与实际控制(一)
一、文档下载
[源码下载](https://github.com/lg609/aubo_robot)
用到的包:
aubo_controller
aubo_driver
aubo_msgs
二、源码解读
2.1三个重要的节点:
1)/aubo_driver:底层控制节点,直接驱动机械臂并发送反馈信息,在aubo_diver包中;
2)/aubo_robot_simulator:仿真节点,在aubo_controller包中;
3)/aubo_joint_trajectory_action:服务端节点,向上连接moveit客户端,下连/aubo_robot_simulator
节点,在aubo_controller包中;
2.2节点解读:
2.2.1/aubo_driver节点
底层控制节点,直接控制机械臂的运动。
1、初始化过程中,发布机械臂实际的当前节点(/aubo_driver/real_pose)到(aubo_robot_simulator节点)
2、当机械臂处于保护停或者正常停过程中,发布(/aubo_driver/cancel_trajectory)消息到(aubo_robot_simulator节点);
3、在时间回调函数(timerCallback)中,不断的发送(rib_status)消息到(aubo_robot_simulator节点),包括缓冲区大小,控制模式(示教模式,发送目标点模式,真机与仿真同步模式);
4、在时间回调函数中,不断发送(/joint_states)消息(关节角度信息)消息类型为(sensor_msgs::JointState);
5、在时间回调函数中,不断发送真实机械臂的实时的反馈信息(/feedback_states),消息类型为
control_msgs::FollowJointTrajectoryFeedback;
6、接收trajectory_execution_event消息,设置正常停状态
7、接收aubo_robot_simulator节点发送的(/moveItController_cmd)消息,消息类型为
trajectory_msgs::JointTrajectoryPoint,记录了当前时刻的各个关节的角度、角速度、角加速度
,并压入到机械臂的状态组(buf_queue_),并在UateControlStatus()函数中调用setRobotJointsByMoveIt()取出状态组中当前轨迹点,调用robotServiceSetRobotPosData2Canbus
函数控制机械臂运动。updateControlStatus()在main函数中,通过while不断的调用。
2.2.2/aubo_robot_simulator节点
机械臂的仿真节点。
1、在时间回调函数中,不断发送仿真的状态反馈信息(/feedback_states),消息的类型为
control_msgs::FollowJointTrajectoryFeedback;
2、接收( aubo_joint_trajectory_action)服务端发送的(joint_path_commamd)消息,类型为trajectory_msgs::JointTrajectory记录了机械臂各个关节的一系列轨迹点(位置、速度、加速度、力),并将每个轨迹点通过addMotionWaypoint函数压入到motion_buffer_队列中,类型为
std::queue<trajectory_msgs::JointTrajectoryPoint> motion_buffer_通过发布 moveItController_cmd消息发布出去;
3、接收/aubo_driver发布的(/aubo_driver/real_pose)信息,更新仿真环境下的当前位置;
4、与gazebo连接后,在gazebo中进行实时显示;
2.2.3/aubo_joint_trajectory_action节点
动作的服务端节点,向上连接到moveit客户端,接收到moveit发送的/goal消息以及/cancel消息,在服务端内引发相应的回调函数。
1、/goal的回调函数为goalCB,在该函数内发布轨迹消息(joint_path_command),消息的类型为trajectory_msgs::JointTrajectory;
2、/cancel的回调函数为cancelCB,设定动作消息停止;
3、接收来自/aubo_driver以及/aubo_robot_simulator节点的(/feedback_states)消息,在controllerStateCB回调函数中向客户端返回结果,但并未向客户端发布反馈内容。
2.3通信架构:
moveit与真实机械臂之间的通信框架
2.4rqt_graph显示各个节点之间的消息发布:
目前实验室内只有AUBOI5机械臂,将其与电脑连接后,启动相应的launch文件,查看ros连接真实的机械臂后各个节点之间的消息发布,如图(2.1)所示。
图(2.1)节点之间的信息传递
未完待续!!!!!!!!!!!!!!!!!!!
欢迎批评指正!