标签: rospy

如何在 ROS 中发布/订阅 python“列表列表”作为主题

我是 ROS 和 rospy 的新手,并且不熟悉非简单数据类型作为主题。

我想构建一个ROS节点作为订阅者和发布者:它接收一个主题(两个列表float64),并使用一个my_function返回列表列表的函数(例如)float64,然后将这个列表列表作为主题发布。

为此,我构建了一个节点,如下所示:

from pymongo import MongoClient
from myfile import my_function
import rospy
import numpy as np

pub = None
sub = None

def callback(req):
    client = MongoClient()
    db = client.block
    lon = np.float64(req.b)
    lat = np.float64(req.a)
    point_list = my_function(lon, lat, db)
    pub.publish(point_list)

def calculator():
    global sub, pub
    rospy.init_node('calculator', anonymous=True)
    pub = rospy.Publisher('output_data', list)
    # Listen
    sub = rospy.Subscriber('input_data', list, callback)
    print "Calculation finished. \n"
    ros.spin()

if __name__ == '__main__': …
Run Code Online (Sandbox Code Playgroud)

python publish-subscribe ros rospy

6
推荐指数
2
解决办法
1万
查看次数

导入错误:没有名为“rospy”的模块

我为 Crazyflie 安装了 ROS 包,我想运行一个简单的脚本,但是当我输入时 sudo python3 execute_trajectory.py,它给了我一个没有名为 rospy 的模块的错误。

这是包:https : //github.com/whoenig/crazyflie_ros并且文件在 crazyflie_demo/scripts 中。此外,我正在使用 Ubuntu 16.04 和 ROS Kinect,我尝试在没有 ROS 的情况下运行 Python3 脚本,并且一切正常。

这是我的 CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)
project(crazyflie_demo)

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
  roscpp
)

## System dependencies are found with CMake's conventions
# find_package(Boost REQUIRED COMPONENTS system)


## Uncomment this if the package has …
Run Code Online (Sandbox Code Playgroud)

python python-3.x ros rospy crazyflie

6
推荐指数
2
解决办法
2万
查看次数

ROS 记录器禁用 Python 记录器

我在使用 Python 记录器和 rospy 记录器时遇到问题。一开始,ROS 节点初始化后,Python 记录器就停止记录。我尝试通过向记录器添加流处理程序来解决该问题。现在,它仅记录 ROS 节点是否已初始化。

我在ROS git中读到了有关 rospy 和 python 日志记录冲突的信息,但似乎没有很好的解决方案可以专门使用 python 记录器,并且独立于 ROS 记录器来处理我的代码。

一些模块初始化记录器:

    path = "/some_directory/"
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    logger = logging.getLogger('logger_name')

    # logging file handler for basic log infos
    file_handler_info = logging.FileHandler('{}log.log'.format(path))
    file_handler_info.setFormatter(formatter)
    file_handler_info.setLevel(logging.INFO)
    logger.addHandler(file_handler_info)

    # logging file handler for critical warnings
    file_handler_critical = logging.FileHandler('{}critical.log'.format(path))
    file_handler_critical.setFormatter(formatter)
    file_handler_critical.setLevel(logging.WARNING)
    logger.addHandler(file_handler_critical)

    # logging stream handler for console output
    stream_handler = logging.StreamHandler()
    stream_handler.setFormatter(formatter)
    stream_handler.setLevel(logging.DEBUG)
    logger.addHandler(stream_handler)
Run Code Online (Sandbox Code Playgroud)

启动 ROS 节点的其他模块 …

python logging ros rospy python-logging

6
推荐指数
1
解决办法
1309
查看次数

ROS python错误"清单(格式版本2)不得包含以下标记:run_depend"

我一直在关注"用ROS编程机器人:机器人操作系统的实用介绍"

在本书的"定义新消息"部分中,我们创建了一个新的消息定义

Example 3-3. Complex.msg
float32 real
float32 imaginary
Run Code Online (Sandbox Code Playgroud)

所以我们需要修改package.xml并添加以下行:

<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend> 
Run Code Online (Sandbox Code Playgroud)

但是当我在catkin_ws目录中运行catkin_make时,我收到以下错误

Error(s) in /home/gtkratosman-lap/catkin_ws/src/basic/package.xml:
- The manifest (with format version 2) must not contain the following tags: run_depend
Run Code Online (Sandbox Code Playgroud)

我的版本:

ii  python-rospkg                                         1.1.4-100                                           all          ROS package library
ii  python-rospkg-modules                                 1.1.4-1                                             all          ROS package library
Run Code Online (Sandbox Code Playgroud)

这是完整的package.xml文件

<?xml version="1.0"?>
<package format="2">
  <name>basic</name>
  <version>0.0.0</version>
  <description>The basic package</description>

  <maintainer email="gtkratosman-lap@todo.todo">gtkratosman-
  lap</maintainer>

  <license>TODO</license>

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>rospy</build_depend>


  <run_depend>message_generation</run_depend>
  <run_depend>message_runtime</run_depend>

  <build_export_depend>rospy</build_export_depend>
  <exec_depend>rospy</exec_depend>

  <export>
  </export>
</package>
Run Code Online (Sandbox Code Playgroud)

python ros rospy

5
推荐指数
2
解决办法
4298
查看次数

如何将从 rospy.Subscriber 数据获得的数据提供给变量?

我写了一个示例订阅者。我想将从 rospy.Subscriber 获得的数据提供给另一个变量,以便我稍后可以在程序中使用它进行处理。目前我可以看到订阅者正在运行,因为当我使用 rospy.loginfo() 函数时,我可以看到正在打印的订阅值。虽然我不知道如何将这些数据存储到另一个变量中。我曾尝试使用赋值运算符“=”将其直接分配给变量,但出现错误。

我尝试使用 rospy.loginfo 编写回调函数来打印订阅对象的位置数据。我已经订阅了 JointState 并且它包含头、位置、速度和努力数组。使用 rospy.loginfo 我可以验证订阅者是否正在订阅。但是当我尝试将它直接分配给变量时,出现错误。

我正在显示来自回调函数的日志信息,如下所示

def callback(data):
   rospy.loginfo(data.position)
   global listen
    listen = rospy.Subscriber("joint_states", JointState, 
    callback)
    rospy.spin()
Run Code Online (Sandbox Code Playgroud)

这很好用。但是当我稍微修改代码以分配订阅的值时,我收到以下错误即

   listen1 = rospy.Subscriber("joint_states", JointState, 
   callback=None)
   listen = listen1.position
   #rospy.loginfo(listen)
   print(listen)
   rospy.spin()```

The error is as follows, 
 ```listen = listen1.position
    AttributeError: 'Subscriber' object has no attribute 'position'
Run Code Online (Sandbox Code Playgroud)

编辑:这是我在程序中定义的节点,

    #rospy.loginfo(msg.data)
    global tactile_states
    tactile_states = data.data

def joint_callback(data):
    #rospy.loginfo(data.position)
    global g_joint_states 
    global g_position
    global g_pos1
    g_joint_states = data
    #for i in len(data.position):
        #g_position[i] = data.position[i]
    g_position = data.position …
Run Code Online (Sandbox Code Playgroud)

python ros rospy

5
推荐指数
1
解决办法
6689
查看次数

ModuleNotFoundError:没有名为“rospkg”的模块

我是 ROS 新手,

当我将 rospy 导入脚本文件 example.py 并运行它时遇到问题:它说:

Traceback (most recent call last):
  File "/home/nagarjunv/hk_ws/src/rvo/src/example.py", line 4, in <module>
    import rospy
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/__init__.py", line 49, in <module>
    from .client import spin, myargv, init_node, \
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/client.py", line 52, in <module>
    import roslib
  File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/__init__.py", line 50, in <module>
    from roslib.launcher import load_manifest  # noqa: F401
  File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/launcher.py", line 42, in <module>
    import rospkg
ModuleNotFoundError: No module named 'rospkg'
Run Code Online (Sandbox Code Playgroud)

我将以下内容导入到我的脚本文件中:第 4 行是 rospy

#!/usr/bin/env python3

import sys
import rospy
Run Code Online (Sandbox Code Playgroud)

这是我的 CmakeList: …

python ros rospy cmakelists-options

4
推荐指数
1
解决办法
3万
查看次数

在 Rospy 中更新全局变量

我有问题。我有两个节点,节点 1 和节点 2,其中节点 1 在节点 2 中发送浮点数,节点 2 在节点 1 中发送浮点数。在函数回调中,我想将收到的信息与其他值相加并更新变量。但问题是我没有成功发送信息,因为终端只在输出中打印第一次更新(对于节点 1 我得到 2.9,节点 2 2.0)这些节点1和节点2的代码

Node1
    !/usr/bin/env python
    import rospy
    import time
    from std_msgs.msg import Float64 
    global x1
    global a 
    x1 = 1.5
    def callback(msg):
        #print 'Sto ricevendo informazioni da %s nel tempo %s' % (msg.data, time.ctime())
         #print "%f"%msg.data
        a = msg.data  
        info_nodo2 = a + 0.5
        x1 = info_nodo2
        print "%f"%x1  
    def nodo():
        pub = rospy.Publisher('chatter1', Float64)
        rospy.init_node('nodo1', anonymous=True)
        rospy.loginfo("In attesa")
        rospy.Subscriber('chatter2', Float64, callback)
        rate = rospy.Rate(1) …
Run Code Online (Sandbox Code Playgroud)

python-2.7 rospy

2
推荐指数
1
解决办法
4694
查看次数

无法找到 [rospy] 的 rosdep 定义 - Robotiq ros 驱动程序依赖项

我将按照http://wiki.ros.org/robotiq中的指示为 Robotiq 夹具安装 ros 驱动程序 ,但是为了安装 Modbus TCP 依赖项 ( rosdep install robotiq_modbus_tcp),我遇到以下问题:

错误:以下包/堆栈无法将其 rosdep 键解析为系统依赖项:robotiq_modbus_tcp:无法找到 [rospy] 的 rosdep 定义

PS:我使用的是Ubuntu 16.04(kinetic),

预先非常感谢您帮助我解决这个问题......

dependencies ros modbus-tcp rospy ubuntu-16.04

2
推荐指数
1
解决办法
1万
查看次数