我的目标是实时运行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) 使用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
我在ROS的Wiki页面之后创建了一个ROS工作区.我还在catkin_create_pkg刚创建的工作区下创建了一个包.
然后,按照ROS Wiki中的步骤使用构建包catkin_make,在构建包之后,我插入命令rospack find packagename,然后找不到我的包.
谁可以帮我这个事?
我无法将我自己安装的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) 我想跑: -
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) 我需要在shell环境中运行Gradle任务,该环境必须在启动任务之前创建.使用commandLine或executable不合适,因为我需要在与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或轻松解析.
我很抱歉我太天真了。我试图从这个 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?
我在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中分配.
我希望能够通过 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 方法吗?
我正在尝试使用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) ros ×10
c++ ×5
python ×3
catkin ×2
cmake ×2
opencv ×2
bash ×1
flask ×1
gradle ×1
installation ×1
kotlin ×1
lambda ×1
openai-gym ×1
opencv3.0 ×1
package ×1
python-3.x ×1
stream ×1
tensorflow ×1
workspace ×1