Я новичок в TCL и борюсь с кодом, который я написал для выполнения синусоидального вращения (по оси Z) с шестигранником (робот 6 степеней свободы).Проблема в том, что мой шестигранник действительно выполняет вращение, то есть 0,03 градуса, но когда я хочу построить временной ряд вращательного движения, я вижу, что шестнадцатеричный не выполняет полную амплитуду.
set TimeOut 10
set code 0
OpenConnection $TimeOut socketID
if {$socketID == -1} {
puts stdout "OpenConnection failed => $socketID"
return
}
# Main
set T0 5000; #Time delay
set pi [expr 2*asin(1.0)]; #Pi
set period 20; #period is 20 second
set delta 0.2; #Time interval
set amplitude 0.03; #Amplitude(degree)
set step [expr $period/$delta];
HexapodMoveAbsolute $socketID HEXAPOD Work 0 0 -12 0 0 $amplitude; # Position(mm,degree)
after $T0
for {set i0 0} {$i0<4} {incr i0} {
for {set i 0} {$i<$step} {incr i} {
set displacement [expr $amplitude*cos(2*$pi*($i*$delta+$delta)/$period)-$amplitude*cos(2*$pi*$i*$delta/$period)]
set velocity [expr $amplitude*abs($displacement/$delta)]
HexapodMoveIncrementalControlWithTargetVelocity $socketID HEXAPOD Work Rotation 0 0 $displacement $velocity
}
}
# Close TCP socket
TCP_CloseSocket $socketID
Я ожидаю выходной сигнал 0.03
градусов по амплитуде, но получаю [+0.03, -0.01]
градусов.Буду признателен за любые предположения, почему я получаю этот вывод.