Ubuntu 18.04 노트북(Linux) 준비
1. 우분투 18.04 다운로드
2. 우분투 설치 USB 만들기
3. 우분투 설치공간 마련을 위해 파티션 나누기
4. 우분투 설치
주 파티션
- 크기: 마련한 공간과 동일, 종류: 주, 마운트 위치: /
스왑 파티션
- 크기: 나머지 공간, 종류: 논리, 용도: 스왑 영역
5. USB 제거 후 재부팅
설치 코드
sudo apt update sudo apt install software-properties-common apt-transport-https wget wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" sudo apt install code
- Extension 설치 (Python, Ros, Code runner 등)
- Hilighter
1. anaconda 설치
공식 사이트 링크
2. 다운받은 파일 확인cd ~/Downloads ls3. bash 명령어로 쉘 스크립트 실행
# home 디렉토리로 이동 후 bash Anaconda3-2022.10-Linux-x86_64.sh # 실제로 다운로드 받은 버전을 입력해야 함Enter를 눌러 약관을 쭉 확인하고 약관에
yes입력하여 동의
4. 설정source ~/.bashrc conda config --set auto_activate_base false5. 콘다 환경 활성화
conda activate conda deactivate # 비활성화6. anaconda 가상환경 만들고 python 설치
conda create -n ros python=3.8.5 # conda create -n <가상환경이름> python=<설치할버전> conda env list # 가상환경 목록 보여줌 conda env remove -n ros # 가상환경 삭제 conda activate python38 # 가상환경 활성화
1. 패키지 설치를 위한 channel conda-forge로 변경 (기본 채널보다 업데이트 빠르고 호환성 면에서도 이득. 다만 기본 채널이 더 안정적 )
conda config --add channels conda-forge && conda config --set channel_priority strict
conda config --show channels(우선권 : 상단채널 )
2. 원하는 라이브러리 설치
기본적으로 깔리므로 나중에 필요할 때 갈면 됨
- VS Code 열기
code- VS Code 창에서 ctrl+shift+p
- "Python : Select interpreter" 선택
- 원하는 가상환경 선택
- File > New Text File
- Select a language > Python
- 아래 배너에서 가상환경 확인
Ros1 설치 (Ubuntu18.04, ROS Melodic) 링크
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt install curl curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo apt update sudo apt install ros-noetic-desktop-full sudo apt install ros-noetic-slam-gmapping echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential python3-roslaunch sudo apt install python3-rosdep sudo rosdep init rosdep update roscore
Ros1 설치 (Ubuntu20.04, ROS Noetic) 링크
sudo apt update 입력 후sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654 입력 후Ros 삭제
sudo apt-get purge ros-noetic-*
삭제되었는지 확인 (새 터미널을 열어서)
rosversion -d
제거 후 새 터미널을 열때 아래와 같은 코드가 뜬다면
(bash: /opt/ros/noetic/setup.bash: No such file or directory)
: gedit ~/.bashrc
입력 후 환경 설정 파일이 텍스트 편집기로 열리면
해당 Ros 버전(Noetic)과 관련된 모든 줄을 찾아 삭제하고 저장
- 설정 및 패키지 설치
sudo apt update && sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 export LANG=en_US.UTF-8 sudo apt update && sudo apt install curl gnupg2 lsb-release curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list' sudo apt update sudo apt install ros-foxy-desktop
- 실행환경 설정
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
- 부가적 설치(개발할 때 편리)
sudo apt install -y python3-pip pip3 install -U argcomplete sudo apt install python3-colcon-common-extensions
- 테스트 명령어 - 2개의 터미널을 열어 메세지 송/수신 확인
ros2 run demo_nodes_cpp talker ros2 run demo_nodes_py listener
1. 베포판 다운로드
링크 에 접속하여 ".deb Ubuntu "다운
2. 다운로드 파일 확인 및 파일 복사(ctrl+shift+c)
cd ~/Downloads
ls
2. 설치( 파일 경로 내에서)
sudo apt install ./[붙여넣기](직접 치기)
3. 실행
sdkmanager
4. JetPack (Jetson Firmware) 다운로드
Target Hardware : Jetson Xavier NX
1. 점퍼 핀을 FC REC 와 GND 에 연결 후 노트북-Jetsond 연결(USB-C)
2. Nvidia SDK Manager 로그인
3. Target hardware : Jetson xavier NX [developer kit version] < 선택
4. 라이센스 동의 후 COUNTINUE (Download now install later 박스는 체크 x)
5. Flash
- Username, Password 지정
6. Install
- Connection: NVME (SSD)
- IP address 는 USB C-Type connector 와 연결되는 기본값 ip 사용, 192.168.55.1
- Jetson 의 username 과 password 를 입력
- Install 을 클릭하여 계속 진행
7. 설치 완료와 부팅화면 확인 후 FC REC 와 GND에 연결된 점퍼 핀 제거 후 재부팅 진행
1. 노트북 & Jetson 같은 Wifi에 연결 (중요!)
2. 작업공간 만든 후, 깃 클론 진행
mkdir -p f1tenth_ws/src cd f1tenth_ws/src git clone https://github.com/Kwally1209/F1tenth_bootcamp.git(F1tenth Git 저장소 복제 주소 > F1tenth_Bootcamp )
3. 패키지 설치
sudo apt-get install python3-pip sudo apt-get install ros-noetic-driver-base sudo apt-get install ros-noetic-urg-node sudo apt-get install ros-noetic-map-server sudo apt-get install ros-noetic-joy4. f1tenth_ws 위치에서 catkin_make 빌드 진행
cd .. catkin_make5. python 파일(joy_teleop.py) 실행 권한 부여
cd ~/f1tenth_ws/src/F1tenth_bootcamp/racecar/racecar/scripts chmod +x joy_teleop.py6. joy_teleop.py 파일 수정
- 279번 줄 ", e" -> " as"
- 284번 줄, iteritems > items
7. Wifi 연결 후 ip 확인 (Jetson ip)
ifconfig8. ~/.bashrc 작성
- 아래 내용 그대로 추가 후 저장 (Nvidia & 노트북)
export ROS_MASTER_URI=http://[차량 Nvidia IP]:11311 # 192.168.1.113 export ROS_IP=[차량 Nvidia IP] export ROS_HOSTNAME=$ROS_IP alias b='gedit ~/.bashrc' alias s='source ~/.bashrc' alias v1='sudo mkdir /dev/sensors' alias v2='sudo ln -s /dev/ttyACM0 /dev/sensors/vesc' alias v3='sudo chmod 777 /dev/ttyACM0' alias v4='source ~/f1tenth_ws/devel/setup.bash' alias v5='roslaunch racecar teleop.launch' alias vesc='sudo mkdir /dev/sensors && sudo ln -s /dev/ttyACM0 /dev/sensors/vesc && sudo chmod 777 /dev/ttyACM0 && source ~/f1tenth_ws/devel/setup.bash && roslaunch racecar teleop.launch' alias lidar='rosrun urg_node urg_node _ip_address:=192.168.0.10' alias sb='source ~/.bashrc' alias vb='vim ~/.bashrc' alias hector='source ~/hector/devel/setup.bash && roslaunch hector_mapping mapping_default.launch' alias mapsave='rosrun map_server map_saver -f map_data' alias particle='source /home/hmclab/parScle/devel/setup.bash && roslaunch particle_filter localize.launch' alias joy='rosrun joy joy_node _autorepeat_rate:=20.0'
- ".bashrc" 파일 실행
source ~/.bashrc8. 통신 확인
1) Jetsonrosecore2) 노트북
rosenode ping --all
1. Ethernet 연결 (Nvidia)
Settings > Network > Wired > "[+]"
IPv4 method : Manual
Addresses : 192.168.0.15
Netmask : 24
Gateway : 192.168.0.12. 연결 확인
1) Ping test
ping 192.168.0.15
(Ethrenet address)
2) Ros에서 LIDAR 읽어 들이는지 확인
lidar
or
rosrun urg_node urg_node _ip_address:=192.168.0.10
3) 센서 값 받아보기
rostopic echo /scan
4) 센서 값 시각적으로 확인
rosrun rviz rviz
5) Rviz
[add] > [By topic] > [/scan] > [laser] < 더블 클릭
map : "/laser"로 수정 (Topic : /scan)
PID
1) Nvidia 보드에 조이스틱 USB 연결
2) 전면 스위치 D > X
3) 연결 확인cd /dev/input ls #js0 확인 sudo jstest /dev/input/js0 # 값 나오는지 확인 joy # alias commend rostopic echo /joy # 조이스틱 버튼과 축 값 확인4) 작동 확인
- Jetson Terminal
1)roscore
2)vesc
3)lidar
4)joy- 좌측 앞의 LB 스위치를 한번 누른 후, 다시 계속 누른 상태에서 조작
- Parameter 조정
1) Speed & Steering angle: joy_teleop.yaml 파일 수정
파일 위치: f1_tenth/src/F1tenth_bootcamp/racecar/racecar/config/racecar-v2
-> human_control 부분의 scale 값(m/s) 수정
2) Initial steering angle: vesc.yml 파일 수정
1) Motor 정상작동 확인
- Wall_following_lab.py 코드 수정
파일위치: Home/f1tenth_ws/src/F1tenth_bootcamp/racecar/racecar/scripts
수정사항 (error 따라가면 됨)
1) real_velocity (instance) 부분 주석 처리
2) def pid_control(self, error, velocity):
pass
부분 들여쓰기 해주기
3) 파일 실행권한 부여
cd f1tenth_ws/src/F1tenth_bootcamp/racecar/racecar/scripts
ls -all해당 파일에 x(excutable)표시 없으면
chmod +x <파일이름.py>
4) roscore, vesc, lidar 실행
5) 해당 디렉토리로 이동 후 코드 실행
python <파일이름.py>
(코드)#!/usr/bin/env python from __future__ import print_function import sys from math import pi, atan, sin, cos import numpy as np import time # ROS Imports import rospy from sensor_msgs.msg import Image, LaserScan from ackermann_msgs.msg import AckermannDriveStamped, AckermannDrive from std_msgs.msg import Float64 from nav_msgs.msg import Odometry # TO DO: Tune parameters # PID CONTROL PARAMS kp = 2.2 kd = 0.01 ki = 0.001 servo_offset = 0.0 prev_error = 0.0 error = 0.0 integrator = 0.0 prev_time = time.time() # WALL FOLLOW PARAMS ANGLE_RANGE = 270 # Hokuyo 10LX has 270 degrees scan DESIRED_DISTANCE_RIGHT = 0.50 # meters DESIRED_DISTANCE_LEFT = 0.5 VELOCITY = 4 # meters per second CAR_LENGTH = 0.50 # TfollowLeftraxxas Rally is 20 inches or 0.5 meters class WallFollow: """ Implement Wall Following on the car """ def __init__(self): # Topics & Subs, Pubs self.lidar_sub = rospy.Subscriber("/scan", LaserScan, self.lidar_callback) #: Subscribe to LIDAR self.velocity_sub = rospy.Subscriber("/vesc/odom", Odometry, self.callback_vel)#: Subscribe to VESC self.drive_pub = rospy.Publisher('/vesc/ackermann_cmd', AckermannDriveStamped, queue_size=10) #: Publish to drive # self.start = 0 # self.timestamp = rospy.Time.now().secs + rospy.Time.now().nsecs / 1000000000 # self.prev_timestamp = self.timestamp # self.time_duration = 0 def callback_vel(self, data): #TO DO: Subscribe Current Velocity #self.real_velocity = data.twist.twist.linear.x def pid_control(self, error, velocity): pass # TODO: Use kp, ki & kd to implement a PID controller # Example: # drive_msg = AckermannDriveStamped() # drive_msg.header.stamp = rospy.Time.now() # drive_msg.header.frame_id = "laser" # drive_msg.drive.speed = 0 # self.drive_pub.publish(drive_msg) def lidar_callback(self, data): global kp global kd global ki global servo_offset global prev_time global prev_error global error global integrator # get velocity to get AC length drive_msg = AckermannDriveStamped() drive_msg.header.frame_id = "laser" drive_msg.header.stamp = rospy.Time.now() drive_msg.drive.speed = 4 # VELOCITY drive_msg.drive.steering_angle = -2 # Steering angle self.drive_pub.publish(drive_msg) def main(args): rospy.init_node("WallFollow_node", anonymous=False) wf = WallFollow() rospy.sleep(0.1) rospy.spin() if __name__ == '__main__': main(sys.argv)
ROS에서 로지텍 조이스틱을 사용하기 위해 ros-noetic-joy 패키지를 설치했다면, 이를 이용하여 로지텍 조이스틱으로 로봇이나 드론을 제어할 수 있습니다. 아래는 로지텍 조이스틱을 사용하여 간단한 조작을 시작하는 단계입니다:
로지텍 조이스틱 연결: 먼저 로지텍 조이스틱을 컴퓨터에 연결합니다. 일반적으로 USB 포트를 사용하여 연결하게 됩니다.
ROS Joy 패키지 실행: ros-noetic-joy 패키지를 사용하려면 ROS를 실행해야 합니다. 터미널을 열고 다음 명령어로 ROS를 실행합니다:
roscore
이 명령어를 실행하면 ROS 마스터가 시작됩니다.
Joy 노드 실행: 로지텍 조이스틱을 ROS에서 사용하기 위해 joy 노드를 실행합니다. 새로운 터미널 창을 열고 다음 명령어를 실행합니다:
rosrun joy joy_node
이 명령어는 조이스틱의 입력을 ROS 메시지로 변환하여 게시합니다.
조이스틱 메시지 확인: 로지텍 조이스틱의 입력 메시지를 확인하려면 새로운 터미널 창을 열고 다음 명령어를 실행합니다:
bash
rostopic echo /joy
이 명령어를 실행하면 조이스틱의 입력 메시지가 실시간으로 표시됩니다. 이를 통해 조이스틱의 버튼과 축 값을 확인할 수 있습니다.
조이스틱으로 로봇 또는 드론 제어: 이제 로지텍 조이스틱의 입력 메시지를 사용하여 로봇 또는 드론을 제어할 수 있습니다. 조이스틱의 버튼과 축 값에 따라 원하는 동작을 프로그래밍하고, 해당 동작을 실행하는 ROS 패키지를 만들어야 합니다. 이 부분은 로봇 또는 드론의 제어 시스템과 연관이 있으므로 자세한 내용은 해당 시스템의 문서를 참조하거나 필요한 ROS 패키지를 설치하고 사용법을 익히는 것이 필요할 것입니다.
로지텍 조이스틱을 사용하여 ROS에서 로봇 또는 드론을 제어하려면 로봇 또는 드론의 모델과 환경에 따라 추가적인 설정 및 프로그래밍이 필요할 수 있습니다. 이러한 작업은 로봇 또는 드론의 특정 ROS 패키지나 컨트롤러에 대한 문서와 지침을 따라야 합니다.
https://www.youtube.com/results?search_query=f1tenth+racing+tutorial