Skip to content

twming/robotic_arm_niryo

Repository files navigation

Robot Arm Setup on Raspberry Pi

Install Ubuntu 18.04.5 ARM 64 Server for Raspberry Pi and update the packages

sudo apt update
sudo apt upgrade

Install ROS Melodic

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt install curl 
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt install ros-melodic-ros-base
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc

Install the build tools and dependencies

sudo apt install -y build-essential sqlite3 ffmpeg python-pip

Install Raspberry PI dependencies

cd ~
git clone https://github.com/twming/robotic_arm_niryo
mv robotic_arm_niryo/catkin_ws .
cd catkin_ws
pip2 install -r src/requirements.txt

Install WiringPi and GPIO

cd ~/robotic_arm_niryo/dependencies/wiring_pi
chmod 777 build update
./build

Install ROS and dependencies

sudo apt install -y python-catkin-pkg python-pymodbus python-rosdistro python-rospkg python-rosdep-modules python-rosinstall python-rosinstall-generator python-wstool
sudo apt install -y ros-melodic-moveit ros-melodic-controller-manager ros-melodic-tf2-web-republisher ros-melodic-rosbridge-server ros-melodic-joint-state-publisher-gui ros-melodic-rosdoc-lite ros-melodic-roslint ros-melodic-joint-state-controller ros-melodic-joint-trajectory-controller ros-melodic-robot-state-publisher
pip2 install aenum pathlib2

Make change on HARDWARE_VERSION to one/ned/ned2 in CMakeLists.txt files on packages can_debug_tool,can_driver,common,conveyor_interface,dynamixel_sdk,end_effector_interface,joint_interface,niryo_robot_hardware_interface,tools_interface,ttl_driver

set(HARDWARE_VERSION "one" CACHE STRING "Robot model target")

Compile the package

cd ~/catkin_ws
catkin_make -j1 -l1
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

Other hardware setup

#--- config.txt
enable_uart=1
cmdline=nobtcmd.txt

include syscfg.txt
include usercfg.txt

#--- syscfg.txt
dtparam=i2c_arm=on
dtparam=spi=on

#--- usercfg.txt
enable_uart=1
init_uart_clock=16000000
dtoverlay=pi3-disable-bt
dtoverlay=uart0
dtparam=spi=on
dtparam=i2c1=on
dtparam=i2c0=on
dtparam=i2c_arm=on
dtparam=uart0=on
dtoverlay=mcp2515-can0-overlay,oscillator=16000000,interrupt=25

[pi4]
arm_64bit=1
dtoverlay=i2s-mmap
dtparam=i2s=on
dtoverlay=seeed-voicecard

Edit cmdline.txt, remove ttyAMA0 related

#--- cmdline.txt and nobtcmd.txt
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

# not like this:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

add to .bashrc

export ROOT_PATH=/home/niryo/catkin_ws
export LD_LIBRARY_PATH=$ROOT_PATH/devel/lib:/opt/ros/melodic/lib:$LD_LIBRARY_PATH
export ROS_ETC_DIR=/opt/ros/melodic/etc/ros
export CMAKE_PREFIX_PATH=$ROOT_PATH/devel:/opt/ros/melodic
export ROS_ROOT=/opt/ros/melodic/share/ros
export PYTHONPATH=$ROOT_PATH/devel/lib/python2.7/dist-packages:/opt/ros/melodic/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:$PYTHONPATH
export ROS_PACKAGE_PATH=$ROOT_PATH/devel/share:/opt/ros/melodic/share
export PATH=/opt/ros/melodic/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
export PKG_CONFIG_PATH=$ROOT_PATH/devel/lib/pkgconfig:/opt/ros/melodic/lib/pkgconfig

edit ROS Master,rosbridge,TCP server and Modbus server ip address to your local ip address,e.g. 192.168.0.XXX

sudo vi ~/catkin_ws/src/niryo_robot_user_interface/config/default.yaml
sudo vi /opt/ros/melodic/share/rosbridge_server/launch/rosbridge_websocket.launch
sudo vi ~/catkin_ws/src/niryo_robot_modbus/launch/modbus_server.launch

To bringup the arm

roslaunch niryo_robot_bringup my_robot.launch

To control the arm using Python (local)

from niryo_robot_python_ros_wrapper import *
import rospy

rospy.init_node('arm_move_node')
niryo_robot=NiryoRosWrapper()
niryo_robot.calibrate_auto()

niryo_robot.move_joints(-1.5, -0.2, 0.6, 1.3, 0.5, 0.3)

To control the arm using ModbusTcp (remote)

from pymodbus.client.sync import ModbusTcpClient
import time

def number_to_raw_data(val):
    if val < 0:
        val = (1 << 15) - val
    return val


def raw_data_to_number(val):
    if (val >> 15) == 1:
        val = - (val & 0x7FFF)
    return val
    
client = ModbusTcpClient('192.168.0.XXX', port=5020)

client.connect()
print("Connected to modbus server")

print("Calibrate Robot if needed")
client.write_register(311, 1)
time.sleep(1)

# Wait for end of calibration
while client.read_input_registers(402, 1).registers[0] == 1:
time.sleep(0.05)

print("Send a Joint Move command to the robot")
joints = [-0.5, 0.0, 0.0, 0.2, 1.2, -1.0]
joints_to_send = list(map(lambda j: int(number_to_raw_data(j * 1000)), joints))
print(joints_to_send)

client.write_registers(0, joints_to_send)
client.write_register(100, 1)

About

robotic_arm_niryo

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors