Ros server client communication using rosbridge
Hello, I am trying to do communication between client and server using rosbridge
server: I am sending normal string here.
from __future__ import print_function
import roslibpy
from std_msgs.msg import String
ros1 = roslibpy.Ros(host='localhost', port=9090)
ros1.connect()
prime = 'Hello'
msg = roslibpy.Message(values = {"prime_no":prime})
topic1 = roslibpy.Topic(ros1, 'prime1', String, queue_size=1)
topic1.publish(msg)
topic1.advertise()
topic1.is_advertised
ros1.run_forever()
For client:
from __future__ import print_function
import roslibpy
import json
from std_msgs.msg import String
def callback(data):
print (data.data)
ros = roslibpy.Ros(host='localhost', port=9090)
ros.connect()
topic1 = roslibpy.Topic(ros, 'prime1', String, queue_size=1)
topic1.subscribe(callback)
ros.run_forever()
I am getting error as- "No handlers could be found for logger "roslibpy"" for both client and server. On rosbridge as - [ERROR] [1540049844.335207]: [Client 0] [id: publish:prime1:2] publish: Cannot infer topic type for topic prime1 as it is not yet advertised.
How to resolve this?
Asked by Anuja_Rane on 2018-10-20 11:11:33 UTC
Answers
Hi.
I am a newbie in ROS too. Currently, i am doing a project where laptop as master, raspberry and arduino on mobile robot as sleeves.
For your information, i do not use rosbridge for them to communicate in a localhost environment, what I did is as this tutorial. I believe it is easier than rosbridge. That's why I provide this suggestion.
It enables you to publish and subscribe topic among machines that setup in localhost env. So far, it i working fine for me. Below shows the steps required to set this up. Hopefully, it is useful for you.
Step
1) After connected to localhost,at master, export ROS_MASTER_URI with master's ifconfig address along with 11311 port.
2) roscore
3) may start some nodes at master (Optional)
4) SSH to slave, export ROS_MASTER_URI with master's ifconfig address along with 11311 port (After the slave connected to the localhost).
5) export ROS_HOSTNAME Slave's IP addr
6) export ROS_IP Slave's IP addr Slave's IP addr will be used for both ROS_HOSTNAME and ROS_IP
7) SSH to slave and you may start some nodes at slave by using rosrun or roslaunch
Usage:
All nodes connected to the Master may access all the data. By using ssh from workspace (Ex. ssh 192.168.1.17), we may control other machines such as initialize nodes.
I apologize if my explanation is very complicated. feel free to seek for help ;)
Asked by KinWah on 2018-10-20 22:06:06 UTC
Comments
Just a note: in publish-subscribe there are no clients nor servers. There are only peers or participants.
Asked by gvdhoorn on 2018-10-21 05:54:05 UTC