动作执行功能包,可执行机器人自定义动作。
在终端输入以下命令,启动节点
rosrun actexecpackage ActExecPackageNode.py
使用上级节点通过/MediumSize/ActPackageExec/StateJump
服务占用启动的节点,如下所示
rosservice call /MediumSize/ActPackageExec/StateJump "masterID: 1
stateReq: 'setStatus'"
返回stateRes: 22
占用成功,否则占用失败。
上级节点通过/MediumSize/ActPackageExec/actNameString
服务,运行机器人自定义动作,如下所示
rosservice call /MediumSize/ActPackageExec/actNameString "actNameReq: 'rosrun actexecpackage TrajectoryPlanExample.py'"
动作执行完成,使用以下面命令释放动作执行节点
rosservice call /MediumSize/ActPackageExec/StateJump "masterID: 1
stateReq: 'reset'"
self.StateStyle = {
'init' : 20,
'preReady' : 21,
'ready' : 22,
'running' : 23,
'pause' : 24,
'stoping' : 25,
'error' : 26,
}
string str
---
string data
uint32 poseQueueSize
str请求字符串,可任意设置,不能为空,data状态的字符串,poseQueueSize关节指令度列的长度。
uint8 masterID
string stateReq
---
int16 stateRes
masterID占用节点的id,stateReq状态跳转的控制字符串,stateRes操作返回的状态数值。
string actNameReq
---
string actResultRes
actNameReq指令名称,actResultRes执行结果。
TrajectoryPlan.py
文件为使用自动贝塞尔做动作轨迹规划的代码。TrajectoryPlanExample.py
文件为示例程序。
TrajectoryPlanning类中,若i为任意一个目标值,则(i-1)为初始值,(i+1)为下一个目标值,(i-1)和i值之间的轨迹为第i段轨迹。生成第i段轨迹时,需要i-1、i、i+1三个目标值。
def __init__(self, numberOfTra=22, daltaX=10.0)
def setDaltaX(self, daltaX)
def setInterval(self, v)
def planningBegin(self, firstGroupValue, secondGroupValue)
def planning(self, nextGroupValue)
def planningEnd(self)
# 创建一个实例,规划22段曲线,轨迹点插值间隔为10ms
tpObject = TrajectoryPlanning(22,10.0)
# 设置目标点之间的时间间隔为1000ms
tpObject.setInterval(1000.0)
# 传入初始值和第一组目标值
tpObject.planningBegin(poseList[zxsq-anti-bbcode-0], poseList[zxsq-anti-bbcode-1])
# 修改目标点之间的时间间隔为1500ms
tpObject.setInterval(1500.0)
# 传入下一组目标值,并返回上两组目标值之间的轨迹
trajectoryPoint = tpObject.planning(poseList[zxsq-anti-bbcode-2])
# 修改目标点之间的时间间隔为2000ms,若不调用此函数,目标点的间隔保持为1500ms
tpObject.setInterval(2000.0)
# 传入下一组目标值,并返回上两组目标值之间的轨迹
trajectoryPoint = tpObject.planning(poseList[zxsq-anti-bbcode-3])
...
# 返回最后一段轨迹
trajectoryPoint = tpObject.planningEnd()
欢迎光临 乐聚社区 (https://bbs.lejurobot.com/) | Powered by Discuz! X3.4 |