0. 简介
在面对ROS这个软件时,我们会尝试着设计更多的可视化软件用于仿真,以展示我们算法程序的效果。作者就在这里向大家展示6种二次开发和可视化平台。下面我们以ROS2为主来一一说明。
1. RVIZ2
rviz2作为我们最常用的可视化软件,其也支持插件的开发使用,具体使用方法也和ROS1类似,这里之前写过一篇ros1 如何开发rviz plugin插件的文章,这里就不展开叙述了。下图为小米cyberdog铁蛋的rviz2的示意图,其使用和ROS1没有差别。
2. RQT
RQT作为和RVIZ2一样经常使用的软件,其也具有插件开发的能力。作为一个RQT的plugin插件,其结构大致如下
其中CMakeLists,packag.xml与其他ros包无明显差异
plugin.xml表示了此插件在rqt中的显示方式,也就是说可以在plugin菜单找到它
resource文件中MyPlugin.ui是用QT designer设计的UI界面
script文件中的rqt_mypkg是一个Python脚本,负责启动这个插件
按照官网的顺序:
-
修改package.xml,填入export语句让我们的plugin能够被系统找到进行调用。
-
创建plugin.xml ,描述plugin,最重要的是,在rqt_gui界面中的分组与顺序。
-
setup.py 通过ROS的catkin, 利用CMake 来将脚本文件放在一个不在PATH中但是又跟package关联的文件夹下让系统找得到。
-
修改CMakeLists.txt
-
创建src/rqt_mypkg,添加__init__.py和my_module.py
-
界面元素及布局 MyPlugin.ui
经过这六步,我们就可以用Plugins->Logging->My plugin label菜单在rqt的框架内添加新一个my_plugin实例,并得到一个自定义的RQT插件了
3. gazebo
与rviz2和rqt一样,gazebo也是ROS1中经常使用的其在功能上也没有什么差别,这里可以参照创客制造的一篇小文章来入门。如果使用过ROS1的同学,可以无缝衔接到ROS2中
4. V-rep/CoppeliaSim
第三种是V-rep/CoppeliaSim与ROS2完成的数据通信,瑞雷老师在这篇文章中详细介绍了这部分的工作。通过下载simExtROS2Interface的foxy版本,并利用该功能包生成.so文件。
相较于我们常见的gazebo而言,V-rep/CoppeliaSim的好处是其可以更加便捷的完成代码的配置与二次开发,同时该软件支持lua或者python语言的开发与撰写。
5. Webots
Webots 作为一种界面与仿真兼具的软件,其可以通过对真实世界中机器人的传感器、执行器的仿真得到一个更加符合真实情况的结果,这也为实机测试省去了大量的麻烦,之前Webot与ROS一开始还不兼容,目前Webots已经全面的拥抱ROS2。从官方的例子我们可以看到webots的上手难度越来越低,中间件直接连通了,只需要你通过简单的调用即可完成车辆在仿真环境中的运动。官方的文档已经讲得很详细了,这里也不过多的去展开讲述,等作者啥时候研究这块后再详细展开吧。
import rclpy
from geometry_msgs.msg import Twist
HALF_DISTANCE_BETWEEN_WHEELS = 0.045
WHEEL_RADIUS = 0.025
class MyRobotDriver:
def init(self, webots_node, properties):
self.__robot = webots_node.robot
self.__left_motor = self.__robot.getDevice('left wheel motor')
self.__right_motor = self.__robot.getDevice('right wheel motor')
self.__left_motor.setPosition(float('inf'))
self.__left_motor.setVelocity(0)
self.__right_motor.setPosition(float('inf'))
self.__right_motor.setVelocity(0)
self.__target_twist = Twist()
rclpy.init(args=None)
self.__node = rclpy.create_node('my_robot_driver')
self.__node.create_subscription(Twist, 'cmd_vel', self.__cmd_vel_callback, 1)
def __cmd_vel_callback(self, twist):
self.__target_twist = twist
def step(self):
rclpy.spin_once(self.__node, timeout_sec=0)
forward_speed = self.__target_twist.linear.x
angular_speed = self.__target_twist.angular.z
command_motor_left = (forward_speed - angular_speed * HALF_DISTANCE_BETWEEN_WHEELS) / WHEEL_RADIUS
command_motor_right = (forward_speed + angular_speed * HALF_DISTANCE_BETWEEN_WHEELS) / WHEEL_RADIUS
self.__left_motor.setVelocity(command_motor_left)
self.__right_motor.setVelocity(command_motor_right)
6. Unity
Unity作为一种非常通用的平台,其可以构建并部署到Windows 10、Mac OS或Linux等任意主流操作系统。而使用的Unity Robotics软件包带有许多现成的接口,能让你轻松与ROS或ROS2的交换信息。
Unity For ROS2这个软件,是Robotec.AI公司开源的ROS2的一个原生(native)应用,它不像其它有些应用那样,使用ROS1-Brdige包来做到所谓的支持ROS2,它是真真正正地从RCL Robot Client Layer衍生做出来的。这样做的最大的一个好处,就是你可以把这个仿真功能直接加载到你自己的node中,而且可以无损地使用ROS2系统中对于性能、稳定性等等方面的一些优势实现。
不过呢,这个软件使用的是C#语言,因此需要安装rclcs库,而且对于Linux开发者多少有些不太友好。
https://hermit.blog.csdn.net/article/details/121993391
https://blog.csdn.net/yaked/article/details/118420240
https://blog.csdn.net/huyaoyu/article/details/82134378
https://www.guyuehome.com/14068
https://docs.ros.org/en/rolling/Tutorials/Advanced/Simulators/Webots.html
评论(0)
您还未登录,请登录后发表或查看评论