基于ROS-Melodic 多机器人协作导航方法(实操篇)

基于ROS-Melodic 多机器人协作导航方法(实操篇)

首先运行roscore

#建立主节点
roscore

#新建编译空间
mkdir -p ~/car_ws/src 
cd car_ws/src 
#编译空文件
catkin_init_workspace
catkin_make 
source devel/setup.bash

#下载源码包(实际上通过apt-get 安装的turletbot包位置在/opt/ros/melodic/share 中,做修改要从这里开始修改)
---------------------------------------------------------------------------------------
cd ~/car_ws/src
git clone https://github.com/xmy0916/racecar.git
#下载相应插件
sudo apt-get install ros-melodic-driver-base
sudo apt-get install ros-melodic-gazebo-ros-control
sudo apt-get install ros-melodic-effort-controllers
sudo apt-get install ros-melodic-joint-state-controller
sudo apt-get install ros-melodic-ackermann-msgs
sudo apt-get install ros-melodic-global-planner
sudo apt-get install ros-melodic-teb-local-planner
----------------------------------------------------------------------------------------

#指定机器人型号
export TURTLEBOT3_MODEL=waffle

#运行仿真程序
roslaunch turtlebot3_gazebo turtlebot3_world.launch
#仿真程序名称指定要正确,否则无法运行

#运行slam地图扫描
roslaunch turtlebot3_slam turtlebot3_slam.launch

#调用rviz
roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch

#键盘控制
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

#保存地图
rosrun map_server map_saver -f ~/map2/map2

#查看话题
rosrun rqt_graph rqt_graph

#运行导航
export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map2/map2.yaml

PS. 出现错误:

RLException: [turtlebot3_world.launch] is neither a launch file in package [turtlebot3_gazebo] nor is [turtlebot3_gazebo] a launch file name
The traceback for the exception was written to the log file

解决方案:

#返回编译
catkin_make
#添加环境变量
source ./devel/setup.bash

方案2:

sudo  gedit ~/.bashrc
source ~/catkin_ws/devel/setup.bash
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/
source ~/.bashrc

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jP8DmNIc-1627285246930)(ROS-Melodic 多机器人控制方法.assets/image-20210712181107055.png)]

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

#获取两台电脑的节点

192.168.1.151 (machine A)
192.168.1.154 (machine B)

#打开host文件

sudo gedit /etc/hosts

#添加如下指令(host 节点的添加十分重要,因为ROS对机器的调用 hosts > DNS 优先级,所以 hosts配置好才能连通话题)

A端

127.0.0.1       localhost
127.0.1.1         [ hostname_A ]

[IP_A]            [ hostname_A ]
[IP_B]            [ hostname_B ]

B端

127.0.0.1       localhost
127.0.1.1         [ hostname_B ]

[IP_B]            [ hostname_B ]
[IP_A]            [ hostname_A ]

修改 .bashrc 文件

A&B端 末尾加入

sudo gedit ~/.bashrc
export ROS_MASTER_URI=http://IP:11311
ROS_IP=http://IP

4. 运行小乌龟程序

电脑A端:

#首先启动 ROS:
$ roscore
#然后 Ctrl + T 打开新的控制台,运行:
$ rosrun turtlesim turtlesim_node

电脑B端:

$ rosrun turtlesim turtle_teleop_key

现在,你就可以用电脑 B 控制电脑 A 中的小乌龟尽情遨游啦! (≧▽≦)/啦啦啦

多加一个机器人的方法

方法一:直接添加namespace 命令行名字(不推荐,很多东西没办法改)

rosrun turtlesim turtlesim_node __name:=turtlesim2

方法二:修改 .launch 文件

创建 multi_turtlesim.launch

[复制代码](javascript:void(0)


    
        
        
    
    
        
        
    

[复制代码](javascript:void(0)

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

基于ROS-Melodic 多机器人协作导航方法(实操篇)_第1张图片

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

[复制代码](javascript:void(0)


    
        
    
    
        
    
    
    
    

[复制代码](javascript:void(0)

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

再运行:

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

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

基于ROS-Melodic 多机器人协作导航方法(实操篇)_第2张图片

不同电脑在同一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 节点了

你可能感兴趣的:(基于ROS-Melodic 多机器人协作导航方法(实操篇))