Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >超冗余机器人运动控制:蛇形机器人 & 8自由度平面机械臂

超冗余机器人运动控制:蛇形机器人 & 8自由度平面机械臂

原创
作者头像
ZC_Robot机器人技术
修改于 2020-09-25 15:02:56
修改于 2020-09-25 15:02:56
4.8K00
代码可运行
举报
运行总次数:0
代码可运行

1 概述

超冗余机器人具有适应复杂多变环境的特点,成为机器人研究中的一个热点,超冗余机器人的代表诸如蛇形机器人等。,生物蛇所 具有的运动步态是无足脊椎动物行走步态的典 范。运动学模型和动力学模型是蛇形机器人的控 制基础。基于前人对生物蛇形态曲线的初步探 索,为深入研究蛇形机器人步态,运动学模型和动 力学模型成为该领域的研究重点。根据蛇形机器 人的运动步态特点,可以将运动学模型和动力学 模型分为二维步态和三维步态两种。

二维步态:蛇形机器人的二维步态主要指的是蜿蜒、内 攀爬和蠕动(也称行波步态)。蜿蜒步态与生物蛇 的蜿蜒运动相同,蠕动步态犹如尺蠖蠕动,但其效 率很低,内攀爬步态类似于鼓风琴运动,但是利用 机器人两个外侧表面与外界的接触摩擦力,及自 身部分向前运动。

三维步态:蛇形机器人的三维步态包括侧移步态和攀爬 步态,两种步态与生物蛇的运动相同,并且均具有 螺旋曲线的特点。

snakebot
snakebot

图片位置

2 开源项目

a 7-DoF snake robot. Robotis Dynamixel MX-28AR, Protocol1.0. Ubuntu 16.04 LTS, ROS kinetic, ROS Control.

项目具体链接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/cygni/snakebot
https://github.com/guzhaoyuan/snake_robot
dynamixel
dynamixel
七自由度蛇形机械臂
七自由度蛇形机械臂
圆弧轨迹
圆弧轨迹

安装步骤如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 1. install ros kinetic and create workspace

# 2. install dynamixel lib
git clone https://github.com/ROBOTIS-GIT/DynamixelSDK.git
cd DynamixelSDK/c++/build/linux64
make
sudo make install
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib # add dynamixel lib install path

# 3. get code
cd ~/catkin_ws/src
git clone https://github.com/guzhaoyuan/snake_robot.git
git clone https://github.com/guzhaoyuan/snake_moveit_config.git
cd ..
catkin_make

3 平面8自由度运动控制仿真

仿真图形如下:

末端位移
末端位移
关节角度
关节角度
障碍物距离
障碍物距离

具体程序如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%Kinematic Control of Redundant Manipulato
clear;
close all;
%Sampling period
dt = 0.0005; %1 msec
%duration of motion (in secs)
Tf = 1.0; %1 sec
t = 0:dt:Tf;
%Initial position of end-effecto
pd8_0 = [5; 1; 0];
xde_0 = pd8_0(1);
yde_0 = pd8_0(2);
%final position
pd8_f = [6; 0; 0];
xde_f = pd8_f(1);
yde_f = pd8_f(2);
% desired trajectory (1st subtask): position (xd,yd); velocity (xd_,yd_)
Nmax = Tf/dt + 1;
k = linspace(0, Tf, Nmax);
a1 = 6*(xde_f - xde_0)/Tf^2;
a2 = -a1/Tf;
xd =(-a1*k.^3)/(3*Tf) + (a1*k.^2)/2 + xde_0;
yd =(-a1*k.^3)/(3*Tf) + (a1*k.^2)/2 + yde_0;
xd_ = a1*k + a2*k.^2;
yd_ = a1*k + a2*k.^2;
%%%%%%%%%% FIGURE FOR ANIMATION %%%%%%%%%%%%
%%%%%%% (moving robot stick diagram) %%%%%%%
figure;
%set(gcf, 'Position', get(0,'Screensize')); % Maximize figure.
axis([-1, 7 -0.5 3])
axis on
axis equal
hold on
xlabel('x (m)');
ylabel('y (m)');
plot(xd, yd, 'm:');
dtk = 10; %% interval between consecutive plots
pauseTime = 0.1;

% ****** KINEMATIC SIMULATION - Main loop ******
disp('Kinematic Simulation ...');

tt=0; tk=1;
qd(tk,1)=0; qd(tk,2)=0; qd(tk,3)=0; qd(tk,4)=0; qd(tk,5)=0; qd(tk,6)=0; qd(tk,7)=0; qd(tk,8)=0;
while (tt <= Tf)
    %Calculate Jacobian for current q
    c1 = cos(qd(tk,1));
    c12 = cos(qd(tk,1) + qd(tk,2));
    c123 = cos(qd(tk,1) + qd(tk,2) + qd(tk,3));
    c1234 = cos(qd(tk,1) + qd(tk,2) + qd(tk,3) + qd(tk,4));
    c12345 = cos(qd(tk,1) + qd(tk,2) + qd(tk,3) + qd(tk,4) + qd(tk,5));
    c123456 = cos(qd(tk,1) + qd(tk,2) + qd(tk,3) + qd(tk,4) + qd(tk,5) + qd(tk,6));
    c1234567 = cos(qd(tk,1) + qd(tk,2) + qd(tk,3) + qd(tk,4) + qd(tk,5) + qd(tk,6) + qd(tk,7));
    c12345678 = cos(qd(tk,1) + qd(tk,2) + qd(tk,3) + qd(tk,4) + qd(tk,5) + qd(tk,6) + qd(tk,7) + qd(tk,8));
    s1 = sin(qd(tk,1));
    s12 = sin(qd(tk,1) + qd(tk,2));
    s123 = sin(qd(tk,1) + qd(tk,2) + qd(tk,3));
    s1234 = sin(qd(tk,1) + qd(tk,2) + qd(tk,3) + qd(tk,4));
    s12345 = sin(qd(tk,1) + qd(tk,2) + qd(tk,3) + qd(tk,4) + qd(tk,5));
    s123456 = sin(qd(tk,1) + qd(tk,2) + qd(tk,3) + qd(tk,4) + qd(tk,5) + qd(tk,6));
    s1234567 = sin(qd(tk,1) + qd(tk,2) + qd(tk,3) + qd(tk,4) + qd(tk,5) + qd(tk,6) + qd(tk,7));
    s12345678 = sin(qd(tk,1) + qd(tk,2) + qd(tk,3) + qd(tk,4) + qd(tk,5) + qd(tk,6) + qd(tk,7) + qd(tk,8));

    Jac1(1,1) = -c1 - s12 - c123 - s1234 - s12345 - s123456 + c1234567  - s12345678;
    Jac1(1,2) = Jac1(1,1) + c1;
    Jac1(1,3) = Jac1(1,2) + s12;
    Jac1(1,4) = Jac1(1,3) + c123;
    Jac1(1,5) = Jac1(1,4) + s1234;
    Jac1(1,6) = Jac1(1,5) + s12345;
    Jac1(1,7) = c1234567 - s12345678;
    Jac1(1,8) = -s12345678;
    
    Jac1(2,1) = -s1 + c12 - s123 + c1234 + c12345 + c123456 + s1234567 + c12345678;
    Jac1(2,2) = Jac1(2,1) + s1;
    Jac1(2,3) = Jac1(2,2) - c12;
    Jac1(2,4) = Jac1(2,3) + s123;
    Jac1(2,5) = Jac1(2,4) - c1234;
    Jac1(2,6) = c12345678 + c123456 + s1234567;
    Jac1(2,7) = c12345678 + s1234567;
    Jac1(2,8) = c12345678;
    
    %Pseudo-inverse of jacobian
    Jac1_psinv = Jac1'/(Jac1*Jac1');
    
    %Subtask 1
    task1 = Jac1_psinv*[xd_(tk); yd_(tk)];
    %forward kinematics
    xd1(tk) = -s1;
    yd1(tk) = c1;
    xd2(tk) = xd1(tk) + c12;
    yd2(tk) = yd1(tk) + s12;
    
    xd3(tk) = xd2(tk) - s123;
    yd3(tk) = yd2(tk) + c123;
    
    xd4(tk) = xd3(tk) + c1234;
    yd4(tk) = yd3(tk) + s1234;
    
    xd5(tk) = xd4(tk) + c12345;
    yd5(tk) = yd4(tk) + s12345;
    
    xd6(tk) = xd5(tk) + c123456;
    yd6(tk) = yd5(tk) + s123456;
    
    xd7(tk) = xd6(tk) + s1234567;
    yd7(tk) = yd6(tk) - c1234567;
    
    xd8(tk) = xd7(tk) + c12345678;
    yd8(tk) = yd7(tk) + s12345678;
    
    %Subtask 2
    %minimize distance of joints 6 and 7 from middle line between obstacles
    
    %joint 7
    dist7_m(tk) = (yd7(tk) - yde_0)^2;
    
    xi7 = zeros(8,1);
    xi7(1) = -2*(yd7(tk) - yde_0)*(-s1 + c12 - s123 + c1234 + c12345 + c123456 + s1234567);
    xi7(2) = -2*(yd7(tk) - yde_0)*(c12 - s123 + c1234 + c12345 + c123456 + s1234567);
    xi7(3) = -2*(yd7(tk) - yde_0)*(-s123 + c1234 + c12345 + c123456 + s1234567);
    xi7(4) = -2*(yd7(tk) - yde_0)*(c1234 + c12345 + c123456 + s1234567);
    xi7(5) = -2*(yd7(tk) - yde_0)*(c12345 + c123456 + s1234567);
    xi7(6) = -2*(yd7(tk) - yde_0)*(c123456 + s1234567);
    xi7(7) = -2*(yd7(tk) - yde_0)*(s1234567);
    xi7(8) = 0;
    
    %joint 6
    dist6_m(tk) = (yd6(tk) - yde_0)^2;
    
    xi6 = zeros(8,1);
    xi6(1) = -2*(yd6(tk) - yde_0)*(-s1 + c12 - s123 + c1234 + c12345 + c123456);
    xi6(2) = -2*(yd6(tk) - yde_0)*(c12 - s123 + c1234 + c12345 + c123456);
    xi6(3) = -2*(yd6(tk) - yde_0)*(-s123 + c1234 + c12345 + c123456);
    xi6(4) = -2*(yd6(tk) - yde_0)*(c1234 + c12345 + c123456);
    xi6(5) = -2*(yd6(tk) - yde_0)*(c12345 + c123456);
    xi6(6) = -2*(yd6(tk) - yde_0)*(c123456);
    xi6(7) = 0;
    xi6(8) = 0;
    
    %joint 5
    dist5_m(tk) = (yd5(tk) - yde_0)^2;
    
    xi5 = zeros(8,1);
    xi5(1) = -2*(yd5(tk) - yde_0)*(-s1 + c12 - s123 + c1234 + c12345);
    xi5(2) = -2*(yd5(tk) - yde_0)*(c12 - s123 + c1234 + c12345);
    xi5(3) = -2*(yd5(tk) - yde_0)*(-s123 + c1234 + c12345);
    xi5(4) = -2*(yd5(tk) - yde_0)*(c1234 + c12345);
    xi5(5) = -2*(yd5(tk) - yde_0)*(c12345);
    xi5(6) = 0;
    xi5(7) = 0;
    xi5(8) = 0;
    
    k5 = 50;
    k6 = 50;
    k7 = 100;
    task2(:,tk) = (eye(8) - Jac1_psinv*Jac1)*(k5*xi5 + k6*xi6 + k7*xi7);
    
    %angular velocity
    %qd_(tk, :) = task1' + task2(:, tk)';

%****************** Parallagh A *******************
%     if max([dist5_m(tk), dist6_m(tk), dist7_m(tk)]) == dist5_m(tk)
%         task2(:,tk) = (eye(8) - Jac1_psinv*Jac1)*(20*xi5);
%     elseif max([dist5_m(tk), dist6_m(tk), dist7_m(tk)]) == dist6_m(tk)
%         task2(:,tk) = (eye(8) - Jac1_psinv*Jac1)*(20*xi6);
%     else
%         task2(:,tk) = (eye(8) - Jac1_psinv*Jac1)*(20*xi7);
%     end
%     qd_(tk, :) = task1' + task2(:, tk)';
    
%****************** Parallagh B *******************
    if max([dist5_m(tk), dist6_m(tk), dist7_m(tk)]) >= 0.01
        qd_(tk,:) = task2(:, tk)';
    else
        qd_(tk, :) = task1' + task2(:, tk)';
    end
    
    %end-effector velocity
    v8(:, tk) = Jac1 * qd_(tk, :)';
    
    % numerical integration --> kinematic simulation
    qd(tk+1,1) = qd(tk,1) + dt*qd_(tk,1);
    qd(tk+1,2) = qd(tk,2) + dt*qd_(tk,2);
    qd(tk+1,3) = qd(tk,3) + dt*qd_(tk,3);
    qd(tk+1,4) = qd(tk,4) + dt*qd_(tk,4);
    qd(tk+1,5) = qd(tk,5) + dt*qd_(tk,5);
    qd(tk+1,6) = qd(tk,6) + dt*qd_(tk,6);
    qd(tk+1,7) = qd(tk,7) + dt*qd_(tk,7);
    qd(tk+1,8) = qd(tk,8) + dt*qd_(tk,8);
    
    %plot robot
    if (mod(tk, dtk) == 0 || tk == 1)
       % cla %clear plot
        plot(xd, yd, 'm:');
        
        plot(0, 0, 'o');
        
          plot([0, xd1(tk)], [0, yd1(tk)],'b');
          %plot(xd1(tk), yd1(tk), 'ro');
        
          plot([xd1(tk), xd2(tk)], [yd1(tk), yd2(tk)],'b');
          %plot(xd2(tk), yd2(tk), 'ro');
        
          plot([xd2(tk), xd3(tk)], [yd2(tk), yd3(tk)],'b');
          %plot(xd3(tk), yd3(tk), 'ro');
        
        plot([xd3(tk), xd4(tk)], [yd3(tk), yd4(tk)],'b');
          %plot(xd4(tk), yd4(tk), 'ro');
        
        plot([xd4(tk), xd5(tk)], [yd4(tk), yd5(tk)],'b');
          %plot(xd5(tk), yd5(tk), 'ro');
        
        plot([xd5(tk), xd6(tk)], [yd5(tk), yd6(tk)],'b');
          %plot(xd6(tk), yd6(tk), 'ro');
        
        plot([xd6(tk), xd7(tk)], [yd6(tk), yd7(tk)],'b');
          %plot(xd7(tk), yd7(tk), 'ro');
        
        plot([xd7(tk), xd8(tk)], [yd7(tk), yd8(tk)],'b');
          %plot(xd8(tk), yd8(tk), 'ro');
        
         plot(xd8(tk), yd8(tk), 'g+');
        
        %OBSTACLES
        diam = 0.2;
        d = 1;
        %5
        rectangle('Position',[xde_0 - diam/2, yde_0 - d/2+0.15, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
        %6
        rectangle('Position',[xde_0 - diam/2, yde_0 - d/2+1.2, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
        %7
        rectangle('Position',[xde_0 - diam/2, yde_0 + d/2, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
        %8
        rectangle('Position',[xde_0 - diam/2+0.2, yde_0 - d/2+0.15, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
        %9
        rectangle('Position',[xde_0 - diam/2+0.2, yde_0 - d/2+1.2, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
        %10
        rectangle('Position',[xde_0 - diam/2+0.4, yde_0 - d/2+0.15, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
        %21
        rectangle('Position',[xde_0 - diam/2+0.4, yde_0 - d/2+1.2, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
        %11
        rectangle('Position',[xde_0 - diam/2+0.6, yde_0 - d/2+1.35, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
        %12
        rectangle('Position',[xde_0 - diam/2+0.6, yde_0 - d/2+1.55, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
        %13
        rectangle('Position',[xde_0 - diam/2+0.8, yde_0 - d/2+1.55, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
        %14
        rectangle('Position',[xde_0 - diam/2+1, yde_0 - d/2+1.55, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
        %15
        rectangle('Position',[xde_0 - diam/2+1.1, yde_0 - d/2+1.35, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
        %16
        rectangle('Position',[xde_0 - diam/2+1.1, yde_0 - d/2+1.15, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
        %17
        rectangle('Position',[xde_0 - diam/2+1.1, yde_0 - d/2+0.95, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
        %18
        rectangle('Position',[xde_0 - diam/2+0.9, yde_0 - d/2+0.95, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
       %19
       rectangle('Position',[xde_0 - diam/2+0.6, yde_0 - d/2+0.2, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
       %20
       rectangle('Position',[xde_0 - diam/2+0.6, yde_0 - d/2+0.4, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
         %zuoshang
      %1
      rectangle('Position',[xde_0 - diam/2-0.578, yde_0 + d/2-0.35, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
      %2
      rectangle('Position',[xde_0 - diam/2-0.578, yde_0 + d/2-0.15, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
      %3
      rectangle('Position',[xde_0 - diam/2-0.378, yde_0 + d/2-0.15, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue');
      %4  
      rectangle('Position',[xde_0 - diam/2-0.178, yde_0 + d/2-0.15, diam, diam], 'Curvature', [1,1], 'FaceColor', 'blue')
     
        %%%%%%%%%
        
        pause(pauseTime);
    end
    
    tk = tk + 1;
    tt = tt + dt;
end

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Ansible 自动化运维笔记(总结)
Ansible 是新出现的自动化运维工具,基于Python开发,集合了众多运维工具的优点.
王 瑞
2022/12/28
2.3K0
Ansible自动化运维配置与应用(结合实例)
注: command模块和shell模块的区别是:shell模块支持“管道符”及脚本。
阿dai学长
2019/04/03
2.8K0
Ansible 模块
bash无论在命令行上执行,还是bash脚本中,都需要调用cd、ls、copy、yum等命令;模块就是Ansible的“命令”,模块是ansible命令行和脚本中都需要调用的。常用的Ansible模块有yum、copy、template等。
Alone-林
2023/03/17
1.5K0
ansible生产常用十一大模块总结
注:-a参数后的命令用单引号,单引号,单引号;双引号有可能会出问题,特别是在user模块;
菲宇
2019/06/12
5940
ansible生产常用十一大模块总结
Ansible自动化运维的安装及常用模块详解
Ansible作为今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误。Ansible通过本身集成的非常丰富的模块可以实现各种管理任务,其自带模块超过上千个。更为重要的是,它操作简单,但提供的功能又非常丰富,在运维领域,几乎可以做任何事。 . Ansible自2012年发布以来,很快在全球流行,其特点如下:
小手冰凉
2019/10/17
1.8K0
Ansible 常用模块详解
经过前面的介绍,我们已经熟悉了 Ansible 的一些常识性的东西和如何编译安装Ansible,从本章开始我们将全面介绍 Ansible 的各种生产常用模块,这些也是我们使用 Ansible 的过程中必须掌握的重点,本章将介绍和使用 Ansible 中经常使用的一些模块,大体模块分为: 文件操作类,命令执行类,系统管理类,等使我们能对 Ansible 有一个全面的了解.
王 瑞
2022/12/28
1.4K0
Ansible自动化运维学习笔记1
基础概念 什么是ansible? 答:它是一个Linux系统上的”自动化运维工具”,类似一个”配置管理工具”;
全栈工程师修炼指南
2022/09/28
2K0
Ansible自动化运维学习笔记1
ansible安装
以上是一位运维工程师要做的一些工作,当我们的主机数量非常少时,我们可以手动登陆机器,手动敲命令来完成工作,但是当我们的主机数量有几百台、上千台之后我们再去每一台去处理就显得不现实了,所以这时我们需要学习ansible或者saltstack等来完成我们日常的工作
dogfei
2020/07/31
7030
自动化运维—Ansible(上)
  ansible甚至都不用启动服务,仅仅只是一个工具,可以很轻松的实现分布式扩展
yaohong
2019/09/11
2.7K0
自动化运维—Ansible(上)
Ansible常用模块实例
为了避免ansible每次下发指令都要输入目标主机密码,所以这里使用(ssh-keygen)在控制主机创建一对秘钥,使用(ssh-copy-id)来下发生成的公钥。
HaydenGuo
2019/12/12
1.1K0
Ansible常用模块实例
ansible
  ansible是目前最受运维欢迎的自动化运维工具,基于Python开发,集合了众多运维工具(SaltStack puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。   ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。
Cyylog
2020/08/19
4K1
Ansible自动化运维学习笔记1
基础概念 什么是ansible? 答:它是一个”配置管理工具”,它是一个Linux系统上的”自动化运维工具”;
全栈工程师修炼指南
2020/10/26
4.1K0
Ansible自动化运维学习笔记1
ansible常用模块简单介绍
本篇介绍下常用的模块。根据官方的分类,将模块按功能分类为:云模块、命令模块、数据库模块、文件模块、资产模块、消息模块、监控模块、网络模块、通知模块、包管理模块、源码控制模块、系统模块、单元模块、web设施模块、windows模块 ,具体可以参看官方页面。这里从官方分类的模块里选择最常用的一些模块进行介绍(commands模块上一篇已经介绍,这里不再提)。
小小科
2018/07/31
6490
云原生之 Ansible 篇(二)
ansible playbook 默认第一个 task 是 Gathering Facts 收集各主机的 facts 信息,以方便我们在 paybook 中直接引用 facts 里的信息。
看、未来
2022/05/06
1.6K0
云原生之 Ansible 篇(二)
Ansible简介、安装、命令及常用模块
  ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。   ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远 程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。
菲宇
2021/12/06
1.1K0
Ansible简介、安装、命令及常用模块
Ansible 以及 Ansible-playbook介绍
Anasible 是基于Python2-Paramiko 模块开发的自动化维护工具,实现了批量系统配置、部署、运行等功能。Ansible是基于模块工作的,本身不具备批量部署的功能,如果想要实现批量自动化部署,是Ansible自身的各种模块的集合。
jwangkun
2021/12/23
6.3K0
Ansible 以及 Ansible-playbook介绍
Ansible自动化运维学习笔记2
前言:在ansible中使用变量,能让我们的工作变得更加灵活,在ansible中变量的使用方式有很多种
全栈工程师修炼指南
2020/10/26
3.1K0
Ansible自动化运维学习笔记2
[Ansible专栏]Ansible常用模块介绍和使用 (文末抽奖)
前面我们介绍了,ansible能作为自动化配置管理,其实是由ansible的多种多样的模块来实现的。截止目前,ansible的模块已经高达3000+之多。但是个人在日常工作中,比较常见的大约20多个。下面我就大概介绍一些常见常用的模块。
没有故事的陈师傅
2022/12/06
5630
03 实战 Ansible-Playbook之初始化服务器
推荐专栏:https://blog.51cto.com/cloumn/detail/83from_distribution=VQcJVApVVQwxUwIHVQYFDA 代码gitee:https://gitee.com/wanghui1234/ansible_repo.git
alexhuiwang
2020/09/23
1.8K0
ansible常用模块详解-包含重点:scripts 脚本模块-自动化运维
# ansible 模块语法 ansible-doc -l # 查看 ansible 模块 # wc -l 统计数量 ansible eisc -m command -a "df -h" # ansible 执行eisc组
eisc
2021/04/08
2.5K0
相关推荐
Ansible 自动化运维笔记(总结)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验