Running Without Sudo (Optional)
If you want to run the example without using sudo
, you need
to create:
sudo touch /etc/systemd/system/ros2_control_node.service
and use a text editor to paste in that file the following:
[Unit]
Description=Launch ros2_control_node with socket permissions
[Service]
Type=simple
User=YOUR_USER
ExecStartPre=/bin/bash -c 'source /opt/ros/humble/setup.bash; source /home/YOUR_USER/.bashrc; source /home/YOUR_USER/ros2_ws/install/setup.bash'
# Write the user environment to file, for debugging
#ExecStartPre=/bin/bash -c 'env > /home/YOUR_USER/Documents/ros_env_before_start.txt'
# This is essentially a copy of my normal user env
Environment="AMENT_PREFIX_PATH=/home/YOUR_USER/ros2_ws/install/synapticon_ros2_control:/opt/ros/humble"
Environment="HOME=/home/YOUR_USER"
Environment="LD_LIBRARY_PATH=/opt/ros/humble/opt/rviz_ogre_vendor/lib:/opt/ros/humble/lib/x86_64-linux-gnu:/opt/ros/humble/lib"
Environment="PATH=/opt/ros/humble/bin:/usr/lib/ccache:/home/your_user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin"
Environment="PYTHONPATH=/opt/ros/humble/lib/python3.10/site-packages:/opt/ros/humble/local/lib/python3.10/dist-packages"
Environment="ROS_DISTRO=humble"
Environment="ROS_DOMAIN_ID=1"
Environment="ROS_PYTHON_VERSION=3"
Environment="ROS_VERSION=2"
Environment="ROSCONSOLE_FORMAT=[${severity}] - ${node}: [${time}] ${message}"
Environment="USER=YOUR_USER"
Environment="USERNAME=YOUR_USER"
ExecStart=/opt/ros/humble/bin/ros2 launch synapticon_ros2_control elevated_permissions_X_dof.launch.py
AmbientCapabilities=CAP_NET_RAW
[Install]
WantedBy=multi-user.target
After pasting, do not forget to replace YOUR_USER
with your
username and X_dof
with 1 or 2 in the line specifying which launch file needs to be executed. Save the file, restart the daemon:
sudo systemctl daemon-reload
and start the service:
sudo systemctl restart ros2_control_node.service
If you want to check the service status and see the ROS console logging:
sudo systemctl status ros2_control_node.service
Now, the example can be run by these two commands:
sudo systemctl restart ros2_control_node.service
and, if running the demo with one motor:
ros2 launch synapticon_ros2_control single_dof.launch.py
If you are running the demo with two motors:
ros2 launch synapticon_ros2_control two_dof.launch.py
Changing the controllers and publishing the desired
position/velocity/torque can now be executed without sudo
. To
stop the ros2_control_node
:
sudo systemctl stop ros2_control_node.service