robomaster-oss / rmoss_core Goto Github PK
View Code? Open in Web Editor NEWRoboMaster OSS中的基础项目,为RoboMaster提供通用基础功能模块包,如相机模块,弹道运动模块等。
License: Apache License 2.0
RoboMaster OSS中的基础项目,为RoboMaster提供通用基础功能模块包,如相机模块,弹道运动模块等。
License: Apache License 2.0
rmoss_cam
中CamClient
对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的同步。
方案一:扩展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)
这个是什么原因? 连续报了很多的一样的错误
Required Info:
使用64字节 波特率1152000测试 MCU发送频率500hz
FixedPacketTool::recv_packet 函数会失败
删除此行之后问题解决
Required Info:
写一个简单的 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这个文件
正常发送
报错信息:
Error: standard input is not a terminal device
我认为应该删除这个判断,经过测试删除后也可以正常运行
依照projectile solver的定义此处的参数应该为
solver_->solve(x, z, angle)
当前项目依赖的ROS版本为Galactic,迁移依赖至ROS最新版本Humble,以获得新的ROS特性,以及性能提升。
实现步骤:
完成情况:
核心功能项目:
仿真项目:
其它项目:
背景: 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)
现在 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);
rmoss_interfaces
中定义相关ROS srv文件。get_camera_info()
实现,CamServer
和CamClient
通过ros service通信实现。For internationalization, add English or other language documentation to this project.
README
file.当前项目中rmoss_cam
的实现没有没有基于image_transport,因此无法直接对于JPG/PNG等图像压缩或视频流的message传输提供支持。基于image_transport来实现cam
节点能直接使用image_transport_plugins中提供的各种压缩格式传输图像,满足不同带宽或不同使用场景的需求。
如需基于image_transport来实现rmoss_cam,可能需要对目前已有的 cam_server 和 cam_client 部分重新设计
可以考虑在rmoss_cam
中加入sensor_msgs::cameraInfo
消息的topic
image_transport
中的camearaPublisher
同时发布camera_info
和image_raw
rclcpp::Publisher
单独发布camera_info
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.