Closed xela-95 closed 8 months ago
mamba create -n walking -c robotology -c conda-forge \
bipedal-locomotion-framework \
idyntree \
yarp \
icub-contrib-common \
icub-main \
osqp-eigen \
qpoases \
libunicycle-footstep-planner \
libgz-sim8 \
whole-body-estimators \
icub-models \
ycm-cmake-modules \
ninja pkg-config cmake compilers clang clang-tools clang-format include-what-you-use catch2
Since in the walking controller tutorial I should launch gazebo classic with:
export YARP_CLOCK=/clock
gazebo -slibgazebo_yarp_clock.so
I think this is no more possible on Gazebo. Should I update the world SDF used in #103 adding the clock plugin?
CC @traversaro
Since in the walking controller tutorial I should launch gazebo classic with:
export YARP_CLOCK=/clock gazebo -slibgazebo_yarp_clock.so
I think this is no more possible on Gazebo. Should I update the world SDF used in #103 adding the clock plugin?
By doing this, the port that gets registered is registration name /IITICUBLAP218/gz/377448/clock
instead of simply /clock
🤔
By doing this, the port that gets registered is
registration name /IITICUBLAP218/gz/377448/clock
instead of simply/clock
🤔
The issue was caused by the YARP_CLOCK
environment variable. If I do not set it the /clock
port is opened and can be read.
I'm at step 4/7 of the walking-controllers tutorial.
The command:
yarprobotinterface --config conf/launch_wholebodydynamics_ecub.xml
The output logs are the following:
CC @S-Dafarra
It seems that wholebodydynamics is not able to start, in particular this line:
[INFO] wholeBodyDynamics : impossible to create ExtWrenchesAndJointTorquesEstimator from file model.urdf ( full path: )
suggest that it was not able to find the model. Did you set YARP_ROBOT_NAME
?
This feature may be relevant:
It seems that wholebodydynamics is not able to start, in particular this line:
[INFO] wholeBodyDynamics : impossible to create ExtWrenchesAndJointTorquesEstimator from file model.urdf ( full path: )
suggest that it was not able to find the model. Did you set
YARP_ROBOT_NAME
?
In Step 1, I've done export YARP_ROBOT_NAME="ergoCubGazeboV1"
. We are using the model in the folder named ergoCubGazeboV1_1
. But also trying to update the YARP_ROBOT_NAME
variable to this name produces the same error
The value of YARP_DATA_DIRS
is the following:
:<CONDA_PREFIX>/share/ICUBcontrib:<CONDA_PREFIX>/share/iCub:<CONDA_PREFIX>/share/iCub:<CONDA_PREFIX>/share/yarp
To debug more easily that logic, can you run the yarp resource find model.urdf
command and check its output? By the way, it seems that somehow <CONDA_PREFIX>/share/ergoCub
is missing from YARP_DATA_DIRS
, not sure why.
Ahh, probably you did not installed ergocub-software
as you are using your local model?
Ahh, probably you did not installed
ergocub-software
as you are using your local model?
Yep exactly! Do I have to install it and update some of the variables?
This is the output of yarp resource find model.urdf
(having set YARP_ROBOT_NAME="ergoCubGazeboV1_1"):
[DEBUG] |yarp.os.ResourceFinder| configuring
[DEBUG] |yarp.os.ResourceFinder| finding file [from]
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/ergocub_ws/install/share/ergoCub/conf/from] (pwd)
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/.config/yarp/robots/ergoCubGazeboV1_1] (robot YARP_CONFIG_HOME)
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/.local/share/yarp/robots/ergoCubGazeboV1_1] (robot YARP_DATA_HOME)
[DEBUG] |yarp.os.ResourceFinder| checking [/etc/xdg/xdg-ubuntu/yarp/robots/ergoCubGazeboV1_1] (robot YARP_CONFIG_DIRS)
[DEBUG] |yarp.os.ResourceFinder| checking [/etc/xdg/yarp/robots/ergoCubGazeboV1_1] (robot YARP_CONFIG_DIRS)
[DEBUG] |yarp.os.ResourceFinder| checking [robots/ergoCubGazeboV1_1] (robot YARP_DATA_DIRS)
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/mambaforge/envs/walking/share/ICUBcontrib/robots/ergoCubGazeboV1_1] (robot YARP_DATA_DIRS)
[DEBUG] |yarp.os.ResourceFinder| found /home/acroci/mambaforge/envs/walking/share/ICUBcontrib/robots/ergoCubGazeboV1_1
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/mambaforge/envs/walking/share/iCub/robots/ergoCubGazeboV1_1] (robot YARP_DATA_DIRS)
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/mambaforge/envs/walking/share/yarp/robots/ergoCubGazeboV1_1] (robot YARP_DATA_DIRS)
[DEBUG] |yarp.os.ResourceFinder| checking [config/path.d] (robot path.d YARP_DATA_DIRS)
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/mambaforge/envs/walking/share/ICUBcontrib/config/path.d] (robot path.d YARP_DATA_DIRS)
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/mambaforge/envs/walking/share/iCub/config/path.d] (robot path.d YARP_DATA_DIRS)
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/mambaforge/envs/walking/share/yarp/config/path.d] (robot path.d YARP_DATA_DIRS)
[DEBUG] |yarp.os.ResourceFinder| found /home/acroci/mambaforge/envs/walking/share/yarp/config/path.d
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/mambaforge/envs/walking/share/BipedalLocomotionFramework/robots/ergoCubGazeboV1_1] (robot yarp.d)
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/mambaforge/envs/walking/share/ICUBcontrib/robots/ergoCubGazeboV1_1/from] (robot)
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/.config/yarp/from] (YARP_CONFIG_HOME)
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/.local/share/yarp/from] (YARP_DATA_HOME)
[DEBUG] |yarp.os.ResourceFinder| checking [/etc/xdg/xdg-ubuntu/yarp/from] (YARP_CONFIG_DIRS)
[DEBUG] |yarp.os.ResourceFinder| checking [/etc/xdg/yarp/from] (YARP_CONFIG_DIRS)
[DEBUG] |yarp.os.ResourceFinder| checking [from] (YARP_DATA_DIRS)
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/mambaforge/envs/walking/share/ICUBcontrib/from] (YARP_DATA_DIRS)
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/mambaforge/envs/walking/share/iCub/from] (YARP_DATA_DIRS)
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/mambaforge/envs/walking/share/yarp/from] (YARP_DATA_DIRS)
[DEBUG] |yarp.os.ResourceFinder| checking [/home/acroci/mambaforge/envs/walking/share/BipedalLocomotionFramework/from] (yarp.d)
[DEBUG] |yarp.os.ResourceFinder| did not find from
""
Probably you can just add the install/share/ergoCub
folder from the ergocub_ws to YARP_DATA_DIRS
, so the YARP facilities to find files can find the model.urdf
of the model. If necessary you can add it there by copying it from ergocub-software .
Probably you can just add the
install/share/ergoCub
folder from the ergocub_ws toYARP_DATA_DIRS
, so the YARP facilities to find files can find themodel.urdf
of the model. If necessary you can add it there by copying it from ergocub-software .
By adding that to YARP_DATA_DIRS
made yarprobotinterface
find the URDF file. Since all the modifications I've done for gz-sim-yarp-plugins are in the SDF file version of model, is there a way to load that file or should I convert it back to a URDF?
Since all the modifications I've done for gz-sim-yarp-plugins are in the SDF file version of model, is there a way to load that file or should I convert it back to a URDF?
iDynTree (the underlying library used by the wholebodydynamics module used to estimate external forces and by the walking controller) does not support loading SDF, see https://github.com/robotology/idyntree/issues/481 . However, as your modifications did not changed the kinematic and dynamics parameters of the models, I think it is sufficient to use the corresponding URDF used to create the SDF.
I could run:
yarp rpc /wholeBodyDynamics/rpc
>> resetOffset all
receiving the Response: [ok]
answer.
When I launched the walking module with:
YARP_CLOCK=/clock WalkingModule
I got the following response:
[INFO] |yarp.os.Port|/IITICUBLAP218/WalkingModule/91069/clock:i| Port /IITICUBLAP218/WalkingModule/91069/clock:i active at tcp://192.168.220.201:10085/
[INFO] |yarp.os.Network| Success: port-to-port persistent connection added.
[INFO] |yarp.os.Time| Waiting for clock server to start broadcasting data ...
[INFO] |yarp.os.impl.PortCoreInputUnit|/IITICUBLAP218/WalkingModule/91069/clock:i| Receiving input from /clock to /IITICUBLAP218/WalkingModule/91069/clock:i using tcp
[ERROR] |yarp.os.Property| cannot read from dcm_walking_with_joypad.ini
[ERROR] [getiDynTreeVectorFixSizeFromSearchable] Missing field goal_port_scaling
[ERROR] [WalkingModule::configure] Failed while reading goal_port_scaling.
[INFO] |yarp.os.RFModule| RFModule failed to open.
[WARNING] |yarp.os.NetworkClock| Destroying network clock
[INFO] |yarp.os.Network| Success: port-to-port persistent connection added.
[INFO] |yarp.os.impl.PortCoreInputUnit|/IITICUBLAP218/WalkingModule/91069/clock:i| Removing input from /clock to /IITICUBLAP218/WalkingModule/91069/clock:i
Step 6/7
When I launched the walking module with:
YARP_CLOCK=/clock WalkingModule
I got the following response:
[INFO] |yarp.os.Port|/IITICUBLAP218/WalkingModule/91069/clock:i| Port /IITICUBLAP218/WalkingModule/91069/clock:i active at tcp://192.168.220.201:10085/ [INFO] |yarp.os.Network| Success: port-to-port persistent connection added. [INFO] |yarp.os.Time| Waiting for clock server to start broadcasting data ... [INFO] |yarp.os.impl.PortCoreInputUnit|/IITICUBLAP218/WalkingModule/91069/clock:i| Receiving input from /clock to /IITICUBLAP218/WalkingModule/91069/clock:i using tcp [ERROR] |yarp.os.Property| cannot read from dcm_walking_with_joypad.ini [ERROR] [getiDynTreeVectorFixSizeFromSearchable] Missing field goal_port_scaling [ERROR] [WalkingModule::configure] Failed while reading goal_port_scaling. [INFO] |yarp.os.RFModule| RFModule failed to open. [WARNING] |yarp.os.NetworkClock| Destroying network clock [INFO] |yarp.os.Network| Success: port-to-port persistent connection added. [INFO] |yarp.os.impl.PortCoreInputUnit|/IITICUBLAP218/WalkingModule/91069/clock:i| Removing input from /clock to /IITICUBLAP218/WalkingModule/91069/clock:i
Solved, just missed to source a setup file I use to configure needed environment variables. Now I get:
[INFO] |yarp.os.Port|/IITICUBLAP218/WalkingModule/101245/clock:i| Port /IITICUBLAP218/WalkingModule/101245/clock:i active at tcp://192.168.220.201:10087/
[INFO] |yarp.os.Network| Success: port-to-port persistent connection added.
[INFO] |yarp.os.Time| Waiting for clock server to start broadcasting data ...
[INFO] |yarp.os.impl.PortCoreInputUnit|/IITICUBLAP218/WalkingModule/101245/clock:i| Receiving input from /clock to /IITICUBLAP218/WalkingModule/101245/clock:i using tcp
[DEBUG] |yarp.dev.PolyDriver|remotecontrolboardremapper| Parameters are (REMOTE_CONTROLBOARD_OPTIONS (writeStrict on)) (axesNames (torso_pitch torso_roll torso_yaw l_shoulder_pitch l_shoulder_roll l_shoulder_yaw l_elbow r_shoulder_pitch r_shoulder_roll r_shoulder_yaw r_elbow l_hip_pitch l_hip_roll l_hip_yaw l_knee l_ankle_pitch l_ankle_roll r_hip_pitch r_hip_roll r_hip_yaw r_knee r_ankle_pitch r_ankle_roll)) (device remotecontrolboardremapper) (localPortPrefix "/walking-coordinator/remoteControlBoard") (remoteControlBoards ("/ergocubSim/torso" "/ergocubSim/left_arm" "/ergocubSim/right_arm" "/ergocubSim/left_leg" "/ergocubSim/right_leg"))
[DEBUG] |yarp.dev.PolyDriver|remote_controlboard| Parameters are (device remote_controlboard) (local "/walking-coordinator/remoteControlBoard/ergocubSim/torso") (remote "/ergocubSim/torso") (writeStrict on)
[INFO] |yarp.device.remote_controlboard| RemoteControlBoard is ENABLING the writeStrict option for all commands
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/torso/rpc:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/torso/rpc:o active at tcp://192.168.220.201:10088/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/torso/command:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/torso/command:o active at tcp://192.168.220.201:10089/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/torso/stateExt:i| Port /walking-coordinator/remoteControlBoard/ergocubSim/torso/stateExt:i active at tcp://192.168.220.201:10090/
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/torso/rpc:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/torso/rpc:o to /ergocubSim/torso/rpc:i using tcp
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/torso/command:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/torso/command:o to /ergocubSim/torso/command:i using udp
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/torso/stateExt:i| Receiving input from /ergocubSim/torso/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/torso/stateExt:i using udp
[INFO] |yarp.dev.PolyDriver|remote_controlboard| Created device <remote_controlboard>. See C++ class RemoteControlBoard for documentation.
[DEBUG] |yarp.dev.PolyDriver|remote_controlboard| Parameters are (device remote_controlboard) (local "/walking-coordinator/remoteControlBoard/ergocubSim/left_arm") (remote "/ergocubSim/left_arm") (writeStrict on)
[INFO] |yarp.device.remote_controlboard| RemoteControlBoard is ENABLING the writeStrict option for all commands
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/rpc:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/rpc:o active at tcp://192.168.220.201:10091/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/command:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/command:o active at tcp://192.168.220.201:10092/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/stateExt:i| Port /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/stateExt:i active at tcp://192.168.220.201:10093/
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/rpc:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/rpc:o to /ergocubSim/left_arm/rpc:i using tcp
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/command:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/command:o to /ergocubSim/left_arm/command:i using udp
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/stateExt:i| Receiving input from /ergocubSim/left_arm/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/stateExt:i using udp
[INFO] |yarp.dev.PolyDriver|remote_controlboard| Created device <remote_controlboard>. See C++ class RemoteControlBoard for documentation.
[DEBUG] |yarp.dev.PolyDriver|remote_controlboard| Parameters are (device remote_controlboard) (local "/walking-coordinator/remoteControlBoard/ergocubSim/right_arm") (remote "/ergocubSim/right_arm") (writeStrict on)
[INFO] |yarp.device.remote_controlboard| RemoteControlBoard is ENABLING the writeStrict option for all commands
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/rpc:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/rpc:o active at tcp://192.168.220.201:10094/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/command:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/command:o active at tcp://192.168.220.201:10095/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/stateExt:i| Port /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/stateExt:i active at tcp://192.168.220.201:10096/
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/rpc:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/rpc:o to /ergocubSim/right_arm/rpc:i using tcp
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/command:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/command:o to /ergocubSim/right_arm/command:i using udp
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/stateExt:i| Receiving input from /ergocubSim/right_arm/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/stateExt:i using udp
[INFO] |yarp.dev.PolyDriver|remote_controlboard| Created device <remote_controlboard>. See C++ class RemoteControlBoard for documentation.
[DEBUG] |yarp.dev.PolyDriver|remote_controlboard| Parameters are (device remote_controlboard) (local "/walking-coordinator/remoteControlBoard/ergocubSim/left_leg") (remote "/ergocubSim/left_leg") (writeStrict on)
[INFO] |yarp.device.remote_controlboard| RemoteControlBoard is ENABLING the writeStrict option for all commands
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/rpc:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/rpc:o active at tcp://192.168.220.201:10097/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/command:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/command:o active at tcp://192.168.220.201:10098/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/stateExt:i| Port /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/stateExt:i active at tcp://192.168.220.201:10099/
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/rpc:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/rpc:o to /ergocubSim/left_leg/rpc:i using tcp
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/command:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/command:o to /ergocubSim/left_leg/command:i using udp
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/stateExt:i| Receiving input from /ergocubSim/left_leg/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/stateExt:i using udp
[INFO] |yarp.dev.PolyDriver|remote_controlboard| Created device <remote_controlboard>. See C++ class RemoteControlBoard for documentation.
[DEBUG] |yarp.dev.PolyDriver|remote_controlboard| Parameters are (device remote_controlboard) (local "/walking-coordinator/remoteControlBoard/ergocubSim/right_leg") (remote "/ergocubSim/right_leg") (writeStrict on)
[INFO] |yarp.device.remote_controlboard| RemoteControlBoard is ENABLING the writeStrict option for all commands
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/rpc:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/rpc:o active at tcp://192.168.220.201:10100/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/command:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/command:o active at tcp://192.168.220.201:10101/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/stateExt:i| Port /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/stateExt:i active at tcp://192.168.220.201:10102/
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/rpc:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/rpc:o to /ergocubSim/right_leg/rpc:i using tcp
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/command:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/command:o to /ergocubSim/right_leg/command:i using udp
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/stateExt:i| Receiving input from /ergocubSim/right_leg/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/stateExt:i using udp
[INFO] |yarp.dev.PolyDriver|remote_controlboard| Created device <remote_controlboard>. See C++ class RemoteControlBoard for documentation.
[INFO] |yarp.dev.PolyDriver|remotecontrolboardremapper| Created device <remotecontrolboardremapper>. See C++ class RemoteControlBoardRemapper for documentation.
[ERROR] [configure] Unable to read encoders.
[ERROR] [WalkingModule::configure] Unable to configure the robot.
[INFO] |yarp.os.RFModule| RFModule failed to open.
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/torso/rpc:o| Removing output from /walking-coordinator/remoteControlBoard/ergocubSim/torso/rpc:o to /ergocubSim/torso/rpc:i
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/torso/command:o| output for route /walking-coordinator/remoteControlBoard/ergocubSim/torso/command:o->udp->/ergocubSim/torso/command:i asking other side to close by out-of-band means
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/torso/command:o| Removing output from /walking-coordinator/remoteControlBoard/ergocubSim/torso/command:o to /ergocubSim/torso/command:i
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/torso/stateExt:i| Removing input from /ergocubSim/torso/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/torso/stateExt:i
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/rpc:o| Removing output from /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/rpc:o to /ergocubSim/left_arm/rpc:i
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/command:o| output for route /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/command:o->udp->/ergocubSim/left_arm/command:i asking other side to close by out-of-band means
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/command:o| Removing output from /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/command:o to /ergocubSim/left_arm/command:i
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/stateExt:i| Removing input from /ergocubSim/left_arm/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/stateExt:i
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/rpc:o| Removing output from /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/rpc:o to /ergocubSim/right_arm/rpc:i
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/command:o| output for route /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/command:o->udp->/ergocubSim/right_arm/command:i asking other side to close by out-of-band means
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/command:o| Removing output from /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/command:o to /ergocubSim/right_arm/command:i
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/stateExt:i| Removing input from /ergocubSim/right_arm/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/stateExt:i
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/rpc:o| Removing output from /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/rpc:o to /ergocubSim/left_leg/rpc:i
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/command:o| output for route /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/command:o->udp->/ergocubSim/left_leg/command:i asking other side to close by out-of-band means
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/command:o| Removing output from /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/command:o to /ergocubSim/left_leg/command:i
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/stateExt:i| Removing input from /ergocubSim/left_leg/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/stateExt:i
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/rpc:o| Removing output from /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/rpc:o to /ergocubSim/right_leg/rpc:i
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/command:o| output for route /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/command:o->udp->/ergocubSim/right_leg/command:i asking other side to close by out-of-band means
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/command:o| Removing output from /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/command:o to /ergocubSim/right_leg/command:i
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/stateExt:i| Removing input from /ergocubSim/right_leg/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/stateExt:i
[WARNING] |yarp.os.NetworkClock| Destroying network clock
[INFO] |yarp.os.Network| Success: port-to-port persistent connection added.
[INFO] |yarp.os.impl.PortCoreInputUnit|/IITICUBLAP218/WalkingModule/101245/clock:i| Removing input from /clock to /IITICUBLAP218/WalkingModule/101245/clock:i
The error is raised from https://github.com/robotology/walking-controllers/blob/v0.8.0/src/RobotInterface/src/Helper.cpp#L391-L401 and it is due to the fact that the getEncoderSpeeds
method is not yet implemented in the controlboard plugin.
After #123 was merged the WalkingModule
started by invoking it just by launching WalkingModule
in a terminal.
It produced the following logs:
WalkingModule
[DEBUG] |yarp.dev.PolyDriver|remotecontrolboardremapper| Parameters are (REMOTE_CONTROLBOARD_OPTIONS (writeStrict on)) (axesNames (torso_pitch torso_roll torso_yaw l_shoulder_pitch l_shoulder_roll l_shoulder_yaw l_elbow r_shoulder_pitch r_shoulder_roll r_shoulder_yaw r_elbow l_hip_pitch l_hip_roll l_hip_yaw l_knee l_ankle_pitch l_ankle_roll r_hip_pitch r_hip_roll r_hip_yaw r_knee r_ankle_pitch r_ankle_roll)) (device remotecontrolboardremapper) (localPortPrefix "/walking-coordinator/remoteControlBoard") (remoteControlBoards ("/ergocubSim/torso" "/ergocubSim/left_arm" "/ergocubSim/right_arm" "/ergocubSim/left_leg" "/ergocubSim/right_leg"))
[DEBUG] |yarp.dev.PolyDriver|remote_controlboard| Parameters are (device remote_controlboard) (local "/walking-coordinator/remoteControlBoard/ergocubSim/torso") (remote "/ergocubSim/torso") (writeStrict on)
[INFO] |yarp.device.remote_controlboard| RemoteControlBoard is ENABLING the writeStrict option for all commands
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/torso/rpc:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/torso/rpc:o active at tcp://192.168.220.201:10088/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/torso/command:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/torso/command:o active at tcp://192.168.220.201:10089/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/torso/stateExt:i| Port /walking-coordinator/remoteControlBoard/ergocubSim/torso/stateExt:i active at tcp://192.168.220.201:10090/
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/torso/rpc:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/torso/rpc:o to /ergocubSim/torso/rpc:i using tcp
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/torso/command:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/torso/command:o to /ergocubSim/torso/command:i using udp
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/torso/stateExt:i| Receiving input from /ergocubSim/torso/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/torso/stateExt:i using udp
[INFO] |yarp.dev.PolyDriver|remote_controlboard| Created device <remote_controlboard>. See C++ class RemoteControlBoard for documentation.
[DEBUG] |yarp.dev.PolyDriver|remote_controlboard| Parameters are (device remote_controlboard) (local "/walking-coordinator/remoteControlBoard/ergocubSim/left_arm") (remote "/ergocubSim/left_arm") (writeStrict on)
[INFO] |yarp.device.remote_controlboard| RemoteControlBoard is ENABLING the writeStrict option for all commands
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/rpc:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/rpc:o active at tcp://192.168.220.201:10091/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/command:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/command:o active at tcp://192.168.220.201:10092/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/stateExt:i| Port /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/stateExt:i active at tcp://192.168.220.201:10093/
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/rpc:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/rpc:o to /ergocubSim/left_arm/rpc:i using tcp
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/command:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/command:o to /ergocubSim/left_arm/command:i using udp
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_arm/stateExt:i| Receiving input from /ergocubSim/left_arm/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/left_arm/stateExt:i using udp
[INFO] |yarp.dev.PolyDriver|remote_controlboard| Created device <remote_controlboard>. See C++ class RemoteControlBoard for documentation.
[DEBUG] |yarp.dev.PolyDriver|remote_controlboard| Parameters are (device remote_controlboard) (local "/walking-coordinator/remoteControlBoard/ergocubSim/right_arm") (remote "/ergocubSim/right_arm") (writeStrict on)
[INFO] |yarp.device.remote_controlboard| RemoteControlBoard is ENABLING the writeStrict option for all commands
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/rpc:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/rpc:o active at tcp://192.168.220.201:10094/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/command:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/command:o active at tcp://192.168.220.201:10095/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/stateExt:i| Port /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/stateExt:i active at tcp://192.168.220.201:10096/
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/rpc:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/rpc:o to /ergocubSim/right_arm/rpc:i using tcp
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/command:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/command:o to /ergocubSim/right_arm/command:i using udp
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_arm/stateExt:i| Receiving input from /ergocubSim/right_arm/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/right_arm/stateExt:i using udp
[INFO] |yarp.dev.PolyDriver|remote_controlboard| Created device <remote_controlboard>. See C++ class RemoteControlBoard for documentation.
[DEBUG] |yarp.dev.PolyDriver|remote_controlboard| Parameters are (device remote_controlboard) (local "/walking-coordinator/remoteControlBoard/ergocubSim/left_leg") (remote "/ergocubSim/left_leg") (writeStrict on)
[INFO] |yarp.device.remote_controlboard| RemoteControlBoard is ENABLING the writeStrict option for all commands
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/rpc:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/rpc:o active at tcp://192.168.220.201:10097/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/command:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/command:o active at tcp://192.168.220.201:10098/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/stateExt:i| Port /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/stateExt:i active at tcp://192.168.220.201:10099/
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/rpc:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/rpc:o to /ergocubSim/left_leg/rpc:i using tcp
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/command:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/command:o to /ergocubSim/left_leg/command:i using udp
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/left_leg/stateExt:i| Receiving input from /ergocubSim/left_leg/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/left_leg/stateExt:i using udp
[INFO] |yarp.dev.PolyDriver|remote_controlboard| Created device <remote_controlboard>. See C++ class RemoteControlBoard for documentation.
[DEBUG] |yarp.dev.PolyDriver|remote_controlboard| Parameters are (device remote_controlboard) (local "/walking-coordinator/remoteControlBoard/ergocubSim/right_leg") (remote "/ergocubSim/right_leg") (writeStrict on)
[INFO] |yarp.device.remote_controlboard| RemoteControlBoard is ENABLING the writeStrict option for all commands
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/rpc:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/rpc:o active at tcp://192.168.220.201:10100/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/command:o| Port /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/command:o active at tcp://192.168.220.201:10101/
[INFO] |yarp.os.Port|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/stateExt:i| Port /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/stateExt:i active at tcp://192.168.220.201:10102/
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/rpc:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/rpc:o to /ergocubSim/right_leg/rpc:i using tcp
[INFO] |yarp.os.impl.PortCoreOutputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/command:o| Sending output from /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/command:o to /ergocubSim/right_leg/command:i using udp
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/remoteControlBoard/ergocubSim/right_leg/stateExt:i| Receiving input from /ergocubSim/right_leg/stateExt:o to /walking-coordinator/remoteControlBoard/ergocubSim/right_leg/stateExt:i using udp
[INFO] |yarp.dev.PolyDriver|remote_controlboard| Created device <remote_controlboard>. See C++ class RemoteControlBoard for documentation.
[INFO] |yarp.dev.PolyDriver|remotecontrolboardremapper| Created device <remotecontrolboardremapper>. See C++ class RemoteControlBoardRemapper for documentation.
[INFO] |yarp.os.Port|/walking-coordinator/left_foot_front/cartesianEndEffectorWrench:i| Port /walking-coordinator/left_foot_front/cartesianEndEffectorWrench:i active at tcp://192.168.220.201:10109/
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/left_foot_front/cartesianEndEffectorWrench:i| Receiving input from /wholeBodyDynamics/left_foot_front/cartesianEndEffectorWrench:o to /walking-coordinator/left_foot_front/cartesianEndEffectorWrench:i using tcp
[INFO] |yarp.os.Port|/walking-coordinator/left_foot_rear/cartesianEndEffectorWrench:i| Port /walking-coordinator/left_foot_rear/cartesianEndEffectorWrench:i active at tcp://192.168.220.201:10110/
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/left_foot_rear/cartesianEndEffectorWrench:i| Receiving input from /wholeBodyDynamics/left_foot_rear/cartesianEndEffectorWrench:o to /walking-coordinator/left_foot_rear/cartesianEndEffectorWrench:i using tcp
[INFO] |yarp.os.Port|/walking-coordinator/right_foot_front/cartesianEndEffectorWrench:i| Port /walking-coordinator/right_foot_front/cartesianEndEffectorWrench:i active at tcp://192.168.220.201:10111/
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/right_foot_front/cartesianEndEffectorWrench:i| Receiving input from /wholeBodyDynamics/right_foot_front/cartesianEndEffectorWrench:o to /walking-coordinator/right_foot_front/cartesianEndEffectorWrench:i using tcp
[INFO] |yarp.os.Port|/walking-coordinator/right_foot_rear/cartesianEndEffectorWrench:i| Port /walking-coordinator/right_foot_rear/cartesianEndEffectorWrench:i active at tcp://192.168.220.201:10112/
[INFO] |yarp.os.impl.PortCoreInputUnit|/walking-coordinator/right_foot_rear/cartesianEndEffectorWrench:i| Receiving input from /wholeBodyDynamics/right_foot_rear/cartesianEndEffectorWrench:o to /walking-coordinator/right_foot_rear/cartesianEndEffectorWrench:i using tcp
[INFO] [WalkingModule::setRobotModel] The model is found in: /home/acroci/ergocub_ws/install/share/ergoCub/robots/ergoCubGazeboV1_1/model.urdf
[INFO] |yarp.os.Port|/walking-coordinator/rpc| Port /walking-coordinator/rpc active at tcp://192.168.220.201:10113/
[INFO] |yarp.os.Port|/walking-coordinator/goal:i| Port /walking-coordinator/goal:i active at tcp://192.168.220.201:10114/
[INFO] |yarp.os.Port|/walking-coordinator/freeSpaceEllipse:in| Port /walking-coordinator/freeSpaceEllipse:in active at tcp://192.168.220.201:10115/
[2024-03-18 13:10:25.435] [thread: 227422] [blf] [info] [QPInverseKinematics::initialize] 'verbosity' not found. The following parameter will be used 'false'.
[2024-03-18 13:10:25.435] [thread: 227422] [blf] [info] [SE3Task::initialize] [IK-SE3Task - Frame name: r_sole] Unable to find the mask parameter. The default value is used: true true true.
[2024-03-18 13:10:25.435] [thread: 227422] [blf] [info] [SE3Task::initialize] [IK-SE3Task - Frame name: r_sole] Unable to find the use_orientation_exogenous_feedback parameter. The default value is used: false.
[2024-03-18 13:10:25.435] [thread: 227422] [blf] [info] [SE3Task::initialize] [IK-SE3Task - Frame name: r_sole] Unable to find the use_position_exogenous_feedback parameter. The default value is used: false.
[2024-03-18 13:10:25.435] [thread: 227422] [blf] [info] [SE3Task::initialize] [IK-SE3Task - Frame name: l_sole] Unable to find the mask parameter. The default value is used: true true true.
[2024-03-18 13:10:25.435] [thread: 227422] [blf] [info] [SE3Task::initialize] [IK-SE3Task - Frame name: l_sole] Unable to find the use_orientation_exogenous_feedback parameter. The default value is used: false.
[2024-03-18 13:10:25.435] [thread: 227422] [blf] [info] [SE3Task::initialize] [IK-SE3Task - Frame name: l_sole] Unable to find the use_position_exogenous_feedback parameter. The default value is used: false.
[2024-03-18 13:10:25.435] [thread: 227422] [blf] [info] [BLFIK::initialize] ====== QPInverseKinematics class ======
The optimization problem is composed by the following tasks:
- root_task: IK-R3Task - Frame name: root_link Mask: false false true. Priority: 0.
- joint_regularization_task: Joint tracking task Priority: 1.
- torso_task: SO3Task Optimal Control Element - Frame name: chest. Priority: 1.
- left_foot_task: IK-SE3Task - Frame name: l_sole Mask: true true true. Use exogenous feedback position: false. Use exogenous feedback orientation: false. Priority: 0.
- right_foot_task: IK-SE3Task - Frame name: r_sole Mask: true true true. Use exogenous feedback position: false. Use exogenous feedback orientation: false. Priority: 0.
- com_task: CoMTask Mask: true true false Priority: 0.
Note: The lower is the integer associated to the priority, the higher is the priority.
==========================
[INFO] Loading custom PIDs
[INFO] Parsing DEFAULT PID group.
[INFO] DEFAULT PID successfully loaded
[INFO] |yarp.os.Port|/walking-coordinator/logger/data:o| Port /walking-coordinator/logger/data:o active at tcp://192.168.220.201:10116/
[INFO] [WalkingModule::configure] Ready to play! Please prepare the robot.
I then tried the last step, giving commands to the walking module with yarp rpc /walking-coordinator/rpc
.
The result to the first command, prepareRobot
was the following:
q desired IK 7.90808 0.0515361 -0.00774795 -3.39176 19.4153 -12.9109 40.5797 -3.39175 19.4128 -12.9106 40.5803 5.43723 0.871996 -0.20733 -34.1722 -20.7114 -0.913073 5.45065 0.902982 -0.217773 -34.2003 -20.7262 -0.912138
[ERROR] [RobotInterface::checkMotionDone] The timer is expired but the joint r_knee has an error of 0.260427 radians
[ERROR] [WalkingModule::updateModule] Unable to check if the motion is done
Then by asking again to prepareRobot
the result was:
[INFO] [WalkingModule::updateModule] Try to prepare again
q desired IK 7.90808 0.0515361 -0.00774795 -3.39176 19.4153 -12.9109 40.5797 -3.39175 19.4128 -12.9106 40.5803 5.43723 0.871996 -0.20733 -34.1722 -20.7114 -0.913073 5.45065 0.902982 -0.217773 -34.2003 -20.7262 -0.912138
[INFO] [WalkingModule::updateModule] rootlink offset 0.0457547 .
[INFO] [WalkingModule::updateModule] The robot is prepared.
Then when I asked for startWalking
I got an error:
[2024-03-18 14:35:52.899] [thread: 242499] [blf] [error] [GlobalCoPEvaluator::advance] Zero contacts are active, the CoP is not valid.
[ERROR] [WalkingModule::computeGlobalCoP] Unable to compute the global CoP.
[ERROR] [WalkingModule::updateModule] Unable to compute the global CoP.
I don't know why the prepareRobot
is not always working, maybe there are some control gains to be adjusted.
While for the startWalking
error I think this is due to https://github.com/robotology/gz-sim-yarp-plugins/issues/122#issuecomment-2002004899
Here's a video of the prepareRobot
action:
I don't know why the
prepareRobot
is not always working, maybe there are some control gains to be adjusted.
It is possible, yes. It checks that the robot is in the desired position considering the settling time we set. See https://github.com/robotology/walking-controllers/blob/edc8984998043c98182f726e17822deb2a7b1915/src/RobotInterface/src/Helper.cpp#L980
I don't know why the
prepareRobot
is not always working, maybe there are some control gains to be adjusted.It is possible, yes. It checks that the robot is in the desired position considering the settling time we set. See https://github.com/robotology/walking-controllers/blob/edc8984998043c98182f726e17822deb2a7b1915/src/RobotInterface/src/Helper.cpp#L980
Clear, thanks!
BTW the method that is failing during the startWalking
phase comes from the blf
method advance
of class GlobalCoPEvaluator
: https://github.com/ami-iit/bipedal-locomotion-framework/blob/1e9cb3f78b122952a5d4af7b020110911d65ab90/src/Contacts/src/GlobalCoPEvaluator.cpp#L86-L178
BTW the method that is failing during the
startWalking
phase comes from theblf
methodadvance
of classGlobalCoPEvaluator
: https://github.com/ami-iit/bipedal-locomotion-framework/blob/1e9cb3f78b122952a5d4af7b020110911d65ab90/src/Contacts/src/GlobalCoPEvaluator.cpp#L86-L178
Yes it means that neither of the two local cop is acceptable, either because the normal component is too small, or because the cop is too far from the foot boundaries
BTW the method that is failing during the
startWalking
phase comes from theblf
methodadvance
of classGlobalCoPEvaluator
: https://github.com/ami-iit/bipedal-locomotion-framework/blob/1e9cb3f78b122952a5d4af7b020110911d65ab90/src/Contacts/src/GlobalCoPEvaluator.cpp#L86-L178
Yes it means that neither of the two local cop is acceptable, either because the normal component is too small, or because the cop is too far from the foot boundaries
I'm getting a curios behavior in my last tests: when preparing the robot it is always returning a Response: [ok]
but it logs the error that [ERROR] [RobotInterface::checkMotionDone] The timer is expired but the joint r_elbow has an error of 0.355696 radians
. and it writes this sometimes for r_elbow
and sometimes for l_elbow
.
By connecting to the robot the yarpmotorgui, I saw that the range of the elbow joints is somehow restricted to the position reached with the prepareRobot
, so maybe the prepare fails because even if it is asking for a certain joint position, the controlboard see the joint having reached its limit.
P.S. is it correct that the return message from the rpc command prepareRobot
is OK even if the action did not succeed?
P.S. is it correct that the return message from the rpc command prepareRobot is OK even if the action did not succeed?
The [ok]
you are seeing is simply an acknowledgment of the fact that the walking has received the command, not that it completed successfully.
By connecting to the robot the yarpmotorgui, I saw that the range of the elbow joints is somehow restricted to the position reached with the
prepareRobot
, so maybe the prepare fails because even if it is asking for a certain joint position, the controlboard see the joint having reached its limit.
This is weird. Is the range bigger before opening the walking?
The
[ok]
you are seeing is simply an acknowledgment of the fact that the walking has received the command, not that it completed successfully.
ah ok got it!
This is weird. Is the range bigger before opening the walking?
No, actually it is the same. I'll try to take a look for bugs in the joint limits given by the control board, maybe some wrong conversion or things like that.
No, actually it is the same. I'll try to take a look for bugs in the joint limits given by the control board, maybe some wrong conversion or things like that.
Bug found 🕵🏻! In practice the controlboard was not handling correctly the joint position limits. #126 Since all the developments of the controlboard plugins have currently been developed and tested on a single pendulum (i.e. single joint) I have to review the code in order to guarantee it works correctly for multiple joint models.
@S-Dafarra could you tell me if there's a way to get more info about the cop error arising from blf?
Like getting the result of the cop computation to understand what is the reason behind the [blf] [error] [GlobalCoPEvaluator::advance] Zero contacts are active, the CoP is not valid.
error
With
yarp read ... /wholeBodyDynamics/right_foot_front/cartesianEndEffectorWrench:o
it is possible to get the 6D wrench of the foot. Now I got a 6D vector of zeros (values under $10^{-10}$):
-2.71864789138483145661e-12 4.49089338582689669406e-15 1.84872575288608347244e-11 8.1555891253485101889e-17 -1.12476848873726913157e-12 -5.38235428355966719317e-16
With
yarp read "..." /ergocubSim/right_leg/FT/measures:o
it is possible to read the measures from the leg FT (leg, foot rear, foot front). I'm getting all zeros:
() () () () () (((0.0 0.0 0.0 0.0 0.0 0.0) 71.3400000000000034106) ((0.0 0.0 0.0 0.0 0.0 0.0) 71.3400000000000034106) ((0.0 0.0 0.0 0.0 0.0 0.0) 71.3400000000000034106)) () () () ()
(the scalar different from zero is the timestamp of the measurement).
Side note: to visualize contacts in Gazebo there's a dedicated plugin called "Visualize contact" that can be added from the search bar on the top right corner of the GUI:
@traversaro @S-Dafarra do you know where I can find the configuration of the physics engine used in Gazebo classic with the walking controllers? Or the defaults provided by Gazebo are used? For example, in Gazebo sim there's the <physics>
element (property of the world element), where all the properties related to physics engine, contacts, etc can be configured.
@traversaro @S-Dafarra do you know where I can find the configuration of the physics engine used in Gazebo classic with the walking controllers? Or the defaults provided by Gazebo are used? For example, in Gazebo sim there's the
<physics>
element (property of the world element), where all the properties related to physics engine, contacts, etc can be configured.
I think the walking is typically tested with default Gazebo Classic configuration. However I think @GiulioRomualdi is working on a paper repo with a specific world, I Can share it to you.
With
yarp read ... /wholeBodyDynamics/right_foot_front/cartesianEndEffectorWrench:o
it is possible to get the 6D wrench of the foot. Now I got a 6D vector of zeros (values under 10−10):
-2.71864789138483145661e-12 4.49089338582689669406e-15 1.84872575288608347244e-11 8.1555891253485101889e-17 -1.12476848873726913157e-12 -5.38235428355966719317e-16
With
yarp read "..." /ergocubSim/right_leg/FT/measures:o
it is possible to read the measures from the leg FT (leg, foot rear, foot front). I'm getting all zeros:
() () () () () (((0.0 0.0 0.0 0.0 0.0 0.0) 71.3400000000000034106) ((0.0 0.0 0.0 0.0 0.0 0.0) 71.3400000000000034106) ((0.0 0.0 0.0 0.0 0.0 0.0) 71.3400000000000034106)) () () () ()
(the scalar different from zero is the timestamp of the measurement).
That seems to indicate a problem in the FT sensor plugin. Also all other FT sensors report zero?
Are you sure that you are not using a _fixed model where there is a joint between the world and the model?
Are you sure that you are not using a _fixed model where there is a joint between the world and the model?
In principle there was such fixed joint, but now to try the walking tutorial I commented it out.
That seems to indicate a problem in the FT sensor plugin. Also all other FT sensors report zero?
Yep, all the FTs read zero. I've verified that I didn't introduced regression bugs since the controlboard tutorial on the FT sensor works.
I don't know if it's ok but also listing the gazebo topics I get:
$ gz topic -l
/clock
/gazebo/resource_paths
/gui/camera/pose
/sensors/marker
/stats
/world/turorial_controlboard/clock
/world/turorial_controlboard/dynamic_pose/info
/world/turorial_controlboard/model/ergocub_fixed/model/ergoCub/link/realsense/sensor/realsense_head_rgb/camera_info
/world/turorial_controlboard/model/ergocub_fixed/model/ergoCub/link/realsense/sensor/realsense_head_rgb/image
/world/turorial_controlboard/pose/info
/world/turorial_controlboard/scene/deletion
/world/turorial_controlboard/scene/info
/world/turorial_controlboard/state
/world/turorial_controlboard/stats
/world/turorial_controlboard/light_config
/world/turorial_controlboard/material_color
Yep, all the FTs read zero. I've verified that I didn't introduced regression bugs since the controlboard tutorial on the FT sensor works.
In the tutorial the plugin is placed in the xml before the sensor, in the ergocub SDF after, did you tried to change the order?
In the tutorial the plugin is placed in the xml before the sensor, in the ergocub SDF after, did you tried to change the order?
Just tried, same result. I'll try to see if the wrappers and remappers are responsible
Thank to @traversaro the issue of FTs and IMUs not communicating was solved. This was due to the fact there were some gazebo plugins missing:
<plugin
filename="gz-sim-forcetorque-system"
name="gz::sim::systems::ForceTorque">
</plugin>
<plugin
filename="gz-sim-imu-system"
name="gz::sim::systems::Imu">
</plugin>
Now I can read measurements via yarp read
.
The /wholeBodyDynamics/right_foot_front/cartesianEndEffectorWrench:o
reports:
1.06954221966386464615 47.879756222723536041 131.967328336028657532 -6.80291645844825865197 -4.59942486510437120728 2.04004190919274908111
When trying to do setGoal
to make the robot walk I'm still getting the blf error [blf] [error] [GlobalCoPEvaluator::advance] Zero contacts are active, the CoP is not valid.
and then the WalkingModule
stops.
Thank to @traversaro the issue of FTs and IMUs not communicating was solved. This was due to the fact there were some gazebo plugins missing:
We should at least print an error if that is the case.
http://sdformat.org/spec?ver=1.11&elem=physics
Despite the SDF specifications has the type
attribute for the <physics>
element, Gazebo only supports DART and preliminary support for Bullet.
https://gazebosim.org/docs/harmonic/comparison#physics https://gazebosim.org/api/sim/8/physics.html
Moreover for DART it is possible to choose what collision detector to use among (fcl, dart, ode and bullet): http://sdformat.org/spec?ver=1.11&elem=physics#dart_collision_detector
For these simulations the element <max_contacts> , regulating the max number of contact points between two bodies, has been set to 4. |
collision_detector |
Result |
---|---|---|
fcl (default) | Some steps performed and then fell down. | |
ode | Some steps performed and then fell down. Simulation slower than tcl case. | |
dart | Cannot be used with collision meshes, only with simple shapes. It gives the error: Error [DARTCollide.cpp:1649] [DARTCollisionDetector] Attempting to check for an unsupported shape pair: [MeshShape] - [BoxShape]. Returning false. |
|
bullet | Unstable behavior. It wasn't able to do any steps before getting the blf error for the CoP |
Videos:
FCL
ODE
Bullet
As @S-Dafarra pointed out, the weird behavior for which the prepareRobot
does not work the first time can be due to the clock not being appropriately synchronized. I'm looking into it.
We should at least print an error if that is the case.
Agree, I have to understand how to check if that plugins are available in the world.
You may want to update your libode package version, during the weekend we fixed some critical bugs (see https://github.com/conda-forge/libode-feedstock/pull/22 and https://github.com/conda-forge/libode-feedstock/pull/23).
fcl (default)
I am not sure this is true. If you see https://github.com/gazebosim/gz-sim/blob/gz-sim8/tutorials/physics.md?plain=1#L100, there they report that ode is the default collision detector, and I was expecting that as that is what is tested in gz-physics tests (https://github.com/gazebosim/gz-physics/blob/7d30e47fb61fe4db9cba460717a3910df9deabee/dartsim/src/WorldFeatures_TEST.cc#L87). Probably sdformat reports the default in Gazebo Classic, while the default in gz-sim/gz-physics is different.
Can you open an issue in https://github.com/gazebosim/gz-sim to report the issue? Thanks!
(By the way, can you enable visualization of contacts in this videos?) Thanks!
This issue will track all the technical details concerning #94.
Using walking-controllers release v0.8.0 (latest): https://github.com/robotology/walking-controllers/releases/tag/v0.8.0