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.8K10
代码可运行
举报
运行总次数: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 删除。

评论
登录后参与评论
1 条评论
热度
最新
长知识
长知识
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
七自由度冗余机械臂梯度投影逆运动学
冗余机械臂的微分逆运动学一般可以增加额外的优化任务。 最常用的是梯度投影算法 GPM (Gradient Project Method),文献 [1] 中第一次将梯度投影法应用于关节极限位置限位中。 该算法中设计基于关节极限位置的优化指标, 并在主任务的零空间中完成任务优化。 此种思想也用于机械臂的奇异等指标优化中。 Colome 等 对比分析了速度级微分逆向运动学中的关节极限位置指标优化问题, 但是其研究中的算法存在一定的累计误差, 因而系统的收敛性和算法的计算稳定性难以得到保证。 其他学者综合多种机器人逆向运动学方法, 衍生出二次计算方法、 梯度最小二乘以及模糊逻辑加权最小范数方法等算法。Flacco 等 针对七自 由度机械臂提出一种新的零空间任务饱和迭代算法, 当机械臂到达关节限位时, 关节空间利用主任务的冗余度进行构型调整, 从而使得机械臂回避极限位置。 近年来, 关于关节极限回避情况下的冗余机械臂运动规划成为了很多学者的研究方向, 相应的改进 策 略 也 很 多.
ZC_Robot机器人技术
2020/10/28
6.8K2
七自由度冗余机械臂梯度投影逆运动学
七自由度冗余机械臂扩展任务逆运动学:扩展雅可比法
机械臂的运动学研究机械臂关节空间和任务空间的映射关系, 分为正运动学和逆运动学。 其中, 在关节空间已知的条件下求解任务空间的位置和姿态称为正动学问题; 相反, 通过已知的任务空间求解关节空间各个关节的位置, 称为逆运动学问题。冗余机器人的逆向运动学主要有以下几种方法:
ZC_Robot机器人技术
2020/11/01
4.1K8
七自由度冗余机械臂扩展任务逆运动学:扩展雅可比法
硅步提供Franka Emika七自由度机械臂--协作机器人的明星
自从2016年在汉诺威机器人大赛获得冠军后,Franka Emika这个公司就获得了太多的关注,它的产品,拥有七个自由度的机械手臂Panda,有一个可爱的名字,更有十分强大的性能。今天起,您可通过您可靠的老朋友——硅步机器人,了解、咨询、参观、当然也可以购买到Panda机械臂。
硅步机器人
2019/03/27
1.2K0
硅步提供Franka Emika七自由度机械臂--协作机器人的明星
基于matlab的机械臂仿真_移动机器人matlab运动学仿真
目的 本文手把手教你在 Mathematica 科学计算软件中搭建机器人的仿真环境,具体包括以下内容:    1 导入机械臂的三维模型    2 正\逆运动学仿真    3 碰撞检测    4 轨迹规划    5 正\逆动力学仿真    6 运动控制 文中的所有代码和模型文件都在此处:https://github.com/robinvista/Mathematica 。使用的软件版本是 Mathematica 11.1,较早的版本可能缺少某些函数,所以最好使用最新版。交流网站是www.robotattractor.com。进入正文之前不妨先看几个例子:
全栈程序员站长
2022/11/01
5.1K0
基于matlab的机械臂仿真_移动机器人matlab运动学仿真
博客园——MetaWeblog API 接口测试
!> postman没测成,传base64字符串[试过各种情况]一直报错说文件为空,建议直接写接口,传二进制文件流就ok
思索
2024/08/15
1670
博客园——MetaWeblog API 接口测试
PbootCMS 后台登录界面“3D 云”背景
1.找到后台登录模板文件:/apps/admin/view/default/index.html
Savalone
2020/04/21
9.6K3
javaSwing的JTextField自动补全
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163845.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/15
3K0
Python实现 —【简易】12306爬虫[通俗易懂]
最近这几天,学习了一下python,对于爬虫比较感兴趣,就做了一个简单的爬虫项目,因为快过年了么,要买回家的火车票,所以呢,通过分析12306网站,写了一个爬虫,现在,就将代码贴出来,分析的过程就不详细的介绍了,就是通过chorme浏览器进行分析。
全栈程序员站长
2022/08/22
7.6K0
Python实现 —【简易】12306爬虫[通俗易懂]
【Ruby】【改gem源镜像】【Win10 + Jruby-9.1.2.0 + Rails 5.1.3 + gem 2.6.4 】
(1)> gem sources –add http://gems.ruby-china.org 遇到问题: Error fetching https://gems.ruby-china.org/: certificate verify failed (https://gems.ruby-china.org/specs.4.8.gz)
全栈程序员站长
2022/09/06
8110
获取base64编码格式的图片大小[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151123.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/06
2.2K0
win7 64位官方旗舰版上搭建ruby on rails的步骤
———-第一步:安装ruby———— 1.安装 rubyinstaller-2.2.4-x64.exe ,记得勾选 add path…选项,安装完之后 ruby -v 查看版本号,比如 ruby 2.2.4p230 (2015-12-16 revision 53155) [x64-mingw32] (windows请安装1.9以上2.3以下版本的ruby) ————————————– ———-第二步:安装gem源———– 2. gem sources 查看当前使用的源地址。 3. gem sources -r https://rubygems.org/ 删除当前默认的源地址。 4. gem sources -a http://gems.ruby-china.org/ 添加源地址。 5. gem sources -u 更新源的缓存 ————————————– ———-第三步:安装Devkit———- 安装 DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe 在cmd里面 进入 Devkit 的安装目录 比如:E:\Devkit 6. ruby dk.rb init 初始化 7. 在E:\Devkit 里面找到 config.yml,在里面 加上 – C:\Ruby22-x64 (C:\Ruby22-x64 为ruby的硬盘绝对路径) 8. ruby dk.rb install 安装 ————————————– ———-第四步:安装rails———– 9. gem install rails –no-rdoc –no-ri 可以不安装文档,通过 rails -v 查看版本号,比如 Rails 4.2.6 ————————————– ———-第五步:测试rails———– 进入想要建立ruby工程的目录,假定要建立demo工程 10. rails new demo 建立一个 demo 名的工程 11.进入 demo文件夹里面 修改 Gemfile 文件,注释掉第一行# source ‘https://rubygems.org’ 并添加 source ‘http://gems.ruby-china.org’ 12.再次执行 rails new demo ,过程中 选 n 不覆盖 13.cd 进入 demo 目录,执行 rails server 启动服务 14.在浏览器输入 http://localhost:3000/ 如果看到 Welcome aboard You’re riding Ruby on Rails! 字样,代表rails安装成功。 ————————————–
全栈程序员站长
2022/09/06
5650
base编码器_base100编码
Base64编码 是一种基于 64 个可打印字符来表示二进制数据的方法。目前 Base64 已经成为网络上常见的传输 8 位二进制字节代码的编码方式之一。
全栈程序员站长
2022/11/10
4650
base编码器_base100编码
数据库的增删改查加遍历
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160891.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/13
8590
vim的配置文件_vim编辑文件命令
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
1.2K0
12306站点及车次信息「建议收藏」
本来想用selenium自动化获取页面元素得到车站信息,结果直接F12在network中找到了车站信息,而且没有加密。
全栈程序员站长
2022/09/30
2.6K0
12306站点及车次信息「建议收藏」
Data URI scheme「建议收藏」
data URI scheme 允许我们使用内联(inline-code)的方式在网页中包含数据,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。常用于将图片嵌入网页。
全栈程序员站长
2022/11/02
5780
Improvise_a_Jazz_Solo_with_an_LSTM_Network_v3a-2
Welcome to your final programming assignment of this week! In this notebook, you will implement a model that uses an LSTM to generate music. You will even be able to listen to your own music at the end of the assignment.
列夫托尔斯昊
2020/08/25
1.6K0
Improvise_a_Jazz_Solo_with_an_LSTM_Network_v3a-2
相关推荐
七自由度冗余机械臂梯度投影逆运动学
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验