0
$\begingroup$

Rosanswers logo

Hello!

I want to give values to a topic with this type of mesage (rosgraph_msgs/Clock)

I create a variable called "reloj" for example:

rosgraph_msgs::Clock reloj;

How do I give a value to that variable?, because it has two parts (secs and nsecs)

For example in float64 I give it the value this way

std_msgs::Float64 variable;

variable.data = 0;

I would like to do the same but in rosgraph_msgs/Clock, one value for "secs" and one for "nsecs"

I tried: reloj.clock.secs = 1; reloj.clock.nsecs = 100;

reloj.clock_secs = 1; reloj.clock_nsecs = 100;

But this does not work

I found that putting the following does work

reloj.clock = {5,88};

but when creating the node executable, I get this warning:

warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 reloj.clock = {5,88};

I use ROS kinetic and roscpp (c++)

this is the code in c++

#include "ros/ros.h"
#include "rosgraph_msgs/Clock.h"
rosgraph_msgs::Clock reloj;
int main(int argc, char **argv)
{
ros::init(argc, argv, "pubsubclock");
ros::NodeHandle n;
ros::Publisher publicador;
publicador  = n.advertise<rosgraph_msgs::Clock>("topico_pub", 1000);
reloj.clock = {5,88};
ros::Rate loop_rate(10);
while (ros::ok()) {
publicador.publish(reloj);
ros::spinOnce();
loop_rate.sleep();
}  
return 0;
}

thank you very much


Originally posted by manupe94 on ROS Answers with karma: 1 on 2017-04-24

Post score: 0


Original comments

Comment by gvdhoorn on 2017-04-24:\

But this does not work

that doesn't tell us very much. Please explain what you found that "does not work". Include any error messages that you get.

Please use the edit button/link to update your original question.

Comment by manupe94 on 2017-04-24:
I updated the message

Comment by Geoff on 2017-04-24:
The syntax reloj.clock = {5,88}; is a form of constructor calling that is new in C++11. You cannot use it without telling the compiler to compile in C++11 mode.

$\endgroup$

1 Answer 1

0
$\begingroup$

Rosanswers logo

The rosgraph_msgs::Clock message definition field clock has the msg data type time. In C++ this maps to the ros::Time class. You need to use that class to work with it. For example:

reloj.clock = ros::Time(1, 100);

Originally posted by Geoff with karma: 4203 on 2017-04-24

This answer was ACCEPTED on the original site

Post score: 0


Original comments

Comment by Craigstar on 2020-03-27:
I'm attempting to do something similar from Python, and managed to determine that rosgraph_msgs/Clock was using the field clock of type time. But trying to jam a Time into a type rosgraph_msgs/Clock does not appear to work.

Comment by Craigstar on 2020-03-27:
code sample follows...

import rospy
from std_msgs.msg import Time
from rosgraph_msgs.msg import Clock

def simtime_talker():
    pub = rospy.Publisher('timey',Time, queue_size=10)
    pub1 = rospy.Publisher('clockey',Clock, queue_size=10)
    rospy.init_node('talker', anonymous=True)
    rate = rospy.Rate(10) # 10hz
    sim_speed_multiplier = 10
    
    zero_time = rospy.get_time()
    
    while not rospy.is_shutdown():
        
        timepassed_dat = rospy.get_time() - zero_time
        timepassedaccelerated_dat = sim_speed_multiplier*timepassed_dat
        time_dat = rospy.Time.from_sec(timepassedaccelerated_dat)
        
        pub.publish(rospy.get_time())
        pub1.publish(time_dat)
        rate.sleep(
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.