This package is for controlling Cybergear on M5Stack. By using Micro-ROS, you can control multiple Cybergears via Ethernet (RJ45)
Case1 : M5Stack Basic
Case2 : M5Stack AtomS3
- Xiaomi Cybergear
- ATOMS3 Dev Kit w/ 0.85-inch Screen
- ATOMIC PoE Base W5500
- Mini CAN Unit (TJA1051T/3)
- XT30(2+2)-F
- Grove Cable
- Ubuntu 22.04
- ROS2 humble
- PlatformIO
Clone this repository and open this repository with vscode whitch is installed PlatformIO IDE plugin.
git clone git@github.com:chikuta/cybergear_micro_ros_m5.git
code cybergear_micro_ros_m5
Change platformio environmnets as follows.
Module | env |
---|---|
M5Stack + LAN Module W5500 | env:m5stack-core-esp32 |
AtomS3 + LAN Module W5500 | env:m5stack-atoms3-esp32 |
We need to modify and build micro_ros_arduino repository because resolve constraint of number of ros services.
cd cybergear_micro_ros_m5
# change directory name if necessary
# IF YOU USE env:m5stack-core-esp32
cd .pio/libdeps/m5stack-core-esp32/micro_ros_arduino
# IF YOU USE env:m5stack-atoms3-esp32
cd .pio/libdeps/m5stack-atoms3-esp32/micro_ros_arduino
patch -p1 < ../../../../patch/colcon.meta.patch
docker pull microros/micro_ros_static_library_builder:humble
docker run -it --rm -v $(pwd):/project --env MICROROS_LIBRARY_FOLDER=extras microros/micro_ros_static_library_builder:humble -p esp32
Copy example file to src directory.
cd cybergear_micro_ros_m5/src
# IF YOU USE env:m5stack-core-esp32
cp examples/cybergear_ros2_controller_m5stack_core/cybergear_ros2_controller_m5stack_core.ino .
# IF YOU USE env:m5stack-atoms3-esp32
cp examples/cybergear_ros2_controller_m5stack_atoms3/cybergear_ros2_controller_m5stack_atoms3.ino .
Build and upload binary to m5stack via vscode.
Please modify the following source code to fit your development environment.
Network config
Cybergear config
Before running the following demo, please ensure that the firmware of Cybergear is updated to the latest version. Also, set the CAN IDs of the Cybergear to 0x7E and 0x7F for use in the demo.
Launch micro-ros-agent using docker.
docker run -it --rm --privileged --net=host microros/micro-ros-agent:humble udp4 --port 2000
Check ros2 connection using follow command.
ros2 topic list
> /cgc_node/joint_command
> /cgc_node/joint_state
> /parameter_events
> /rosout
ros2 service list
> /cgc_node/cgc_node/describe_parameters
> /cgc_node/cgc_node/get_parameter_types
> /cgc_node/cgc_node/get_parameters
> /cgc_node/cgc_node/list_parameters
> /cgc_node/cgc_node/set_parameters
> /cgc_node/control_power
ros2 param list
> /cgc_node/cgc_node:
> xxx.cur_filter_gain
> xxx.cur_ki
> xxx.cur_kp
> xxx.limit_current
> xxx.limit_speed
> xxx.limit_torque
> xxx.loc_kp
> xxx.run_mode
> xxx.spd_ki
> xxx.spd_kp
xxx means motor name.
Start cybergear controller. When start cyberger controller, reflect all ros2 parameter to cybergear.
ros2 service call /cgc_node/control_power std_srvs/srv/SetBool data:\ true
Execute sample code for ros2.
source /opt/ros/$ROS_DISTRO/setup.bash
cd cybergear_micro_ros_m5/scripts
python3 cybergear_example.py
Disable cybergear controller
ros2 service call /cgc_node/control_power std_srvs/srv/SetBool data:\ false
Please be extremely cautious when changing control gains, as there is a possibility that Cybergear may go out of control. We will not take responsibility for any injuries incurred.
name | desc | default | min | max |
---|---|---|---|---|
run_mode | The run mode of cybergear. cybergear support 4-control mode, motion(0), position(1), speed(2), current(3) | position(1) | 0 | 3 |
limit_speed | Cybergear limit speed [rad/sec] | 2.0 | 0.0 | 30.0 |
limit_current | Cybergear limit current [A] | 27.0 | 0.0 | 27.0 |
limit_torque | Cybergear limit torque [Nm] | 12.0 | 0.0 | 12.0 |
loc_kp | Cybergear position control p-gain | 30.0 | 0.0 | 100.0 |
spd_kp | Cybergear speed control p-gain | 2.0 | 0.0 | 50.0 |
spd_ki | Cybergear speed control i-gain | 0.002 | 0.0 | 0.05 |
cur_kp | Cybergear current control p-gain | 0.125 | 0.0 | 1.0 |
cur_ki | Cybergear current control i-gain | 0.0158 | 0.0 | 0.05 |
cur_filter_gain | TBD | 0.1 | 0.0 | 1.0 |
TBD
- MIT