首页 技术 正文
技术 2022年11月9日
0 收藏 714 点赞 4,072 浏览 2530 个字

  multi-robot system

  经过两个多月的ros学习,对ros的认识有了比较深入的了解,本篇博客主要记录在ros下开发多机器人系统以及对ros更深入的开发。本篇博客是假定读者已经学习完了全部ros tutorials

Beginner Level 和 Intermediate Level

  

  目录:

  同一电脑运行多机器人节点

  现在我们开始尝试运行两个相同的turtlesim节点(nodes),打开三个运行如下命令:

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtlesim_node

  得到的结果如下:

ros下多机器人系统(1)

  第一次运行的turtlesim_node 被终止了。ros不允许相同名字的节点同时运行,如果第二个节点运行,第一个会被自动终结。

  参数重映射(Remapping Arguments):一个节点中的任何ROS名称可以在命令行重映射,这是ROS中的一个非常重要且强大的特征。

  有了这个特征,我们就可以实现在同一台电脑中控制多个节点做不同的事了:

  如果要同时运行多个节点的话,是一定要改名字的,一下介绍两种改名字的方法:

    第一种:直接在命令行改名字

更改第二个命令:
rosrun turtlesim turtlesim_node __name:=turtlesim2
再运行:
rostopic pub /turtle1/cmd_vel -r 10 geometry_msgs/Twist '{linear:{x: 0.2, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'

  现在可以实现同时控制两个turtlesim_node了

ros下多机器人系统(1)

ros下多机器人系统(1)

    第二种:使用launch文件

  创建 multi_turtlesim.launch

<launch>
<group ns="sim1">
<node name="turtle" pkg="turtlesim" type="turtlesim_node"/>
<node name="controller" pkg="turtlesim" type="draw_square"/>
</group>
<group ns="sim2">
<node name="turtle" pkg="turtlesim" type="turtlesim_node"/>
<node name="controller" pkg="turtlesim" type="draw_square"/>
</group>
</launch>

  我们直接在launch文件中更改了节点的namespaces,运行rqt_graph可以更直接的看到我i们的修改:

ros下多机器人系统(1)  

  如果要实现多个节点受不同的控制,创建 remapping_turtlesim.launch ,并运行:

<launch>
<group ns="sim1">
<node name="turtle" pkg="turtlesim" type="turtlesim_node"/>
</group>
<group >
<node name="turtle" pkg="turtlesim" type="turtlesim_node"/>
</group>
<node pkg="turtlesim" name="teleop" type="turtle_teleop_key" output="screen">
<remap from="/turtle1/cmd_vel" to="/sim1/turtle1/cmd_vel"/>
</node>
</launch>

  这里,我们将  topic  /turtle1/cmd_vel 改成 /sim1/turtle1/cmd_vel,

  再运行:

rostopic pub /turtle1/cmd_vel -r  geometry_msgs/Twist '{linear:{x: 0.2, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'

  现在我们可以发现,其中一只turtle在转圈,而另外一只受键盘控制。

ros下多机器人系统(1)

 不同电脑在同一roscore下运行多机器人节点

  上面我们已经能在同一电脑中实现多机器人的控制了,接下来,我们将实现在不同电脑中实现多机器人的控制。

  首先,准备两台电脑并确保在同一wifi下,然后运行 ifconfig

假设得到的结果为:
192.168.1.151 (machine A)
192.168.1.154 (machine B)

  然后,在machine B 上运行:

ping 192.168.1.151

  如果有返回,则可以实现两台电脑的通信。

  现在,我们以machine A为主机建立多机器人系统。

  然后再在machine A的  .bashrc 中添加:

function get_ip_address { ifconfig | fgrep -v 127.0.0.1 | fgrep '掩码:255.255.255.0' | egrep -o '地址:[^ ]*' | sed 's/^.*://'; }
export ROS_IP=$( get_ip_address )

  在machine B的 .bashrc中添加:

function get_ip_address { ifconfig | fgrep -v 127.0.0.1 | fgrep '掩码:255.255.255.0' | egrep -o '地址:[^ ]*' | sed 's/^.*://'; }
export ROS_IP=$( get_ip_address )
export ROS_MASTER_URI=http://192.168.1.151:11311

  现在,可以实现多电脑的机器人通信了:

在 machine A中运行:roscore
在 machine A中运行:turtlesim 节点
在 machine B中运行:turtlesim2节点
在 machine B中运行:teleop_key 节点

  完成上述步骤后,你就会发现,我们可以同时控制A与B两个turtlesim 节点了。

  下一篇介绍:

  在下一篇中,我们将实现在模拟环境下的多机器人协作,防止机器人之间的碰撞,机器人的同步,以及自定义消息的创建。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,494
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,908
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,133
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297