Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problems in controlling Pepper with ros-melodic #7

Open
souljaboy764 opened this issue Jul 10, 2020 · 0 comments
Open

Problems in controlling Pepper with ros-melodic #7

souljaboy764 opened this issue Jul 10, 2020 · 0 comments

Comments

@souljaboy764
Copy link

souljaboy764 commented Jul 10, 2020

I had initially posted this issue under pepper_dcm_robot (ros-naoqi/pepper_dcm_robot#6) but found that the issue was due to the naoqi_dcm_driver package so I'm posting the problem and one workaround that worked for me here.

ISSUE

I am trying to control Pepper from ubuntu 18.04 with ros-melodic. Since all packages weren't available with sudo apt install, installed whatever was available
sudo apt install ros-melodic-naoqi-bridge-msgs ros-melodic-naoqi-libqi ros-melodic-naoqi-driver ros-melodic-naoqi-libqicore
sudo apt install ros-melodic-pepper-meshes

I have cloned the rest of the packages into my catkin_ws

neo@zion:~$ ls catkin_ws/src/pepper_*
catkin_ws/src/pepper_dcm_robot:
pepper_dcm_bringup  README.rst

catkin_ws/src/pepper_moveit_config:
CHANGELOG.rst  CMakeLists.txt  config  launch  package.xml  README.rst  test  tuto

catkin_ws/src/pepper_robot:
pepper_bringup  pepper_description  pepper_robot  pepper_sensors_py

catkin_ws/src/pepper_virtual:
pepper_control  pepper_gazebo_plugin  README.md

neo@zion:~$ ls catkin_ws/src/naoqi_*
catkin_ws/src/naoqi_bridge:
LICENSE.txt  naoqi_bridge     naoqi_navigation  naoqi_sensors_py  README.md
naoqi_apps   naoqi_driver_py  naoqi_pose        naoqi_tools       tracks.yaml

catkin_ws/src/naoqi_dcm_driver:
CHANGELOG.rst  CMakeLists.txt  include  package.xml  README.rst  src

and installed whatever dependencies using

neo@zion:~/catkin_ws$ rosdep install --from-paths src --ignore-src -r -y

After source catkin_ws/devel/setp.bash I run the following in different terminals one after the other

To start up the robot:

neo@zion:~$ roslaunch pepper_dcm_bringup pepper_bringup.launch robot_ip:=192.168.100.186 network_interface:=enp7s0 

The output of this can be seen here: https://pastebin.com/3VenKwum

Once the robot has started up, I run:

neo@zion:~$ roslaunch naoqi_driver naoqi_driver.launch nao_ip:=192.168.100.186 network_interface:=enp7s0

Using this, I am able to see the images and pointcloud from the robot and also visualize the robot's pose accurately in rviz when I passively move the hands. The output of this command can be seen here: https://pastebin.com/n9S5vN5t

And finally, I run moveit using:

neo@zion:~$ roslaunch pepper_moveit_config moveit_planner.launch 

The output of this can be seen here: https://pastebin.com/utPV5yZY

I use the moveit interface to generate a random valid goal configuration (shown in orange) from the MotionPlanning interface and then I first plan it (as seen in the trail).
image

When I click on execute, nothing happens with the robot even though the following messages are displayed in the terminal

[ INFO] [1594216249.619841838]: Execution request received
[ INFO] [1594216253.127858948]: Controller pepper_dcm/RightArm_controller successfully finished
[ INFO] [1594216253.334119901]: Completed trajectory execution with status SUCCEEDED ...
[ INFO] [1594216253.334365776]: Execution completed: SUCCEEDED

There is nothing that gets printed in the terminal where pepper_dcm_bringup is running.

I try to publish the joint trajectories manually first using the topic /pepper_dcm/RightArm_controller/follow_joint_trajectory/goal which does not give any movement on the robot either.
I then try to publish the joint trajectories on the topic /pepper_dcm/RightArm_controller/command which does not give any movement on the robot as well.
There is nothing that gets printed in the terminal where pepper_dcm_bringup is running, even when manually publishing the trajectories on the topics.

I have tried this out with two different pepper robots and it does not work in either case.

The same commands when executed on a VM running ubuntu 16.04 with ros-kinetic seem to work with both robots moving to the specified location in the moveit interface.

WORKAROUND

While going through the motion.cpp file, I saw that only in the function writeJoints, the inputs were converted to qi::AnyValue before using it as an argument from motion_proxy_ as shown below.

void Motion::writeJoints(const std::vector <double> &joint_commands)
{
//prepare the list of joints
qi::AnyValue names_qi = fromStringVectorToAnyValue(joints_names_);
//prepare the list of joint angles
qi::AnyValue angles_qi = fromDoubleVectorToAnyValue(joint_commands);
try
{
motion_proxy_.async<void>("setAngles", names_qi, angles_qi, 0.2f);
}
catch(const std::exception& e)
{
ROS_ERROR("Motion: Failed to set joints nagles! \n\tTrace: %s", e.what());
}
}

In all the other functions, the input is being sent as is. So when I modify this to send the input directly as a std::vector it works for me. My function now looks like this:

void Motion::writeJoints(const std::vector <double> &joint_commands)
{
  try
  {
    motion_proxy_.async<void>("setAngles", joints_names_, joint_commands, 0.2f);
  }
  catch(const std::exception& e)
  {
    ROS_ERROR("Motion: Failed to set joints nagles! \n\tTrace: %s", e.what());
  }
}

With this, the commands from moveit are being executed on pepper.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant