I'm thrilled to announce that linorobot2 is out.
The firmware uses microROS to expose the topics required by Nav2 (ROS2's default navigation stack) and comes with a whole lot of new features. Here's a summary:
- Easier sensor integration. There's a new abstraction class for motor drivers and IMUs so you can focus on integrating new sensors' API without worrying about the logic on how to add the sensors' output to linorobot2's firmware.
- New calibration process for motor drivers and encoders. It can be frustrating to debug misconfigured pin assignments especially when the motors start spinning aggressively without knowing the cause of this weird behavior. I added a minimal calibration firmware (without ROS2 connected) that would walk you through correcting misconfigured pins. The calibration process also calculates the motor's COUNTS_PER_REV variable in case this information is not available to the user.
- Automatic IMU calibration. I omitted the accelerometers in calculating the robot's odometry and solely used the output from the gyroscope. This allows the robot to calibrate the gyroscope during bootup and cut the tedious process of rotating the robot in different axes after assembling the robot.
- Improved kinematics library. The refactored library automatically calculates the motors' maximum velocity output based on the defined RPM and kinematic properties of the robot. This allows the robot to cap each motor's velocity to a healthy speed to preserve the motion required from /cmd_vel whenever the max velocity is reached. Controlling the robot is also buttery smooth with this new library especially with a joystick. You'll love it, I promise! :D
- New laser sensors.
a. YDLidar
b. LDLidar
c. Zed Camera
d. Intel Realsense Series
- Parameterized Xacro. You can easily create a URDF from the parameterized xacro available in linorobot2_description package.
- Simulation Pipeline. You can now simulate the robot you built in Gazebo using the defined robot properties in the parameterized xacro file. This allows users to fine-tune high level applications ie Nav2, AMCL, SlamToolbox in the virtual world and deploy on the real robot. You can also use this tool to develop ROS2 applications without the need of a physical robot.
- Robust mapping. Gmapping has been replaced with SlamToolbox which has demonstrated more robust results during testing. This also offers new mapping capabilities such as loading a saved map to continue mapping new areas.
- Onboard IMU and Odometry calculation. In linorobot2, the odometry and IMU data are directly published from the microcontroller. This lessens the amount of nodes running on the robot computer to relay minimal messages to full fledged standard IMU/Odometry msg.
- Avoid 3D obstacles. linorobot2 is configured to accept data from RGBD cameras and mark obstacles in the 2D costmap using voxel layers. This allows robots to see obstacles beyond the 2D LIDAR's view like slippers, chairs, and hanging objects.
Deprecation Notice:
- Kinect Sensor - I'm open to bringing this feature back, as long as someone is willing to test.
- Ackermann Steering Kinematics. It's can be challenging to write a common configuration for Ackermann steering and differential drive robots.
Lastly, I would like to thank the community for the continuous support of this project. PRs and contributions are always open. Feel free to ping me if you have any more questions. Special shout out to the members who offered their time to participate in beta-testing the package.
Thank you!