-
Notifications
You must be signed in to change notification settings - Fork 18
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Refactor rmoss project #45
Comments
目前想到的rmoss_core应该包含以下package:
rmoss_base没有存在的必要性,其中的simple_robot_base_node.cpp仅仅作为example样例存在,不同机器人的base模块必然不同,因此可以删除rmoss_base包。 |
参考navigation2,可以采用LifecycleNode进行节点管理,删除rmoss_util/task_manager功能类 |
支持使用LifecycleNode来进行管理。rmoss_interface中对于云台的底盘控制的消息应该重新修改一下,我倾向于类似ros2_control的方式来控制云台 |
|
你说的是裁判系统给机器人提供的信息?还是仿真器的裁判系统实现?
这个我也赞同,rmoss_util应该只放一些简单的工具类,复杂的工具类应该单独做package,第二点图像处理工具类我倾向于独立出去,放在rmoss_perception_common之类的包中? |
可以简单讲一下这种方式下云台和底盘消息怎么定义吗?比如应该包含哪些字段,我对ros2_control不太熟 @Ericsii |
可以参考一下 ros2_control 的 architecture 这部分介绍,应该算是使用 ros 来控制机器人的标准推荐做法 https://control.ros.org/rolling/doc/getting_started/getting_started.html#controller-manager |
可以把裁判系统通讯尽量直接兼容裁判系统协议,如果之后有队伍愿意做无下位机的方案也可以直接使用 |
Task Layer与Interfece Layer使用ros msg应该与机器人的具体硬件结构实现无关。
Task Layer的功能包可以参考navigation2和moveit2:
|
与真实的裁判系统实现通信,数据发布到指定话题上(在雷达站上算刚需)。目前好像没找到特别好的,在上位机与裁判系统通信的开源,只在广工的rm_controls开源上看到一个ROS1版的,但实现的有点复杂,不太好用 |
看起来没问题,创建一个新包,例如 |
其中rmoss_auto_aim应该只包含armor detector和armor tracker模块,作为一个perception功能包。 模块功能:
参考了rm_auto_aim,其pipeline设计比较合理,这里只是解耦了perception和control模块,这样解耦的好处是perception模块无需关心硬件结构,只需要输出目标位置即可,gimbal controller也可以被能量机关这种需要射击的任务复用。同时perception和control模块之间也非常容易插入决策模块判断目标pose是否应该射击。 |
通讯部分的设想: 参考: 为了兼容不同队伍机器人会有不同的总线设计,需要一套能够兼容不同总线通讯协议的基础工具类,有一套统一的数据读取机制。我设想是直接基于 boost::asio 来设计一个通讯基类的接口。
这部分作为一个基础工具类同时为 ros_control 做无下位机控制和裁判系统通讯等功能提供支持 具体工厂模式如何读取配置文件的实现,应该可以参考一下 navigation2 中 plugin 的配置读取方式 |
兼容不同通信方式可行,统一通信接口就行,比如现在rmoss_base中的Transporter就做的这件事,但是要统一通信数据格式比较困难,不同队伍有着不同数据格式的需求,这个感觉比较难统一,比如比如rm-vision中的rm_serial_driver直接使用结构体作为数据传输格式,简单有效。这也是我为什么想把rmoss_base更改为rmoss_transporter的原因,即仅提供通信接口,通信的数据处理不同队伍会有各自不同的实现。
这里我感觉是不是要和 ros_control 的hardware_interface 解偶开来,Transporter 应该作为通用的消息传输接口(字节传输),Transporter 有Can, Serial Socket等方式,ros2_control 中 hardware_interface 通过使用Transporter 获得硬件交互能力,比如rm_controls/rm_hw 中也是使用CanBus(属于Transporter ),另外GPIO感觉比较特殊,感觉不应该继承Transporter基类,单独实现一个接口即可 ,rm_controls/rm_hw设计感觉就行。 |
这里应该是我的表述有误,其实想法是 Transporter 使用类似 hardware_interface 的接口定义,这样如果后续想要做无下位机的方案可以比较方便的放到 ros_control 里面 |
那感觉就是ros_control的内容了,有点像之前rmoss_base的设计目标了,硬件和ros接口之间的桥梁,需要设计数据格式,以及数据处理逻辑,设计上较难考虑周全。另外,我觉得Transporter定义还是得回归通信本身,最好解耦开来,至于是否需要统一接口,这个也有待讨论。 |
这里并没有规定数据格式,按照UML图例 DataFrame 仅包含数据的元信息 encoding (或者别的名字)和原始的字节数据,具体如何拼接和解析二进制数据的协议并没有包含在这个 Transporter 设计中应该作为使用者来进行实现。是满足这里说的硬件通信和协议解耦的 |
从UML中,read和write函数并没有看到data参数,那么怎么利用Transporter去发送和读取DataFrame?我好像并没有看到,这里能不能解释一下?我理解read和write是处理read_buffer和write_buffer,但是好像没有加进去和读出来的接口,没太看明白这里是怎么工作的。 |
这里是参照常见的一些通讯库的做法,在 Transporter 的构造时传入 read 和 write 的 buffer 的指针,调用这两个方法时就不用再传 data 了 |
rmoss_cam重构想法:
目前 rmoss_gz_cam已经去掉cam_server/cam_client包装,极大简化了程序,避免为了适配代码封装而产生大量繁琐且冗余的代码。 |
rmoss项目已经很久没有更新了,代码框架已经过时,是时候重新回头考虑rmoss软件系统应该如何设计这个问题了。目前可以参考的开源项目有很多,比如:
rmoss项目将只做rmoss_core 和 rmoss_gazebo仿真器项目,而任务级功能软件包rmoss_contrib将不再维护,其中的rmoss_auto_aim建立独立仓库进行维护。而像能量机关等任务级功能是需要参赛队伍去自行开发,而且每年可能都会有变化,甚至会有新任务的出现,如有开发者愿意开发任务级功能以作为demo演示,则建立独立仓库进行维护。
其中有几个部分需要讨论:
欢迎大家讨论,并提出建议。
The text was updated successfully, but these errors were encountered: