ROS связь с ПК на RaspberryPi - PullRequest
1 голос
/ 23 марта 2019

У меня проблема со связью с ПК на 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

Ответы [ 2 ]

1 голос
/ 24 марта 2019

Итак, после глубокого понимания моей проблемы и сбора знаний о сети / конфигурации linux я понял, что проблема заключается в настройке брандмауэра моего ПК / Linux, а именно в блокировании доступа.

По сути, iptablesэто брандмауэр по умолчанию в Linux.Я очистил правила iptables на своем компьютере, выполнив следующие команды

# iptables -F
# iptables -X
# iptables -t nat -F
# iptables -t nat -X
# iptables -t mangle -F
# iptables -t mangle -X

И это работает!: D

Источник: https://www.cyberciti.biz/tips/no-route-to-host-error-and-solution.html

0 голосов
/ 24 марта 2019

Проблема связана с конфигурацией вашей основной сети ROS для ROS.

Поскольку вы можете пропинговать мастер, но подписчик не может подписаться на тему, это показывает, что, вероятно, главный компьютер (в вашем случаеRaspberryPi) не принимает удаленные соединения, а только локальные.Чтобы проверить эту гипотезу, попробуйте запустить как издателя, так и подписчика на вашем RaspberryPi, вы должны получить желаемый результат.Если это так, тогда настройте следующее на главном сервере ROS:

export ROS_IP=0.0.0.0

Это для прослушивания любого интерфейса.

Попробуйте, если это решит проблему, в противном случае попробуйте следующее:

Добавьте следующее на ваш компьютер /etc/hosts

192.168.1.81 PUT_HOSTNAME_OF_RASPBERRYPI_HERE
...