本案例采用ROS1提供的示例,程序进行演示。
本系列用时7天,博主也是从零开始,尽力去写的,如果发现了错误一定要私信告诉我呀。这么努力的博主,关注一下吧。
作者:杨丝儿
座右铭:始于兴趣,源于热爱,成于投入。
介绍:爱丁堡大学 人工智能专业。技术兴趣点集中在机器人、人工智能可解释性、数学、物理等等。
聊天吹水QQ群:兔叽的魔术工房 (942848525)
个人博客:discover304.top
个人B站账号:杨丝儿今天也在科学修仙(UP主跨站求个三连加关注)
:star:运行方法
- 执行
$roscore
来启动roscore - 包下执行运行:
$rosrun <包名> <包内可执行程序/python脚本> [<其他参数>]
:star:重命名
本来我以为重命名是个多么困难的任务,实践之后发现,这是个超级简单的小技巧。
一个机器人总会有很多重复的组件,像是两条手臂或者两对轮子,亦或是前后左右四个摄像头。我们可以采用重命名的方式对每一个组件上运行的程序进行整理,便于软件的开发和管理。
ROS中的重命名有三种,修改命名空间、修改节点名、修改主题/消息名。
:sparkles:命名的概念
首先了解ROS中的命名。ROS中的消息或者节点名称的规划类似计算机系统的路径的形式,使用反斜杠”/“隔开。
计算机中的文件夹对应ROS命名中的命名空间,计算机中的文件对应ROS命名中的节点名称。
:sparkles:命名效果
未命名的运行情况
1 | # 终端1 |
命名后的运行情况
1 | # 终端1 |
结构清晰,同时实现了两个命名空间的沟通。
:sparkles:重命名方法
在程序运行指令后按照下面的格式添加重命名规则。
- 命名空间重映射:
$rosrun <包名> <程序名> __ns:=<新命名空间名称>
- 节点重命名:
$rosrun <包名> <程序名> __name:=<新节点名>
- 消息重命名:
$rosrun <包名> <程序名> <消息名>:=<新消息名>
重点:以上三个语法可以同时使用。
如果当前路径下存在python代码程序,也可以直接使用$./<程序名> [<同上>]
替换上面的指令。
:star:ROS Launch 启动
每次启动ROS的一个系统都需要走上面这么多的步骤,未免太繁琐了。
当然,你也可以把这些写成一个.bash
脚本,一键启动。不过ROS为我们提供了自动化启动的方法叫做roslaunch。
不同于上文中的启动指令rosrun
,这里我们使用roslaunch
指令启动,语法是:$roslaunch <包名> <.launch文件名>
:sparkles:文件结构
.launch文件本质还是一个xml文件,基本结构如下
1 | - launch |
:sparkles:文件示例
本案例使用代码来自于:【机器人】ROS工程案例:基础部分
1 | <launch> |
:sparkles:运行效果
1 | source devel/setup.bash |
需要注意一个点,roslaunch在没有rosmaster的时候会自动启动一个,但因为这样做存在丢失master节点的风险,所以在真正部署的时候建议另起终端启动rosmaster。
:star:参考
- 《ROS机器人编程实践》
- ROS入门之——浅谈launch