New version of my http:/berickson/fake_car simulator targeting ROS 2. This is currently in early development and targeting Humble. It currently also works with Galactic.
My goal is to make a series of Gazebo models, worlds, and plugins to simulate my robots for test.
- install ROS2 Humble desktop full, see https://docs.ros.org/en/humble/Installation.html
- make a workspace, see https://docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries/Creating-A-Workspace/Creating-A-Workspace.html
- clone this repo into your workspaces src folder
- clone the repo https://github.com/berickson/nav2_line_following_controller into your src folder
- cd workspace folder
- install dependencies
pip3 install transforms3d
rosdep init
rosdep update
rosdep install -i --from-path src --rosdistro humble -y- Then:
colcon build --symlink-install
source install/setup.bash
ros2 launch sim_car bringup.launch.py- verify it works by driving with keyboard in another terminal:
source install/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard- Nav2 with SLAM will be running, navigatee using the 2D Goal Pose button in RViz
- Simulate a Traxxas Slash robot like blue-crash (https://github.com/berickson/car).
- Ackermann steering
- Top mounted lidar
- Odometers on front wheels
- Independent shocks on all wheels
- Rear wheel drive
| Topic | |
|---|---|
| /car/cmd_ackermann | Publish messages here to control the car |
| /joy | Car listens to joystick and turns it into Ackermman commands |
| /car/odo_fl | Odometer tick count for front left wheel |
| /car/odo_fr | Odometer tick count for front right wheel |
| /car/pose | Ground truth pose from Simulator |
| /scan | Lidar scan output |
| /joint_states | joint positions from Gazebo |
| File | |
|---|---|
| all.launch.py | Run latest test setup in Gazebo, currently an Ackermann drive car in a simple world with joystick control |
| bringup.launch.py | Launch full simulation with Ackermann model, Nav2 and SLAM |
| spawn_car.launch.py | Spawn an Ackermann drive car in Gazebo |
| spawn_world.launch.py | Launch Gazebo with an empty world |
I keep the todo for this on in a Google Doc (https://docs.google.com/document/d/1eDoU0HPi217dMZmRpME3X8Uc7ZKnQc10sKgLSsA3TdY/edit?usp=sharing)