If encounter with an error like Permission denied: '/dev/ttyACM0'
Type this command to terminal:
sudo chmod a+rw /dev/ttyACM0
From this example, the device name that Arduino corresponds to the system is ttyACM0.
$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 Sep 20 15:40 /dev/ttyACM0
Note that its permissions are only given to the dialout group to read and write.
In order to be able to read and write the device /dev/ttyACM0, you must add all accounts that want to use the Arduino IDE to the dialout group, and then log in again.
sudo usermod -G dialout -a <USER>
e.g.
sudo usermod -G dialout -a betty
Upload code(arduino/XXX.ino) to Arduino board.
colcon build --symlink-install
source install/setup.bash
Find correct serial port:
ros2 run control find_ports
To run these code you need to know correct port path, baud rate and if you want to use serial writing you need to know topic name to subscribe.
ros2 run control <node_name> --ros-args -p serial_port:=<device_port> -p baud_rate:=<baud_rate> -p subscribe_to:=<topic_name>
ros2 run control keyboard --ros-args -p serial_port:=/dev/ttyACM0 -p baud_rate:=115200 -p subscribe_to:=arduino_command
ros2 run control keyboard
Using local_control to publish message from remote controller and subscribe message in local terminal
ros2 run control local_control --ros-args -p serial_port:=/dev/ttyACM0 -p baud_rate:=115200 -p subscribe_to:=arduino_command
ros2 run control local_control
ros2 run control remote_controller
ros2 run control arduino_subscriber --ros-args -p serial_port:=/dev/ttyACM0 -p baud_rate:=115200 -p subscribe_to:=arduino_command
ros2 run control arduino_subscriber
- device_port : /dev/ttyACM0
- baud_rate : 115200
- subscribe to arduino_command
Note: Baud rate of the arduino/XXX.ino and the node need to be same.