|
12 | 12 | </div> |
13 | 13 |
|
14 | 14 | - [About](#about) |
15 | | -- [Getting Started](#getting_started) |
| 15 | +- [Getting Started](#getting-started) |
16 | 16 | - [Usage](#usage) |
17 | | -- [Roadmap](#roadmap) |
18 | | -- [Authors](#authors) |
| 17 | +- [Contributors](#contributers) |
19 | 18 |
|
20 | | -## About <a name = "about"></a> |
| 19 | +--- |
| 20 | + |
| 21 | +## About |
21 | 22 |
|
22 | 23 | This is a ROS2 based project for the University of Iowa Robotics Club's Mars Rover. It is primarily designed around remote operation with future plans for partial or full autonomy. The rover is equipped with a 6 wheeled rocker bogie suspension system, a 5 DOF custom arm, and a variety of sensors. The onboard computing is handled by an Nvidia Jetson Orin coupled with a Teensy 4.1 microcontroller to assist with IO. The rover is equipped with an Intel Realsense depth camera, 3 Cameras, GPS, and a suite of miscellanious sensors for improved situational awareness. |
23 | 24 |
|
24 | | -## Getting Started <a name = "getting_started"></a> |
| 25 | +--- |
25 | 26 |
|
26 | | -### System Requirements |
| 27 | +## Getting Started |
27 | 28 |
|
28 | | -There are a variety of ways to run this project. The easiest is to use the ROS2 Jazzy running natively on Ubuntu 24.04 LTS. The included install scripts located in the tools/ directory can help with installation of ROS2 and this projects dependencies. |
| 29 | +### System Requirements |
29 | 30 |
|
30 | | -<b>IMPORTANT: This project is still in active development and has not yet been tested on the target environment. These platforms are for development. The Jetson hardware will likely require specialized builds of ROS2 and other dependencies.</b> [ROS Isaac Installation](https://nvidia-isaac-ros.github.io/getting_started/isaac_ros_buildfarm_cdn.html) |
| 31 | +**Native Install:** |
31 | 32 |
|
32 | | -- ROS 2 Jazzy |
33 | | - - [ ] Ubuntu 24.04 LTS |
34 | | - - [ ] ROS2 Jazzy |
35 | | -<br> |
| 33 | +- Ubuntu 24.04 LTS |
36 | 34 |
|
37 | | -- ROS 2 Humble (may require minimal source changes) |
38 | | - - [ ] Ubuntu 22.04 LTS |
39 | | - - [ ] ROS2 Humble |
40 | | -<br> |
| 35 | +**Docker install:** |
41 | 36 |
|
42 | | -- Docker install |
43 | | - - [ ] Any Unix based OS |
44 | | - - [ ] Docker |
45 | | - - [ ] Systemd based init system recommended (for udev rules) |
| 37 | +- Any Unix based OS (Windows will also work, but has limititations) |
| 38 | +- Docker |
| 39 | +- Systemd based init system (for udev rules) |
46 | 40 |
|
47 | 41 | ### Installation |
48 | 42 |
|
49 | | -This guide assumes you are using ROS2 Jazzy on Ubuntu 24.04 LTS. If you are using a different version of ROS2, you may consult the ROS2 documentation for installation instructions [here](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html) |
50 | | - |
51 | | -<br> |
52 | | -Clone the repository to your workspace. |
| 43 | +Clone the repository to your workspace |
53 | 44 |
|
54 | 45 | ```bash |
55 | 46 | git clone https://github.com/roboticsatiowa/Rover.git |
56 | 47 | cd Rover |
57 | 48 | ``` |
58 | 49 |
|
59 | | -<br> |
60 | | -Install ROS and project dependencies. (Recommended even if you already have ROS2 installed) |
| 50 | +Install ROS2 (you may skip this step if you already followed install instructions from their [documentation](https://docs.ros.org/en/jazzy/Installation/Ubuntu-Install-Debs.html)) |
61 | 51 |
|
62 | 52 | ```bash |
63 | 53 | ./tools/ros/install_ros.sh |
| 54 | +``` |
| 55 | + |
| 56 | +Install [rosdep](https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Rosdep.html#what-is-rosdep) dependencies |
| 57 | + |
| 58 | +```bash |
| 59 | +./tools/ros/rosdep.sh |
| 60 | +``` |
| 61 | + |
| 62 | +Install additional dependencies |
| 63 | + |
| 64 | +```bash |
64 | 65 | ./tools/ros/install_dependencies.sh |
65 | 66 | ``` |
66 | 67 |
|
67 | | -### Building |
| 68 | +Install udev rules. These create more descriptive device names in `/dev` for example `/dev/ttyACM0 -> /dev/ttyTEENSY` and are required for ROS2 nodes to properly recognize hardware. More info in the [man page](https://man7.org/linux/man-pages/man7/udev.7.html) (`$ man udev`) |
68 | 69 |
|
| 70 | +```bash |
| 71 | +./tools/misc/symlink_udev.sh |
| 72 | +``` |
| 73 | + |
| 74 | +### Building |
69 | 75 |
|
70 | 76 | A convenience script is provided to build the project |
71 | 77 |
|
72 | 78 | ```bash |
73 | 79 | ./tools/ros/build.sh |
74 | 80 | source install/setup.bash |
75 | 81 | ``` |
76 | | -<br> |
| 82 | + |
77 | 83 | It is recommended to occasionally clean out the workspace. This will remove any generated files which can sometimes cause issues. |
78 | 84 |
|
79 | 85 | ```bash |
80 | 86 | ./tools/ros/clean.sh |
81 | 87 | ``` |
82 | 88 |
|
| 89 | +## Usage |
| 90 | + |
| 91 | +Basestation launch |
| 92 | + |
| 93 | +```bash |
| 94 | +ros2 launch uirover_bringup basestation.launch.py |
| 95 | +``` |
| 96 | + |
| 97 | +Rover launch |
| 98 | + |
| 99 | +```bash |
| 100 | +ros2 launch uirover_bringup rover.launch.py |
| 101 | +``` |
| 102 | + |
| 103 | +--- |
83 | 104 |
|
84 | | -## Usage <a name = "usage"></a> |
| 105 | +## Other Launch Files |
85 | 106 |
|
86 | | -This will likely change as the project matures. The current launch file will start the gazebo simulation with the rover model. There will also be multiple launch files for different configurations of the rover or for different testing environments. |
| 107 | + |
| 108 | + |
| 109 | +--- |
| 110 | + |
| 111 | +## Development Tools and Utilities |
| 112 | + |
| 113 | +### VCAN |
| 114 | + |
| 115 | +VCAN (Virtual Controller Area Network) is a linux kernel module which allows a [CAN bus](https://en.wikipedia.org/wiki/CAN_bus) network to be simulated entirely on-system. This allows firmware to be tested in conditions nearly identical to the real world. The following script can be used to enable it |
| 116 | + |
| 117 | +```bash |
| 118 | +./tools/misc/enable_vcan.sh |
| 119 | +``` |
| 120 | + |
| 121 | +you can then check its working with |
87 | 122 |
|
88 | 123 | ```bash |
89 | | -ros2 launch uirover_bringup simulator.launch.py |
| 124 | +ip link |
90 | 125 | ``` |
91 | 126 |
|
92 | | -## Roadmap |
93 | | - |
94 | | -- [x] Gazebo simulation boilerplate |
95 | | -- [x] Simplified rover 3D model |
96 | | -- [x] Full rover 3D model with meshes |
97 | | -- [x] Video capture and streaming |
98 | | -- [x] Video compression |
99 | | -- [ ] Relative pose estimation |
100 | | -- [ ] Object classification |
101 | | -- [x] Basic aruco marker detection |
102 | | -- [x] ROS2 Control boilerplate |
103 | | -- [x] Full ROS2 Control hardware support |
104 | | -- [ ] Custom wheel controller for differential swerve drive |
105 | | -- [x] MoveIt! boilerplate |
106 | | -- [x] Simplified arm 3D model |
107 | | -- [x] Full arm 3D model with meshes |
108 | | -- [x] Arm IK solver |
109 | | -- [ ] Preset arm poses (grab, drop, tool change, etc.) |
110 | | -- [x] Zenoh middleware |
111 | | -- [ ] Nav2 boilerplate |
112 | | -- [ ] Nav2 basic environment mapping |
113 | | -- [ ] Nav2 basic path planning |
114 | | -- [ ] Nav2 obstacle avoidance |
115 | | - |
116 | | -## CIRC Specific Capabilities |
117 | | - |
118 | | -<https://circ.cstag.ca/2025/tasks/> |
119 | | - |
120 | | -## Required Capabilities |
121 | | - |
122 | | -- [ ] record distance between two gps waypoints |
123 | | -- [x] identify aruco markers of 4x4_100 |
124 | | -- [ ] take photos BEFORE disturbing scene (need cam with better res or zoom) |
125 | | -- [ ] take photos and automatically upload to base station usb drive |
126 | | -- [ ] communicate with a gieger counter via serial interface |
127 | | -- [ ] night time operation (flood lights, spot lights, low light camera, etc.) |
128 | | -- [ ] 940 nm IR camera |
129 | | -- [ ] must fit in a "storm shelter" dimensions provided by april 2025 |
130 | | - |
131 | | -#### Bonus Capabilities |
132 | | - |
133 | | -- [ ] vision based text identification and translation (no bonus points - to save time) |
134 | | -- [x] Aruco identification running in background and automatically display on screen |
135 | | -- [ ] navigate to a gps waypoint autonomously |
136 | | -- [ ] autonomously follow light points of varying colors |
137 | | - |
138 | | -## Contributers <a name = "authors"></a> |
| 127 | +and you should see something like this |
| 128 | + |
| 129 | +```text |
| 130 | +9: vcan0: <NOARP,UP,LOWER_UP> mtu 72 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 |
| 131 | + link/can |
| 132 | +``` |
| 133 | + |
| 134 | +More info in the [linux netmodule docs](https://netmodule-linux.readthedocs.io/en/latest/howto/can.html) |
| 135 | + |
| 136 | +### Network Stress Testing |
| 137 | + |
| 138 | +To test nodes under lossy/delayed network conditions you may want to artificially induce packet loss, delay, and/or bandwidth restrictions on localhost. The following command will enable it: |
| 139 | + |
| 140 | +```bash |
| 141 | +sudo tc qdisc add dev lo root netem delay 200ms loss 20% 50% |
| 142 | +``` |
| 143 | + |
| 144 | +To disable this you may run |
| 145 | + |
| 146 | +```bash |
| 147 | +sudo tc qdisc delete dev lo root netem |
| 148 | +``` |
| 149 | + |
| 150 | +More information can be found in the [man page](https://man7.org/linux/man-pages/man8/tc-netem.8.html) (`$ man tc-netem`) |
| 151 | + |
| 152 | +--- |
| 153 | + |
| 154 | +## CIRC Task Lists |
| 155 | + |
| 156 | +- [2022](https://circ.cstag.ca/2022/tasks/) |
| 157 | +- [2023](https://circ.cstag.ca/2023/tasks/) |
| 158 | +- [2024](https://circ.cstag.ca/2024/tasks/) |
| 159 | +- [2025](https://circ.cstag.ca/2025/tasks/) |
| 160 | + |
| 161 | +## Contributers |
139 | 162 |
|
140 | 163 | - Ethan Holter [@ethanholter](https://github.com/ethanholter) |
141 | 164 | - Charlie Killian [@charlie-killian](https://github.com/charlie-killian) |
142 | | - |
|
0 commit comments