当前位置:   article > 正文

ROS机器人编队 roslaunch远程启动节点

ROS机器人编队 roslaunch远程启动节点

实现功能

ROS机器人编队的时候,每次启动总是需要远程连接到机器人端再分别启动节点,属实很麻烦。故需设计功能来实现在电脑主机中远程启动三个ROS机器人中的节点,节点包括底层驱动节点和UWB定位节点。

实现步骤

  1. 配置hosts文件(非必须)
    在主机中编辑/etc/hosts文件,添加:
【robot1IP地址】 【robot1名字】 
【robot2IP地址】 【robot2名字】 
【robot3IP地址】 【robot3名字】 
  • 1
  • 2
  • 3

在三个机器人端分别编辑/etc/hosts文件,添加:

【主机IP地址】 【主机名字】 
  • 1
  1. 在三个机器人端分别创建配置环境变量的bash脚本/xxx/env.sh
#!/bin/bash
export ROSLAUNCH_SSH_UNKNOWN=1
export ROS_MASTER_URI=http://【server IP】:11311
source /opt/ros/melodic/setup.bash
source ~/catkin_ws/devel/setup.bash
export ROS_HOSTNAME=【robot1 IP】
exec "$@"

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 编写launch文件
    由于需要远程启动三个机器人的节点,所以分别写了三个launch文件,可以单独运行每一个launch文件来启动对于的机器人节点,同时也写了car1_3_driver.launch,可以同时启动三个机器人的节点。
  • car1_driver.launch
<launch>

    <machine name="xtark1" user="xtark" password="xtark" address="192.168.1.104" env-loader="/home/xtark/ros_ws/devel/car_env.sh"/>
        
    <param  name="use_sim_time" value="false"/>
    <group ns="car1">
        
        <!-- 启动xtark_driver驱动包 -->
        <node machine="xtark1" pkg="xtark_driver" name="xtark_driver"  type="xtark_driver" output="screen" respawn="true" >
            <rosparam   file="$(find car1)/config/xtark1_params.yaml" command="load"/>
            <param name="publish_odom_transform" value="true"/>
            <param name="odom_frame"             value="/odom"/>
        </node>
        <!-- 启动tf -->
        <node machine="xtark1" pkg="tf" type="static_transform_publisher" name="base_footprint_to_imu" args="0.0 0 0.05 0 0 0 base_footprint base_imu_link 20"/>
    
    
         <!-- 启动nlink_parser驱动包 -->

        <node machine="xtark1" pkg="nlink_parser" type="linktrack" name="linktrack0" output="screen">
            <param name="port_name" value="/dev/ttyUSB0" />
            <param name="baud_rate" value="921600" />
        </node>

        <!-- 启动获取UWB位置 -->
        <node machine="xtark1" name="uwb_position" pkg="uwb_position" type="uwb_position.py" output="screen" respawn="false"/>

    </group>

</launch>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

在launch文件中需要先设置<mathine> tag,其中需要设置name user password address 等属性,之后再<node>中添加 machine="machine_name"即可。

  • car2_driver.launch
<launch>
  

    <machine name="xtark2" user="xtark" password="xtark" address="192.168.1.102" env-loader="/home/xtark/ros_ws/devel/car_env.sh"/>
        

    <group ns="car2">
        <param  name="use_sim_time" value="false"/>
        <!-- 启动xtark_driver驱动包 -->

        <node machine="xtark2" pkg="xtark_driver" name="xtark_driver"  type="xtark_driver" output="screen" respawn="true" >
            <rosparam   file="$(find car1)/config/xtark2_params.yaml" command="load"/>
            <param name="publish_odom_transform" value="true"/>
            <param name="odom_frame"             value="/odom"/>
        </node>

        <node machine="xtark2" pkg="tf" type="static_transform_publisher" name="base_footprint_to_imu" args="0.0 0 0.05 0 0 0 base_footprint base_imu_link 20"/>
    
         <!-- 启动nlink_parser驱动包 -->

        <node machine="xtark2" pkg="nlink_parser" type="linktrack" name="linktrack0" output="screen">
            <param name="port_name" value="/dev/ttyUSB0" />
            <param name="baud_rate" value="921600" />
        </node>

        <!-- 启动获取UWB位置 -->
        <node machine="xtark2" name="uwb_position" pkg="uwb_position" type="uwb_position.py" output="screen" respawn="false"/>
    
    
    
    </group>

</launch>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • car3_driver.launch
<launch>
  
    <machine name="xtark3" user="xtark" password="xtark" address="192.168.1.103" env-loader="/home/xtark/ros_ws/devel/car_env.sh"/>
        

    <group ns="car3">
        <param  name="use_sim_time" value="false"/>
        <!-- 启动xtark_driver驱动包 -->

        <node machine="xtark3" pkg="xtark_driver" name="xtark_driver"  type="xtark_driver" output="screen" respawn="true" >
            <rosparam   file="$(find car1)/config/xtark3_params.yaml" command="load"/>
            <param name="publish_odom_transform" value="true"/>
            <param name="odom_frame"             value="/odom"/>
        </node>

        <node machine="xtark3" pkg="tf" type="static_transform_publisher" name="base_footprint_to_imu" args="0.0 0 0.05 0 0 0 base_footprint base_imu_link 20"/>
    
         <!-- 启动nlink_parser驱动包 -->

        <node machine="xtark3" pkg="nlink_parser" type="linktrack" name="linktrack0" output="screen">
            <param name="port_name" value="/dev/ttyUSB0" />
            <param name="baud_rate" value="921600" />
        </node>

        <!-- 启动获取UWB位置 -->
        <node machine="xtark3" name="uwb_position" pkg="uwb_position" type="uwb_position.py" output="screen" respawn="false"/>
    
    
    
    </group>


</launch>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • car1_3_driver.launch
    这里仅仅include了一下上面的三个launch文件。
<launch>
    <include file="$(find car1)/launch/car1_driver.launch"/>
    <include file="$(find car1)/launch/car2_driver.launch"/>
    <include file="$(find car1)/launch/car3_driver.launch"/>
</launch>
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 配置远程ssh连接(必需,否则无法成功)
  • 首先删除rm ~/.ssh/known_hosts
  • 然后配置ssh
ssh -oHostKeyAlgorithms='ssh-rsa' 【tx2用户名】@【tx2计算机名】
  • 1

参考链接:

在roslaunch中启动远程节点的方法

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/657048
推荐阅读
相关标签
  

闽ICP备14008679号