Запустите узел ROS с определенным IP - PullRequest
1 голос
/ 24 июня 2019

Я публиковал сообщения для симулируемого Bebop2, запускающего узел с помощью этой команды roslaunch bebop_driver bebop_node.launch ip:=10.202.0.1.Я пытаюсь написать скрипт Python, чтобы сделать то же самое, используя этот rospy.init_node("bebop_driver" ), но я не могу найти способ указать ip.

Это команды, которые я использую для запуска симуляции.

sphinx /opt/parrot-sphinx/usr/share/sphinx/drones/bebop2.drone

roslaunch bebop_driver bebop_node.launch ip:=10.202.0.1

Как только дрон успешно смоделирован, я использую эту команду для взлета

rostopic pub --once bebop/takeoff std_msgs/Empty

Вот мой bebop_node.launch

<?xml version="1.0"?>
<launch>
   <arg name="namespace" default="bebop" />
   <arg name="ip" default="10.202.0.1" />
   <arg name="drone_type" default="bebop2" /> <!-- available drone types: bebop1, bebop2 -->
   <arg name="config_file" default="$(find bebop_driver)/config/defaults.yaml" />
   <arg name="camera_info_url" default="package://bebop_driver/data/$(arg drone_type)_camera_calib.yaml" />
       <node pkg="bebop_driver" name="bebop_driver" type="bebop_driver_node" output="screen">
           <param name="camera_info_url" value="$(arg camera_info_url)" />
           <param name="bebop_ip" value="$(arg ip)" />
           <rosparam command="load" file="$(arg config_file)" />
       </node>
       <include file="$(find bebop_description)/launch/description.launch" />

</launch>

Это тот питон, который я пытаюсь использовать для перемещения дрона, публикуя сообщения в теме cmd_vel .


#!/usr/bin/env python

import roslib;roslib.load_manifest('bebop_driver')

import rospy

from geometry_msgs.msg import Twist

import sys

speed = float(sys.argv[1])
time = float(sys.argv[2])

print ("Adelante")

if speed != "" and speed > 0 : 

   print ("Velocidad =" , speed , "m/s")

else:

   print ("Falta parametro de velocidad o el valor es incorrecto")

if time != "" and time > 0 :

   print ("Tiempo = ",time, "s")

else:

   print ("Falta parametro de tiempo o el valor es incorrecto")

if time != "" and time > 0 : 

  print ("Publishing")

  pub = rospy.Publisher('cmd_vel', Twist, queue_size=10)

  rospy.init_node("bebop_commander" )


  twist = Twist()
  twist.linear.x = speed; twist.linear.y = 0; twist.linear.z = 0;                      
  twist.angular.x = 0;  twist.angular.y = 0;  twist.angular.z = 0; 

  pub.publish(twist)


rospy.spin()

1 Ответ

1 голос
/ 24 июня 2019

Добавляя ip:=10.202.0.1 к вашей команде, вы устанавливаете аргумент файла запуска. Проверка вызываемого файла запуска показывает

<param name="bebop_ip" value="$(arg ip)" />

, что означает, что аргумент используется для установки параметра bebop_ip. Это также может быть достигнуто в Python, например:

rospy.set_param('bebop_ip', '10.202.0.1')

Документацию можно найти на ROS wiki . Обратите внимание, что установка параметров также может быть выполнена в C ++ или в командной строке .

Обновление:

Поскольку вы пытаетесь командовать работающим драйвером, вам следует изменить имя вашего commander , поскольку два узла с одинаковым именем невозможны:

rospy.init_node("bebop_commander")

Также вам нужно добавить имя драйвера к параметрам и темам, таким как

rospy.set_param('/bebop_driver/bebop_ip', '10.202.0.1')

и

pub = rospy.Publisher('/bebop_driver/cmd_vel', Twist, queue_size=10)

для правильной адресации работающего драйвера.

...