У меня проблема со связью с ПК на RaspberryPi с использованием ROS, поскольку я не могу отправлять сообщения с ПК на Rasp, но наоборот работает.Я не понимаю, в чем проблема.
Я запускаю ros-kinetic на моем ПК и RaspberryPi и внедрил пакеты ros_pub и ros_sub на обеих машинах.Я хотел опубликовать тему сообщения датчика с помощью пакета ros_pub на ПК и подписать эту тему сообщения датчика с помощью пакета ros_sub на RaspberryPi.
Главный URI работает на RaspberryPi.
publisher.py
#!/usr/bin/python
import rospy
from std_msgs.msg import String
from ros_msgs.msg import SensorInformation
def publisher():
rospy.init_node('publisher')
pub = rospy.Publisher('message_topic', SensorInformation, queue_size=1)
rate = rospy.Rate(1)
sensor = SensorInformation()
sensor.data.header.stamp = rospy.Time.now()
sensor.data.header.frame_id = "Ultrasonic Sensor Frame"
sensor.data.radiation_type=sensor.data.ULTRASOUND
#sensor.data.field_of_view = 0.5
sensor.data.range = 23.10
#sensor.data.min_range = 0.002
#sensor.data.max_range= 2.00
#sensor.part_number = 14320
#sensor.manufacturer_name= "Sri"
while not rospy.is_shutdown():
pub.publish(sensor)
rate.sleep()
if __name__ == '__main__':
try:
publisher()
except rospy.ROSInterruptException:
pass
subscriber.py
#!/usr/bin/python
import rospy
from std_msgs.msg import String
from ros_msgs.msg import SensorInformation
def subCallback(data):
rospy.loginfo(data.data.range)
def subscriber():
rospy.init_node('subscriber')
rospy.Subscriber('message_topic', SensorInformation, subCallback)
rospy.spin()
if __name__ == '__main__':
try:
subscriber()
except rospy.ROSInterruptException:
pass
SensorInformation.msg
sensor_msgs/Range data
string manufacturer_name
uint32 part_number
.bashrc ПК
export ROS_MASTER_URI=http://192.168.1.81:11311/
export ROS_HOSTNAME=192.168.1.102
export ROS_IP=192.168.1.102
.bashrc
* 1020 RaspPi*
когда я запустил rosrun ros_pub publisher.py на ПК и проверил rostopic echo / message_topic, публикуется ли тема на той же машине.Он публикует сообщение с некоторыми данными
и запускает rosrun ros_sub subscriber.py на RaspberryPi, я не смог получить данные сообщения и протестировал rostopic echo / message_topic, если я смог увидеть какие-либо данные сообщения, и данных нет.
Вот результат, когда я запускаю rosnode info / publisher
rosnode info /publisher
--------------------------------------------------------------------------------
Node [/publisher]
Publications:
* /message_topic [std_msgs/String]
* /rosout [rosgraph_msgs/Log]
Subscriptions: None
Services:
* /publisher/get_loggers
* /publisher/set_logger_level
contacting node http://192.168.1.102:44631/ ...
ERROR: Communication with node[http://192.168.1.102:44631/] failed!
Однако, наоборот, то есть, издатель как RaspberryPi и Subscriber как ПК.
где может быть проблема?и каково решение?
Кроме того, используя rospy_tutorials, я попытался запустить talker.py на ПК и listener.py на RaspberryPi, я не смог получить сообщение на RaspberryPi.
Кроме того,У меня есть основная проблема, которая описана ниже: на ПК
netcat -l 1234
на RaspPi
netcat 192.168.1.102 1234
Это не приводит ни к какому результату, по крайней мере, к ошибке.
I тогдазапустил ниже, которые не дают маршрут к хосту,
netcat -nvz -w 1 192.168.1.102 1234
netcat: connect to 192.168.1.102 port 1234 (tcp) failed: No route to host