前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【机器人】ROS1程序运行指北:启动、重命名、launch

【机器人】ROS1程序运行指北:启动、重命名、launch

作者头像
杨丝儿
发布2022-02-28 15:19:59
8760
发布2022-02-28 15:19:59
举报
文章被收录于专栏:杨丝儿的小站杨丝儿的小站

本案例采用ROS1提供的示例,程序进行演示。

本系列用时7天,博主也是从零开始,尽力去写的,如果发现了错误一定要私信告诉我呀。这么努力的博主,关注一下吧。

作者:杨丝儿 座右铭:始于兴趣,源于热爱,成于投入。 介绍:爱丁堡大学 人工智能专业。技术兴趣点集中在机器人、人工智能可解释性、数学、物理等等。 个人博客discover304.top

⭐️运行方法

  1. 执行$roscore来启动roscore
  2. 包下执行运行:$rosrun <包名> <包内可执行程序/python脚本> [<其他参数>]

⭐️重命名

本来我以为重命名是个多么困难的任务,实践之后发现,这是个超级简单的小技巧。

一个机器人总会有很多重复的组件,像是两条手臂或者两对轮子,亦或是前后左右四个摄像头。我们可以采用重命名的方式对每一个组件上运行的程序进行整理,便于软件的开发和管理。

ROS中的重命名有三种,修改命名空间、修改节点名、修改主题/消息名。

✨命名的概念

首先了解ROS中的命名。ROS中的消息或者节点名称的规划类似计算机系统的路径的形式,使用反斜杠"/"隔开。

计算机中的文件夹对应ROS命名中的命名空间,计算机中的文件对应ROS命名中的节点名称。

✨命名效果

未命名的运行情况

代码语言:javascript
复制
# 终端1
rosmaster
# 终端2
rosrun rospy_tutorials talker
# 终端3
rosrun rospy_tutorials listener
# 终端4
rosrun rospy_tutorials talker
# 终端5
rosrun rospy_tutorials listener
# 终端6
rqt_graph

命名后的运行情况

代码语言:javascript
复制
# 终端1
rosmaster
# 终端2
rosrun rospy_tutorials talker __ns:=first __name:=talker
# 终端3
rosrun rospy_tutorials listener __ns:=first __name:=listener  chatter:=/second/chatter
# 终端4
rosrun rospy_tutorials talker __ns:=second __name:=talker
# 终端5
rosrun rospy_tutorials listener __ns:=second __name:=listener chatter:=/first/chatter
# 终端6
rqt_graph

结构清晰,同时实现了两个命名空间的沟通。

✨重命名方法

在程序运行指令后按照下面的格式添加重命名规则。

  1. 命名空间重映射$rosrun <包名> <程序名> __ns:=<新命名空间名称>
  2. 节点重命名$rosrun <包名> <程序名> __name:=<新节点名>
  3. 消息重命名$rosrun <包名> <程序名> <消息名>:=<新消息名>

重点:以上三个语法可以同时使用。

如果当前路径下存在python代码程序,也可以直接使用$./<程序名> [<同上>]替换上面的指令。

⭐️ROS Launch 启动

每次启动ROS的一个系统都需要走上面这么多的步骤,未免太繁琐了。

当然,你也可以把这些写成一个.bash脚本,一键启动。不过ROS为我们提供了自动化启动的方法叫做roslaunch。

不同于上文中的启动指令rosrun,这里我们使用roslaunch指令启动,语法是:$roslaunch <包名> <.launch文件名>

✨文件结构

.launch文件本质还是一个xml文件,基本结构如下

代码语言:javascript
复制
- launch
  - node
    - name="<节点名称>"
    - ns="<命名空间>"
    - pkg="<包名>"
    - type="<软件名>"
    - output="screen",这是一个调试的方法,输出到终端。调试完成后可以去掉,以保证终端的干净。
    - 其他命名
  - node
    - ···

✨文件示例

本案例使用代码来自于:【机器人】ROS工程案例:基础部分

代码语言:javascript
复制
<launch>
    <node 
        name="publisher" ns="first" 
        pkg="communicate_bot" type="topic_publisher.py"
        output="screen"/>
    <node
        name="subscriber" ns="first"
        pkg="communicate_bot" type="topic_subscriber.py"
        output="screen"/>
    <node
        name="publisher" ns="second"
        pkg="communicate_bot" type="topic_publisher.py"
        output="screen"/>
    <node
        name="subscriber" ns="second"
        pkg="communicate_bot" type="topic_subscriber.py"
        output="screen"/>
</launch>

✨运行效果

代码语言:javascript
复制
source devel/setup.bash
roslaunch communicate_bot communicate.launch

需要注意一个点,roslaunch在没有rosmaster的时候会自动启动一个,但因为这样做存在丢失master节点的风险,所以在真正部署的时候建议另起终端启动rosmaster。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ⭐️运行方法
  • ⭐️重命名
    • ✨命名的概念
      • ✨命名效果
        • ✨重命名方法
        • ⭐️ROS Launch 启动
          • ✨文件结构
            • ✨文件示例
              • ✨运行效果
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档