Coder Social home page Coder Social logo

robomaster-oss / rmoss_core Goto Github PK

View Code? Open in Web Editor NEW
95.0 95.0 15.0 1.46 MB

RoboMaster OSS中的基础项目,为RoboMaster提供通用基础功能模块包,如相机模块,弹道运动模块等。

License: Apache License 2.0

CMake 5.95% C++ 86.37% Python 7.68%
robomaster ros2

rmoss_core's People

Contributors

baiyeweiguang avatar chenjunnn avatar codacy-badger avatar ericsii avatar gezp avatar tomwkang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

rmoss_core's Issues

Support TimeSynchronizer for CamClient

Feature request

Feature description

rmoss_camCamClient 对ROS消息进行了进行了封装,只暴露如下接口:

  typedef std::function<void (const cv::Mat &, const rclcpp::Time &)> Callback;
  virtual bool connect(const std::string & camera_name, Callback cb);

这种隐藏ROS层细节能够使开发者专心于图像开发,而不用关心ROS消息处理过程,但是这样导致无法使用Message Filter中消息同步等工具,而消息同步在某些RM场景中可能十分有用,比如RM中的相机和IMU的同步。

Implementation considerations

方案一:扩展CamClient 类,适配message_filters接口,只需要继承message_filters::SimpleFilter即可 (可实现类似message_filters::Subscriber的效果),然后使用message_filters::TimeSynchronizer 即可。

  • 该方法的优点是扩展了CamClient 功能,缺点是相比于直接使用message_filters::Subscriber订阅ROS消息方法,显得多余,容易使开发者产生困惑。

方案二:针对特定场景封装特定消息同步类,无需扩展CamClient ,而是另起炉灶,如创建CamImuSyncClient,内部集成message_filters::TimeSynchronizer 等方法实现特定消息同步.

  • 该方法优点是易实现,且意图明确,缺点是可能会引入CamClient 中重复代码。

编译的时候报错

--- stderr: rmoss_interfaces
CMake Error at /opt/ros/foxy/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:240 (list):
list index: 1 out of range (-1, 0)
Call Stack (most recent call first):
CMakeLists.txt:18 (rosidl_generate_interfaces)
这个是什么原因? 连续报了很多的一样的错误

uart_transporter cannot run in component

Bug report

Required Info:

  • Operating System:
    • Ubuntu 22.04
  • ROS2 Version:
    • Humble

Steps to reproduce issue

写一个简单的 launch file

import os.path

from ament_index_python.packages import get_package_share_directory

from launch.launch_description import LaunchDescription
from launch.substitutions import LaunchConfiguration
from launch.actions import DeclareLaunchArgument

from launch_ros.actions import Node, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

def generate_launch_description():
    package_path = get_package_share_directory('rmoss_base')

    container_node = Node(
         name='test_node',
         package='rclcpp_components',
         executable='component_container_isolated',
         output='screen',
     )
    load_rm_base = LoadComposableNodes(
        target_container='test_node',
        composable_node_descriptions=[
            ComposableNode(
                package='rmoss_base',
                plugin='rmoss_base::SimpleRobotBaseNode',
                name='rmoss_base_node',
                parameters=[],
            )
        ]
    )
    ld = LaunchDescription()
    ld.add_action(container_node)
    ld.add_action(load_rm_base)
    return ld

launch这个文件

Expected behavior

正常发送

Actual behavior

报错信息:

Error: standard input is not a terminal device

Additional information

我认为应该删除这个判断,经过测试删除后也可以正常运行

if (0 == isatty(STDIN_FILENO)) {

ROS Humble Migration

Feature request

Feature description

当前项目依赖的ROS版本为Galactic,迁移依赖至ROS最新版本Humble,以获得新的ROS特性,以及性能提升。

Implementation considerations

实现步骤:

  • 采用ros版本号作为分支号,将当前主分支main改名为galactic.
  • 创建新分支humble.
  • 将humble分支设为默认分支.

完成情况:

核心功能项目:

仿真项目:

其它项目:

optimization for image pipeline in rmoss_cam

Feature request

Feature description

背景: rclcpp components机制能够将多个Node运行在一个进程中,可以带来性能的提升,Navigation2已经有效的利用这一点,无需任何其它修改,资源利用(CPU,Mem)减少了25-40%(参考 rclcpp components机制对Navigation2性能影响测试). 但是其本质仍然采用DDS通信 (某些DDS厂商提供共享内存方式优化)。除此之外,ROS2提供了进程内通信机制(Intra-process Communications in ROS 2),不使用DDS,但是其仍处于实验开发阶段,目前使用具有很大的局限性。

问题:rmoss_cam对于图像处理流程提供了相机C/S模型,相机采集图像和图像处理分别在两个节点,之间采用ROS通信机制(DDS)解耦设计有利于提高开发效率,但ROS通信会引入额外的系统开销,特别对于图像,图像消息的数据量一般较大,CPU,Mem,延迟等会明显增加(特别是当相机高帧率时,需要较大带宽),尽管rclcpp components机制能够带来一定性能优化,但即使采用共享内存通信,仍需要消息序列化,反序列化等操作,相比于裸框架开发性能较差。

建议:使用rclcpp components之后,每个节点都运行在一个进程中的不同线程中,同一个进程中本身就支持资源共享,可对节点进行直接管理,采用多线程通信机制实现CamServer和CamClient节点之间之间进行数据传输图像(cv::Mat)

  • 支持容器内中的CamServer和CamClient节点进行直接图像传输,不经过ROS通信机制。
  • 支持CamClient动态连接不同的相机。
  • 提供benchmark测试

Support set and get camera parameters methods in CamClient

Feature request

Feature description

现在 CamClient 支持 get_camera_info() API,建议增加获取当前相机参数,设置当前相机参数的方法,API如下:

std::map<rmoss_cam::CamParamType,int> get_camera_parameters();
bool set_camera_parameters(std::map<rmoss_cam::CamParamType,int> & params);

Implementation considerations

  • rmoss_interfaces中定义相关ROS srv文件。
  • 类似get_camera_info()实现,CamServerCamClient通过ros service通信实现。

Multi-language documents

Feature request

Feature description

For internationalization, add English or other language documentation to this project.

Implementation considerations

  • Change repos README file.
  • Tutorial website support

Support image_transport for CamServer

Feature request

Feature description

当前项目中rmoss_cam的实现没有没有基于image_transport,因此无法直接对于JPG/PNG等图像压缩或视频流的message传输提供支持。基于image_transport来实现cam节点能直接使用image_transport_plugins中提供的各种压缩格式传输图像,满足不同带宽或不同使用场景的需求。

Implementation considerations

如需基于image_transport来实现rmoss_cam,可能需要对目前已有的 cam_server 和 cam_client 部分重新设计

Add camera_info topic to `rmoss_cam`

Feature request

Feature description

可以考虑在rmoss_cam中加入sensor_msgs::cameraInfo消息的topic

Implementation considerations

  • 使用image_transport中的camearaPublisher同时发布camera_infoimage_raw
  • 使用原生rclcpp::Publisher单独发布camera_info

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.