Skip to content

Commit da77670

Browse files
committed
README overhaul, minor script updates, added missing import
1 parent 83e5b53 commit da77670

File tree

4 files changed

+105
-92
lines changed

4 files changed

+105
-92
lines changed

README.md

Lines changed: 101 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -12,131 +12,153 @@
1212
</div>
1313

1414
- [About](#about)
15-
- [Getting Started](#getting_started)
15+
- [Getting Started](#getting-started)
1616
- [Usage](#usage)
17-
- [Roadmap](#roadmap)
18-
- [Authors](#authors)
17+
- [Contributors](#contributers)
1918

20-
## About <a name = "about"></a>
19+
---
20+
21+
## About
2122

2223
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.
2324

24-
## Getting Started <a name = "getting_started"></a>
25+
---
2526

26-
### System Requirements
27+
## Getting Started
2728

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
2930

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:**
3132

32-
- ROS 2 Jazzy
33-
- [ ] Ubuntu 24.04 LTS
34-
- [ ] ROS2 Jazzy
35-
<br>
33+
- Ubuntu 24.04 LTS
3634

37-
- ROS 2 Humble (may require minimal source changes)
38-
- [ ] Ubuntu 22.04 LTS
39-
- [ ] ROS2 Humble
40-
<br>
35+
**Docker install:**
4136

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)
4640

4741
### Installation
4842

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
5344

5445
```bash
5546
git clone https://github.com/roboticsatiowa/Rover.git
5647
cd Rover
5748
```
5849

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))
6151

6252
```bash
6353
./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
6465
./tools/ros/install_dependencies.sh
6566
```
6667

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`)
6869

70+
```bash
71+
./tools/misc/symlink_udev.sh
72+
```
73+
74+
### Building
6975

7076
A convenience script is provided to build the project
7177

7278
```bash
7379
./tools/ros/build.sh
7480
source install/setup.bash
7581
```
76-
<br>
82+
7783
It is recommended to occasionally clean out the workspace. This will remove any generated files which can sometimes cause issues.
7884

7985
```bash
8086
./tools/ros/clean.sh
8187
```
8288

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+
---
83104

84-
## Usage <a name = "usage"></a>
105+
## Other Launch Files
85106

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
87122

88123
```bash
89-
ros2 launch uirover_bringup simulator.launch.py
124+
ip link
90125
```
91126

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
139162

140163
- Ethan Holter [@ethanholter](https://github.com/ethanholter)
141164
- Charlie Killian [@charlie-killian](https://github.com/charlie-killian)
142-

src/uirover_bringup/launch/rover.launch.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import os
2+
13
from launch import LaunchDescription
24
from launch.actions import IncludeLaunchDescription
35
from launch.launch_description_sources import PythonLaunchDescriptionSource

tools/misc/enable_vcan.sh

100644100755
File mode changed.

tools/ros/build.sh

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,17 @@ function print_stderr_logs () {
2121
}
2222

2323
# Auto detect and install mandatory colcon packages if not already installed
24-
UPDATED=false
2524
if apt -qq list python3-colcon-common-extensions 2> /dev/null | grep -q installed; then
2625
echo "colcon-common-extensions is already installed"
2726
else
2827
echo "Installing colcon-common-extensions"
29-
30-
if [ "$UPDATED" = false ]; then
31-
sudo apt update
32-
UPDATED=true
33-
fi
34-
sudo apt install -y python3-colcon-common-extensions
28+
sudo apt update && sudo apt install -y python3-colcon-common-extensions
3529
fi
3630
if apt -qq list python3-colcon-mixin 2> /dev/null | grep -q installed; then
3731
echo "colcon-mixin is already installed"
3832
else
3933
echo "Installing colcon-mixin"
40-
41-
if [ "$UPDATED" = false ]; then
42-
sudo apt update
43-
UPDATED=true
44-
fi
45-
sudo apt install -y python3-colcon-mixin
34+
sudo apt update && sudo apt install -y python3-colcon-mixin
4635
fi
4736
MIXIN_URL="https://raw.githubusercontent.com/colcon/colcon-mixin-repository/master/index.yaml"
4837
if ! colcon mixin list 2>/dev/null | grep -q "$MIXIN_URL"; then

0 commit comments

Comments
 (0)