기초 단계

1. ROS 설치하고, 설정하기

2. ROS 파일 시스템 살펴보기

3. ROS 패키지 만들기

4. ROS 패키지 빌드하기

5. ROS 노드에 대해서 이해하기

6. ROS Topic을 이해하기

7. ROS 서비스와 파라미터 이해하기

8. rqt_console과 ros launch 사용하기

9. rosed로 파일 수정하기

10. ROS msg와 srv 만들기

11. C++로 간단한 퍼블리셔와 서브스크라이버 작성하기

12. 파이썬으로 간단한 퍼블리셔와 서브스크라이버 작성하기

13. 간단한 퍼블리셔와 서브스크라이버에 대해서 살펴보기

14. 간단한 서비스와 클라이언트 코드 작성하기(C++)

15. 간단한 서비스와 클러이언트 코드 쓰기(파이썬)

16. 간단한 서비스와 클라이언트에 대해서 알아보기

17. 데이터를 녹음하고 재생하기

18. bag file에서 메시지 읽기

19. roswtf 시작하기

20. ROS wifi 살펴보기

21. 다음에 할께 뭐가 있을까?

 

 

http://wiki.ros.org/ROS/Tutorials/UnderstandingServicesParams

 

이번 장에서는 ROS 서비스와 파라미터 그리고 rosservice와 rosparam이라는 커맨드라인 명령어도 배워보자

 

 

1. ROS Service

 ros의 서비스는 노드가 다른 노드랑 통신하는 또 다른 방식으로 서비스로 노드가 요청 request를 보내면 응답 response를 받는 식이다.

 

2. rosservice 사용하기

 rosservice는 ROS 클라이언트와 서비스를 다루는 명령어로 이런 옵션들을 쓸수 있다

- rosservice list  : 동작중인 서비스들 목록 출력

- rosservice call : 매개변수를 줘서 서비스 호출하기

- rosservice type : 서비스의 타입 출력하기

- rosservice find : 서비스 타입으로 서비스 찾기

- rosservice url : 서비스 ROSRPC uri 출력하기

 

2.1 rosservice list

 동작하고 있는 rosservice들을 보여주는데, turtlesim_node를 돌리면 저런 서비스가 나오나보다

 

 

2.2 rosservice type [service]

해당 서비스의 타입을 출력함

 

2.3 rosservice call

해당 서비스를 매개변수를 줘서 호출한다

아래의 경우 /clear 서비스를 호출해서 거북이의 궤적을 클리어함

/spawn 서비스의 경우 x, y, z, theta, name 을 인자로 받는데 한번 써보자

 

 

 

3. rosparam 사용하기

- rosparam은 ros 파라미터 서버에다가 데이터를 담고 다루는 명령어.

- 파라미터 서버는 정수, 실수, 부울 등을 저장

- rospram은 YAML 문법을 따름

- rosparam set : 파라미터 설정

- rosparam get : 파라미터 가져옴

- rospram load : 파일에서 파라미터를 로드

- rosparam dump : 파라미터를 파일에 저장

- rosparam delete : 파라미터 삭제

- rosparam list : 파라미터 이름 목록 출력

3.1 rosparam list

 turtlesim 노드는 background_r/g/b 3 파라미터를 파라미터 서버에 두고있다.

 

 

3.2 rosparam set, rosparam get

rosparam set [param_name]

rosparam get [param_name]

 

배경색 r 파람을 200으로 설정하고 /clear 서비스를 부르니 색상이 바뀌었다.

 

터틀심 배경_g 의 파람을 얻으면 이렇게 나온다

 

 

지금까지 본게

토픽, 서비스, 파람. 전에는 토픽만 알았는데 되게 아리까리하네..

 

 

 

 

기초 단계

1. ROS 설치하고, 설정하기

2. ROS 파일 시스템 살펴보기

3. ROS 패키지 만들기

4. ROS 패키지 빌드하기

5. ROS 노드에 대해서 이해하기

6. ROS Topic을 이해하기

7. ROS 서비스와 파라미터 이해하기

8. rqt_console과 ros launch 사용하기

9. rosed로 파일 수정하기

10. ROS msg와 srv 만들기

11. C++로 간단한 퍼블리셔와 서브스크라이버 작성하기

12. 파이썬으로 간단한 퍼블리셔와 서브스크라이버 작성하기

13. 간단한 퍼블리셔와 서브스크라이버에 대해서 살펴보기

14. 간단한 서비스와 클라이언트 코드 작성하기(C++)

15. 간단한 서비스와 클러이언트 코드 쓰기(파이썬)

16. 간단한 서비스와 클라이언트에 대해서 알아보기

17. 데이터를 녹음하고 재생하기

18. bag file에서 메시지 읽기

19. roswtf 시작하기

20. ROS wifi 살펴보기

21. 다음에 할께 뭐가 있을까?

 

 

http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics

 

원래 오늘  5장 까지만 하려했는데, 생각보다 중간에 짧은게 많아서 1 ~ 2개 더하려고한다.

이 속도라면 2 ~ 3정도면 비기너 레벨은 다 훑어볼수 있을거같네 가 아니라

지금 11시인데 기구 설계하는걸 있었다.

이번 장은 조금 긴데 오늘 ros는 여기까지만 해야겠다.

 

1. 설정

1.1 roscore

이거야 뭐 roscore(master:네임서버 + rosout +  파라미터 서버) 그냥 실행하면되고

 

1.2 turtlesim

아까 roscore와 같이 실행해두었다.

 

1.3 거북이 키보드로 이동시키기

turtle_teleop_key 노드를 실행해서 거북이를 움직여보자

rosrun turtlesim turtle_teleop_key

 

 

 

 

2. ROS Topic

 turtlesim_node와 turtle_teleope_key 노드는 ROS Topic으로 통신하고 있다.

turtle_teleop_key는 키 입력을 어느 토픽으로 퍼블리싱하고, turtlesim은 같은 토픽을 받아서 거북이를 이동시키는걸 보여준다.

 

 

2.1 rqt_graph

rqt_graph로는 동적인 그래프를 만들어서 시스템이 어떻게 돌아가는지 볼수 있는데, rqt 패키지에 있다.

rosrun rqt_graph rqt_graph 로 실행해서 볼수 있다.

 

보니까 /teleop_turtle이란 노드가 /turtle1/cmd_vel이란 토픽으로 퍼블리시하고, 이걸 /turtlesim이 받아들이고 있다.

 

2.2 rostopic 소개

rostopic은 ROS의 어느 토픽/주제에 대한 정보를 얻거나 활용하는 도구로 다음과 같은 옵션 명령들이 존재함

- rostopic bw : 토픽이 사용하는 대역폭 표시

- rostopic echo : 스크린에다가 토픽 메시지 표시

- rostopic hz : 토픽의 퍼블리시 주기

- rostopic list : 현재 동작중인 토픽 정보들을 출력

- rostopic pub :어느 토픽으로 데이터 퍼블리시

- rostopic type : 토픽 타입을 출력

 

 

 

2.3 rostopic echo

rostopic echo로 퍼블리시 되고있는 데이터를 볼수 있다.

한번 turtle_teleop_key에서 어떻게 퍼블리시하나 아래 명령으로 보면

rostopic echo /turtle1/cmd_vel

 

키 입력을하면 거기에 따라 선속도, 각속도가 나온다.

 

3. ROS 메시지

 토픽/주제를 이용해서 통신을 할때는 노드간에 ROS 메시지를 보내면서 이뤄진다. 이때 ROS 토픽의 타입은 메시지를 퍼블리시하는 노드, 퍼블리셔가 보내는 메시지의 타입이 곧 토픽의 타입이 되며 다음 명령으로 해당 토픽의 메시지 타입을 볼 수 있다.

 

rostopic type [topic]

지금하고 있는 예제서 rostopic type /turtle1/cmd_vel 을하면 대략적인 메시지 타입을

rosmsg show geometry_msgs/Twist를 하면 해당 메시지를 자세히 보여준다.

 

 

4. rostopic 계속 진행해서 보자

4.1 rostopic pub

rostopic pub는 rosrun으로 퍼블리셔를 동작시킬필요엇이 해당 토픽으로 값을 퍼블리시하는 명령어다.

형식 : rostopic pub [topic] [msg_type] [args]

 

아까 본 cmd_vel을 linear x는 2, angular z 1.8로 퍼블리시 하면 다음과같이 동작한다.

* 아래의 옵션으로 명령을 줬을때 메시지가 1번만 간다고 한다

 

 

아래와 같이 -r [주파수]를 추가하면 해당 주파수로 계속 메시지가 퍼블리시된다. 여기서는 1Hz 로 가나보다

 

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

1초마다 계속 저 메시지를 던져주니 거북이가 계속 빙글빙글돈다.

 

이 다음에 hz 명령어도 나오긴 한데 귀찬으니 넘어간다.

 

5. rqt_plot 사용하기

rqt_plot으로는 어느 주제로 퍼블리시 되는 데이터를 시간흐름에 따라 보여주는데 거북이의 위치정보를 한번보자

기초 단계

1. ROS 설치하고, 설정하기

2. ROS 파일 시스템 살펴보기

3. ROS 패키지 만들기

4. ROS 패키지 빌드하기

5. ROS 노드에 대해서 이해하기

6. ROS Topic을 이해하기

7. ROS 서비스와 파라미터 이해하기

8. rqt_console과 ros launch 사용하기

9. rosed로 파일 수정하기

10. ROS msg와 srv 만들기

11. C++로 간단한 퍼블리셔와 서브스크라이버 작성하기

12. 파이썬으로 간단한 퍼블리셔와 서브스크라이버 작성하기

13. 간단한 퍼블리셔와 서브스크라이버에 대해서 살펴보기

14. 간단한 서비스와 클라이언트 코드 작성하기(C++)

15. 간단한 서비스와 클러이언트 코드 쓰기(파이썬)

16. 간단한 서비스와 클라이언트에 대해서 알아보기

17. 데이터를 녹음하고 재생하기

18. bag file에서 메시지 읽기

19. roswtf 시작하기

20. ROS wifi 살펴보기

21. 다음에 할께 뭐가 있을까?

 

 

 

 

1. 선행할거

튜토리얼 설치하는 내용인데 했으니 패스

 

2. ROS 그래프 컨셉 개요!

- 노드 : 다른 노드와 통신이 가능한 단위? 노드? 실행 가능한 프로그램쯤 될거같다.

- 메시지 : ROS의 데이터 타입으로 어느 주제로 퍼블리싱과 서브스크라이빙 할때 씀

- 토픽 : 노드는 한 토픽으로 메시지를 퍼블리시 하고, 메시지를 수신할 수 있음

- 마스터 : ROS의 네임 서비스

- rosout : ros버전 stdout/stderr

- roscore : 마스터 + rosout + 파라미터 서버

 

3. 노드

 ROS 패키지에서 실행하는 파일이며, 다른 노드와 통신할수 있도록 ros client library를 사용함. 이걸로 노드가 어느 토픽/주제로 메시지를 퍼블리시하거나 서브스크라이브 할수있고, 서비스도 제공하거나 쓸수도 있다.

 

4. client libraries

- 노드가 통신하는데 필요

- rospy : 파이썬 클라이언트 라이브러리

- roscpp : c++ 클라이언트 라이브러라

 

5. roscore

- ROS를 사용하려면 실행해야함. 마스터와 rosout, 파라미터 서버가 동작하기 시작한다 (진짜 오랜만이다)

 

 

6. rosnode 사용하기

 원래 쓰던 터미널에는 roscore가 돌고있으니 새 터미널을 열어서 roscore가 뭘하는질 보자 

rosnode list : 실행중인 rosnode 목록

 

rosout 노드만 돌고있는데, 이 노드는  다른 노드들의 디버깅 출력들을 모아서 보여준다.

rosnode info /rosou으로는  rosout 노드의 정보를 보자

 

정보를 보니 /rosout_agg라는 토픽으로 퍼블리시하고있고, /rosout이라는 토픽을 서브스크라이브하고있다.

이건 rostopic을 봐야알듯

 

 

 

 

7. rosrun 사용하기

 이제 ros패키지를 제대로 사용해볼 때가 됬다. rosrun은 아래의 문법으로 패키지에 있는 노드를 실행하는 명령이다. 

rosrun [package_name] [node_name]

 

 turtlesim 패키지의 turtlesim_node를 rosrun으로 실행해보자!

 

거북이 시뮬레이터가 켜졌다.

 

아까 썻던 rosnode list 명령을 주면 turtlesim 노드가 추가된걸 볼수 있다.

rosrun 할대 노드이름을 변경할수도 있나보다.

기초 단계

1. ROS 설치하고, 설정하기

2. ROS 파일 시스템 살펴보기

3. ROS 패키지 만들기

4. ROS 패키지 빌드하기

5. ROS 노드에 대해서 이해하기

6. ROS Topic을 이해하기

7. ROS 서비스와 파라미터 이해하기

8. rqt_console과 ros launch 사용하기

9. rosed로 파일 수정하기

10. ROS msg와 srv 만들기

11. C++로 간단한 퍼블리셔와 서브스크라이버 작성하기

12. 파이썬으로 간단한 퍼블리셔와 서브스크라이버 작성하기

13. 간단한 퍼블리셔와 서브스크라이버에 대해서 살펴보기

14. 간단한 서비스와 클라이언트 코드 작성하기(C++)

15. 간단한 서비스와 클러이언트 코드 쓰기(파이썬)

16. 간단한 서비스와 클라이언트에 대해서 알아보기

17. 데이터를 녹음하고 재생하기

18. bag file에서 메시지 읽기

19. roswtf 시작하기

20. ROS wifi 살펴보기

21. 다음에 할께 뭐가 있을까?

 

 

 

 

지난 글에서 패키지 빌드했는데 이게 또 왠말인가 싶지만 일단 읽어봐야 알거같다.

 

1. 패키지 빌드하기

  패키지가 의존하고 있는 것들을 설치하면 이제 빌드할수 있긴한데 ros 환경 설정파일을 실행/소스 시켜둬야 한다.

나는 이미 bashrc에다가 추가해서 그럴필요는 없지만 해야된다고 한다.

 

 

1.1 catkin_make 사용하기

 catkin 작업 공간을 만들고, 빌드하는 명령어로 3번 글에서 이미 사용했다.

 - 용도 1. catkin 작업공간으로 설정하기 : http://wiki.ros.org/catkin/Tutorials/create_a_workspace

 - 용도 2. catkin 작업공간 빌드하기 : http://wiki.ros.org/ROS/Tutorials/CreatingPackage

 

 

1.2 패키지 빌드하기

여기 내용도 beginner_tutorials 패키지를 생성하고 catkin_make를 할때 나온 내용들이 나와서

그냥 패스해도 될거같다.

 

 

 

 

기초 단계

1. ROS 설치하고, 설정하기

2. ROS 파일 시스템 살펴보기

3. ROS 패키지 만들기

4. ROS 패키지 빌드하기

5. ROS 노드에 대해서 이해하기

6. ROS Topic을 이해하기

7. ROS 서비스와 파라미터 이해하기

8. rqt_console과 ros launch 사용하기

9. rosed로 파일 수정하기

10. ROS msg와 srv 만들기

11. C++로 간단한 퍼블리셔와 서브스크라이버 작성하기

12. 파이썬으로 간단한 퍼블리셔와 서브스크라이버 작성하기

13. 간단한 퍼블리셔와 서브스크라이버에 대해서 살펴보기

14. 간단한 서비스와 클라이언트 코드 작성하기(C++)

15. 간단한 서비스와 클러이언트 코드 쓰기(파이썬)

16. 간단한 서비스와 클라이언트에 대해서 알아보기

17. 데이터를 녹음하고 재생하기

18. bag file에서 메시지 읽기

19. roswtf 시작하기

20. ROS wifi 살펴보기

21. 다음에 할께 뭐가 있을까?

 

 

ROS 패키지 만들기

- 이번 튜토리얼에서는 패키지 만드는 프로그램인 catkin과 rospack으로 의존 관계를 목록화하는걸 다룬다.

 

1. catkin 패키지는 어떻게 구성될까?

여기서 패키지는 catkin 패키지를 말하며 다음의 요소들을 가지고 있어야 한다!

- package.xml : 그 패키지의 메타 정보

- CMakeList.txt : catkin 패키지는 CMakeLists.txt가 있어야 함.

- 그 패키지의 폴더

 

2. catkin 작업 공간 내 패키지

- catkin 패키지들을 catkin 작업 공간에 두고 쓰는걸 추천하며, 각 패키지는 독립적으로도 빌드 할수 있다.

 

* catkin 작업공간 생성하기

- catkin 패키지를 만들기 전에 catkin 패키지들을 빌드할수 있는 작업공간부터 만들자!

ref : http://wiki.ros.org/catkin/Tutorials/create_a_workspace

 

 

위 코드대로 진행하면

홈 디렉토리에다가 catkin_ws 만들고 거기다가 catkin_make 해서 진행하자

 

위 catkin 작업공간 폴더 구조대로 src 폴더내에 CMakeLists.txt가 생성되었다.

 

이제 다시 패키지 생성 페이지로 돌아와서

3. catkin 패키지 만들기

 

위 코드대로 해서 작업 공간 내 src 폴더다가 패키지 생성하자

코드를 보니 이름은  beginner_tutorials, std_msgs, rospy, roscpp를 의존하나보다

패키지 생성 문법도 catkin_create_pkg <package_name> [depend1] [depend2]란다

 

 

실제 실행해보면

앞에서 본 데로 보유자, 라이센스, 의존관계 같은것들이 나온다.

 

 

4. catkin 작업공간 빌드하고, 설정파일 소싱하기

여기 내용대로 진행하면

 

빌드가 잘 진행 된다.

 

 

만든 작업공간을 ROS 환경에다가 추가하도록 source /catkin_ws/devel/setup.bash 명령어를 주자

안하면 등록이 안되서 내가 만든 패키지를 못찾는다.

rosls roscpp를 하면 잘 찾고, 결과도 나오지만 beginner_tutorials는 빌드 했어도 못찾는다.

하지만 위 소싱 명령어를 주면 이제 ros 명령어들이 잘 동작된다.

이 과정이 번거로우면 저거.. ~/ 디렉토리에 어떤 파일에 추가하면 되는데 이름이 기억안나니 pass

 

 

5. 패키지 의존관계

- 아까 catkin_create_pkg 명령으로 beginner_tutorial 패키지를 생성할때 뒤에 의존 패키지들을 추가로 줬었는데, 이 1차적인 의존 패키지들을 rospack으로도 볼수 있다. (해당 패키지 package.xml에서도 볼수있는데 위에서 이미 cat했으니 pass)

 

1차 의존관계라 옵션이 depends1인가 보다.

 

 

 

기초 단계

1. ROS 설치하고, 설정하기

2. ROS 파일 시스템 살펴보기

3. ROS 패키지 만들기

4. ROS 패키지 빌드하기

5. ROS 노드에 대해서 이해하기

6. ROS Topic을 이해하기

7. ROS 서비스와 파라미터 이해하기

8. rqt_console과 ros launch 사용하기

9. rosed로 파일 수정하기

10. ROS msg와 srv 만들기

11. C++로 간단한 퍼블리셔와 서브스크라이버 작성하기

12. 파이썬으로 간단한 퍼블리셔와 서브스크라이버 작성하기

13. 간단한 퍼블리셔와 서브스크라이버에 대해서 살펴보기

14. 간단한 서비스와 클라이언트 코드 작성하기(C++)

15. 간단한 서비스와 클러이언트 코드 쓰기(파이썬)

16. 간단한 서비스와 클라이언트에 대해서 알아보기

17. 데이터를 녹음하고 재생하기

18. bag file에서 메시지 읽기

19. roswtf 시작하기

20. ROS wifi 살펴보기

21. 다음에 할께 뭐가 있을까?

 

 

와 목차만 적었는데도 왜이렇게 긴가.

두 번째 할 일로 파일 시스템에 대해서 살펴봤다.

링크는 아래

http://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem

 

파일 시스템 개요

- 패키지 : ROS 소프트웨어 한 단위로 여러 라이브러리, 실행 파일, 스크립트 등을 포함

- 매니페스트(package.xml) : 패키지 설명에 관한 파일로 이 패키지의 의존관계와 패키지의 버전, 라이센스 등 메타 정보 등을 포함한다.

 

 

파일 시스템 관련 툴

1. rospack(=ros + package) : ros 패키지 관련 정보 표시. rospack find [package명] -> 패키지 경로 반환. help 참조

2. roscd : roscd [패키지] -> 해당 패키지 경로로간다.

3. roscd log : ros log, 로스 로그 파일 위치로 이동

4. rosls : rosls [패키지]  -> 해동 로스 패키지 내 파일 목록 표시

 

내용보다 목차가 더길다 

기초 단계

1. ROS 설치하고, 설정하기

2. ROS 파일 시스템 살펴보기

3. ROS 패키지 만들기

4. ROS 패키지 빌드하기

5. ROS 노드에 대해서 이해하기

6. ROS Topic을 이해하기

7. ROS 서비스와 파라미터 이해하기

8. rqt_console과 ros launch 사용하기

9. rosed로 파일 수정하기

10. ROS msg와 srv 만들기

11. C++로 간단한 퍼블리셔와 서브스크라이버 작성하기

12. 파이썬으로 간단한 퍼블리셔와 서브스크라이버 작성하기

13. 간단한 퍼블리셔와 서브스크라이버에 대해서 살펴보기

14. 간단한 서비스와 클라이언트 코드 작성하기(C++)

15. 간단한 서비스와 클러이언트 코드 쓰기(파이썬)

16. 간단한 서비스와 클라이언트에 대해서 알아보기

17. 데이터를 녹음하고 재생하기

18. bag file에서 메시지 읽기

19. roswtf 시작하기

20. ROS wifi 살펴보기

21. 다음에 할께 뭐가 있을까?

 

 

 

ROS 설치야

공홈에 설치 문서가 있다.

http://wiki.ros.org/noetic/Installation/Ubuntu

 

 

근데 의존성 문제로 설치가 안된다..

 

 

이렇게 의존성 꼬일때는

aptitude 말고 생각나는게 없다.

 

구글링 조금해보니 여기서도 앱티튜드 쓰라고한다.

 

ref :  https://blog.fearcat.in/a?ID=01800-f30082fa-7039-400d-ba06-6ec0a3aa9e4f 

 

써봤는데 조금 이상해서 뒤에도 보니까

 

앱티튜드도 안되고 그냥 새로 깔고 update도 하지말라고 한다. 허허

 

다시 가상머신 우분투 날리고 설치하는 동안 로스 정리좀 해보면..

 

내가 ROS 만질 떄가 몇년 전이고 ROS1일때라 기억도 안나고 좀 바뀌어있다.

 

 

 

그냥 영어 공부 겸 튜토리얼이나 볼까 싶다.

튜토리얼 목록 링크는 여기에있다.

ref : http://wiki.ros.org/ROS/Tutorials

 

 

가장 첫번째 ROS 설치, 설정을 보자

ref : http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment

 

1, 2넘어가고

 

3 ROS 작업공간 생성하기

- 여기보면 catkin이란게 나오는데 ROS에서 사용하는 빌드 시스템이 catkin이었던걸로 기억난다. 

catkin_make로 현재 디렉토리를 catkin 작업 공간으로 만들고 CMakeList.txt를 만든다고 한다.

아래에 빌드 폴더, devel 폴터에 대한 내용이 있는데 이건 catkin 작업공간에 대해서 먼저 봐야 할거같다.

 

 

잠깐보니  설치 다됬네

카카오 미러 설정하고 진행하면 의존성 문제없이 날라간다~

 

ref : http://wiki.ros.org/noetic/Installation/Ubuntu

싶엇는데 실패했다.

 

---------

06.22

위 내용은 월요일쯤에 하다 말았던거 같은데 다시 시도해봤지만 여전히 안됬다.

지난번에 왜 못봤나 기억나지 않지만 --fix-missing을 넣어서 해봤더니

설치가 잘 진행됬다.

 

 

 

 

 

 

 

 

 

이제 나머지 이 링크 설명대로 진행하면 끝

res : http://wiki.ros.org/noetic/Installation/Ubuntu

 

인데 맨 마지막에 두줄로 설치하기 내용이 있엇네 ;;

ref : http://wiki.ros.org/ROS/Installation/TwoLineInstall/

 

 

진짜 오랜만에 보는 가제보 시뮬레이터

여기서 이동로봇이나 메니퓰레이터, 지형 같은걸 추가 할수도 있고

데이터 나오는걸 rviz같은데서 볼수 있다

 

하고싶어지면 모델링 연습해야지

 

 

 

임베디드 시스템 개발

- PC랑 달리 용도가 정해지고, 가격, 전력을 고려해서 HW와 SW를 제한해야 함.

- 호스트 PC에서 타겟 디바이스에 맞게 컴파일 후 올려서 동작 시킨다

- Host PC에서 하는 일 : 개발 툴(교차 컴파일러, 디버거 등), 시뮬레이션을 위한 타겟 장치 시뮬레이터 등

- 부트로더 개발 : 타겟 장치에 전원 인가시 부팅 롬에서 가장 먼저 실행. HW 초기화, 커널 로딩, JTAG 인터페이스로 설치

- 커널과 파일 시스템 : 호스트 PC의 개발 환경에서 만듬, 이미지 형태로 부트롬이나 다른 곳에 저장. 

- 임베디드 응용프로그램 : 커널과 파일 시스템위에서 동작.

 

 

 

부트로더

- HW 초기화, OS 커널 메모리로 로드하는 펌웨어

- LILO Linux LOader : 특정 파일시스템에 의존 x, 최대 16개 이미지 시동시 선택 가능, MBR이나 파티션 부트섹터에 위치

- GRUB GNU GRUB : GNU의 부트로더, 동적으로 커널 인자 조정 가능, 다양한 실행 파일 지원, 명령줄 인터페이스 제공

- BLOB BootLoader OBject : 선택 부팅 가능, MBR에서 동작하는 다른 부트로더와는 달리 플레시 메모리 0블록에서 동작

- U-BootUniversal Bootloader : PPC와 ARM 기반의 임베디드 부트로더, ARM, x86, MIPS 등 CPU 지원, 오픈소스

- NTLDR NT Loader : 윈도우 NT 시동 부트로더, 하드디스크 이외의 USB 플래시 드라이브 등 휴대용 장치서도 실행 가능

 

 

 

U-Boot Universal Bootloader

- 다양한 시스템에서 사용가능한 부트로더로 시리얼, 네트워크, USB, Flash 등 지원

- 다양한 아키텍처와 디바이스를 지원하므로 타겟 보드에 맞게 포팅 필요

- 동작 흐름 : Start.s 시작

   * Start.s : CPU 초기화(인터럽트 마스크, 클럭 설정), DRAM 초기화, 플래시 메모리 코드를 DRAM으로 다른 초기화작업

 

https://julrams.tistory.com/category/System%20Programming/Tips?page=4

 

U-boot 구성

- /api : API 코드, 예제

- /arch : 아키텍처 별 code, lib, 시작코드 start.S

- /common : 아키텍처에 독립적인 파일과 명령어

- /drivers : 외부 장치 드라이버들

- /fs : uboot의 파일 시스템 관련

- /include : 헤더  파일

- /net : network 관련

- build.sh : 빌드 스크립트

- Makefile : 빌드 설정 Makefile

ref : https://kergoo.wordpress.com/2017/04/09/u-boot-porting-guide/

 

 

주변장치 

1. UART와 USART

2. GPIO

3. JTAG, SWD

4. I2C(TWI)

5. PWM

6. SPI

7. Flash Memory

8. Ehternet

9. USB

10. CAN

 

 

7. Flash Memory

- 데이터 읽고 쓰는 비휘발성 메모리,종류 : Nand/Nor Flash Memory

- Nand Flash Memory : 싸서 대용량으로 많이 쓴다

- eMMC Embedded Multi Media Controller : Nand Flash Memory + 메모리 컨트롤러 + 멀티미디어 카드 + BGA 캡슐화

  => 데이터 전송 속도와 처리 량 개선하여 모바일 장치에서 많이 쓴다

 

8. Ethernet

- 이더넷.. OSI 7계층 데이터링크 인가, 물리계층인가 쯤에 있던거같은데 찾아보니 물리 계층이더라.

- MAC 주소로 호스트 간 데이터 주고받는 네트워크 약속, 유선은 이더넷, 무선은 802.11(와이파이)

* 물리 계층 : 신호와 배선 규칙(이더넷, RS-232C, 802.11),  데이터 링크 계층 : 프로토콜 형식 정의(MAC)

* 인터넷과 이더넷 ? : 인터넷은 네트워크(교통), 이더넷은 네트워크를 이루는 컴퓨터들의 통신 수단 중 하나(도로)란다.

ref: https://namu.wiki/w/%EC%9D%B4%EB%8D%94%EB%84%B7

 

이더넷 장치 블록 다이어그램

 

9. USB Universal Serial Bus

- 배경 : 인텔, 마소, IBM 등 주변장치와 PC 간 인터페이스 통일, 쉽고 빠르며 작은 인터페이싱을 위해 개발

- 특징 : 버스 자체 전원 공급(+5v, 500mA), 소형 커넥터, PnP 지원 등

ref : https://blog.daum.net/insopack77/23

 

 

- 용어 정리 ref : https://m.cafe.daum.net/banghakme/9XyX/167

   - USB 호스트 : USB 호스트 컨트롤러, USB 시스템 소프트웨어, 클라이언트로 구성하여 USB 디바이스 접근 제어.

   - USB 디바이스 : USB 인터페이스, USB 논리 디바이스, Function 으로 구성.

- USB 데이터 전송 구조

   - Client SW : OS와 USB 디바이스에 따라 제공되는 SW

   - USB System SW : OS에서 USB를 지원하는 SW

   - USB 호스트 컨트롤러 : 호스트 측 버스 인터페이스로 USB 디바이스를 호스트와 결합시켜주는 모든 SW/HW 

 

-  USB에 대한 추가적인 자세한 동작 원리는 아래 링크

ref : https://m.blog.naver.com/prnbada7/221215493534


USB 데이터 전송 구조

물리적인 버스구조

 

 

 

10. CAN Controller Area Network

- 배경 : 차량 내 ECU Electronics Control Unit 간 통신에 1:1 방식인 UART가 적합하지 않아 다중 통신용으로 개발.

- 용도 : 차량 내부 계측 제어 장비들간 직렬 통신할 수 있도록 개발된 네트워크.

- 특징 : 멀티 마스터 통신, 선 2개면 충분(CAN_high, CAN_Low), 잡음에 강함, 고속 원거리 통신 등

- CAN FRAME : SOF 시작비트, ID, Control 데이터길이, Data 데이터, CRC 오류 검출, ACK 오류없이 ok, EOF 끝비트

 

 

 

요세 학교에서 밀린 전자회로만 하루종일 하니까

기숙사에 돌아와서는 도저히 공부할 의욕이 생기지 않는다.

 

원래는 임베디드니 ROS니 볼려고 했는데 도저히 손에 못잡겠더라.

그래서 대신 재미있게 할수 있는 생산적인 활동으로 기구설계를 하기 시작했다.

 

 

아직 거창한건 하지 않았고,

재미로 Fusion 360으로 일요일에는 마리오, 월요일에는 뚱이 사랑해요를 그리고

오늘은 레고 모델링을 했다.

 

 

모델링한거를 출력하려고는 했지만

요즘 대회 준비때문인지 3D 프린터 쓰는 사람들이 좀 있어서 쓰지는 않고

나중에 여유있으면 출력해보려고 한다.

 

 

마리오

그림 그리는데 테두리를 구분할 좋은 방법이 없을까 고민하다가 그냥 높이 차이를 뒀더니 그럴싸해보이더라

 채색 도구가 없어서 채색을 하려고했지만 못했는데

나중에 사면 할 예정

 

이건 어제 그린 뚱이

 

 

 

 

 

이건 오늘 만든 레고

 

+ Recent posts