Wiki source code of ROS Crash Course
Last modified by Leon Poon on 2021/08/30 23:24
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | (% class="wikigeneratedid" id="HC2B2BCrashCrashCourse" %) | ||
2 | Using C++. | ||
3 | |||
4 | == Day 1 == | ||
5 | |||
6 | main function | ||
7 | |||
8 | g++ source1.cpp -o program1 | ||
9 | |||
10 | Paths, "/" and "." and ".." in navigating directories - absolute vs relative | ||
11 | |||
12 | data type - binary itself is meaningless unless you say what information that the binary bits represent | ||
13 | |||
14 | declare variables (int, char, string as series of chars) | ||
15 | |||
16 | statements end with semicolon | ||
17 | |||
18 | cstdio library #include | ||
19 | |||
20 | calling a function - printf | ||
21 | |||
22 | if condition block else block (example: do something different based on argc) | ||
23 | |||
24 | for loop - 3 statements (initialiser, condition, post-loop advancement) and a code block | ||
25 | |||
26 | Homework: study "while" loop and "switch" statement | ||
27 | |||
28 | == Day 2 == | ||
29 | |||
30 | While loop - condition and 1 code block. | ||
31 | |||
32 | Do while loop - code block then condition. | ||
33 | |||
34 | While loop = for loop with empty initialiser/advancement statements | ||
35 | |||
36 | Switch - match expression's result to case label, execute statements until break. | ||
37 | |||
38 | Switch vs if-else differences - number of times expressions are evaluated | ||
39 | |||
40 | write your own function | ||
41 | |||
42 | calling with parameters copied as separate set of var values in function | ||
43 | |||
44 | classes as blueprints. | ||
45 | |||
46 | complex var data type - instances of a class all have the same set of fields | ||
47 | |||
48 | the "." field accessor (var1.func1() etc) | ||
49 | |||
50 | each instance have it's own separate memory for storing data. | ||
51 | |||
52 | Example code - fibonacci sequence. | ||
53 | |||
54 | Value overflow because not enough number of bits to represent large numbers. | ||
55 | |||
56 | Various integer data types - specifier in printf | ||
57 | |||
58 | Homework: implement factorial (1 to 20) calculator | ||
59 | |||
60 | in Linux, most things are case-sensitive. (A not equals a) | ||
61 | |||
62 | == Day 3 == | ||
63 | |||
64 | factorial printer - 2 approaches: | ||
65 | |||
66 | 1. for-loop that goes 1 to 20 and each loop calls fact(n ) function and prints return. | ||
67 | 1. for-loop that goes 1 to 20 and multiplies once each time and print. | ||
68 | |||
69 | set initial values of vars when declaring otherwise initial values are unpredictable | ||
70 | |||
71 | factorial function - implemented in recursive way, closer to mathematical definition | ||
72 | |||
73 | stack memory | ||
74 | |||
75 | stack frame to store var values in each function call | ||
76 | |||
77 | stack overflow/crash (segfault) | ||
78 | |||
79 | base condition to stop the recursion | ||
80 | |||
81 | recursive algorithms are common - e.g. when dealing with trees | ||
82 | |||
83 | spaces in file/directory names and how to navigate - space is special in terminal | ||
84 | |||
85 | understand names chosen by yourself vs names chosen by other people for your use | ||
86 | |||
87 | creating ros package - arguments: package name, dependencies | ||
88 | |||
89 | CMakeLists.txt (.txt file can also be used with other programs) | ||
90 | |||
91 | cmake = build tool - compile many files in some defined ways | ||
92 | |||
93 | package.xml - information for ROS | ||
94 | |||
95 | compiling - carefully read and understand and seek answers to error messages | ||
96 | |||
97 | msg files - fields declaration with data type | ||
98 | |||
99 | create cpp file for a node | ||
100 | |||
101 | quick reading of code for publisher node | ||
102 | |||
103 | homework: implement message subscriber node according to ROS book | ||
104 | |||
105 | == Day 4 == | ||
106 | |||
107 | message subscriber. | ||
108 | |||
109 | argc and agrv | ||
110 | |||
111 | node name during ros::init | ||
112 | |||
113 | topic advertise/subscribe explained. | ||
114 | |||
115 | subscribe() only memorises that this node wants messages and what to do with them. | ||
116 | |||
117 | subscribe() - providing name of function. not calling. | ||
118 | |||
119 | publisher while ros::ok() loop. | ||
120 | |||
121 | subscriber spin() loop - handle events. | ||
122 | |||
123 | the double-colon operator: (1) namespace (2) static member of class | ||
124 | |||
125 | pointers are memory addresses | ||
126 | |||
127 | arrow -> operator | ||
128 | |||
129 | array are elements in sequence in memory. | ||
130 | |||
131 | char ~*~* = pointer of pointer of char data. | ||
132 | |||
133 | |||
134 |