ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

Unable to create service server.

asked 2020-09-17 06:33:12 -0500

Kartik4 gravatar image

updated 2020-09-18 05:40:05 -0500

Delb gravatar image

I am trying to create a service server to send accross my motor feedback values to ros from my arduino. I have managed to properly create my custom .srv

float32 req
---
float32 res

and have created header files as well.

My arduino code (in the end) is compiling but when I try to run the command:

ros-k@ros-k:~$ rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0

I get the following error-

[INFO] [1600340685.043020]: ROS Serial Python Node 
[INFO] [1600340685.047880]: Connecting to /dev/ttyACM0 at 57600 baud
[INFO] [1600340687.152757]: Requesting topics...
[INFO] [1600340687.173950]: Note: publish buffer size is 512 bytes
[ERROR] [1600340687.175228]: Creation of service server failed: need more than 1 value to unpack
[INFO] [1600340687.192597]: Note: subscribe buffer size is 512 bytes<br>
[INFO] [1600340687.194203]: Setup subscriber on /joints_to_aurdino [std_msgs/Float64]
[ERROR] [1600340687.202371]: Creation of service server failed: need more than 1 value to unpack

Arduino Code

#include <ros.h>
//#include <rospy_tutorials/Floats.h>
#include <Servo.h> 
#include <one_servo/Floats_1.h>
#include <std_msgs/Float64.h>


ros::NodeHandle  nh;
using one_servo::Floats_1;
int cur_pos=0;


Servo servo1;
float readservo1=0;


void rotate_servo(int servo,int new_pos,int cur_pos,int dir)
{
  int pos = 0;

  if (servo==0)
  {
    if (new_pos<5)
      new_pos=5;
    if (dir == 1)
    {
      for(pos=cur_pos;pos<= new_pos;pos += 1)
      {
        servo1.write(pos);
        delay(10);
      }      
    }
    else if(dir == -1)
    {
  for(pos=cur_pos;pos>= new_pos;pos -= 1)

      {
        servo1.write(pos);
            delay(10);
      }      
    }
  }}


void servo_cb( const std_msgs::Float64& msg){
 nh.loginfo("Command Received");

  int new_pos = msg.data;


     if (new_pos>cur_pos)
    {
      rotate_servo(0,(int)new_pos,(int)cur_pos,1);
      cur_pos=new_pos;

    }
    else if(new_pos<cur_pos)
    {
      rotate_servo(0,(int)new_pos,(int)cur_pos,-1);
      cur_pos=new_pos;
    }

  }


void callback(const Floats_1::Request & req, Floats_1::Response & res)
{
  // Simulate function running for a non-deterministic amount of time



  readservo1=analogRead(A0);
   res.res=(readservo1-100) * (180.0/325.0);

  return;

}

ros::Subscriber<std_msgs::Float64> sub("/joints_to_aurdino", servo_cb);
ros::ServiceServer<one_servo::Floats_1::Request, one_servo::Floats_1::Response> server("/read_joint_state",&callback);

void setup() {
  nh.initNode();
  nh.subscribe(sub);
  nh.advertiseService(server);
  servo1.attach(6);
  servo1.write(0);
  //Serial.begin(9600);
}

void loop() {
nh.spinOnce();

//readservo1=analogRead(A0);
//Serial.println(readservo1);
}
edit retag flag offensive close merge delete

Comments

What is the error?

JackB gravatar image JackB  ( 2020-09-17 10:08:13 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted
0

answered 2020-09-17 10:45:53 -0500

Kartik4 gravatar image
[INFO] [1600340685.043020]: ROS Serial Python Node
[INFO] [1600340685.047880]: Connecting to /dev/ttyACM0 at 57600 baud
[INFO] [1600340687.152757]: Requesting topics...
[INFO] [1600340687.173950]: Note: publish buffer size is 512 bytes
[ERROR] [1600340687.175228]: Creation of service server failed: need more than 1 value to unpack
[INFO] [1600340687.192597]: Note: subscribe buffer size is 512 bytes
[INFO] [1600340687.194203]: Setup subscriber on /joints_to_aurdino [std_msgs/Float64]
[ERROR] [1600340687.202371]: Creation of service server failed: need more than 1 value to unpack
edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2020-09-17 06:33:12 -0500

Seen: 257 times

Last updated: Sep 18 '20