Skip to content

chikuta/cybergear_micro_ros_m5

Repository files navigation

Cybergear ROS2 Controller

Package Summary

This package is for controlling Cybergear on M5Stack. By using Micro-ROS, you can control multiple Cybergears via Ethernet (RJ45)

Hardware Components

Case1 : M5Stack Basic

image

Case2 : M5Stack AtomS3

image

Dev Environments

  • Ubuntu 22.04
  • ROS2 humble
  • PlatformIO

How to Build

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.

Configure Firmware

Please modify the following source code to fit your development environment.

Network config

byte local_mac[] = {0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED};
const IPAddress local_ip(192, 168, 50, 200);
const IPAddress host_ip(192, 168, 50, 76);
const uint16_t host_port = 2000;

Cybergear config

static const uint8_t MOTOR_NUM = 2;
const std::vector<std::string> joint_names = {"mot1", "mot2"};
const std::vector<uint8_t> motor_ids = {0x7F, 0x7E};

How to Use

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

image

Disable cybergear controller

ros2 service call /cgc_node/control_power std_srvs/srv/SetBool data:\ false

ROS2 Parameters

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

ROS2 Interfaces

TBD

References

License

  • MIT

Releases

No releases published

Packages

No packages published