我是靠谱客的博主 苗条鞋垫,最近开发中收集的这篇文章主要介绍【机器人】ROS1程序运行实用技巧,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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


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

作者:杨丝儿
座右铭:始于兴趣,源于热爱,成于投入。
介绍:爱丁堡大学 人工智能专业。技术兴趣点集中在机器人、人工智能可解释性、数学、物理等等。
聊天吹水QQ群:兔叽的魔术工房 (942848525)
个人博客:discover304.top
个人B站账号:杨丝儿今天也在科学修仙(UP主跨站求个三连加关注)


⭐️运行方法

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

⭐️重命名

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

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

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


✨命名的概念

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

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


✨命名效果

未命名的运行情况

# 终端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

命名后的运行情况

# 终端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文件,基本结构如下

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

✨文件示例

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

<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>

✨运行效果

source devel/setup.bash
roslaunch communicate_bot communicate.launch

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


⭐️参考

  • 《ROS机器人编程实践》
  • ROS入门之——浅谈launch

最后

以上就是苗条鞋垫为你收集整理的【机器人】ROS1程序运行实用技巧的全部内容,希望文章能够帮你解决【机器人】ROS1程序运行实用技巧所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部