标签: ros

将OpenCV Mat导入C++ Tensorflow而不进行复制

我的目标是实时运行TensorFlow模型,从学习模型中控制车辆.我们的车辆系统使用与OpenCV紧密相连的ROS(机器人操作系统).所以,我收到一个包含ROS感兴趣图像的OpenCV Mat.

    cv::Mat cameraImg;
Run Code Online (Sandbox Code Playgroud)

我想直接从这个OpenCV矩阵中的数据创建一个Tensorflow Tensor,以避免逐行复制矩阵的费用.使用本课题的答案我已设法使用以下代码获得网络的正向传递:

cameraImg.convertTo(cameraImg, CV_32FC3);

Tensor inputImg(DT_FLOAT, TensorShape({1,inputheight,inputwidth,3}));
auto inputImageMapped = inputImg.tensor<float, 4>();
auto start = std::chrono::system_clock::now();
//Copy all the data over
for (int y = 0; y < inputheight; ++y) {
    const float* source_row = ((float*)cameraImg.data) + (y * inputwidth * 3);
    for (int x = 0; x < inputwidth; ++x) {
        const float* source_pixel = source_row + (x * 3);
        inputImageMapped(0, y, x, 0) = source_pixel[2];
        inputImageMapped(0, y, x, 1) = source_pixel[1];
        inputImageMapped(0, …
Run Code Online (Sandbox Code Playgroud)

c++ opencv ros tensorflow

10
推荐指数
2
解决办法
5860
查看次数

如何创建具有多种功能的 OpenAI Gym 观察空间

使用Python3.6、Ubuntu 18.04、Gym 0.15.4、RoS melodic、Tensorflow 1.14 和 rl_coach 1.01:

我构建了一个自定义 Gym 环境,它使用 360 元素数组作为观察空间。

high = np.array([4.5] * 360) #360 degree scan to a max of 4.5 meters
low = np.array([0.0] * 360)
self.observation_space = spaces.Box(low, high, dtype=np.float32)
Run Code Online (Sandbox Code Playgroud)

但是,这还不足以通过 ClippedPPO 算法进行正确训练,我想向我的状态添加其他功能,包括:

世界中的位置(x,y 坐标)
世界中的方向(四元数:x,y,z,w) 线性轨迹(x,y,z 坐标) 角轨迹(x,y,z 坐标)。

我将上面的四个特征放入自己的 np.arrays 中,并尝试将它们全部作为状态对象传递回来,但显然它与观察空间不匹配。space.Box 让我困惑。我假设我无法将所有这些功能转储到单个 np 数组中,因为上限和下限会有所不同,但是,我无法确定如何创建具有多个“功能”的 space.Box 对象。

TIA

python reinforcement-learning python-3.x ros openai-gym

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

在catkin_make之后找不到ROS包

我在ROS的Wiki页面之后创建了一个ROS工作区.我还在catkin_create_pkg刚创建的工作区下创建了一个包.

然后,按照ROS Wiki中的步骤使用构建包catkin_make,在构建包之后,我插入命令rospack find packagename,然后找不到我的包.

谁可以帮我这个事?

workspace package ros

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

如何正确链接ROS Indigo下的opencv3(使用CMake)?

我无法将我自己安装的opencv3与ros分开.我收到这个错误

../devel/lib/libirTest.so: undefined reference to `cv::ORB::create(int, float, int, int, int, int, int, int, int)'
../devel/lib/libirTest.so: undefined reference to `cv::calcOpticalFlowPyrLK(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputOutputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, cv::Size_<int>, int, cv::TermCriteria, int, double)'
Run Code Online (Sandbox Code Playgroud)

但是,能够成功编译外部ROS; 也就是说,使用没有ROS的类似包....这是在ROS下使用的CMake文件(不起作用)

cmake_minimum_required(VERSION 2.8.3)
project(my_test_pkg)

SET(SRC ${CMAKE_CURRENT_SOURCE_DIR}/src)

find_package(catkin REQUIRED COMPONENTS
  cv_bridge
  image_transport
  roscpp
  rospy
  std_msgs
  message_generation
  genmsg
)
find_package(nodelet REQUIRED)

################################################
## Declare ROS messages, services and actions ##
################################################

 add_message_files(
   FILES
    velocity_trsl.msg 
   )

  generate_messages(
    DEPENDENCIES
    std_msgs
    )

catkin_package(
  CATKIN_DEPENDS message_generation cv_bridge image_transport roscpp rospy …
Run Code Online (Sandbox Code Playgroud)

c++ cmake ros opencv3.0 catkin

9
推荐指数
1
解决办法
6834
查看次数

ImportError:没有名为catkin_pkg.packages的模块

我想跑: -
roslaunch turtlebot_gazebo turtlebot_world.launch

但我得到以下错误

Traceback (most recent call last):
  File "/opt/ros/kinetic/share/xacro/xacro.py", line 55, in <module>
    import xacro
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/xacro/__init__.py", line 42, in <module>
    from roslaunch import substitution_args
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/__init__.py", line 56, in <module>
    from .launch import ROSLaunchRunner
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/launch.py", line 55, in <module>
    from roslaunch.nodeprocess import create_master_process, create_node_process
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/nodeprocess.py", line 49, in <module>
    from roslaunch.node_args import create_local_process_args
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/node_args.py", line 53, in <module>
    import roslib.packages
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslib/__init__.py", line 54, in <module>
    import roslib.stacks
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslib/stacks.py", line 46, …
Run Code Online (Sandbox Code Playgroud)

python ros

9
推荐指数
1
解决办法
7967
查看次数

使Gradle任务可以访问环境变量

我需要在shell环境中运行Gradle任务,该环境必须在启动任务之前创建.使用commandLineexecutable不合适,因为我需要在与shell脚本相同的进程中运行任务.最初,我直接在里面调用了脚本gradlew,但后来我决定从中获取源代码build.gradle.kts并通过gradlew以下方式调用后续任务:

val setupRosEnv by tasks.creating(Exec::class) {
    executable = "bash"

    args("-c", "source $rosPath/setup.sh && source gradlew myTask")
}
Run Code Online (Sandbox Code Playgroud)

我可以通过./gradlew setupRosEnvCLI 运行来构建所有内容.除了运行脚本然后运行gradlew,有没有办法使用Gradle API实现这一点?当前的解决方案看起来有点笨拙,而且依赖于其他任务很笨拙setupRosEnv,因为这将导致无限循环或必须明确处理以防止任务多次运行.

由于shell脚本本身是由ROS生成的,因此无法将其转换为Gradle或轻松解析.

bash gradle kotlin ros gradle-kotlin-dsl

9
推荐指数
1
解决办法
987
查看次数

cmake中的安装命令是什么?

我很抱歉我太天真了。我试图从这个 cmake 网站的链接中了解但无法理解。我有一个示例 cmake 文件,其中一个可执行文件是由

add_executable(${PROJECT_NAME}_node src/filename.cpp)

然后通过以下命令安装

安装(TARGETS ${PROJECT_NAME}_node ${PROJECT_NAME}
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKIN_BIN_DESTINATION)

这个 cmake 来自 ROS,所以柳絮在那里。总体问题保持不变。有人知道,为什么我们需要安装 TARGETS/FILES?

c++ installation cmake ros catkin

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

构造函数引用参数导致seg错误

我在ROS应用程序中使用以下代码.

class RobotisController
{
private:
    ....
public:
    ros::NodeHandle pxxx;
}

RobotisController::RobotisController(ros::NodeHandle& nh) : pxxx(nh)
{
    packetHandlerList.push_back(PacketHandler::getPacketHandler(1.0));
    packetHandlerList.push_back(PacketHandler::getPacketHandler(2.0));
}


class RosWrapper {
protected:
    Robotis::RobotisController controller_;
    ros::NodeHandle nh_;
    ....

public:
    RosWrapper() :
            controller_(nh_) {}
}


main()  
{
    RosWrapper interface;
}
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,它会导致SIGSEGV.我试图调试代码,当我到达RobotisController的构造函数时,我发现传递给构造函数的变量nh显示cannot access memory,但内存已经在类RosWrapper中分配.

c++ ros

8
推荐指数
1
解决办法
124
查看次数

ROS:在 nodehandle.subscribe 中使用 lambda 作为回调

我希望能够通过 lambda 定义回调,但我无法获得任何匹配的函数签名。

std::function<void(const sensor_msgs::PointCloud2)> callback = 
 [&mycapture](const sensor_msgs::PointCloud2 msg) { 
 // do something with msg and capture
 };

auto sub = ros_node.subscribe("/sometopic", 1, callback)
Run Code Online (Sandbox Code Playgroud)

我无法让它工作,因为 subscribe 需要一个函数指针。我正在尝试用 ROS 做的事情可能吗?也就是说,我可以将一个带有捕获的 lambda 传递给 subscribe 方法吗?

c++ lambda ros

8
推荐指数
4
解决办法
4996
查看次数

使用OpenCV图像的Flask视频流

我正在尝试使用Flask来显示OpenCV图像流.我正在使用ROS和Zed立体相机.

问题是烧瓶服务器只显示损坏的图像图标.我猜这个问题是在gen()方法中,因为cv2.imwrite('t.jpg',img)方法是错误的方法.我对OpenCV的经验很少.

Flask服务器接收的图像数据是InputArray.我需要一种方法来转换它并在Flask服务器中显示图像.

我正在使用Python 2.7和rospy(ROS).

有什么建议?

更新:

ROS节点访问ZED cam的代码:

    #!/usr/bin/env python

# ROS imports
import rospy
from sensor_msgs.msg import Image

# Utils
import numpy as np
import cv2
from cv_bridge import CvBridge, CvBridgeError
import stream


def callback(data):
    """
    param data: data from zed/rgb/image_rect_color topic
    """
    # convert from ROS sensor_msgs/Image to cv2
    bridge = CvBridge()
    try:
        cv_img = bridge.imgmsg_to_cv2(data, desired_encoding='passthrough')
        stream.img = cv_img
    except CvBridgeError as e:
        print(e)
    # show image stream
    # cv2.imshow('zed', cv_img)
    # cv2.waitKey(3)


def zed_sub():
    # …
Run Code Online (Sandbox Code Playgroud)

python opencv stream flask ros

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