1"use strict";(self.webpackChunkopenarm_site=self.webpackChunkopenarm_site||[]).push([["705"],{54925(e,n,l){l.r(n),l.d(n,{metadata:()=>i,default:()=>c,frontMatter:()=>a,contentTitle:()=>o,toc:()=>d,assets:()=>s});var i=JSON.parse('{"id":"teleop/leader-follower/setup-guide","title":"Setup Guide","description":"This guide walks you through the steps to set up and build the openarm_teleop library.","source":"@site/docs/teleop/leader-follower/setup-guide.md","sourceDirName":"teleop/leader-follower","slug":"/teleop/leader-follower/setup-guide","permalink":"/teleop/leader-follower/setup-guide","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedAt":1790285634000,"sidebarPosition":1,"frontMatter":{"title":"Setup Guide","sidebar_position":1},"sidebar":"topSidebar","previous":{"title":"Leader-Follower Teleoperation","permalink":"/teleop/"},"next":{"title":"Unilateral Control","permalink":"/teleop/leader-follower/unilateral-control"}}'),r=l(74848),t=l(28453);let a={title:"Setup Guide",sidebar_position:1},o="\u{1F6E0}\uFE0F OpenArm Teleop - Setup Guide",s={},d=[{value:"\u{1F680} Step 1: Clone the Teleop Repository",id:"-step-1-clone-the-teleop-repository",level:2},{value:"2. Install Dependencies",id:"2-install-dependencies",level:3},{value:"3. Build the teleop library",id:"3-build-the-teleop-library",level:3},{value:"Step 4: Initialize the CAN Network",id:"step-4-initialize-the-can-network",level:3}];function p(e){let n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"\uFE0F-openarm-teleop---setup-guide",children:"\u{1F6E0}\uFE0F OpenArm Teleop - Setup Guide"})}),"\n",(0,r.jsxs)(n.p,{children:["This guide walks you through the steps to set up and build the ",(0,r.jsx)(n.code,{children:"openarm_teleop"})," library."]}),"\n",(0,r.jsx)(n.p,{children:"Before proceeding, please ensure the following dependencies are satisfied:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\u2705 ",(0,r.jsx)(n.code,{children:"openarm_description"})," library (see ",(0,r.jsx)(n.a,{href:"/api-reference/description",children:"OpenArm Description"}),")"]}),"\n"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"-step-1-clone-the-teleop-repository",children:"\u{1F680} Step 1: Clone the Teleop Repository"}),"\n",(0,r.jsxs)(n.p,{children:["Clone the ",(0,r.jsx)(n.code,{children:"openarm_teleop"})," repository and move into the directory:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/enactic/openarm_teleop.git\ncd openarm_teleop\n"})}),"\n",(0,r.jsx)(n.h3,{id:"2-install-dependencies",children:"2. Install Dependencies"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo apt install -y software-properties-common\nsudo add-apt-repository -y ppa:openarm/main\nsudo apt update\nsudo apt install -y \\\n libeigen3-dev \\\n libopenarm-can-dev \\\n liborocos-kdl-dev \\\n liburdfdom-dev \\\n liburdfdom-headers-dev \\\n libyaml-cpp-dev \\\n openarm-can-utils\n"})}),"\n",(0,r.jsx)(n.h3,{id:"3-build-the-teleop-library",children:"3. Build the teleop library"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cmake -S . -B build -DCMAKE_BUILD_TYPE=Release\ncmake --build build\n"})}),"\n",(0,r.jsx)(n.h3,{id:"step-4-initialize-the-can-network",children:"Step 4: Initialize the CAN Network"}),"\n",(0,r.jsx)(n.p,{children:"Each arm requires a dedicated CAN interface (1 arm = 1 CAN port)."}),"\n",(0,r.jsxs)(n.p,{children:["To initialize a CAN interface (e.g., ",(0,r.jsx)(n.code,{children:"can0"}),") in CAN FD mode, run:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"openarm-can-configure-socketcan can0 -fd\n"})}),"\n",(0,r.jsx)(n.p,{children:"If you have all CAN interfaces (can0 to can3) connected, you can use the following command:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"open
1arm-can-configure-socketcan-4-arms -fd\n"})})]})}function c(e={}){let{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.