多机器人在ros下的launch启动文件配置

 

1、示例程序:

最近在做6个han's cute机器人的协同控制,在这里记录一下roslaunch的配置技巧。

先上代码和分行解释:


     
    
    
    
    
    


    
    
    
    
    
    
    
        
            namespace: dxl_manager
            serial_ports:
                pan_tilt_port:
                    port_name: "/dev/ttyUSB0"  
                    baud_rate: 250000
                    min_motor_id: 0
                    max_motor_id: 25
                    update_rate: 50
        
    
    
   
   
   

    
    
    
    
    
    
    
        
            namespace: dxl_manager
            serial_ports:
                pan_tilt_port:
                    port_name: "/dev/ttyUSB1"
                    baud_rate: 250000
                    min_motor_id: 0
                    max_motor_id: 25
                    update_rate: 50
        
    
    
    
    
   

    
    
    
    
    
    
    
        
            namespace: dxl_manager
            serial_ports:
                pan_tilt_port:
                    port_name: "/dev/ttyUSB2"
                    baud_rate: 250000
                    min_motor_id: 0
                    max_motor_id: 25
                    update_rate: 50
        
    

   
    
    
   
   

    
    
    
    
    
    
    
        
            namespace: dxl_manager
            serial_ports:
                pan_tilt_port:
                    port_name: "/dev/ttyUSB3"
                    baud_rate: 250000
                    min_motor_id: 0
                    max_motor_id: 25
                    update_rate: 50
        
    
    
    
   
    
   


    
    
    
    
    
    
    
        
            namespace: dxl_manager
            serial_ports:
                pan_tilt_port:
                    port_name: "/dev/ttyUSB4"
                    baud_rate: 250000
                    min_motor_id: 0
                    max_motor_id: 25
                    update_rate: 50
        
    
    
    
   
   

    
    
    
    
    
    
    
        
            namespace: dxl_manager
            serial_ports:
                pan_tilt_port:
                    port_name: "/dev/ttyUSB5"
                    baud_rate: 250000
                    min_motor_id: 0
                    max_motor_id: 25
                    update_rate: 50
        
    
    
    
   
   

2、注意事项

在写机器人内部的ros话题时需要注意,话题或者动作服务器等名应该写成相对的,比如:

cute_arm_controller/follow_joint_trajectory,这样在我们的group下才能在其前面加上自动加上前缀,变成:

cute_robot_1/cute_arm_controller/follow_joint_trajectory

如果是这种绝对的就不可以:

/cute_arm_controller/follow_joint_trajectory

所以说我们平时编写机器人的时候为了后续的开发性也应该注意这一点。

3、在一个launch中启动多个键盘遥控器(teleop_keyboard)时的表现:


    
    
    
    
    
    



   
      
   
   
      
   
   
      
   
   
      
   
   
      
   
   
      
   


多机器人在ros下的launch启动文件配置_第1张图片

我们启动了多个键盘控制在同一个窗口,然后发现这样竟然可以将键盘按键分发下去,同时控制6个机械臂进行动作,倒是省的我们进行映射了,算是个意外收获。

4、同时给多个端口开启权限

因为我们的机器人是usb端口连接上来的,需要在ubuntu给读写权限。

sudo chmod 777 /dev/ttyUSB0

但是这个权限在重启后会失效,而在需要控制多个机器人的时候需要每次都把6个端口权限打开,很麻烦,这里使用了c语言调用shell编程的技巧,通过写一个脚本来替我们完成,这样后来每次只需要执行一次这个脚本程序就行:

//shell.cpp
#include 
#include 
#include 
#include 
using namespace std;

string get_output_of_cmd(const string &cmd)
{
  int32_t count(2048);
  char s[2048];
  string ret;
  FILE* stream = popen(cmd.c_str(), "r");
  if (stream != NULL)
  {
    // 每次从stream中读取指定大小的内容
    while (fgets(s, count, stream))
      ret += s;
    pclose(stream);
  }
  return ret;
}

bool get_exit_status_of_cmd(const string &cmd)
{
  return (system(cmd.c_str()) == 0);
}
int main (int argc, char** argv)
{

  
  int run = system("sudo chmod 777 /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3 /dev/ttyUSB4 /dev/ttyUSB5");   /* 执行命令*/
  cout << run << endl;
  
  string get_run = get_output_of_cmd("sudo chmod 777 /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3 /dev/ttyUSB4 /dev/ttyUSB5");
  cout << get_run << endl;
  

  return 0;
}

编译一下:

g++ shell.cpp -o shell.out

然后执行./shell.out就行。

你可能感兴趣的:(ROS的那些坑)